@vibesdotdev/runnable 0.0.0-stage → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (675) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +4 -2
  3. package/dist/artifact-data.d.ts +8 -0
  4. package/dist/artifact-data.d.ts.map +1 -0
  5. package/dist/artifact-data.js +12 -0
  6. package/dist/artifact-data.js.map +1 -0
  7. package/dist/change-source.d.ts +54 -0
  8. package/dist/change-source.d.ts.map +1 -0
  9. package/dist/change-source.js +37 -0
  10. package/dist/change-source.js.map +1 -0
  11. package/dist/client/client.d.ts +1002 -0
  12. package/dist/client/client.d.ts.map +1 -0
  13. package/dist/client/client.js +148 -0
  14. package/dist/client/client.js.map +1 -0
  15. package/dist/client/execution/failure.d.ts +3 -0
  16. package/dist/client/execution/failure.d.ts.map +1 -0
  17. package/dist/client/execution/failure.js +20 -0
  18. package/dist/client/execution/failure.js.map +1 -0
  19. package/dist/client/execution/finalize.d.ts +81 -0
  20. package/dist/client/execution/finalize.d.ts.map +1 -0
  21. package/dist/client/execution/finalize.js +71 -0
  22. package/dist/client/execution/finalize.js.map +1 -0
  23. package/dist/client/execution/memo.d.ts +25 -0
  24. package/dist/client/execution/memo.d.ts.map +1 -0
  25. package/dist/client/execution/memo.js +56 -0
  26. package/dist/client/execution/memo.js.map +1 -0
  27. package/dist/client/execution/native-admission.d.ts +7 -0
  28. package/dist/client/execution/native-admission.d.ts.map +1 -0
  29. package/dist/client/execution/native-admission.js +22 -0
  30. package/dist/client/execution/native-admission.js.map +1 -0
  31. package/dist/client/execution/prepare-input.d.ts +19 -0
  32. package/dist/client/execution/prepare-input.d.ts.map +1 -0
  33. package/dist/client/execution/prepare-input.js +27 -0
  34. package/dist/client/execution/prepare-input.js.map +1 -0
  35. package/dist/client/execution/prepare-record.d.ts +271 -0
  36. package/dist/client/execution/prepare-record.d.ts.map +1 -0
  37. package/dist/client/execution/prepare-record.js +115 -0
  38. package/dist/client/execution/prepare-record.js.map +1 -0
  39. package/dist/client/execution/produce.d.ts +44 -0
  40. package/dist/client/execution/produce.d.ts.map +1 -0
  41. package/dist/client/execution/produce.js +78 -0
  42. package/dist/client/execution/produce.js.map +1 -0
  43. package/dist/client/execution/recorded.d.ts +28 -0
  44. package/dist/client/execution/recorded.d.ts.map +1 -0
  45. package/dist/client/execution/recorded.js +74 -0
  46. package/dist/client/execution/recorded.js.map +1 -0
  47. package/dist/client/execution/selection.d.ts +19 -0
  48. package/dist/client/execution/selection.d.ts.map +1 -0
  49. package/dist/client/execution/selection.js +38 -0
  50. package/dist/client/execution/selection.js.map +1 -0
  51. package/dist/client/native/completion.d.ts +19 -0
  52. package/dist/client/native/completion.d.ts.map +1 -0
  53. package/dist/client/native/completion.js +158 -0
  54. package/dist/client/native/completion.js.map +1 -0
  55. package/dist/client/native/controls.d.ts +18 -0
  56. package/dist/client/native/controls.d.ts.map +1 -0
  57. package/dist/client/native/controls.js +69 -0
  58. package/dist/client/native/controls.js.map +1 -0
  59. package/dist/client/native/owner.d.ts +36 -0
  60. package/dist/client/native/owner.d.ts.map +1 -0
  61. package/dist/client/native/owner.js +111 -0
  62. package/dist/client/native/owner.js.map +1 -0
  63. package/dist/client/native/supervision.d.ts +12 -0
  64. package/dist/client/native/supervision.d.ts.map +1 -0
  65. package/dist/client/native/supervision.js +56 -0
  66. package/dist/client/native/supervision.js.map +1 -0
  67. package/dist/client/records/authority.d.ts +20 -0
  68. package/dist/client/records/authority.d.ts.map +1 -0
  69. package/dist/client/records/authority.js +186 -0
  70. package/dist/client/records/authority.js.map +1 -0
  71. package/dist/client/records/identity.d.ts +4 -0
  72. package/dist/client/records/identity.d.ts.map +1 -0
  73. package/dist/client/records/identity.js +7 -0
  74. package/dist/client/records/identity.js.map +1 -0
  75. package/dist/client/records/input-admission.d.ts +5 -0
  76. package/dist/client/records/input-admission.d.ts.map +1 -0
  77. package/dist/client/records/input-admission.js +26 -0
  78. package/dist/client/records/input-admission.js.map +1 -0
  79. package/dist/client/records/owner.d.ts +254 -0
  80. package/dist/client/records/owner.d.ts.map +1 -0
  81. package/dist/client/records/owner.js +127 -0
  82. package/dist/client/records/owner.js.map +1 -0
  83. package/dist/client/records/query.d.ts +11 -0
  84. package/dist/client/records/query.d.ts.map +1 -0
  85. package/dist/client/records/query.js +60 -0
  86. package/dist/client/records/query.js.map +1 -0
  87. package/dist/client/records/recording.d.ts +9 -0
  88. package/dist/client/records/recording.d.ts.map +1 -0
  89. package/dist/client/records/recording.js +160 -0
  90. package/dist/client/records/recording.js.map +1 -0
  91. package/dist/client/resolve.d.ts +10 -0
  92. package/dist/client/resolve.d.ts.map +1 -0
  93. package/dist/client/resolve.js +33 -0
  94. package/dist/client/resolve.js.map +1 -0
  95. package/dist/client/tracking/artifact-data.d.ts +8 -0
  96. package/dist/client/tracking/artifact-data.d.ts.map +1 -0
  97. package/dist/client/tracking/artifact-data.js +12 -0
  98. package/dist/client/tracking/artifact-data.js.map +1 -0
  99. package/dist/client/tracking/client.d.ts +20 -0
  100. package/dist/client/tracking/client.d.ts.map +1 -0
  101. package/dist/client/tracking/client.js +187 -0
  102. package/dist/client/tracking/client.js.map +1 -0
  103. package/dist/client/tracking/panel-bindings.d.ts +8 -0
  104. package/dist/client/tracking/panel-bindings.d.ts.map +1 -0
  105. package/dist/client/tracking/panel-bindings.js +81 -0
  106. package/dist/client/tracking/panel-bindings.js.map +1 -0
  107. package/dist/client/tracking/panels.d.ts +62 -0
  108. package/dist/client/tracking/panels.d.ts.map +1 -0
  109. package/dist/client/tracking/panels.js +56 -0
  110. package/dist/client/tracking/panels.js.map +1 -0
  111. package/dist/client/tracking/projection.d.ts +17 -0
  112. package/dist/client/tracking/projection.d.ts.map +1 -0
  113. package/dist/client/tracking/projection.js +100 -0
  114. package/dist/client/tracking/projection.js.map +1 -0
  115. package/dist/client/tracking/watch.d.ts +10 -0
  116. package/dist/client/tracking/watch.d.ts.map +1 -0
  117. package/dist/client/tracking/watch.js +128 -0
  118. package/dist/client/tracking/watch.js.map +1 -0
  119. package/dist/client/transport.d.ts +14 -0
  120. package/dist/client/transport.d.ts.map +1 -0
  121. package/dist/client/transport.js +52 -0
  122. package/dist/client/transport.js.map +1 -0
  123. package/dist/client.d.ts +460 -0
  124. package/dist/client.d.ts.map +1 -0
  125. package/dist/client.js +1181 -0
  126. package/dist/client.js.map +1 -0
  127. package/dist/context.d.ts +14 -0
  128. package/dist/context.d.ts.map +1 -0
  129. package/dist/context.js +98 -0
  130. package/dist/context.js.map +1 -0
  131. package/dist/docs/runnable.context.docs.descriptor.d.ts +4 -0
  132. package/dist/docs/runnable.context.docs.descriptor.d.ts.map +1 -0
  133. package/dist/docs/runnable.context.docs.descriptor.js +419 -0
  134. package/dist/docs/runnable.context.docs.descriptor.js.map +1 -0
  135. package/dist/docs/runnable.graphs.docs.descriptor.d.ts +4 -0
  136. package/dist/docs/runnable.graphs.docs.descriptor.d.ts.map +1 -0
  137. package/dist/docs/runnable.graphs.docs.descriptor.js +51 -0
  138. package/dist/docs/runnable.graphs.docs.descriptor.js.map +1 -0
  139. package/dist/docs/runnable.nodes.docs.descriptor.d.ts +4 -0
  140. package/dist/docs/runnable.nodes.docs.descriptor.d.ts.map +1 -0
  141. package/dist/docs/runnable.nodes.docs.descriptor.js +327 -0
  142. package/dist/docs/runnable.nodes.docs.descriptor.js.map +1 -0
  143. package/dist/event-broker.d.ts +54 -0
  144. package/dist/event-broker.d.ts.map +1 -0
  145. package/dist/event-broker.js +157 -0
  146. package/dist/event-broker.js.map +1 -0
  147. package/dist/events.d.ts +16 -0
  148. package/dist/events.d.ts.map +1 -0
  149. package/dist/events.js +144 -0
  150. package/dist/events.js.map +1 -0
  151. package/dist/execution.contract.d.ts +10 -0
  152. package/dist/execution.contract.d.ts.map +1 -0
  153. package/dist/execution.contract.js +30 -0
  154. package/dist/execution.contract.js.map +1 -0
  155. package/dist/execution.d.ts +24 -0
  156. package/dist/execution.d.ts.map +1 -0
  157. package/dist/execution.js +172 -0
  158. package/dist/execution.js.map +1 -0
  159. package/dist/execution.telemetry.descriptor.d.ts +4 -0
  160. package/dist/execution.telemetry.descriptor.d.ts.map +1 -0
  161. package/dist/execution.telemetry.descriptor.js +6 -0
  162. package/dist/execution.telemetry.descriptor.js.map +1 -0
  163. package/dist/host.d.ts +95 -0
  164. package/dist/host.d.ts.map +1 -0
  165. package/dist/host.js +12 -0
  166. package/dist/host.js.map +1 -0
  167. package/dist/identity.d.ts +3 -0
  168. package/dist/identity.d.ts.map +1 -0
  169. package/dist/identity.js +6 -0
  170. package/dist/identity.js.map +1 -0
  171. package/dist/index.d.ts +32 -0
  172. package/dist/index.d.ts.map +1 -0
  173. package/dist/index.js +24 -0
  174. package/dist/index.js.map +1 -0
  175. package/dist/input-admission.d.ts +5 -0
  176. package/dist/input-admission.d.ts.map +1 -0
  177. package/dist/input-admission.js +43 -0
  178. package/dist/input-admission.js.map +1 -0
  179. package/dist/invocation.d.ts +17 -0
  180. package/dist/invocation.d.ts.map +1 -0
  181. package/dist/invocation.js +32 -0
  182. package/dist/invocation.js.map +1 -0
  183. package/dist/issues.d.ts +4 -0
  184. package/dist/issues.d.ts.map +1 -0
  185. package/dist/issues.js +5 -0
  186. package/dist/issues.js.map +1 -0
  187. package/dist/json-field.d.ts +4 -0
  188. package/dist/json-field.d.ts.map +1 -0
  189. package/dist/json-field.js +16 -0
  190. package/dist/json-field.js.map +1 -0
  191. package/dist/kinds/config.d.ts +3 -0
  192. package/dist/kinds/config.d.ts.map +1 -0
  193. package/dist/kinds/config.js +14 -0
  194. package/dist/kinds/config.js.map +1 -0
  195. package/dist/kinds/ingest-mapping.d.ts +3 -0
  196. package/dist/kinds/ingest-mapping.d.ts.map +1 -0
  197. package/dist/kinds/ingest-mapping.js +30 -0
  198. package/dist/kinds/ingest-mapping.js.map +1 -0
  199. package/dist/kinds/result.d.ts +3 -0
  200. package/dist/kinds/result.d.ts.map +1 -0
  201. package/dist/kinds/result.js +14 -0
  202. package/dist/kinds/result.js.map +1 -0
  203. package/dist/kinds/runnable.d.ts +3 -0
  204. package/dist/kinds/runnable.d.ts.map +1 -0
  205. package/dist/kinds/runnable.js +19 -0
  206. package/dist/kinds/runnable.js.map +1 -0
  207. package/dist/kinds/telemetry.d.ts +3 -0
  208. package/dist/kinds/telemetry.d.ts.map +1 -0
  209. package/dist/kinds/telemetry.js +14 -0
  210. package/dist/kinds/telemetry.js.map +1 -0
  211. package/dist/kinds/type.d.ts +3 -0
  212. package/dist/kinds/type.d.ts.map +1 -0
  213. package/dist/kinds/type.js +14 -0
  214. package/dist/kinds/type.js.map +1 -0
  215. package/dist/kinds/visualization.d.ts +3 -0
  216. package/dist/kinds/visualization.d.ts.map +1 -0
  217. package/dist/kinds/visualization.js +14 -0
  218. package/dist/kinds/visualization.js.map +1 -0
  219. package/dist/metrics/runnable.metrics.descriptor.d.ts +16 -0
  220. package/dist/metrics/runnable.metrics.descriptor.d.ts.map +1 -0
  221. package/dist/metrics/runnable.metrics.descriptor.js +16 -0
  222. package/dist/metrics/runnable.metrics.descriptor.js.map +1 -0
  223. package/dist/metrics/runnable.metrics.impl.d.ts +13 -0
  224. package/dist/metrics/runnable.metrics.impl.d.ts.map +1 -0
  225. package/dist/metrics/runnable.metrics.impl.js +60 -0
  226. package/dist/metrics/runnable.metrics.impl.js.map +1 -0
  227. package/dist/panels.d.ts +31 -0
  228. package/dist/panels.d.ts.map +1 -0
  229. package/dist/panels.js +58 -0
  230. package/dist/panels.js.map +1 -0
  231. package/dist/plugin.d.ts +3 -0
  232. package/dist/plugin.d.ts.map +1 -0
  233. package/dist/plugin.js +71 -0
  234. package/dist/plugin.js.map +1 -0
  235. package/dist/projection.d.ts +26 -0
  236. package/dist/projection.d.ts.map +1 -0
  237. package/dist/projection.js +100 -0
  238. package/dist/projection.js.map +1 -0
  239. package/dist/recording.d.ts +9 -0
  240. package/dist/recording.d.ts.map +1 -0
  241. package/dist/recording.js +121 -0
  242. package/dist/recording.js.map +1 -0
  243. package/dist/records/authority.d.ts +20 -0
  244. package/dist/records/authority.d.ts.map +1 -0
  245. package/dist/records/authority.js +142 -0
  246. package/dist/records/authority.js.map +1 -0
  247. package/dist/records/query.d.ts +11 -0
  248. package/dist/records/query.d.ts.map +1 -0
  249. package/dist/records/query.js +60 -0
  250. package/dist/records/query.js.map +1 -0
  251. package/dist/runnable.cloud.plugin.d.ts +3 -0
  252. package/dist/runnable.cloud.plugin.d.ts.map +1 -0
  253. package/dist/runnable.cloud.plugin.js +3 -0
  254. package/dist/runnable.cloud.plugin.js.map +1 -0
  255. package/dist/runnable.consumer.plugin.d.ts +15 -0
  256. package/dist/runnable.consumer.plugin.d.ts.map +1 -0
  257. package/dist/runnable.consumer.plugin.js +15 -0
  258. package/dist/runnable.consumer.plugin.js.map +1 -0
  259. package/dist/runnable.plugin.d.ts +3 -0
  260. package/dist/runnable.plugin.d.ts.map +1 -0
  261. package/dist/runnable.plugin.js +3 -0
  262. package/dist/runnable.plugin.js.map +1 -0
  263. package/dist/runner.d.ts +13 -0
  264. package/dist/runner.d.ts.map +1 -0
  265. package/dist/runner.js +151 -0
  266. package/dist/runner.js.map +1 -0
  267. package/dist/runtime/change-source.d.ts +39 -0
  268. package/dist/runtime/change-source.d.ts.map +1 -0
  269. package/dist/runtime/change-source.js +36 -0
  270. package/dist/runtime/change-source.js.map +1 -0
  271. package/dist/runtime/event-broker.d.ts +41 -0
  272. package/dist/runtime/event-broker.d.ts.map +1 -0
  273. package/dist/runtime/event-broker.js +157 -0
  274. package/dist/runtime/event-broker.js.map +1 -0
  275. package/dist/runtime/events.d.ts +16 -0
  276. package/dist/runtime/events.d.ts.map +1 -0
  277. package/dist/runtime/events.js +144 -0
  278. package/dist/runtime/events.js.map +1 -0
  279. package/dist/runtime/execution/contract.d.ts +10 -0
  280. package/dist/runtime/execution/contract.d.ts.map +1 -0
  281. package/dist/runtime/execution/contract.js +30 -0
  282. package/dist/runtime/execution/contract.js.map +1 -0
  283. package/dist/runtime/execution/exit.d.ts +5 -0
  284. package/dist/runtime/execution/exit.d.ts.map +1 -0
  285. package/dist/runtime/execution/exit.js +39 -0
  286. package/dist/runtime/execution/exit.js.map +1 -0
  287. package/dist/runtime/execution/index.d.ts +23 -0
  288. package/dist/runtime/execution/index.d.ts.map +1 -0
  289. package/dist/runtime/execution/index.js +136 -0
  290. package/dist/runtime/execution/index.js.map +1 -0
  291. package/dist/runtime/host.d.ts +60 -0
  292. package/dist/runtime/host.d.ts.map +1 -0
  293. package/dist/runtime/host.js +13 -0
  294. package/dist/runtime/host.js.map +1 -0
  295. package/dist/runtime/invocation.d.ts +10 -0
  296. package/dist/runtime/invocation.d.ts.map +1 -0
  297. package/dist/runtime/invocation.js +27 -0
  298. package/dist/runtime/invocation.js.map +1 -0
  299. package/dist/runtime/plugins/plugin.d.ts +3 -0
  300. package/dist/runtime/plugins/plugin.d.ts.map +1 -0
  301. package/dist/runtime/plugins/plugin.js +69 -0
  302. package/dist/runtime/plugins/plugin.js.map +1 -0
  303. package/dist/runtime/plugins/runnable.cloud.plugin.d.ts +3 -0
  304. package/dist/runtime/plugins/runnable.cloud.plugin.d.ts.map +1 -0
  305. package/dist/runtime/plugins/runnable.cloud.plugin.js +3 -0
  306. package/dist/runtime/plugins/runnable.cloud.plugin.js.map +1 -0
  307. package/dist/runtime/plugins/runnable.consumer.plugin.d.ts +15 -0
  308. package/dist/runtime/plugins/runnable.consumer.plugin.d.ts.map +1 -0
  309. package/dist/runtime/plugins/runnable.consumer.plugin.js +15 -0
  310. package/dist/runtime/plugins/runnable.consumer.plugin.js.map +1 -0
  311. package/dist/runtime/plugins/runnable.metrics.plugin.d.ts +4 -0
  312. package/dist/runtime/plugins/runnable.metrics.plugin.d.ts.map +1 -0
  313. package/dist/runtime/plugins/runnable.metrics.plugin.js +13 -0
  314. package/dist/runtime/plugins/runnable.metrics.plugin.js.map +1 -0
  315. package/dist/runtime/plugins/runnable.plugin.d.ts +3 -0
  316. package/dist/runtime/plugins/runnable.plugin.d.ts.map +1 -0
  317. package/dist/runtime/plugins/runnable.plugin.js +3 -0
  318. package/dist/runtime/plugins/runnable.plugin.js.map +1 -0
  319. package/dist/runtime/runner.d.ts +13 -0
  320. package/dist/runtime/runner.d.ts.map +1 -0
  321. package/dist/runtime/runner.js +154 -0
  322. package/dist/runtime/runner.js.map +1 -0
  323. package/dist/runtime/state/index.d.ts +4 -0
  324. package/dist/runtime/state/index.d.ts.map +1 -0
  325. package/dist/runtime/state/index.js +4 -0
  326. package/dist/runtime/state/index.js.map +1 -0
  327. package/dist/runtime/state/manager.d.ts +20 -0
  328. package/dist/runtime/state/manager.d.ts.map +1 -0
  329. package/dist/runtime/state/manager.js +135 -0
  330. package/dist/runtime/state/manager.js.map +1 -0
  331. package/dist/runtime/state/snapshot.d.ts +10 -0
  332. package/dist/runtime/state/snapshot.d.ts.map +1 -0
  333. package/dist/runtime/state/snapshot.js +59 -0
  334. package/dist/runtime/state/snapshot.js.map +1 -0
  335. package/dist/runtime/state/time-series.d.ts +36 -0
  336. package/dist/runtime/state/time-series.d.ts.map +1 -0
  337. package/dist/runtime/state/time-series.js +151 -0
  338. package/dist/runtime/state/time-series.js.map +1 -0
  339. package/dist/schemas/context.d.ts +64 -0
  340. package/dist/schemas/context.d.ts.map +1 -0
  341. package/dist/schemas/context.js +37 -0
  342. package/dist/schemas/context.js.map +1 -0
  343. package/dist/schemas/contracts/events.d.ts +33 -0
  344. package/dist/schemas/contracts/events.d.ts.map +1 -0
  345. package/dist/schemas/contracts/events.js +5 -0
  346. package/dist/schemas/contracts/events.js.map +1 -0
  347. package/dist/schemas/contracts/execution.d.ts +211 -0
  348. package/dist/schemas/contracts/execution.d.ts.map +1 -0
  349. package/dist/schemas/contracts/execution.js +40 -0
  350. package/dist/schemas/contracts/execution.js.map +1 -0
  351. package/dist/schemas/contracts/host.d.ts +37 -0
  352. package/dist/schemas/contracts/host.d.ts.map +1 -0
  353. package/dist/schemas/contracts/host.js +2 -0
  354. package/dist/schemas/contracts/host.js.map +1 -0
  355. package/dist/schemas/contracts/index.d.ts +77 -0
  356. package/dist/schemas/contracts/index.d.ts.map +1 -0
  357. package/dist/schemas/contracts/index.js +28 -0
  358. package/dist/schemas/contracts/index.js.map +1 -0
  359. package/dist/schemas/contracts/invocation.d.ts +9 -0
  360. package/dist/schemas/contracts/invocation.d.ts.map +1 -0
  361. package/dist/schemas/contracts/invocation.js +8 -0
  362. package/dist/schemas/contracts/invocation.js.map +1 -0
  363. package/dist/schemas/contracts/runner.d.ts +61 -0
  364. package/dist/schemas/contracts/runner.d.ts.map +1 -0
  365. package/dist/schemas/contracts/runner.js +3 -0
  366. package/dist/schemas/contracts/runner.js.map +1 -0
  367. package/dist/schemas/contracts/state.d.ts +147 -0
  368. package/dist/schemas/contracts/state.d.ts.map +1 -0
  369. package/dist/schemas/contracts/state.js +16 -0
  370. package/dist/schemas/contracts/state.js.map +1 -0
  371. package/dist/schemas/contracts/storage.d.ts +231 -0
  372. package/dist/schemas/contracts/storage.d.ts.map +1 -0
  373. package/dist/schemas/contracts/storage.js +39 -0
  374. package/dist/schemas/contracts/storage.js.map +1 -0
  375. package/dist/schemas/contracts/test-scenario.d.ts +60 -0
  376. package/dist/schemas/contracts/test-scenario.d.ts.map +1 -0
  377. package/dist/schemas/contracts/test-scenario.js +2 -0
  378. package/dist/schemas/contracts/test-scenario.js.map +1 -0
  379. package/dist/schemas/contracts/watch.d.ts +49 -0
  380. package/dist/schemas/contracts/watch.d.ts.map +1 -0
  381. package/dist/schemas/contracts/watch.js +2 -0
  382. package/dist/schemas/contracts/watch.js.map +1 -0
  383. package/dist/schemas/contracts.d.ts +192 -0
  384. package/dist/schemas/contracts.d.ts.map +1 -0
  385. package/dist/schemas/contracts.js +38 -0
  386. package/dist/schemas/contracts.js.map +1 -0
  387. package/dist/schemas/description.d.ts +68 -0
  388. package/dist/schemas/description.d.ts.map +1 -0
  389. package/dist/schemas/description.js +12 -0
  390. package/dist/schemas/description.js.map +1 -0
  391. package/dist/schemas/descriptors.d.ts +429 -0
  392. package/dist/schemas/descriptors.d.ts.map +1 -0
  393. package/dist/schemas/descriptors.js +125 -0
  394. package/dist/schemas/descriptors.js.map +1 -0
  395. package/dist/schemas/events.d.ts +359 -0
  396. package/dist/schemas/events.d.ts.map +1 -0
  397. package/dist/schemas/events.js +109 -0
  398. package/dist/schemas/events.js.map +1 -0
  399. package/dist/schemas/index.d.ts +12 -0
  400. package/dist/schemas/index.d.ts.map +1 -0
  401. package/dist/schemas/index.js +12 -0
  402. package/dist/schemas/index.js.map +1 -0
  403. package/dist/schemas/issues.d.ts +142 -0
  404. package/dist/schemas/issues.d.ts.map +1 -0
  405. package/dist/schemas/issues.js +44 -0
  406. package/dist/schemas/issues.js.map +1 -0
  407. package/dist/schemas/outcome.d.ts +111 -0
  408. package/dist/schemas/outcome.d.ts.map +1 -0
  409. package/dist/schemas/outcome.js +32 -0
  410. package/dist/schemas/outcome.js.map +1 -0
  411. package/dist/schemas/panels.d.ts +164 -0
  412. package/dist/schemas/panels.d.ts.map +1 -0
  413. package/dist/schemas/panels.js +25 -0
  414. package/dist/schemas/panels.js.map +1 -0
  415. package/dist/schemas/projection.d.ts +301 -0
  416. package/dist/schemas/projection.d.ts.map +1 -0
  417. package/dist/schemas/projection.js +64 -0
  418. package/dist/schemas/projection.js.map +1 -0
  419. package/dist/schemas/runs.d.ts +2428 -0
  420. package/dist/schemas/runs.d.ts.map +1 -0
  421. package/dist/schemas/runs.js +163 -0
  422. package/dist/schemas/runs.js.map +1 -0
  423. package/dist/schemas/writes.d.ts +103 -0
  424. package/dist/schemas/writes.d.ts.map +1 -0
  425. package/dist/schemas/writes.js +28 -0
  426. package/dist/schemas/writes.js.map +1 -0
  427. package/dist/state.d.ts +175 -0
  428. package/dist/state.d.ts.map +1 -0
  429. package/dist/state.js +356 -0
  430. package/dist/state.js.map +1 -0
  431. package/dist/storage/context-sql.d.ts +9 -0
  432. package/dist/storage/context-sql.d.ts.map +1 -0
  433. package/dist/storage/context-sql.js +77 -0
  434. package/dist/storage/context-sql.js.map +1 -0
  435. package/dist/storage/local/catalog.d.ts +62 -0
  436. package/dist/storage/local/catalog.d.ts.map +1 -0
  437. package/dist/storage/local/catalog.js +88 -0
  438. package/dist/storage/local/catalog.js.map +1 -0
  439. package/dist/storage/local/descriptors.d.ts +8 -0
  440. package/dist/storage/local/descriptors.d.ts.map +1 -0
  441. package/dist/storage/local/descriptors.js +32 -0
  442. package/dist/storage/local/descriptors.js.map +1 -0
  443. package/dist/storage/local/host.d.ts +5 -0
  444. package/dist/storage/local/host.d.ts.map +1 -0
  445. package/dist/storage/local/host.js +100 -0
  446. package/dist/storage/local/host.js.map +1 -0
  447. package/dist/storage/local/index.d.ts +4 -0
  448. package/dist/storage/local/index.d.ts.map +1 -0
  449. package/dist/storage/local/index.js +22 -0
  450. package/dist/storage/local/index.js.map +1 -0
  451. package/dist/storage/local/refusal.d.ts +2 -0
  452. package/dist/storage/local/refusal.d.ts.map +1 -0
  453. package/dist/storage/local/refusal.js +7 -0
  454. package/dist/storage/local/refusal.js.map +1 -0
  455. package/dist/storage/local/state-host.d.ts +5 -0
  456. package/dist/storage/local/state-host.d.ts.map +1 -0
  457. package/dist/storage/local/state-host.js +149 -0
  458. package/dist/storage/local/state-host.js.map +1 -0
  459. package/dist/storage/local/telemetry.d.ts +19 -0
  460. package/dist/storage/local/telemetry.d.ts.map +1 -0
  461. package/dist/storage/local/telemetry.js +52 -0
  462. package/dist/storage/local/telemetry.js.map +1 -0
  463. package/dist/storage/local.d.ts +3 -0
  464. package/dist/storage/local.d.ts.map +1 -0
  465. package/dist/storage/local.js +408 -0
  466. package/dist/storage/local.js.map +1 -0
  467. package/dist/storage/plugin.d.ts +7 -0
  468. package/dist/storage/plugin.d.ts.map +1 -0
  469. package/dist/storage/plugin.js +116 -0
  470. package/dist/storage/plugin.js.map +1 -0
  471. package/dist/storage/records.d.ts +8 -0
  472. package/dist/storage/records.d.ts.map +1 -0
  473. package/dist/storage/records.js +68 -0
  474. package/dist/storage/records.js.map +1 -0
  475. package/dist/svelte/components/ArtifactList.svelte +198 -0
  476. package/dist/svelte/components/ArtifactList.svelte.d.ts +10 -0
  477. package/dist/svelte/components/ArtifactList.svelte.d.ts.map +1 -0
  478. package/dist/svelte/components/ArtifactPreview.svelte +19 -0
  479. package/dist/svelte/components/ArtifactPreview.svelte.d.ts +8 -0
  480. package/dist/svelte/components/ArtifactPreview.svelte.d.ts.map +1 -0
  481. package/dist/svelte/components/FleetRuns.svelte +50 -0
  482. package/dist/svelte/components/FleetRuns.svelte.d.ts +8 -0
  483. package/dist/svelte/components/FleetRuns.svelte.d.ts.map +1 -0
  484. package/dist/svelte/components/LogViewer.svelte +98 -0
  485. package/dist/svelte/components/LogViewer.svelte.d.ts +13 -0
  486. package/dist/svelte/components/LogViewer.svelte.d.ts.map +1 -0
  487. package/dist/svelte/components/MetricCard.svelte +176 -0
  488. package/dist/svelte/components/MetricCard.svelte.d.ts +5 -0
  489. package/dist/svelte/components/MetricCard.svelte.d.ts.map +1 -0
  490. package/dist/svelte/components/RunActivity.svelte +32 -0
  491. package/dist/svelte/components/RunActivity.svelte.d.ts +13 -0
  492. package/dist/svelte/components/RunActivity.svelte.d.ts.map +1 -0
  493. package/dist/svelte/components/RunBrowser.svelte +86 -0
  494. package/dist/svelte/components/RunBrowser.svelte.d.ts +13 -0
  495. package/dist/svelte/components/RunBrowser.svelte.d.ts.map +1 -0
  496. package/dist/svelte/components/RunComparison.svelte +76 -0
  497. package/dist/svelte/components/RunComparison.svelte.d.ts +12 -0
  498. package/dist/svelte/components/RunComparison.svelte.d.ts.map +1 -0
  499. package/dist/svelte/components/RunContext.svelte +29 -0
  500. package/dist/svelte/components/RunContext.svelte.d.ts +10 -0
  501. package/dist/svelte/components/RunContext.svelte.d.ts.map +1 -0
  502. package/dist/svelte/components/RunEvidence.svelte +30 -0
  503. package/dist/svelte/components/RunEvidence.svelte.d.ts +8 -0
  504. package/dist/svelte/components/RunEvidence.svelte.d.ts.map +1 -0
  505. package/dist/svelte/components/RunIssues.svelte +114 -0
  506. package/dist/svelte/components/RunIssues.svelte.d.ts +12 -0
  507. package/dist/svelte/components/RunIssues.svelte.d.ts.map +1 -0
  508. package/dist/svelte/components/RunObservation.svelte +32 -0
  509. package/dist/svelte/components/RunObservation.svelte.d.ts +12 -0
  510. package/dist/svelte/components/RunObservation.svelte.d.ts.map +1 -0
  511. package/dist/svelte/components/RunOutcomeBadge.svelte +11 -0
  512. package/dist/svelte/components/RunOutcomeBadge.svelte.d.ts +8 -0
  513. package/dist/svelte/components/RunOutcomeBadge.svelte.d.ts.map +1 -0
  514. package/dist/svelte/components/RunPanels.svelte +64 -0
  515. package/dist/svelte/components/RunPanels.svelte.d.ts +15 -0
  516. package/dist/svelte/components/RunPanels.svelte.d.ts.map +1 -0
  517. package/dist/svelte/components/RunStatusBadge.svelte +38 -0
  518. package/dist/svelte/components/RunStatusBadge.svelte.d.ts +9 -0
  519. package/dist/svelte/components/RunStatusBadge.svelte.d.ts.map +1 -0
  520. package/dist/svelte/components/RunSummary.svelte +42 -0
  521. package/dist/svelte/components/RunSummary.svelte.d.ts +11 -0
  522. package/dist/svelte/components/RunSummary.svelte.d.ts.map +1 -0
  523. package/dist/svelte/components/RunsView.svelte +162 -0
  524. package/dist/svelte/components/RunsView.svelte.d.ts +17 -0
  525. package/dist/svelte/components/RunsView.svelte.d.ts.map +1 -0
  526. package/dist/svelte/components/TypePicker.svelte +337 -0
  527. package/dist/svelte/components/TypePicker.svelte.d.ts +12 -0
  528. package/dist/svelte/components/TypePicker.svelte.d.ts.map +1 -0
  529. package/dist/svelte/components/records/RunDetail.svelte +214 -0
  530. package/dist/svelte/components/records/RunDetail.svelte.d.ts +20 -0
  531. package/dist/svelte/components/records/RunDetail.svelte.d.ts.map +1 -0
  532. package/dist/svelte/components/records/RunList.svelte +190 -0
  533. package/dist/svelte/components/records/RunList.svelte.d.ts +14 -0
  534. package/dist/svelte/components/records/RunList.svelte.d.ts.map +1 -0
  535. package/dist/svelte/components/records/RunTree.svelte +186 -0
  536. package/dist/svelte/components/records/RunTree.svelte.d.ts +5 -0
  537. package/dist/svelte/components/records/RunTree.svelte.d.ts.map +1 -0
  538. package/dist/svelte/components/records/tree-navigation.d.ts +3 -0
  539. package/dist/svelte/components/records/tree-navigation.d.ts.map +1 -0
  540. package/dist/svelte/components/records/tree-navigation.js +29 -0
  541. package/dist/svelte/components/records/tree-projection.d.ts +16 -0
  542. package/dist/svelte/components/records/tree-projection.d.ts.map +1 -0
  543. package/dist/svelte/components/records/tree-projection.js +134 -0
  544. package/dist/svelte/index.d.ts +27 -0
  545. package/dist/svelte/index.d.ts.map +1 -0
  546. package/dist/svelte/index.js +22 -0
  547. package/dist/svelte/lib/artifact-blob.d.ts +2 -0
  548. package/dist/svelte/lib/artifact-blob.d.ts.map +1 -0
  549. package/dist/svelte/lib/artifact-blob.js +1 -0
  550. package/dist/svelte/lib/run-investigation.d.ts +17 -0
  551. package/dist/svelte/lib/run-investigation.d.ts.map +1 -0
  552. package/dist/svelte/lib/run-investigation.js +44 -0
  553. package/dist/svelte/lib/run-issues.d.ts +34 -0
  554. package/dist/svelte/lib/run-issues.d.ts.map +1 -0
  555. package/dist/svelte/lib/run-issues.js +59 -0
  556. package/dist/svelte/lib/run-presentation.d.ts +16 -0
  557. package/dist/svelte/lib/run-presentation.d.ts.map +1 -0
  558. package/dist/svelte/lib/run-presentation.js +69 -0
  559. package/dist/svelte/lib/run-tree.d.ts +22 -0
  560. package/dist/svelte/lib/run-tree.d.ts.map +1 -0
  561. package/dist/svelte/lib/run-tree.js +93 -0
  562. package/dist/svelte/lib/status.d.ts +19 -0
  563. package/dist/svelte/lib/status.d.ts.map +1 -0
  564. package/dist/svelte/lib/status.js +122 -0
  565. package/dist/svelte/query-form.d.ts +50 -0
  566. package/dist/svelte/query-form.d.ts.map +1 -0
  567. package/dist/svelte/query-form.js +19 -0
  568. package/dist/svelte/runs/data.svelte.d.ts +678 -0
  569. package/dist/svelte/runs/data.svelte.d.ts.map +1 -0
  570. package/dist/svelte/runs/data.svelte.js +28 -0
  571. package/dist/svelte/runs/opening.d.ts +8 -0
  572. package/dist/svelte/runs/opening.d.ts.map +1 -0
  573. package/dist/svelte/runs/opening.js +110 -0
  574. package/dist/svelte/runs/query.d.ts +3 -0
  575. package/dist/svelte/runs/query.d.ts.map +1 -0
  576. package/dist/svelte/runs/query.js +16 -0
  577. package/dist/svelte/runs/selection.d.ts +3 -0
  578. package/dist/svelte/runs/selection.d.ts.map +1 -0
  579. package/dist/svelte/runs/selection.js +42 -0
  580. package/dist/svelte/runs/shutdown.d.ts +9 -0
  581. package/dist/svelte/runs/shutdown.d.ts.map +1 -0
  582. package/dist/svelte/runs/shutdown.js +104 -0
  583. package/dist/svelte/runs.store.svelte.d.ts +427 -0
  584. package/dist/svelte/runs.store.svelte.d.ts.map +1 -0
  585. package/dist/svelte/runs.store.svelte.js +90 -0
  586. package/dist/svelte/styles.css +16 -0
  587. package/dist/svelte/types.d.ts +29 -0
  588. package/dist/svelte/types.d.ts.map +1 -0
  589. package/dist/svelte/types.js +1 -0
  590. package/dist/svelte/viz/DescriptorPanel.svelte +104 -0
  591. package/dist/svelte/viz/DescriptorPanel.svelte.d.ts +18 -0
  592. package/dist/svelte/viz/DescriptorPanel.svelte.d.ts.map +1 -0
  593. package/dist/svelte/viz/crystal/Crystal3D.svelte +137 -0
  594. package/dist/svelte/viz/crystal/Crystal3D.svelte.d.ts +12 -0
  595. package/dist/svelte/viz/crystal/Crystal3D.svelte.d.ts.map +1 -0
  596. package/dist/svelte/viz/crystal/Crystal3DControls.svelte +253 -0
  597. package/dist/svelte/viz/crystal/Crystal3DControls.svelte.d.ts +18 -0
  598. package/dist/svelte/viz/crystal/Crystal3DControls.svelte.d.ts.map +1 -0
  599. package/dist/svelte/viz/crystal/Crystal3DRenderer.svelte +941 -0
  600. package/dist/svelte/viz/crystal/Crystal3DRenderer.svelte.d.ts +16 -0
  601. package/dist/svelte/viz/crystal/Crystal3DRenderer.svelte.d.ts.map +1 -0
  602. package/dist/svelte/viz/crystal/Crystal3DStats.svelte +110 -0
  603. package/dist/svelte/viz/crystal/Crystal3DStats.svelte.d.ts +12 -0
  604. package/dist/svelte/viz/crystal/Crystal3DStats.svelte.d.ts.map +1 -0
  605. package/dist/svelte/viz/crystal/LatticePanel.svelte +230 -0
  606. package/dist/svelte/viz/crystal/LatticePanel.svelte.d.ts +13 -0
  607. package/dist/svelte/viz/crystal/LatticePanel.svelte.d.ts.map +1 -0
  608. package/dist/svelte/viz/crystal/index.d.ts +8 -0
  609. package/dist/svelte/viz/crystal/index.d.ts.map +1 -0
  610. package/dist/svelte/viz/crystal/index.js +6 -0
  611. package/dist/svelte/viz/crystal/types.d.ts +59 -0
  612. package/dist/svelte/viz/crystal/types.d.ts.map +1 -0
  613. package/dist/svelte/viz/crystal/types.js +27 -0
  614. package/dist/svelte/viz/index.d.ts +18 -0
  615. package/dist/svelte/viz/index.d.ts.map +1 -0
  616. package/dist/svelte/viz/index.js +16 -0
  617. package/dist/svelte/viz/mfd/MFDArcGauge.svelte +59 -0
  618. package/dist/svelte/viz/mfd/MFDArcGauge.svelte.d.ts +21 -0
  619. package/dist/svelte/viz/mfd/MFDArcGauge.svelte.d.ts.map +1 -0
  620. package/dist/svelte/viz/mfd/MFDBarMeter.svelte +58 -0
  621. package/dist/svelte/viz/mfd/MFDBarMeter.svelte.d.ts +21 -0
  622. package/dist/svelte/viz/mfd/MFDBarMeter.svelte.d.ts.map +1 -0
  623. package/dist/svelte/viz/mfd/MFDHexMatrix.svelte +58 -0
  624. package/dist/svelte/viz/mfd/MFDHexMatrix.svelte.d.ts +21 -0
  625. package/dist/svelte/viz/mfd/MFDHexMatrix.svelte.d.ts.map +1 -0
  626. package/dist/svelte/viz/mfd/MFDPanel.svelte +372 -0
  627. package/dist/svelte/viz/mfd/MFDPanel.svelte.d.ts +19 -0
  628. package/dist/svelte/viz/mfd/MFDPanel.svelte.d.ts.map +1 -0
  629. package/dist/svelte/viz/mfd/MFDScope.svelte +59 -0
  630. package/dist/svelte/viz/mfd/MFDScope.svelte.d.ts +21 -0
  631. package/dist/svelte/viz/mfd/MFDScope.svelte.d.ts.map +1 -0
  632. package/dist/svelte/viz/mfd/MFDStatusGrid.svelte +65 -0
  633. package/dist/svelte/viz/mfd/MFDStatusGrid.svelte.d.ts +25 -0
  634. package/dist/svelte/viz/mfd/MFDStatusGrid.svelte.d.ts.map +1 -0
  635. package/dist/svelte/viz/mfd/grid.d.ts +37 -0
  636. package/dist/svelte/viz/mfd/grid.d.ts.map +1 -0
  637. package/dist/svelte/viz/mfd/grid.js +51 -0
  638. package/dist/svelte/viz/mfd/palette.d.ts +22 -0
  639. package/dist/svelte/viz/mfd/palette.d.ts.map +1 -0
  640. package/dist/svelte/viz/mfd/palette.js +105 -0
  641. package/dist/svelte/viz/mfd/pipeline/store.svelte.d.ts +42 -0
  642. package/dist/svelte/viz/mfd/pipeline/store.svelte.d.ts.map +1 -0
  643. package/dist/svelte/viz/mfd/pipeline/store.svelte.js +115 -0
  644. package/dist/svelte/viz/mfd/renderer/context.d.ts +47 -0
  645. package/dist/svelte/viz/mfd/renderer/context.d.ts.map +1 -0
  646. package/dist/svelte/viz/mfd/renderer/context.js +272 -0
  647. package/dist/svelte/viz/mfd/renderer/pipeline.d.ts +32 -0
  648. package/dist/svelte/viz/mfd/renderer/pipeline.d.ts.map +1 -0
  649. package/dist/svelte/viz/mfd/renderer/pipeline.js +188 -0
  650. package/dist/svelte/viz/mfd/renderer/shaders.d.ts +35 -0
  651. package/dist/svelte/viz/mfd/renderer/shaders.d.ts.map +1 -0
  652. package/dist/svelte/viz/mfd/renderer/shaders.js +837 -0
  653. package/dist/svelte/viz/mfd/types.d.ts +88 -0
  654. package/dist/svelte/viz/mfd/types.d.ts.map +1 -0
  655. package/dist/svelte/viz/mfd/types.js +31 -0
  656. package/dist/svelte/viz/registry.d.ts +36 -0
  657. package/dist/svelte/viz/registry.d.ts.map +1 -0
  658. package/dist/svelte/viz/registry.js +74 -0
  659. package/dist/test-scenario/test-scenario-emitter.d.ts +35 -0
  660. package/dist/test-scenario/test-scenario-emitter.d.ts.map +1 -0
  661. package/dist/test-scenario/test-scenario-emitter.js +64 -0
  662. package/dist/test-scenario/test-scenario-emitter.js.map +1 -0
  663. package/dist/test-scenario/test-scenario.plugin.d.ts +11 -0
  664. package/dist/test-scenario/test-scenario.plugin.d.ts.map +1 -0
  665. package/dist/test-scenario/test-scenario.plugin.js +19 -0
  666. package/dist/test-scenario/test-scenario.plugin.js.map +1 -0
  667. package/dist/test-scenario/test-scenario.type.descriptor.d.ts +12 -0
  668. package/dist/test-scenario/test-scenario.type.descriptor.d.ts.map +1 -0
  669. package/dist/test-scenario/test-scenario.type.descriptor.js +21 -0
  670. package/dist/test-scenario/test-scenario.type.descriptor.js.map +1 -0
  671. package/dist/watch.d.ts +13 -0
  672. package/dist/watch.d.ts.map +1 -0
  673. package/dist/watch.js +127 -0
  674. package/dist/watch.js.map +1 -0
  675. package/package.json +355 -4
@@ -0,0 +1,114 @@
1
+ <script lang="ts">
2
+ import { Button } from '@vibesdotdev/kit/components/ui/button';
3
+ import { Badge } from '@vibesdotdev/kit/components/ui/badge';
4
+ import { MarkdownRenderer } from '@vibesdotdev/kit/components/markdown';
5
+ import * as Pagination from '@vibesdotdev/kit/components/ui/pagination';
6
+ import type { RunnableCatalogRun } from '../../schemas/runs.js';
7
+ import type { RunIssueReport } from '../../schemas/issues.js';
8
+ import { groupRunIssues, summarizeRunIssues } from '../lib/run-issues.js';
9
+ import { runTitle, outcomeReason, formatRunTime } from '../lib/run-presentation.js';
10
+ import RunContext from './RunContext.svelte';
11
+ import RunOutcomeBadge from './RunOutcomeBadge.svelte';
12
+ import RunStatusBadge from './RunStatusBadge.svelte';
13
+
14
+ interface Props {
15
+ runs: readonly RunnableCatalogRun[];
16
+ report?: RunIssueReport;
17
+ onselect: (id: string) => void;
18
+ onbrowse: () => void;
19
+ }
20
+ let { runs, report, onselect, onbrowse }: Props = $props();
21
+ let filter = $state<'open' | 'unresolved' | 'unverified' | 'resolved' | 'superseded' | 'all'>('open');
22
+ let page = $state(1);
23
+ let expanded = $state<Record<string, boolean>>({});
24
+ const groups = $derived(groupRunIssues(runs, report));
25
+ const totals = $derived(summarizeRunIssues(groups));
26
+ const count = $derived(totals.attempts);
27
+ const filtered = $derived(filter === 'all' ? groups : groups.filter(group => filter === 'open'
28
+ ? !['resolved', 'superseded'].includes(group.investigation?.status ?? 'unverified')
29
+ : (group.investigation?.status ?? 'unverified') === filter));
30
+ const currentPage = $derived(Math.min(page, Math.max(1, Math.ceil(filtered.length / 8))));
31
+ const visible = $derived(filtered.slice((currentPage - 1) * 8, currentPage * 8));
32
+ const labels = { resolved: 'Later success verified', unresolved: 'Still unresolved', unverified: 'Needs verification', superseded: 'Superseded by approved scope' } as const;
33
+ function choose(value: typeof filter) { filter = value; page = 1; }
34
+ </script>
35
+
36
+ <section aria-label="Recorded execution issues" class="grid min-w-0 grid-cols-1 gap-3">
37
+ <div class="flex items-center justify-between gap-3"><h3 class="text-sm font-semibold">Work to investigate</h3><Badge variant="outline">{totals.counts.unresolved.groups + totals.counts.unverified.groups} open groups</Badge></div>
38
+ <p class="text-sm leading-relaxed text-muted-foreground">
39
+ {groups.length} work {groups.length === 1 ? 'group' : 'groups'} · {count} historical {count === 1 ? 'attempt' : 'attempts'} with failure or missing evidence.
40
+ Missing evidence does not establish an unresolved defect. Requests for your input are counted separately.
41
+ </p>
42
+ {#if report}
43
+ <div aria-label="Issue investigation filters" class="flex flex-wrap gap-2">
44
+ <Button variant="outline" size="sm" aria-pressed={filter === 'open'} onclick={() => choose('open')}>Open · {totals.counts.unresolved.groups + totals.counts.unverified.groups}</Button>
45
+ <Button variant="outline" size="sm" aria-pressed={filter === 'unresolved'} onclick={() => choose('unresolved')}>Unresolved · {totals.counts.unresolved.groups}</Button>
46
+ <Button variant="outline" size="sm" aria-pressed={filter === 'unverified'} onclick={() => choose('unverified')}>Needs verification · {totals.counts.unverified.groups}</Button>
47
+ <Button variant="outline" size="sm" aria-pressed={filter === 'resolved'} onclick={() => choose('resolved')}>Recovered · {totals.counts.resolved.groups}</Button>
48
+ <Button variant="outline" size="sm" aria-pressed={filter === 'superseded'} onclick={() => choose('superseded')}>Superseded · {totals.counts.superseded.groups}</Button>
49
+ <Button variant="ghost" size="sm" aria-pressed={filter === 'all'} onclick={() => choose('all')}>All · {groups.length}</Button>
50
+ </div>
51
+ {/if}
52
+ {#each visible as group (group.investigation?.id ?? group.root.id)}
53
+ {@const investigation = group.investigation}
54
+ {@const key = investigation?.id ?? group.root.id}
55
+ {@const latestReason = outcomeReason(group.latest)}
56
+ <article class="grid min-w-0 grid-cols-1 gap-3 border-t border-border py-4">
57
+ <div class="flex flex-wrap items-start justify-between gap-2">
58
+ <h4 class="min-w-0 flex-1 break-words text-sm font-medium leading-snug">{investigation?.title ?? runTitle(group.root)}</h4>
59
+ <Badge variant="secondary">{group.attempts.length} {group.attempts.length === 1 ? 'attempt' : 'attempts'}</Badge>
60
+ </div>
61
+ {#if investigation}
62
+ {#if investigation.target && investigation.target !== investigation.title}<p class="break-words text-xs text-muted-foreground">{investigation.target}</p>{/if}
63
+ {:else}<RunContext run={group.root} compact />{/if}
64
+ {#if investigation}
65
+ <div><Badge variant={investigation.status === 'resolved' ? 'secondary' : 'outline'}>{labels[investigation.status]}</Badge></div>
66
+ <div class="min-w-0 text-sm leading-relaxed"><MarkdownRenderer content={investigation.summary} /></div>
67
+ <dl class="grid gap-2 text-sm">
68
+ <div><dt class="text-xs text-muted-foreground">Responsible feature</dt><dd class="break-words">{investigation.owner}</dd></div>
69
+ {#if !['resolved', 'superseded'].includes(investigation.status)}
70
+ <div><dt class="text-xs text-muted-foreground">Assigned to</dt><dd>
71
+ {#if investigation.assignmentConflict}Conflicting assignments · review linked triage tasks
72
+ {:else if investigation.assignment}{investigation.assignment.name ?? investigation.assignment.participantId}
73
+ {:else if report?.triageFailure}Unknown · follow-up lookup failed
74
+ {:else if report?.triageSessionId}No assignment linked to this whole group
75
+ {:else}Not checked · select a follow-up session in Configure inputs{/if}
76
+ </dd></div>
77
+ {#if investigation.assignment?.activity}<div><dt class="text-xs text-muted-foreground">Recorded triage activity</dt><dd>{investigation.assignment.activity}</dd></div>{/if}
78
+ {/if}
79
+ <div><dt class="text-xs text-muted-foreground">Next action</dt><dd class="break-words leading-relaxed">{investigation.nextAction}</dd></div>
80
+ </dl>
81
+ {#if investigation.gaps?.length}<div class="grid gap-1 text-sm"><p class="text-xs text-muted-foreground">Evidence still needed</p><ul class="grid gap-1">{#each investigation.gaps as gap}<li>{gap.message}</li>{/each}</ul></div>{/if}
82
+ {#if investigation.triage && !['resolved', 'superseded'].includes(investigation.status)}<p class="text-xs text-muted-foreground">Follow-up · {investigation.triage.status.replaceAll('_', ' ')}. Original execution assignee unknown.</p>{/if}
83
+ <div class="flex flex-wrap gap-2">{#each investigation.evidence as evidence (evidence.runId)}
84
+ <Button variant={evidence.role === 'resolution' ? 'outline' : 'ghost'} size="sm" onclick={() => onselect(evidence.runId)}>{evidence.label} →</Button>
85
+ {/each}</div>
86
+ {:else}
87
+ <Badge variant="outline">Not yet investigated</Badge>
88
+ <p class="text-sm text-muted-foreground">Owner, next action and later recovery have not been checked for this group.</p>
89
+ {/if}
90
+ <div class="flex flex-wrap items-center gap-2 text-xs text-muted-foreground">
91
+ <Badge variant="secondary">{group.latest.context?.kindLabel ?? group.latest.runnableType}</Badge>
92
+ {#if group.latest.outcome}<RunOutcomeBadge run={group.latest} />{:else}<RunStatusBadge status={group.latest.status} />{/if}
93
+ <span>Latest flagged attempt · {formatRunTime(group.latest.endedAt ?? group.latest.startedAt)}</span>
94
+ </div>
95
+ {#if group.latest.observation}<p class="text-sm leading-relaxed"><span class="text-xs text-muted-foreground">Last recorded activity · {formatRunTime(group.latest.observation.ts)}</span><br />{group.latest.observation.message}</p>{/if}
96
+ {#if !investigation || latestReason && latestReason !== investigation.summary}<div class="min-w-0 text-sm leading-relaxed"><MarkdownRenderer content={latestReason ?? (group.latest.status === 'unverified' ? 'The execution status could not be verified. No task outcome was recorded.' : 'An execution error was recorded without an explanation.')} /></div>{/if}
97
+ <div class="flex flex-wrap gap-2">
98
+ <Button variant="outline" size="sm" onclick={() => onselect(group.latest.id)}>Inspect issue and evidence →</Button>
99
+ {#if group.root.id !== group.latest.id}<Button variant="ghost" size="sm" onclick={() => onselect(group.root.id)}>Open work branch</Button>{/if}
100
+ </div>
101
+ {#if group.attempts.length > 1}
102
+ <details ontoggle={event => { expanded[key] = event.currentTarget.open; }}>
103
+ <summary class="cursor-pointer text-sm">All {group.attempts.length} flagged attempts</summary>
104
+ {#if expanded[key]}<ul class="mt-2 grid gap-1">{#each group.attempts as attempt (attempt.id)}
105
+ <li><Button variant="ghost" class="grid h-auto w-full gap-1 whitespace-normal text-left" onclick={() => onselect(attempt.id)}><span>{attempt.context?.phase ? attempt.context.phase + ' · ' : ''}{runTitle(attempt)} · {formatRunTime(attempt.endedAt ?? attempt.startedAt)}</span>{#if outcomeReason(attempt)}<span class="text-xs font-normal text-muted-foreground">{outcomeReason(attempt)}</span>{/if}</Button></li>
106
+ {/each}</ul>{/if}
107
+ </details>
108
+ {/if}
109
+ </article>
110
+ {/each}
111
+ {#if filtered.length > 8}<Pagination.Root count={filtered.length} perPage={8} page={currentPage} onPageChange={value => { page = value; }} aria-label="Issue work group pages"><Pagination.Content><Pagination.Item><Pagination.PrevButton /></Pagination.Item><Pagination.Item><span class="px-2 text-xs">{currentPage} / {Math.ceil(filtered.length / 8)}</span></Pagination.Item><Pagination.Item><Pagination.NextButton /></Pagination.Item></Pagination.Content></Pagination.Root>{/if}
112
+ {#if filtered.length === 0}<p class="text-sm text-muted-foreground">{count === 0 ? 'No unsuccessful outcomes or execution errors in this subscription.' : 'No work groups in this investigation filter.'}</p>{/if}
113
+ {#if count > 0}<Button variant="ghost" size="sm" onclick={onbrowse}>Browse original run branches →</Button>{/if}
114
+ </section>
@@ -0,0 +1,12 @@
1
+ import type { RunnableCatalogRun } from '../../schemas/runs.ts';
2
+ import type { RunIssueReport } from '../../schemas/issues.ts';
3
+ interface Props {
4
+ runs: readonly RunnableCatalogRun[];
5
+ report?: RunIssueReport;
6
+ onselect: (id: string) => void;
7
+ onbrowse: () => void;
8
+ }
9
+ declare const RunIssues: import("svelte").Component<Props, {}, "">;
10
+ type RunIssues = ReturnType<typeof RunIssues>;
11
+ export default RunIssues;
12
+ //# sourceMappingURL=RunIssues.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunIssues.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/RunIssues.svelte.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAQ7D,UAAU,KAAK;IACd,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACrB;AA6GF,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -0,0 +1,32 @@
1
+ <script lang="ts">
2
+ import { Button } from '@vibesdotdev/kit/components/ui/button';
3
+ import type { RunnableCatalogRun, RunnableSnapshot } from '../../schemas/runs.js';
4
+ import type { RunEvidenceTarget } from '../lib/run-investigation.js';
5
+ import { runTitle } from '../lib/run-presentation.js';
6
+ import { isActiveRunStatus } from '../lib/status.js';
7
+ let { snapshot, onevidence, enclosing, onselect }: {
8
+ snapshot: RunnableSnapshot;
9
+ onevidence: (target: RunEvidenceTarget) => void;
10
+ enclosing?: RunnableCatalogRun;
11
+ onselect?: (id: string) => void;
12
+ } = $props();
13
+ const latest = $derived(snapshot.logs.map((log, index) => ({ log, index }))
14
+ .reduce<{ log: RunnableSnapshot['logs'][number]; index: number } | null>((last, entry) => !last || entry.log.ts >= last.log.ts ? entry : last, null));
15
+ const observation = $derived(snapshot.observation ?? (latest ? { message: latest.log.message, ts: latest.log.ts, logIndex: latest.index, label: undefined } : undefined));
16
+ </script>
17
+
18
+ <section aria-label="Latest recorded observation" class="grid min-w-0 gap-1 border-l-2 border-border pl-3">
19
+ {#if observation}
20
+ <p class="text-xs font-medium text-muted-foreground">Last observed · <time datetime={new Date(observation.ts).toISOString()}>{new Date(observation.ts).toLocaleString()}</time></p>
21
+ {#if observation.label}<p class="text-xs text-muted-foreground">{observation.label}</p>{/if}
22
+ <Button variant="ghost" class="h-auto justify-start whitespace-normal px-0 py-1 text-left" onclick={() => onevidence({ kind: 'log', index: observation!.logIndex })}><span class="line-clamp-3 break-words text-sm font-normal">{observation.message} →</span></Button>
23
+ {:else}<p class="text-sm text-muted-foreground">No execution observations recorded yet.</p>{/if}
24
+ </section>
25
+
26
+ {#if isActiveRunStatus(snapshot.run.status) && enclosing?.activity && onselect && (!observation || enclosing.activity.ts > observation.ts)}
27
+ <section aria-label="Report from enclosing run" class="grid min-w-0 gap-1 border-l-2 border-border pl-3">
28
+ <p class="text-xs font-medium text-muted-foreground">{runTitle(enclosing)} reported · <time datetime={new Date(enclosing.activity.ts).toISOString()}>{new Date(enclosing.activity.ts).toLocaleString()}</time></p>
29
+ <p class="text-xs text-muted-foreground">From the enclosing run</p>
30
+ <Button variant="ghost" class="h-auto justify-start whitespace-normal px-0 py-1 text-left" onclick={() => onselect!(enclosing!.id)}><span class="line-clamp-3 break-words text-sm font-normal">{enclosing.activity.message} →</span></Button>
31
+ </section>
32
+ {/if}
@@ -0,0 +1,12 @@
1
+ import type { RunnableCatalogRun, RunnableSnapshot } from '../../schemas/runs.ts';
2
+ import type { RunEvidenceTarget } from '../lib/run-investigation.ts';
3
+ type $$ComponentProps = {
4
+ snapshot: RunnableSnapshot;
5
+ onevidence: (target: RunEvidenceTarget) => void;
6
+ enclosing?: RunnableCatalogRun;
7
+ onselect?: (id: string) => void;
8
+ };
9
+ declare const RunObservation: import("svelte").Component<$$ComponentProps, {}, "">;
10
+ type RunObservation = ReturnType<typeof RunObservation>;
11
+ export default RunObservation;
12
+ //# sourceMappingURL=RunObservation.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunObservation.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/RunObservation.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIpE,KAAK,gBAAgB,GAAI;IACxB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC,CAAC;AA+BH,QAAA,MAAM,cAAc,sDAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -0,0 +1,11 @@
1
+ <script lang="ts">
2
+ import { Badge } from '@vibesdotdev/kit/components/ui/badge';
3
+ import type { RunnableCatalogRun } from '../../schemas/runs.js';
4
+ import { outcomeLabel } from '../lib/run-presentation.js';
5
+
6
+ let { run }: { run: RunnableCatalogRun } = $props();
7
+ </script>
8
+
9
+ <Badge variant={run.outcome?.status === 'not-done' || run.outcome?.status === 'disputed' ? 'destructive' : 'secondary'} class="shrink-0" aria-label={`Task outcome: ${outcomeLabel(run)}`}>
10
+ {outcomeLabel(run)}
11
+ </Badge>
@@ -0,0 +1,8 @@
1
+ import type { RunnableCatalogRun } from '../../schemas/runs.ts';
2
+ type $$ComponentProps = {
3
+ run: RunnableCatalogRun;
4
+ };
5
+ declare const RunOutcomeBadge: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type RunOutcomeBadge = ReturnType<typeof RunOutcomeBadge>;
7
+ export default RunOutcomeBadge;
8
+ //# sourceMappingURL=RunOutcomeBadge.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunOutcomeBadge.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/RunOutcomeBadge.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,KAAK,gBAAgB,GAAI;IAAE,GAAG,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAetD,QAAA,MAAM,eAAe,sDAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -0,0 +1,64 @@
1
+ <script lang="ts" module>
2
+ import type { RunnableVisualizationQuery } from '../../client/client.js';
3
+ import type { RunnableResolvedVisualizationDescriptor } from '../../schemas/descriptors.js';
4
+ import type { RunnableSnapshot } from '../../schemas/runs.js';
5
+
6
+ export interface RunPanelsProps {
7
+ snapshot: RunnableSnapshot;
8
+ visualizations: (query: Extract<RunnableVisualizationQuery, { runId: string }>) => Promise<readonly RunnableResolvedVisualizationDescriptor[]>;
9
+ origin?: string;
10
+ hideEmpty?: boolean;
11
+ }
12
+ </script>
13
+
14
+ <script lang="ts">
15
+ import { CapabilityError, CaughtFailureSchema, settle } from '@vibesdotdev/kernel';
16
+ import { runPanelSource } from '../../client/tracking/panel-bindings.js';
17
+ import DescriptorPanel from '../viz/DescriptorPanel.svelte';
18
+
19
+ let { snapshot, visualizations, origin, hideEmpty = false }: RunPanelsProps = $props();
20
+ let panels = $state.raw<readonly RunnableResolvedVisualizationDescriptor[]>([]);
21
+ let failure = $state.raw<CapabilityError | null>(null);
22
+ let pending = $state(false);
23
+ let retry = $state(0);
24
+ const runId = $derived(snapshot.run.id);
25
+ const source = $derived(runPanelSource(snapshot));
26
+
27
+ $effect(() => {
28
+ const id = runId;
29
+ const load = visualizations;
30
+ void retry;
31
+ let active = true;
32
+ panels = [];
33
+ failure = null;
34
+ pending = true;
35
+ void (async () => {
36
+ const result = await settle(() => load({ runId: id }));
37
+ if (!active) return;
38
+ if (result.ok) panels = result.value;
39
+ else failure = CapabilityError.from(CaughtFailureSchema.parse(result.cause));
40
+ pending = false;
41
+ })();
42
+ return () => { active = false; };
43
+ });
44
+ </script>
45
+
46
+ {#if pending || failure || panels.length > 0 || !hideEmpty}
47
+ <section aria-label="Panels" aria-busy={pending}>
48
+ {#if pending}<p role="status">Loading visualizations.</p>
49
+ {:else if failure}
50
+ <p role="alert">{failure.message} <code>{failure.code}</code> {failure.reason ?? ''}</p>
51
+ <button onclick={() => retry += 1}>Retry</button>
52
+ {:else if panels.length === 0 && !hideEmpty}<p>No visualizations for this run.</p>{/if}
53
+
54
+ {#each panels as descriptor (descriptor.id)}
55
+ <svelte:boundary>
56
+ <DescriptorPanel {descriptor} {source} {runId} {origin} runIsActive={snapshot.run.endedAt == null} />
57
+ {#snippet failed(error)}
58
+ {@const refusal = CapabilityError.from(CaughtFailureSchema.parse(error))}
59
+ <p role="alert">{descriptor.name}: {refusal.message} <code>{refusal.code}</code></p>
60
+ {/snippet}
61
+ </svelte:boundary>
62
+ {/each}
63
+ </section>
64
+ {/if}
@@ -0,0 +1,15 @@
1
+ import type { RunnableVisualizationQuery } from '../../client/client.ts';
2
+ import type { RunnableResolvedVisualizationDescriptor } from '../../schemas/descriptors.ts';
3
+ import type { RunnableSnapshot } from '../../schemas/runs.ts';
4
+ export interface RunPanelsProps {
5
+ snapshot: RunnableSnapshot;
6
+ visualizations: (query: Extract<RunnableVisualizationQuery, {
7
+ runId: string;
8
+ }>) => Promise<readonly RunnableResolvedVisualizationDescriptor[]>;
9
+ origin?: string;
10
+ hideEmpty?: boolean;
11
+ }
12
+ declare const RunPanels: import("svelte").Component<RunPanelsProps, {}, "">;
13
+ type RunPanels = ReturnType<typeof RunPanels>;
14
+ export default RunPanels;
15
+ //# sourceMappingURL=RunPanels.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunPanels.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/RunPanels.svelte.ts"],"names":[],"mappings":"AAGC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,0BAA0B,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,OAAO,CAAC,SAAS,uCAAuC,EAAE,CAAC,CAAC;IAC/I,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AA8DF,QAAA,MAAM,SAAS,oDAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -0,0 +1,38 @@
1
+ <script lang="ts">
2
+ import { Badge } from '@vibesdotdev/kit/components/ui/badge';
3
+ import type { RunnableRunStatus } from '../types.js';
4
+ import { getRunStatusDisplay } from '../lib/status.js';
5
+
6
+ interface Props {
7
+ status: RunnableRunStatus | string | null | undefined;
8
+ compact?: boolean;
9
+ }
10
+
11
+ let { status, compact = false }: Props = $props();
12
+ const display = $derived(getRunStatusDisplay(status ?? 'idle'));
13
+ const badgeStyle = $derived(
14
+ `background: ${display.backgroundColor}; border-color: ${display.borderColor}; color: ${display.textColor};`,
15
+ );
16
+ </script>
17
+
18
+ {#if compact}
19
+ <span
20
+ class="runnable-status-dot"
21
+ style:background={display.dotColor}
22
+ aria-label={display.label}
23
+ ></span>
24
+ {:else}
25
+ <Badge variant="outline" class={`runnable-status-badge ${display.badgeClass}`} style={badgeStyle}>
26
+ {display.label}
27
+ </Badge>
28
+ {/if}
29
+
30
+ <style>
31
+ .runnable-status-dot {
32
+ display: inline-block;
33
+ width: 8px;
34
+ height: 8px;
35
+ border-radius: 50%;
36
+ flex-shrink: 0;
37
+ }
38
+ </style>
@@ -0,0 +1,9 @@
1
+ import type { RunnableRunStatus } from '../types.ts';
2
+ interface Props {
3
+ status: RunnableRunStatus | string | null | undefined;
4
+ compact?: boolean;
5
+ }
6
+ declare const RunStatusBadge: import("svelte").Component<Props, {}, "">;
7
+ type RunStatusBadge = ReturnType<typeof RunStatusBadge>;
8
+ export default RunStatusBadge;
9
+ //# sourceMappingURL=RunStatusBadge.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunStatusBadge.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/RunStatusBadge.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIpD,UAAU,KAAK;IACd,MAAM,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AA0BF,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -0,0 +1,42 @@
1
+ <script lang="ts">
2
+ import { MarkdownRenderer } from '@vibesdotdev/kit/components/markdown';
3
+ import { Button } from '@vibesdotdev/kit/components/ui/button';
4
+ import type { RunnableSnapshot } from '../../schemas/runs.js';
5
+ import type { RunEvidenceTarget } from '../lib/run-investigation.js';
6
+ import { outcomeReason, needsAttention, formatDuration, runTitle } from '../lib/run-presentation.js';
7
+ import { getRunStatusDisplay } from '../lib/status.js';
8
+ import RunOutcomeBadge from './RunOutcomeBadge.svelte';
9
+ import RunEvidence from './RunEvidence.svelte';
10
+
11
+ let { snapshot, onevidence, onselect }: {
12
+ snapshot: RunnableSnapshot;
13
+ onevidence: (target: RunEvidenceTarget) => void;
14
+ onselect: (runId: string) => void;
15
+ } = $props();
16
+ const run = $derived(snapshot.run);
17
+ const outcome = $derived(run.outcome);
18
+ const failure = $derived(outcome?.status === 'not-done' ? outcome.failure : undefined);
19
+ const issues = $derived(snapshot.children.filter(needsAttention));
20
+ const logs = $derived(snapshot.logs.map((log, index) => ({ log, index })).filter(({ log }) => log.level === 'error' || log.level === 'warn'));
21
+ let resultOpen = $state(false);
22
+ $effect(() => { void run.id; resultOpen = false; });
23
+ </script>
24
+
25
+ <section aria-label="Run summary" class="grid min-w-0 gap-4 rounded-lg border border-border bg-muted/10 p-4 sm:p-5">
26
+ <div class="flex flex-wrap items-center justify-between gap-3"><h3 class="text-sm font-semibold">What happened</h3><RunOutcomeBadge {run} /></div>
27
+
28
+ {#if outcomeReason(run)}<div class="min-w-0 text-sm leading-relaxed"><MarkdownRenderer content={outcomeReason(run)!} /></div>
29
+ {:else if outcome?.status === 'done'}<p class="text-sm">{run.resultMode === 'outcome' ? 'The owner reported that the task’s goal was achieved.' : 'The execution completed and recorded its result.'}</p>
30
+ {:else if run.status === 'unverified'}<p class="text-sm text-muted-foreground">The execution status could not be verified. No task outcome was recorded.</p>
31
+ {:else}<p class="text-sm text-muted-foreground">{getRunStatusDisplay(run.status).active ? 'Work is in progress. The owner has not reported a task outcome yet.' : 'No task outcome was recorded. The execution state alone does not establish success.'}</p>{/if}
32
+ <p class="text-xs leading-relaxed text-muted-foreground">Execution: {getRunStatusDisplay(run.status).label}{run.endedAt != null ? ` · ${formatDuration(run.endedAt - run.startedAt)}` : ''} · {snapshot.children.length} child executions · {snapshot.artifacts.length} artifacts · {snapshot.logs.length} log entries</p>
33
+ {#if failure}<div class="grid min-w-0 gap-2 border-l-2 border-destructive pl-3 text-sm"><p><code class="text-xs">{failure.code}</code> {failure.message}</p>{#if failure.recoveryHint}<MarkdownRenderer content={failure.recoveryHint} />{/if}<div><Button size="sm" variant="outline" onclick={() => onevidence({ kind: 'outcome' })}>Inspect failure evidence →</Button></div></div>{/if}
34
+ {#if outcome && 'value' in outcome && outcome.value !== undefined}
35
+ {#if typeof outcome.value === 'string'}<div class="min-w-0 border-t border-border pt-4 text-sm"><MarkdownRenderer content={outcome.value} /></div>
36
+ {:else}<details open={resultOpen} ontoggle={event => resultOpen = event.currentTarget.open}><summary class="cursor-pointer text-sm font-medium focus-visible:outline-2 focus-visible:outline-ring">Recorded result</summary>{#if resultOpen}<div class="mt-3"><RunEvidence title="Recorded result" value={outcome.value} /></div>{/if}</details>{/if}
37
+ {/if}
38
+ {#if issues.length > 0}<div class="grid gap-2 border-t border-border pt-4"><h4 class="text-xs font-medium text-muted-foreground">Child executions with recorded issues</h4>{#each issues as child (child.id)}<Button variant="ghost" class="h-auto justify-start whitespace-normal text-left" onclick={() => onselect(child.id)}><span class="grid min-w-0 gap-1"><span>{runTitle(child)}</span><span class="break-words text-xs font-normal text-muted-foreground">{outcomeReason(child) ?? 'The owner reported an execution error.'} →</span></span></Button>{/each}</div>{/if}
39
+ {#if logs.length > 0}<div class="grid gap-2 border-t border-border pt-4"><h4 class="text-xs font-medium text-muted-foreground">Recorded warnings and errors</h4>{#each logs.slice(-5) as { log, index }}<Button variant="ghost" class="h-auto justify-start whitespace-normal text-left" onclick={() => onevidence({ kind: 'log', index })}><span class="grid min-w-0 gap-1"><span class="text-xs text-muted-foreground">{log.level} · {new Date(log.ts).toLocaleTimeString()}</span><span class="break-words text-sm font-normal">{log.message} →</span></span></Button>{/each}{#if logs.length > 5}<p class="text-xs text-muted-foreground">Showing the latest 5 of {logs.length}. All entries are in the execution thread.</p>{/if}</div>{/if}
40
+ {#if snapshot.artifacts.length > 0}<div class="grid gap-2 border-t border-border pt-4"><h4 class="text-xs font-medium text-muted-foreground">Produced evidence</h4><div class="flex flex-wrap gap-2">{#each snapshot.artifacts as artifact (artifact.id)}<Button variant="outline" size="sm" class="max-w-full whitespace-normal break-all text-left" onclick={() => onevidence({ kind: 'artifact', id: artifact.id })}>{artifact.name} →</Button>{/each}</div></div>{/if}
41
+ <div class="flex flex-wrap gap-2 border-t border-border pt-3"><Button variant="outline" size="sm" onclick={() => onevidence({ kind: 'outcome' })} disabled={!outcome}>Outcome evidence</Button><Button variant="ghost" size="sm" onclick={() => onevidence({ kind: 'input' })}>Input</Button>{#if run.ref}<Button variant="ghost" size="sm" onclick={() => onevidence({ kind: 'reference' })}>Execution reference</Button>{/if}</div>
42
+ </section>
@@ -0,0 +1,11 @@
1
+ import type { RunnableSnapshot } from '../../schemas/runs.ts';
2
+ import type { RunEvidenceTarget } from '../lib/run-investigation.ts';
3
+ type $$ComponentProps = {
4
+ snapshot: RunnableSnapshot;
5
+ onevidence: (target: RunEvidenceTarget) => void;
6
+ onselect: (runId: string) => void;
7
+ };
8
+ declare const RunSummary: import("svelte").Component<$$ComponentProps, {}, "">;
9
+ type RunSummary = ReturnType<typeof RunSummary>;
10
+ export default RunSummary;
11
+ //# sourceMappingURL=RunSummary.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunSummary.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/RunSummary.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAMpE,KAAK,gBAAgB,GAAI;IACxB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,CAAC;AA0CH,QAAA,MAAM,UAAU,sDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,162 @@
1
+ <script lang="ts">
2
+ import { tick, type Snippet } from 'svelte';
3
+ import { MediaQuery } from 'svelte/reactivity';
4
+ import { CapabilityError, CaughtFailureSchema, settle } from '@vibesdotdev/kernel';
5
+ import { Button } from '@vibesdotdev/kit/components/ui/button';
6
+ import { Badge } from '@vibesdotdev/kit/components/ui/badge';
7
+ import { Alert, AlertTitle, AlertDescription } from '@vibesdotdev/kit/components/ui/alert';
8
+ import { Resizable } from '@vibesdotdev/kit/components/ui/resizable';
9
+ import type { RunnableSnapshot } from '../../schemas/runs.js';
10
+ import type { RunsStore } from '../runs.store.svelte.js';
11
+ import { isActiveRunStatus } from '../lib/status.js';
12
+ import { needsAttention, type RunViewFilter } from '../lib/run-presentation.js';
13
+ import RunBrowser from './RunBrowser.svelte';
14
+ import RunIssues from './RunIssues.svelte';
15
+ import RunTree from './records/RunTree.svelte';
16
+ import { withRunAncestors } from './records/tree-projection.js';
17
+ import RunDetail from './records/RunDetail.svelte';
18
+
19
+ interface Props {
20
+ store: RunsStore;
21
+ title?: string;
22
+ sections?: Snippet<[RunnableSnapshot, RunsStore | undefined]>;
23
+ requests?: Snippet<[RunnableSnapshot, RunsStore | undefined]>;
24
+ thread?: Snippet<[RunnableSnapshot, number | null]>;
25
+ overview?: Snippet<[RunsStore]>;
26
+ issues?: Snippet<[RunsStore, (id: string) => void, () => void]>;
27
+ origin?: string;
28
+ }
29
+
30
+ let { store, title = 'Runs', sections, requests, thread, overview, issues, origin }: Props = $props();
31
+ const desktop = new MediaQuery('(min-width: 768px)');
32
+ let filter = $state<RunViewFilter>('all');
33
+ let issueBranches = $state(false);
34
+ let inspectorViewport: HTMLDivElement | undefined = $state();
35
+ let browserViewport: HTMLDivElement | undefined = $state();
36
+ const failure = $derived(store.error == null ? null : CapabilityError.from(CaughtFailureSchema.parse(store.error)));
37
+ const runs = $derived(store.listRows.map(row => row.run));
38
+ const active = $derived(runs.filter(run => run.status !== 'unverified' && isActiveRunStatus(run.status)));
39
+ const unverified = $derived(runs.filter(run => run.status === 'unverified'));
40
+ const unverifiedIds = $derived(new Set(unverified.map(run => run.id)));
41
+ const unverifiedTree = $derived(withRunAncestors(runs, unverified));
42
+ const attention = $derived(runs.filter(needsAttention));
43
+ const activeIds = $derived(new Set(active.map(run => run.id)));
44
+ const activeTree = $derived(withRunAncestors(runs, active));
45
+
46
+ const achieved = $derived(runs.filter(run => run.outcome?.status === 'done'));
47
+ const summaries = $derived([
48
+ { id: 'all', label: 'Recorded', count: runs.length },
49
+ { id: 'active', label: 'In progress or unverified', count: active.length + unverified.length },
50
+ { id: 'unverified', label: 'Status unverified', count: unverified.length },
51
+ { id: 'attention', label: 'Issue history', count: attention.length },
52
+ { id: 'done', label: 'Goal achieved', count: achieved.length },
53
+ ] satisfies Array<{ id: RunViewFilter; label: string; count: number }>);
54
+ const connectionLabel = $derived(failure ? 'Updates interrupted' : store.connection === 'open' ? 'Connected' : store.connection === 'connecting' ? 'Connecting' : 'Disconnected');
55
+
56
+ async function reconnect() {
57
+ const result = await settle(async () => {
58
+ await store.close();
59
+ await store.open();
60
+ });
61
+ if (!result.ok) store.error = result.cause;
62
+ }
63
+
64
+ async function select(id: string | null) {
65
+ const previous = store.selectedId;
66
+ await settle(() => store.select(id));
67
+ await tick();
68
+ inspectorViewport?.scrollTo({ top: 0 });
69
+ if (id === null && previous && browserViewport) {
70
+ browserViewport.querySelector<HTMLElement>(`[data-run-id="${CSS.escape(previous)}"]`)?.focus({ preventScroll: true });
71
+ }
72
+ }
73
+ </script>
74
+
75
+ {#snippet browser()}
76
+ <RunBrowser {runs} selected={store.selectedId} loading={store.loading} bind:filter onselect={select} />
77
+ {/snippet}
78
+
79
+ {#snippet issuesView()}
80
+ {#if issues}{@render issues(store, id => { void select(id); }, () => { filter = 'attention'; issueBranches = true; void select(null); })}
81
+ {:else}<RunIssues {runs} onselect={select} onbrowse={() => { filter = 'attention'; issueBranches = true; void select(null); }} />{/if}
82
+ {/snippet}
83
+
84
+ {#snippet inspector()}
85
+ <div class="h-full min-w-0 overflow-y-auto bg-background" bind:this={inspectorViewport}>
86
+ <div class="mx-auto grid w-full min-w-0 max-w-screen-xl gap-6 p-4 sm:p-6 lg:p-8">
87
+ {@render overview?.(store)}
88
+ {#if store.selectedId !== null}
89
+ <div><Button variant="ghost" size="sm" onclick={() => select(null)}>← Back to runs</Button></div>
90
+ {#if store.selected}
91
+ <RunDetail snapshot={store.selected} {store} {sections} {requests} {thread} {origin} onselect={select} />
92
+ {:else}
93
+ <section aria-label="Selected run" aria-busy={store.detailLoading} class="grid gap-4 py-12">
94
+ <h2 class="text-lg font-semibold">{store.detailLoading ? 'Loading recorded run' : 'Recorded run unavailable'}</h2>
95
+ <code class="break-all text-xs text-muted-foreground">{store.selectedId}</code>
96
+ {#if store.detailLoading}<p role="status" class="text-sm text-muted-foreground">Reading this run’s recorded evidence.</p>
97
+ {:else}<Button variant="outline" onclick={() => select(store.selectedId)}>Retry selected run</Button>{/if}
98
+ </section>
99
+ {/if}
100
+ {:else}
101
+ <section class="grid gap-2">
102
+ <p class="text-xs font-medium uppercase tracking-wider text-muted-foreground">Current subscription</p>
103
+ <h2 class="text-2xl font-semibold tracking-tight">Understand the work</h2>
104
+ <p class="max-w-xl text-sm leading-relaxed text-muted-foreground">Expand a run to follow its tasks. Open any task for its result, evidence, and requests from its agent.</p>
105
+ </section>
106
+ {#if store.loading}<p role="status" class="text-sm text-muted-foreground">Waiting for the first snapshot.</p>
107
+ {:else if runs.length === 0}<p class="py-8 text-sm text-muted-foreground">No runs have been recorded in this subscription.</p>
108
+ {:else}
109
+ <section aria-label="Runs in progress" class="grid gap-3">
110
+ <div class="flex items-center justify-between gap-3"><h3 class="text-sm font-semibold">Happening now</h3><Badge variant="outline">{active.length}</Badge></div>
111
+ {#if active.length > 0}<RunTree runs={activeTree} matchedIds={activeIds} onselect={select} />
112
+ {:else}<p class="text-sm text-muted-foreground">No active executions reported.</p>{/if}
113
+ </section>
114
+ {#if unverified.length > 0}
115
+ <section aria-label="Runs with unverified status" class="grid gap-3">
116
+ <div class="flex items-center justify-between gap-3"><h3 class="text-sm font-semibold">Status unverified</h3><Badge variant="outline">{unverified.length}</Badge></div>
117
+ <p class="text-sm text-muted-foreground">These executions may still be active; their current status could not be verified.</p>
118
+ <RunTree runs={unverifiedTree} matchedIds={unverifiedIds} onselect={select} />
119
+ </section>
120
+ {/if}
121
+ {@render issuesView()}
122
+
123
+ {/if}
124
+ {/if}
125
+ </div>
126
+ </div>
127
+ {/snippet}
128
+
129
+ <div class="flex h-svh min-h-0 flex-col overflow-hidden bg-background font-sans text-foreground" aria-label={title}>
130
+ <header class="flex min-h-14 shrink-0 flex-wrap items-center justify-between gap-2 border-b border-border px-4 py-3 sm:px-6">
131
+ <div class="flex min-w-0 items-center gap-3"><h1 class="truncate text-sm font-semibold">{title}</h1><span class="hidden text-xs text-muted-foreground sm:inline">Execution & evidence</span></div>
132
+ <div class="flex items-center gap-3 text-xs text-muted-foreground">
133
+ <p role="status" title={`Subscription ${store.connection}; revision ${store.revision ?? 'not received'}; snapshot received ${store.lastReceivedAt == null ? 'not yet' : new Date(store.lastReceivedAt).toLocaleString()}`} class="flex items-center gap-2"><span class={['size-1.5 rounded-full', failure ? 'bg-destructive' : 'bg-current']} aria-hidden="true"></span>{connectionLabel}</p>
134
+ {#if store.lastReceivedAt != null}<span class="hidden lg:inline">Snapshot <time datetime={new Date(store.lastReceivedAt).toISOString()}>{new Date(store.lastReceivedAt).toLocaleTimeString()}</time></span>{/if}
135
+ <Button variant="ghost" size="sm" onclick={reconnect} loading={store.loading}>Refresh</Button>
136
+ </div>
137
+ </header>
138
+ {#if failure}<div class="shrink-0 px-4 py-3"><Alert variant="destructive"><AlertTitle>{failure.message}</AlertTitle><AlertDescription><code>{failure.code}</code> {failure.reason ?? ''} Previously received records remain visible.</AlertDescription></Alert></div>{/if}
139
+ <nav aria-label="Run summaries for the current subscription" class="grid shrink-0 grid-cols-5 border-b border-border bg-muted/10">
140
+ {#each summaries as summary (summary.id)}
141
+ <Button variant="ghost" class="grid h-auto gap-1 rounded-none px-2 py-3 text-left aria-pressed:bg-accent sm:px-5" aria-pressed={filter === summary.id} onclick={() => { filter = summary.id; issueBranches = false; void select(null); }}>
142
+ <span class="text-lg font-semibold tabular-nums sm:text-xl">{store.revision == null ? '—' : summary.count}</span><span class="flex min-h-8 items-center whitespace-normal text-xs font-normal leading-tight text-muted-foreground sm:min-h-0">{summary.label}</span>
143
+ </Button>
144
+ {/each}
145
+ </nav>
146
+ <div class="min-h-0 flex-1">
147
+ {#if desktop.current}
148
+ <Resizable.PaneGroup direction="horizontal">
149
+ <Resizable.Pane defaultSize={34} minSize={24} maxSize={55}>{@render browser()}</Resizable.Pane>
150
+ <Resizable.Handle withHandle aria-label="Resize run browser" />
151
+ <Resizable.Pane defaultSize={66} minSize={40}>{@render inspector()}</Resizable.Pane>
152
+ </Resizable.PaneGroup>
153
+ {:else}
154
+ <div class={['flex h-full min-h-0 flex-col', store.selectedId !== null && 'hidden']} bind:this={browserViewport}>
155
+ {#if store.selectedId === null && overview}<div class="max-h-64 shrink-0 overflow-y-auto p-4">{@render overview(store)}</div>{/if}
156
+ {#if filter === 'attention' && !issueBranches}<div class="min-h-0 flex-1 overflow-y-auto p-4">{@render issuesView()}</div>
157
+ {:else}<div class="min-h-0 flex-1">{@render browser()}</div>{/if}
158
+ </div>
159
+ {#if store.selectedId !== null}{@render inspector()}{/if}
160
+ {/if}
161
+ </div>
162
+ </div>
@@ -0,0 +1,17 @@
1
+ import { type Snippet } from 'svelte';
2
+ import type { RunnableSnapshot } from '../../schemas/runs.ts';
3
+ import type { RunsStore } from '../runs.store.svelte.ts';
4
+ interface Props {
5
+ store: RunsStore;
6
+ title?: string;
7
+ sections?: Snippet<[RunnableSnapshot, RunsStore | undefined]>;
8
+ requests?: Snippet<[RunnableSnapshot, RunsStore | undefined]>;
9
+ thread?: Snippet<[RunnableSnapshot, number | null]>;
10
+ overview?: Snippet<[RunsStore]>;
11
+ issues?: Snippet<[RunsStore, (id: string) => void, () => void]>;
12
+ origin?: string;
13
+ }
14
+ declare const RunsView: import("svelte").Component<Props, {}, "">;
15
+ type RunsView = ReturnType<typeof RunsView>;
16
+ export default RunsView;
17
+ //# sourceMappingURL=RunsView.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunsView.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/RunsView.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAO5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAUxD,UAAU,KAAK;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,gBAAgB,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,gBAAgB,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AA4JF,QAAA,MAAM,QAAQ,2CAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}