spexcode 0.6.1 → 0.6.5

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 (480) hide show
  1. package/README.md +99 -149
  2. package/bin/spex.mjs +4 -0
  3. package/node_modules/@spexcode/spec-cli/bin/spex.mjs +76 -0
  4. package/node_modules/@spexcode/spec-cli/dist/attach.d.ts +2 -0
  5. package/node_modules/@spexcode/spec-cli/dist/attach.js +48 -0
  6. package/node_modules/@spexcode/spec-cli/dist/claude-headless.d.ts +33 -0
  7. package/node_modules/@spexcode/spec-cli/dist/claude-headless.js +307 -0
  8. package/node_modules/@spexcode/spec-cli/dist/cli.d.ts +1 -0
  9. package/node_modules/@spexcode/spec-cli/dist/cli.js +1859 -0
  10. package/node_modules/@spexcode/spec-cli/dist/client.d.ts +111 -0
  11. package/node_modules/@spexcode/spec-cli/dist/client.js +476 -0
  12. package/node_modules/@spexcode/spec-cli/dist/cockpit.d.ts +7 -0
  13. package/node_modules/@spexcode/spec-cli/dist/cockpit.js +26 -0
  14. package/node_modules/@spexcode/spec-cli/dist/codex-headless.d.ts +1 -0
  15. package/{spec-cli/src/codex-headless.ts → node_modules/@spexcode/spec-cli/dist/codex-headless.js} +3 -9
  16. package/node_modules/@spexcode/spec-cli/dist/codex-runtime-generations.d.ts +53 -0
  17. package/node_modules/@spexcode/spec-cli/dist/codex-runtime-generations.js +686 -0
  18. package/node_modules/@spexcode/spec-cli/dist/commit-surgery.d.ts +1 -0
  19. package/node_modules/@spexcode/spec-cli/dist/commit-surgery.js +90 -0
  20. package/node_modules/@spexcode/spec-cli/dist/contract-filter.d.ts +14 -0
  21. package/node_modules/@spexcode/spec-cli/dist/contract-filter.js +219 -0
  22. package/node_modules/@spexcode/spec-cli/dist/dashboard-assets.d.ts +6 -0
  23. package/node_modules/@spexcode/spec-cli/dist/dashboard-assets.js +50 -0
  24. package/node_modules/@spexcode/spec-cli/dist/delivery-queue.d.ts +23 -0
  25. package/node_modules/@spexcode/spec-cli/dist/delivery-queue.js +179 -0
  26. package/node_modules/@spexcode/spec-cli/dist/doctor.d.ts +9 -0
  27. package/node_modules/@spexcode/spec-cli/dist/doctor.js +547 -0
  28. package/node_modules/@spexcode/spec-cli/dist/eval-host.d.ts +1 -0
  29. package/node_modules/@spexcode/spec-cli/dist/eval-host.js +19 -0
  30. package/node_modules/@spexcode/spec-cli/dist/execution-trace.d.ts +26 -0
  31. package/node_modules/@spexcode/spec-cli/dist/execution-trace.js +475 -0
  32. package/node_modules/@spexcode/spec-cli/dist/file-write.d.ts +2 -0
  33. package/node_modules/@spexcode/spec-cli/dist/file-write.js +26 -0
  34. package/node_modules/@spexcode/spec-cli/dist/flat.d.ts +89 -0
  35. package/node_modules/@spexcode/spec-cli/dist/flat.js +1076 -0
  36. package/node_modules/@spexcode/spec-cli/dist/gateway-auth.d.ts +56 -0
  37. package/node_modules/@spexcode/spec-cli/dist/gateway-auth.js +168 -0
  38. package/node_modules/@spexcode/spec-cli/dist/gateway-hub.d.ts +28 -0
  39. package/node_modules/@spexcode/spec-cli/dist/gateway-hub.js +361 -0
  40. package/node_modules/@spexcode/spec-cli/dist/gateway.d.ts +37 -0
  41. package/node_modules/@spexcode/spec-cli/dist/gateway.js +503 -0
  42. package/node_modules/@spexcode/spec-cli/dist/graphCache.d.ts +27 -0
  43. package/node_modules/@spexcode/spec-cli/dist/graphCache.js +716 -0
  44. package/node_modules/@spexcode/spec-cli/dist/graphSnapshot.d.ts +14 -0
  45. package/node_modules/@spexcode/spec-cli/dist/graphSnapshot.js +35 -0
  46. package/node_modules/@spexcode/spec-cli/dist/graphStream.d.ts +85 -0
  47. package/node_modules/@spexcode/spec-cli/dist/graphStream.js +1195 -0
  48. package/node_modules/@spexcode/spec-cli/dist/guidance-catalog.d.ts +64 -0
  49. package/node_modules/@spexcode/spec-cli/dist/guidance-catalog.js +166 -0
  50. package/node_modules/@spexcode/spec-cli/dist/guide.d.ts +8 -0
  51. package/{spec-cli/src/guide.ts → node_modules/@spexcode/spec-cli/dist/guide.js} +115 -22
  52. package/node_modules/@spexcode/spec-cli/dist/harness-select.d.ts +18 -0
  53. package/node_modules/@spexcode/spec-cli/dist/harness-select.js +62 -0
  54. package/node_modules/@spexcode/spec-cli/dist/harness.d.ts +325 -0
  55. package/node_modules/@spexcode/spec-cli/dist/harness.js +3026 -0
  56. package/node_modules/@spexcode/spec-cli/dist/headless-controller.d.ts +9 -0
  57. package/node_modules/@spexcode/spec-cli/dist/headless-controller.js +47 -0
  58. package/node_modules/@spexcode/spec-cli/dist/help.d.ts +10 -0
  59. package/node_modules/@spexcode/spec-cli/dist/help.js +574 -0
  60. package/node_modules/@spexcode/spec-cli/dist/hook-prompts.d.ts +18 -0
  61. package/node_modules/@spexcode/spec-cli/dist/hook-prompts.js +122 -0
  62. package/node_modules/@spexcode/spec-cli/dist/hooks.d.ts +1 -0
  63. package/{spec-cli/src/hooks.ts → node_modules/@spexcode/spec-cli/dist/hooks.js} +15 -15
  64. package/node_modules/@spexcode/spec-cli/dist/host-resources.d.ts +97 -0
  65. package/node_modules/@spexcode/spec-cli/dist/host-resources.js +795 -0
  66. package/node_modules/@spexcode/spec-cli/dist/host.d.ts +88 -0
  67. package/node_modules/@spexcode/spec-cli/dist/host.js +663 -0
  68. package/node_modules/@spexcode/spec-cli/dist/index.d.ts +1 -0
  69. package/node_modules/@spexcode/spec-cli/dist/index.js +899 -0
  70. package/node_modules/@spexcode/spec-cli/dist/init.d.ts +1 -0
  71. package/node_modules/@spexcode/spec-cli/dist/init.js +284 -0
  72. package/node_modules/@spexcode/spec-cli/dist/issues-cli.d.ts +6 -0
  73. package/node_modules/@spexcode/spec-cli/dist/issues-cli.js +334 -0
  74. package/node_modules/@spexcode/spec-cli/dist/issues.d.ts +69 -0
  75. package/node_modules/@spexcode/spec-cli/dist/issues.js +189 -0
  76. package/node_modules/@spexcode/spec-cli/dist/lint.d.ts +34 -0
  77. package/node_modules/@spexcode/spec-cli/dist/lint.js +476 -0
  78. package/node_modules/@spexcode/spec-cli/dist/listen.d.ts +7 -0
  79. package/{spec-cli/src/listen.ts → node_modules/@spexcode/spec-cli/dist/listen.js} +13 -17
  80. package/node_modules/@spexcode/spec-cli/dist/localIssues.d.ts +65 -0
  81. package/node_modules/@spexcode/spec-cli/dist/localIssues.js +582 -0
  82. package/node_modules/@spexcode/spec-cli/dist/login-page.d.ts +5 -0
  83. package/{spec-cli/src/login-page.ts → node_modules/@spexcode/spec-cli/dist/login-page.js} +7 -7
  84. package/node_modules/@spexcode/spec-cli/dist/loop-in.d.ts +23 -0
  85. package/{spec-cli/src/loop-in.ts → node_modules/@spexcode/spec-cli/dist/loop-in.js} +35 -45
  86. package/node_modules/@spexcode/spec-cli/dist/machine-peer.d.ts +69 -0
  87. package/node_modules/@spexcode/spec-cli/dist/machine-peer.js +603 -0
  88. package/node_modules/@spexcode/spec-cli/dist/materialize.d.ts +18 -0
  89. package/node_modules/@spexcode/spec-cli/dist/materialize.js +468 -0
  90. package/node_modules/@spexcode/spec-cli/dist/mentions.d.ts +50 -0
  91. package/node_modules/@spexcode/spec-cli/dist/mentions.js +117 -0
  92. package/node_modules/@spexcode/spec-cli/dist/opencode-headless.d.ts +4 -0
  93. package/node_modules/@spexcode/spec-cli/dist/opencode-headless.js +208 -0
  94. package/node_modules/@spexcode/spec-cli/dist/opencode.d.ts +3 -0
  95. package/{spec-cli/src/opencode.ts → node_modules/@spexcode/spec-cli/dist/opencode.js} +9 -13
  96. package/node_modules/@spexcode/spec-cli/dist/pi-harness.d.ts +3 -0
  97. package/{spec-cli/src/pi-harness.ts → node_modules/@spexcode/spec-cli/dist/pi-harness.js} +45 -40
  98. package/node_modules/@spexcode/spec-cli/dist/pi-headless.d.ts +25 -0
  99. package/node_modules/@spexcode/spec-cli/dist/pi-headless.js +196 -0
  100. package/node_modules/@spexcode/spec-cli/dist/plugin-harness.d.ts +21 -0
  101. package/node_modules/@spexcode/spec-cli/dist/plugin-harness.js +146 -0
  102. package/node_modules/@spexcode/spec-cli/dist/pty-bridge.d.ts +10 -0
  103. package/node_modules/@spexcode/spec-cli/dist/pty-bridge.js +404 -0
  104. package/node_modules/@spexcode/spec-cli/dist/pty-helper.d.mts +1 -0
  105. package/node_modules/@spexcode/spec-cli/dist/pty-helper.mjs +101 -0
  106. package/node_modules/@spexcode/spec-cli/dist/pty-native-helper.d.mts +2 -0
  107. package/node_modules/@spexcode/spec-cli/dist/pty-native-helper.mjs +23 -0
  108. package/node_modules/@spexcode/spec-cli/dist/public-graph.d.ts +46 -0
  109. package/node_modules/@spexcode/spec-cli/dist/public-graph.js +56 -0
  110. package/node_modules/@spexcode/spec-cli/dist/ranker.d.ts +15 -0
  111. package/node_modules/@spexcode/spec-cli/dist/ranker.js +188 -0
  112. package/node_modules/@spexcode/spec-cli/dist/reaper.d.ts +6 -0
  113. package/node_modules/@spexcode/spec-cli/dist/reaper.js +81 -0
  114. package/node_modules/@spexcode/spec-cli/dist/reviews.d.ts +189 -0
  115. package/node_modules/@spexcode/spec-cli/dist/reviews.js +350 -0
  116. package/node_modules/@spexcode/spec-cli/dist/runtime-guard.d.ts +6 -0
  117. package/node_modules/@spexcode/spec-cli/dist/runtime-guard.js +37 -0
  118. package/node_modules/@spexcode/spec-cli/dist/runtime-ownership.d.ts +21 -0
  119. package/node_modules/@spexcode/spec-cli/dist/runtime-ownership.js +84 -0
  120. package/node_modules/@spexcode/spec-cli/dist/search.bench.d.mts +1 -0
  121. package/node_modules/@spexcode/spec-cli/dist/search.bench.mjs +75 -0
  122. package/node_modules/@spexcode/spec-cli/dist/search.d.ts +20 -0
  123. package/node_modules/@spexcode/spec-cli/dist/search.js +61 -0
  124. package/node_modules/@spexcode/spec-cli/dist/session-cursors.d.ts +14 -0
  125. package/node_modules/@spexcode/spec-cli/dist/session-cursors.js +82 -0
  126. package/node_modules/@spexcode/spec-cli/dist/session-declarations.d.ts +13 -0
  127. package/node_modules/@spexcode/spec-cli/dist/session-declarations.js +126 -0
  128. package/node_modules/@spexcode/spec-cli/dist/session-execution.d.ts +10 -0
  129. package/node_modules/@spexcode/spec-cli/dist/session-execution.js +70 -0
  130. package/node_modules/@spexcode/spec-cli/dist/session-files.d.ts +28 -0
  131. package/node_modules/@spexcode/spec-cli/dist/session-files.js +130 -0
  132. package/node_modules/@spexcode/spec-cli/dist/session-follow.d.ts +31 -0
  133. package/node_modules/@spexcode/spec-cli/dist/session-follow.js +179 -0
  134. package/node_modules/@spexcode/spec-cli/dist/session-reparent.d.ts +10 -0
  135. package/node_modules/@spexcode/spec-cli/dist/session-reparent.js +33 -0
  136. package/node_modules/@spexcode/spec-cli/dist/session-timeline.d.ts +51 -0
  137. package/node_modules/@spexcode/spec-cli/dist/session-timeline.js +233 -0
  138. package/node_modules/@spexcode/spec-cli/dist/session-web.d.ts +24 -0
  139. package/node_modules/@spexcode/spec-cli/dist/session-web.js +141 -0
  140. package/node_modules/@spexcode/spec-cli/dist/sessions.d.ts +412 -0
  141. package/node_modules/@spexcode/spec-cli/dist/sessions.js +4239 -0
  142. package/node_modules/@spexcode/spec-cli/dist/sh.d.ts +1 -0
  143. package/node_modules/@spexcode/spec-cli/dist/sh.js +3 -0
  144. package/node_modules/@spexcode/spec-cli/dist/shim-runtime.d.ts +1 -0
  145. package/{spec-cli/src/shim-runtime.ts → node_modules/@spexcode/spec-cli/dist/shim-runtime.js} +3 -4
  146. package/node_modules/@spexcode/spec-cli/dist/slash-commands.d.ts +9 -0
  147. package/node_modules/@spexcode/spec-cli/dist/slash-commands.js +307 -0
  148. package/node_modules/@spexcode/spec-cli/dist/source-files.d.ts +9 -0
  149. package/node_modules/@spexcode/spec-cli/dist/source-files.js +113 -0
  150. package/node_modules/@spexcode/spec-cli/dist/supervise.d.ts +1 -0
  151. package/node_modules/@spexcode/spec-cli/dist/supervise.js +308 -0
  152. package/node_modules/@spexcode/spec-cli/dist/tree.d.ts +25 -0
  153. package/node_modules/@spexcode/spec-cli/dist/tree.js +98 -0
  154. package/node_modules/@spexcode/spec-cli/dist/tsx-bin.d.ts +3 -0
  155. package/node_modules/@spexcode/spec-cli/dist/tsx-bin.js +41 -0
  156. package/node_modules/@spexcode/spec-cli/dist/uninstall.d.ts +3 -0
  157. package/node_modules/@spexcode/spec-cli/dist/uninstall.js +177 -0
  158. package/node_modules/@spexcode/spec-cli/dist/uploads.d.ts +36 -0
  159. package/node_modules/@spexcode/spec-cli/dist/uploads.js +243 -0
  160. package/node_modules/@spexcode/spec-cli/dist/worktree-sources.d.ts +1 -0
  161. package/node_modules/@spexcode/spec-cli/dist/worktree-sources.js +47 -0
  162. package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/dispatch.sh +5 -5
  163. package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/harness.sh +27 -7
  164. package/node_modules/@spexcode/spec-cli/package.json +47 -0
  165. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/commands/supervisor/spec.md +8 -0
  166. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/core/comment-altitude/spec.md +9 -0
  167. package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-first/spec-first.sh +1 -1
  168. package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-of-file/spec-of-file.sh +1 -0
  169. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/core/spec.md +22 -0
  170. package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/stop-gate/spec.md +2 -2
  171. package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/stop-gate/stop-gate.sh +31 -29
  172. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/prompts/atomic-landing/spec.md +15 -0
  173. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/prompts/forge-link/spec.md +10 -0
  174. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/prompts/memory-hygiene/spec.md +13 -0
  175. package/node_modules/@spexcode/spec-cli/templates/spec/project/.plugins/prompts/reproduce-before-fix/spec.md +12 -0
  176. package/node_modules/@spexcode/spec-core/dist/anchors.d.ts +94 -0
  177. package/node_modules/@spexcode/spec-core/dist/anchors.js +730 -0
  178. package/node_modules/@spexcode/spec-core/dist/git.d.ts +166 -0
  179. package/node_modules/@spexcode/spec-core/dist/git.js +2736 -0
  180. package/node_modules/@spexcode/spec-core/dist/graph-delta.d.ts +44 -0
  181. package/node_modules/@spexcode/spec-core/dist/graph-delta.js +72 -0
  182. package/node_modules/@spexcode/spec-core/dist/graph.d.ts +34 -0
  183. package/node_modules/@spexcode/spec-core/dist/graph.js +237 -0
  184. package/node_modules/@spexcode/spec-core/dist/graphDelta.d.ts +3 -0
  185. package/node_modules/@spexcode/spec-core/dist/graphDelta.js +13 -0
  186. package/node_modules/@spexcode/spec-core/dist/harness-identity.d.ts +31 -0
  187. package/node_modules/@spexcode/spec-core/dist/harness-identity.js +20 -0
  188. package/node_modules/@spexcode/spec-core/dist/identity-presets.d.ts +152 -0
  189. package/node_modules/@spexcode/spec-core/dist/identity-presets.js +132 -0
  190. package/node_modules/@spexcode/spec-core/dist/index.d.ts +45 -0
  191. package/node_modules/@spexcode/spec-core/dist/index.js +19 -0
  192. package/node_modules/@spexcode/spec-core/dist/layout.d.ts +183 -0
  193. package/node_modules/@spexcode/spec-core/dist/layout.js +548 -0
  194. package/node_modules/@spexcode/spec-core/dist/process-identity.d.ts +37 -0
  195. package/node_modules/@spexcode/spec-core/dist/process-identity.js +214 -0
  196. package/node_modules/@spexcode/spec-core/dist/project-identity.d.ts +12 -0
  197. package/node_modules/@spexcode/spec-core/dist/project-identity.js +71 -0
  198. package/node_modules/@spexcode/spec-core/dist/project-store.d.ts +3 -0
  199. package/node_modules/@spexcode/spec-core/dist/project-store.js +14 -0
  200. package/node_modules/@spexcode/spec-core/dist/resilience.d.ts +2 -0
  201. package/node_modules/@spexcode/spec-core/dist/resilience.js +40 -0
  202. package/node_modules/@spexcode/spec-core/dist/review/index.d.ts +3 -0
  203. package/node_modules/@spexcode/spec-core/dist/review/index.js +5 -0
  204. package/node_modules/@spexcode/spec-core/dist/review/reviewFilters.d.ts +77 -0
  205. package/node_modules/@spexcode/spec-core/dist/review/reviewFilters.js +308 -0
  206. package/node_modules/@spexcode/spec-core/dist/review/reviewQuery.d.ts +66 -0
  207. package/node_modules/@spexcode/spec-core/dist/review/reviewQuery.js +180 -0
  208. package/node_modules/@spexcode/spec-core/dist/review/session.d.ts +4 -0
  209. package/node_modules/@spexcode/spec-core/dist/review/session.js +8 -0
  210. package/node_modules/@spexcode/spec-core/dist/reviewSnapshot.d.ts +15 -0
  211. package/node_modules/@spexcode/spec-core/dist/reviewSnapshot.js +12 -0
  212. package/node_modules/@spexcode/spec-core/dist/root-lru.d.ts +4 -0
  213. package/{spec-cli/src/root-lru.ts → node_modules/@spexcode/spec-core/dist/root-lru.js} +26 -30
  214. package/node_modules/@spexcode/spec-core/dist/specs.d.ts +117 -0
  215. package/node_modules/@spexcode/spec-core/dist/specs.js +489 -0
  216. package/node_modules/@spexcode/spec-core/package.json +28 -0
  217. package/node_modules/@spexcode/spec-eval/dist/cache.d.ts +10 -0
  218. package/node_modules/@spexcode/spec-eval/dist/cache.js +50 -0
  219. package/node_modules/@spexcode/spec-eval/dist/cli.d.ts +22 -0
  220. package/node_modules/@spexcode/spec-eval/dist/cli.js +981 -0
  221. package/node_modules/@spexcode/spec-eval/dist/evaltab.d.ts +98 -0
  222. package/node_modules/@spexcode/spec-eval/dist/evaltab.js +176 -0
  223. package/node_modules/@spexcode/spec-eval/dist/filing.d.ts +16 -0
  224. package/node_modules/@spexcode/spec-eval/dist/filing.js +36 -0
  225. package/node_modules/@spexcode/spec-eval/dist/freshness.d.ts +48 -0
  226. package/node_modules/@spexcode/spec-eval/dist/freshness.js +799 -0
  227. package/node_modules/@spexcode/spec-eval/dist/host.d.ts +46 -0
  228. package/node_modules/@spexcode/spec-eval/dist/host.js +53 -0
  229. package/node_modules/@spexcode/spec-eval/dist/humanok.d.ts +11 -0
  230. package/node_modules/@spexcode/spec-eval/dist/humanok.js +27 -0
  231. package/node_modules/@spexcode/spec-eval/dist/index.d.ts +4 -0
  232. package/node_modules/@spexcode/spec-eval/dist/index.js +4 -0
  233. package/node_modules/@spexcode/spec-eval/dist/remarks.d.ts +31 -0
  234. package/node_modules/@spexcode/spec-eval/dist/remarks.js +1 -0
  235. package/node_modules/@spexcode/spec-eval/dist/scenariofresh.d.ts +13 -0
  236. package/node_modules/@spexcode/spec-eval/dist/scenariofresh.js +303 -0
  237. package/node_modules/@spexcode/spec-eval/dist/scenarios.d.ts +99 -0
  238. package/node_modules/@spexcode/spec-eval/dist/scenarios.js +650 -0
  239. package/node_modules/@spexcode/spec-eval/dist/sessioneval.d.ts +307 -0
  240. package/node_modules/@spexcode/spec-eval/dist/sessioneval.js +1883 -0
  241. package/node_modules/@spexcode/spec-eval/dist/sidecar.d.ts +55 -0
  242. package/node_modules/@spexcode/spec-eval/dist/sidecar.js +82 -0
  243. package/node_modules/@spexcode/spec-eval/dist/timeline.d.ts +25 -0
  244. package/node_modules/@spexcode/spec-eval/dist/timeline.js +65 -0
  245. package/node_modules/@spexcode/spec-eval/dist/ui-path.d.ts +1 -0
  246. package/node_modules/@spexcode/spec-eval/dist/ui-path.js +2 -0
  247. package/node_modules/@spexcode/spec-eval/package.json +36 -0
  248. package/node_modules/@spexcode/spec-forge/dist/cache.d.ts +29 -0
  249. package/node_modules/@spexcode/spec-forge/dist/cache.js +59 -0
  250. package/node_modules/@spexcode/spec-forge/dist/cli.d.ts +1 -0
  251. package/node_modules/@spexcode/spec-forge/dist/cli.js +100 -0
  252. package/node_modules/@spexcode/spec-forge/dist/drivers/github.d.ts +2 -0
  253. package/node_modules/@spexcode/spec-forge/dist/drivers/github.js +116 -0
  254. package/node_modules/@spexcode/spec-forge/dist/drivers/gitlab.d.ts +7 -0
  255. package/node_modules/@spexcode/spec-forge/dist/drivers/gitlab.js +144 -0
  256. package/node_modules/@spexcode/spec-forge/dist/drivers.d.ts +10 -0
  257. package/node_modules/@spexcode/spec-forge/dist/drivers.js +83 -0
  258. package/node_modules/@spexcode/spec-forge/dist/index.d.ts +4 -0
  259. package/node_modules/@spexcode/spec-forge/dist/index.js +4 -0
  260. package/node_modules/@spexcode/spec-forge/dist/links.d.ts +15 -0
  261. package/node_modules/@spexcode/spec-forge/dist/links.js +65 -0
  262. package/node_modules/@spexcode/spec-forge/dist/needs-eval.d.ts +10 -0
  263. package/node_modules/@spexcode/spec-forge/dist/needs-eval.js +20 -0
  264. package/node_modules/@spexcode/spec-forge/dist/port.d.ts +53 -0
  265. package/node_modules/@spexcode/spec-forge/dist/port.js +1 -0
  266. package/node_modules/@spexcode/spec-forge/dist/resident.d.ts +7 -0
  267. package/node_modules/@spexcode/spec-forge/dist/resident.js +43 -0
  268. package/node_modules/@spexcode/spec-forge/package.json +32 -0
  269. package/package.json +33 -19
  270. package/spec-cli/bin/spex.mjs +0 -69
  271. package/spec-cli/src/anchors.ts +0 -706
  272. package/spec-cli/src/attach.ts +0 -43
  273. package/spec-cli/src/claude-headless.ts +0 -321
  274. package/spec-cli/src/cli.ts +0 -1115
  275. package/spec-cli/src/client.ts +0 -315
  276. package/spec-cli/src/cockpit.ts +0 -43
  277. package/spec-cli/src/codex-runtime-generations.ts +0 -646
  278. package/spec-cli/src/commit-surgery.ts +0 -68
  279. package/spec-cli/src/contract-filter.ts +0 -202
  280. package/spec-cli/src/delivery-queue.ts +0 -107
  281. package/spec-cli/src/doctor.ts +0 -516
  282. package/spec-cli/src/file-write.ts +0 -22
  283. package/spec-cli/src/gateway-auth.ts +0 -181
  284. package/spec-cli/src/gateway-hub.ts +0 -356
  285. package/spec-cli/src/gateway.ts +0 -368
  286. package/spec-cli/src/git.ts +0 -2180
  287. package/spec-cli/src/graph.ts +0 -221
  288. package/spec-cli/src/graphCache.ts +0 -641
  289. package/spec-cli/src/graphDelta.ts +0 -77
  290. package/spec-cli/src/graphStream.ts +0 -1019
  291. package/spec-cli/src/harness-select.ts +0 -77
  292. package/spec-cli/src/harness.ts +0 -2747
  293. package/spec-cli/src/headless-controller.ts +0 -63
  294. package/spec-cli/src/help.ts +0 -480
  295. package/spec-cli/src/host-resources.ts +0 -707
  296. package/spec-cli/src/host.ts +0 -611
  297. package/spec-cli/src/identity-presets.d.ts +0 -13
  298. package/spec-cli/src/identity-presets.js +0 -128
  299. package/spec-cli/src/index.ts +0 -730
  300. package/spec-cli/src/init.ts +0 -258
  301. package/spec-cli/src/issues-cli.ts +0 -276
  302. package/spec-cli/src/issues.ts +0 -237
  303. package/spec-cli/src/layout.ts +0 -557
  304. package/spec-cli/src/lint.ts +0 -458
  305. package/spec-cli/src/localIssues.ts +0 -538
  306. package/spec-cli/src/materialize.ts +0 -412
  307. package/spec-cli/src/mentions.ts +0 -81
  308. package/spec-cli/src/opencode-headless.ts +0 -205
  309. package/spec-cli/src/pi-headless.ts +0 -153
  310. package/spec-cli/src/plugin-harness.ts +0 -157
  311. package/spec-cli/src/process-identity.ts +0 -207
  312. package/spec-cli/src/project-identity.ts +0 -73
  313. package/spec-cli/src/project-store.ts +0 -17
  314. package/spec-cli/src/pty-bridge.ts +0 -396
  315. package/spec-cli/src/pty-helper.mjs +0 -96
  316. package/spec-cli/src/pty-native-helper.mjs +0 -22
  317. package/spec-cli/src/ranker.ts +0 -191
  318. package/spec-cli/src/reaper.ts +0 -125
  319. package/spec-cli/src/resilience.ts +0 -41
  320. package/spec-cli/src/reviewSnapshot.ts +0 -28
  321. package/spec-cli/src/reviews.ts +0 -405
  322. package/spec-cli/src/runtime-guard.ts +0 -35
  323. package/spec-cli/src/runtime-ownership.ts +0 -88
  324. package/spec-cli/src/search.bench.mjs +0 -80
  325. package/spec-cli/src/search.ts +0 -63
  326. package/spec-cli/src/session-cursors.ts +0 -91
  327. package/spec-cli/src/session-follow.ts +0 -182
  328. package/spec-cli/src/session-timeline.ts +0 -98
  329. package/spec-cli/src/sessions.ts +0 -3403
  330. package/spec-cli/src/sh.ts +0 -3
  331. package/spec-cli/src/slash-commands.ts +0 -318
  332. package/spec-cli/src/source-files.ts +0 -104
  333. package/spec-cli/src/specs.ts +0 -498
  334. package/spec-cli/src/supervise.ts +0 -245
  335. package/spec-cli/src/tree.ts +0 -118
  336. package/spec-cli/src/tsx-bin.ts +0 -18
  337. package/spec-cli/src/uninstall.ts +0 -171
  338. package/spec-cli/src/uploads.ts +0 -253
  339. package/spec-cli/src/worktree-sources.ts +0 -42
  340. package/spec-cli/templates/spec/project/.plugins/commands/supervisor/spec.md +0 -8
  341. package/spec-cli/templates/spec/project/.plugins/core/comment-altitude/spec.md +0 -28
  342. package/spec-cli/templates/spec/project/.plugins/core/spec.md +0 -23
  343. package/spec-cli/templates/spec/project/.plugins/prompts/atomic-landing/spec.md +0 -32
  344. package/spec-cli/templates/spec/project/.plugins/prompts/forge-link/spec.md +0 -9
  345. package/spec-cli/templates/spec/project/.plugins/prompts/memory-hygiene/spec.md +0 -15
  346. package/spec-cli/templates/spec/project/.plugins/prompts/reproduce-before-fix/spec.md +0 -18
  347. package/spec-dashboard/dist/assets/App-F9uaAVcH.js +0 -2
  348. package/spec-dashboard/dist/assets/Dashboard-Ba_jhxp1.js +0 -27
  349. package/spec-dashboard/dist/assets/Dashboard-C5ap-Sga.css +0 -1
  350. package/spec-dashboard/dist/assets/EvalsPage-FixoOg_n.js +0 -2
  351. package/spec-dashboard/dist/assets/IssuesPage-CuKLFhH3.js +0 -1
  352. package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  353. package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  354. package/spec-dashboard/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  355. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  356. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  357. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  358. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  359. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  360. package/spec-dashboard/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  361. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  362. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  363. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  364. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  365. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  366. package/spec-dashboard/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  367. package/spec-dashboard/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  368. package/spec-dashboard/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  369. package/spec-dashboard/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  370. package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  371. package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  372. package/spec-dashboard/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  373. package/spec-dashboard/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  374. package/spec-dashboard/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  375. package/spec-dashboard/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  376. package/spec-dashboard/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  377. package/spec-dashboard/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  378. package/spec-dashboard/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  379. package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  380. package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  381. package/spec-dashboard/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  382. package/spec-dashboard/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  383. package/spec-dashboard/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  384. package/spec-dashboard/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  385. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  386. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  387. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  388. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  389. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  390. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  391. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  392. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  393. package/spec-dashboard/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  394. package/spec-dashboard/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  395. package/spec-dashboard/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  396. package/spec-dashboard/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  397. package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  398. package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  399. package/spec-dashboard/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  400. package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  401. package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  402. package/spec-dashboard/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  403. package/spec-dashboard/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  404. package/spec-dashboard/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  405. package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  406. package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  407. package/spec-dashboard/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  408. package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  409. package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  410. package/spec-dashboard/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  411. package/spec-dashboard/dist/assets/MobileApp-CHgEHORJ.js +0 -2
  412. package/spec-dashboard/dist/assets/Modal-CQgYymmr.js +0 -1
  413. package/spec-dashboard/dist/assets/PageScroll-hT7UTLvD.js +0 -1
  414. package/spec-dashboard/dist/assets/ProjectsPage-CtXxakF9.js +0 -1
  415. package/spec-dashboard/dist/assets/SessionInterface-6GBZ9nXN.css +0 -32
  416. package/spec-dashboard/dist/assets/SessionInterface-Bpie-9fs.js +0 -39
  417. package/spec-dashboard/dist/assets/SessionWindow-CixDi4PI.js +0 -1
  418. package/spec-dashboard/dist/assets/Settings-C2MsucfE.js +0 -1
  419. package/spec-dashboard/dist/assets/Thread-C6Go8HRh.js +0 -13
  420. package/spec-dashboard/dist/assets/bindings-BC9vqpYU.js +0 -1
  421. package/spec-dashboard/dist/assets/data-B-RQmit6.js +0 -1
  422. package/spec-dashboard/dist/assets/index-CsI8DElI.css +0 -1
  423. package/spec-dashboard/dist/assets/index-DrVao0Ep.js +0 -41
  424. package/spec-dashboard/dist/assets/launch-BBH02b1v.js +0 -276
  425. package/spec-dashboard/dist/assets/launch-Cp579UoJ.css +0 -1
  426. package/spec-dashboard/dist/assets/terminalFont-C6oGNKrf.js +0 -1
  427. package/spec-dashboard/dist/index.html +0 -29
  428. package/spec-dashboard/src/reviewFilters.js +0 -322
  429. package/spec-dashboard/src/reviewQuery.js +0 -174
  430. package/spec-dashboard/src/session.js +0 -199
  431. package/spec-eval/src/cache.ts +0 -57
  432. package/spec-eval/src/cli.ts +0 -889
  433. package/spec-eval/src/evaltab.ts +0 -262
  434. package/spec-eval/src/filing.ts +0 -39
  435. package/spec-eval/src/freshness.ts +0 -557
  436. package/spec-eval/src/humanok.ts +0 -28
  437. package/spec-eval/src/scenariofresh.ts +0 -244
  438. package/spec-eval/src/scenarios.ts +0 -672
  439. package/spec-eval/src/sessioneval.ts +0 -2226
  440. package/spec-eval/src/sidecar.ts +0 -93
  441. package/spec-eval/src/timeline.ts +0 -54
  442. package/spec-forge/src/__fixtures__/github-forge.json +0 -63
  443. package/spec-forge/src/cache.ts +0 -66
  444. package/spec-forge/src/cli.ts +0 -99
  445. package/spec-forge/src/drivers/github.ts +0 -132
  446. package/spec-forge/src/drivers/gitlab.ts +0 -153
  447. package/spec-forge/src/drivers.ts +0 -73
  448. package/spec-forge/src/links.ts +0 -72
  449. package/spec-forge/src/needs-eval.ts +0 -29
  450. package/spec-forge/src/port.ts +0 -36
  451. package/spec-forge/src/resident.ts +0 -46
  452. /package/{spec-cli → node_modules/@spexcode/spec-cli}/README.md +0 -0
  453. /package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/compat/mark-active-0.5.2-eef1.fixture +0 -0
  454. /package/{spec-cli → node_modules/@spexcode/spec-cli}/hooks/compat/mark-active-sed-v0.fixture +0 -0
  455. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/commit-msg +0 -0
  456. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/post-checkout +0 -0
  457. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/post-merge +0 -0
  458. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/pre-commit +0 -0
  459. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/prepare-commit-msg +0 -0
  460. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/hooks/reference-transaction +0 -0
  461. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/extract/spec.md +0 -0
  462. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/regroup/spec.md +0 -0
  463. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/rename/spec.md +0 -0
  464. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/spec.md +0 -0
  465. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/commands/tidy/spec.md +0 -0
  466. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/idle/idle.sh +0 -0
  467. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/idle/spec.md +0 -0
  468. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/mark-active/mark-active.sh +0 -0
  469. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/mark-active/spec.md +0 -0
  470. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/session-fail/fail.sh +0 -0
  471. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/session-fail/spec.md +0 -0
  472. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-first/spec.md +0 -0
  473. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/core/spec-of-file/spec.md +0 -0
  474. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/prompts/spec.md +0 -0
  475. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/skills/distill/digest.mjs +0 -0
  476. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/skills/distill/spec.md +0 -0
  477. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/skills/spec.md +0 -0
  478. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/.plugins/spec.md +0 -0
  479. /package/{spec-cli → node_modules/@spexcode/spec-cli}/templates/spec/project/spec.md +0 -0
  480. /package/{spec-cli → node_modules/@spexcode/spec-core}/templates/spexcode.json +0 -0
@@ -1 +0,0 @@
1
- .react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}
@@ -1,2 +0,0 @@
1
- import{u as U,E as re,c as J,j as s,s as Cs,I as Z,r as c,d as ke,e as be,f as Ts,g as es,n as Fs,q as As,h as Ps}from"./index-DrVao0Ep.js";import{E as ss,R as ds,a as q,L as Os,S as Is,F as ns,s as ts,k as as,e as Ks,r as zs,p as Bs,b as _s,c as Te,d as W,f as G,O as qs,g as Us,D as Fe,m as we,h as Vs,i as ls,u as Hs,j as Xs,l as Ys,n as Qs,o as ye,q as Gs,t as Ae,v as hs,w as Js}from"./Thread-C6Go8HRh.js";import{b as Zs,c as Ds,d as Ws,e as en}from"./data-B-RQmit6.js";import"./PageScroll-hT7UTLvD.js";const rs={video:"vid",image:"img",transcript:"txt",data:"data"},sn=["is","state","verdict","freshness","evidence","node","filer","session","scope"],vs=e=>`eval:${e.node}·${e.scenario}`;function nn({e}){const a=U(),r=e.humanOk&&a("evalsFeed.okdTip",{by:e.humanOk.by,at:new Date(e.humanOk.ts).toLocaleString()});return s.jsx(ds,{state:s.jsx(q,{kind:"eval",state:e.state}),title:e.scenario,meta:s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"ef-node",style:{color:`hsl(${e.hue??210} 60% 70%)`},children:e.node}),e.by&&s.jsx("span",{children:a("evalsFeed.filedBy",{by:e.by})}),s.jsx("span",{children:a("evalsFeed.filedAt",{at:tn(e.ts)})})]}),aside:s.jsxs(s.Fragment,{children:[e.inSession&&s.jsx("span",{className:"rl-tag in-session",children:a("evalsFeed.sessionTag")}),as(e).some(i=>rs[i])&&s.jsx("span",{className:"rl-tag",children:as(e).map(i=>rs[i]).filter(Boolean).join("·")}),e.humanOk&&s.jsx("span",{role:"img",className:"ef-okd","data-tip":r,"aria-label":r,children:s.jsx(Z,{name:"check",size:11})})]})})}const tn=e=>{const a=Math.max(0,(Date.now()-new Date(e).getTime())/1e3);return a<3600?`${Math.max(1,Math.floor(a/60))}m`:a<86400?`${Math.floor(a/3600)}h`:`${Math.floor(a/86400)}d`},ee=(e,a,r,i=b=>b)=>{var b,v;return(((v=(b=e==null?void 0:e.facets)==null?void 0:b[a])==null?void 0:v.options)??[]).map(x=>({value:x.value,label:x.value===""?r:i(x.value)}))};function an({pageData:e,loading:a=!1,sessions:r=[],queryText:i="",onQueryText:b,hrefFor:v,notice:x=null,leading:m=null,error:j=null,empty:E=null,pagination:R=null}){var M,se,ie;const u=U(),d=String(i??"").trim()||re,p=(o,K)=>b(Cs(d,o,K)),L=Array.isArray(e==null?void 0:e.items)?e.items:[],N=((M=e==null?void 0:e.counts)==null?void 0:M.fail)||{},S=((se=e==null?void 0:e.counts)==null?void 0:se.pass)||{},P=((ie=e==null?void 0:e.counts)==null?void 0:ie.unmeasured)||0,y=o=>o>0?{text:`+${o} ${u("reviewList.freshness.stale")}`,compact:`+${o}`}:null,C=J(d,"verdict"),O=L.flatMap(o=>o.filterKind===ss.BLIND?[{key:`blind:${o.node}·${o.scenario}`,cls:"se-blind",content:s.jsx(ds,{state:s.jsx(q,{kind:"eval",state:"missing"}),title:o.scenario,meta:s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"ef-node",style:{color:`hsl(${o.hue??210} 60% 70%)`},children:o.node}),s.jsx("span",{children:u("sessionEval.unmeasured")})]})})}]:o.filterKind===ss.RESULT?[{key:vs(o),href:v(o),content:s.jsx(nn,{e:o})}]:[]),I={label:u("reviewList.facetReview"),value:J(d,"state"),options:ee(e,"review",u("reviewList.all"),o=>u(o==="reviewed"?"reviewList.reviewed":"reviewList.needsReview"))},f={label:u("reviewList.facetFreshness"),value:J(d,"freshness"),options:ee(e,"freshness",u("reviewList.all"),o=>u(`reviewList.freshness.${o}`))},T={label:u("reviewList.facetKind"),value:J(d,"evidence")||"all",options:ee(e,"kind",u("evalsFeed.kind.all"),o=>u(`evalsFeed.kind.${o}`))},B={label:u("reviewList.facetSession"),value:J(d,"session"),options:ee(e,"session",u("reviewList.all"),o=>u(o==="present"?"reviewList.sessionPresent":"reviewList.sessionMissing"))},_=J(d,"evidence");return s.jsx(Os,{notice:x,leading:m,error:j,loading:a,title:u("evalsFeed.title"),search:{value:String(i??"").trim()?i:re,onSubmit:b,placeholder:u("reviewList.searchEvals"),label:u("reviewList.search"),keys:sn,suggest:{node:ee(e,"node",u("reviewList.all")).filter(o=>o.value),filer:ee(e,"filer",u("reviewList.all")).filter(o=>o.value).map(({value:o})=>{const K=r.find(V=>V.id===o);return{value:o,label:K?ts(K):null}}),scope:r.map(o=>({value:o.id,label:ts(o)}))}},sections:[{key:"fail",label:s.jsx(q,{kind:"eval",state:"fail",title:u("reviewList.verdict.fail"),showLabel:!0}),count:N.fresh||0,countSuffix:y(N.stale||0),active:C==="fail",onSelect:()=>p("verdict",C==="fail"?"":"fail")},{key:"pass",label:s.jsx(q,{kind:"eval",state:"pass",title:u("reviewList.verdict.pass"),showLabel:!0}),count:S.fresh||0,countSuffix:y(S.stale||0),active:C==="pass",onSelect:()=>p("verdict",C==="pass"?"":"pass")},{key:"unmeasured",label:s.jsx(q,{kind:"eval",state:"missing",title:u("reviewList.verdict.unmeasured"),showLabel:!0}),count:P,active:C==="unmeasured",onSelect:()=>p("verdict",C==="unmeasured"?"":"unmeasured")}],sectionMode:"filters",facets:s.jsxs(s.Fragment,{children:[s.jsx(ns,{label:f.label,value:f.value,options:f.options,clearLabel:u("reviewList.all"),onChange:o=>p("freshness",o)}),s.jsx(ns,{label:T.label,value:T.value,options:T.options,onChange:o=>p("evidence",o==="all"?"":o)})]}),secondaryFilters:s.jsx(Is,{label:u("reviewList.filters"),clearLabel:u("reviewList.all"),groups:[{label:I.label,value:I.value,active:!!I.value,options:I.options,onChange:o=>p("state",o)},{label:B.label,value:B.value,active:!!B.value,options:B.options,onChange:o=>p("session",o)},{label:f.label,value:f.value,active:!!f.value,options:f.options,onChange:o=>p("freshness",o),mobileOnly:!0},{label:T.label,value:T.value,active:!!_,options:T.options,clearLabel:null,onChange:o=>p("evidence",o==="all"?"":o),mobileOnly:!0}]}),rows:O,pagination:R,empty:E||{hasData:((e==null?void 0:e.sourceTotal)??0)>0,dataset:u("evalsFeed.datasetEmpty"),filtered:u("evalsFeed.noMatches")}})}const ln=[{name:"ok",color:"green",when:e=>!e.okd&&e.isLatest,descKey:"annotator.cmd.okDesc"}];function rn(e,a){return ln.filter(r=>r.when(e)).map(r=>({...r,run:a[r.name]}))}function on(e,a){return(e||"").replace(/\{(\w+)\}/g,(r,i)=>a[i]!=null?String(a[i]):r)}const is=(e,a)=>{let r=null;for(const i of e)if(i.at<=a)r=i;else break;return r},cn=e=>{if(!e||!Array.isArray(e.events))return null;const a=e.v===1?"time":typeof e.axis=="string"?e.axis:"time",r=e.v===1?i=>i.tMs:i=>i.at;return{axis:a,events:e.events.map(i=>({at:r(i),step:i.step,...i.node?{node:i.node}:{}}))}},un=(e,a,r)=>e==="time"?we(a):e==="frame"?`#${a}`:e==="line"?`L${a}`:e==="index"?r?`${a}/${r}`:`${a}`:String(a);function os({events:e,axis:a,extent:r,activeStepIdx:i,onSeek:b}){return s.jsx("div",{className:"an-ruler",children:e.map((v,x)=>s.jsxs("button",{className:`an-step ${i===x?"on":""}`,onClick:()=>b(v.at),"data-tip":v.node?`→ ${v.node}`:void 0,children:[un(a,v.at,r)," ",v.step]},x))})}const xe=8;function dn({hidden:e,total:a,histIdx:r,onPick:i}){const b=U(),v=Hs(),x=b("annotator.abMore",{n:e.length});return s.jsxs("div",{className:"an-ab-more",ref:v.ref,children:[s.jsx(be,{icon:"ellipsis",size:14,className:"an-ab-morebtn",label:x,"aria-haspopup":"menu","aria-expanded":v.open,onClick:m=>v.toggle(m.currentTarget),onKeyDown:v.onTriggerKeyDown}),v.open&&s.jsx("div",{className:"rl-menu an-ab-menu",role:"menu","aria-label":x,ref:v.menuRef,onKeyDown:v.onMenuKeyDown,children:e.map(m=>{const j=Te(m);return s.jsxs("button",{type:"button",role:"menuitemradio","aria-checked":m.idx===r,tabIndex:-1,className:"rl-menu-item an-ab-menuitem",onFocus:v.onItemFocus,onClick:()=>{v.close(!0),i(m.idx)},children:[s.jsx(q,{kind:"eval",state:j,size:13}),s.jsxs("span",{className:"an-ab-menupos",children:[a-m.idx,"/",a]}),s.jsx("span",{className:"an-ab-menudate",children:new Date(m.ts).toLocaleString()})]},`${m.ts}-${m.idx}`)})})]})}function hn({entry:e,history:a,sourceKey:r="project",specs:i=[],sessions:b=[],onWrite:v,onOpenSession:x,onFocusNode:m=null,listHref:j=null,backHref:E=null,backLabel:R=null,queue:u={prev:[],next:[]}}){var Qe,Ge,Je,Ze,De,We;const d=U(),p=c.useRef(null),L=c.useRef(null),N=c.useRef(null),S=c.useRef(null),P=c.useRef(0),[y,C]=c.useState([]),[O,I]=c.useState("time"),[f,T]=c.useState(null),[B,_]=c.useState(""),[M,se]=c.useState(!1),[ie,o]=c.useState(null),K=c.useRef(null),V=c.useRef(null),ne=c.useRef(null),ge=c.useRef(0),[fs,Pe]=c.useState(0),[je,Oe]=c.useState(-1),[Ie,Ke]=c.useState(null),[oe,Ee]=c.useState(!1),[ze,Le]=c.useState(!1),[Se,Me]=c.useState(null),[ce,$e]=c.useState(null),[F,Be]=c.useState(null),[A,te]=c.useState(0),w=F&&F[A]||e,ms=`${A}:${w.ts||w.codeSha||w.blob||"reading"}`,xs=`${r}·${e.node}·${e.scenario}·${ms}`,[ps,bs]=c.useState([]);c.useEffect(()=>{let n=!0;return Zs().then(t=>{n&&Array.isArray(t)&&bs(t)}).catch(()=>{}),()=>{n=!1}},[]),c.useEffect(()=>{T(null),_(""),C([]),o(null),te(0),Be(null),Be(Array.isArray(a)?a:[e])},[e.node,e.scenario,e.ts,e.blob,(Qe=e.humanOk)==null?void 0:Qe.ts,a]),c.useEffect(()=>{T(null),o(null)},[A]);const ae=Ks(w),H=ae.find(n=>n.kind==="video"&&n.state==="present"),ue=ae.filter(n=>n.kind==="image"),ws=ae.filter(n=>n.kind!=="video"&&n.kind!=="image"),X=!!H,de=e.thread??null,Ne=c.useMemo(()=>((de==null?void 0:de.replies)??[]).filter(n=>n.rid!==void 0),[de]),_e=F&&((Ge=F[0])==null?void 0:Ge.by)||e.by||null,z=c.useMemo(()=>Ne.map((n,t)=>{const l=zs(Bs(n.body),y);return l&&l.seekable?{i:t,tMs:l.tMs,step:l.step,label:l.label}:null}).filter(Boolean).sort((n,t)=>n.tMs-t.tMs),[Ne,y]),qe=c.useRef(y);qe.current=y;const Ue=c.useRef(z);Ue.current=z;const he=c.useCallback(()=>{const n=ge.current,t=qe.current;let l=-1;for(let g=0;g<t.length&&t[g].at<=n;g++)l=g;Oe(g=>g===l?g:l);let h=null;for(const g of Ue.current)if(g.tMs<=n)h=g.i;else break;Ke(g=>g===h?g:h)},[]);c.useEffect(()=>{he()},[z,y,he]),c.useEffect(()=>{ge.current=0,K.current&&(K.current.style.width="0%"),V.current&&(V.current.style.left="0%"),ne.current&&(ne.current.textContent=""),Oe(-1),Ke(null),Pe(0),Ee(!1),Le(!1),Me(null),$e(null)},[e.blob,e.scenario,e.node]),c.useEffect(()=>{if(C([]),I("time"),!w.timelineBlob)return;let n=!0;return fetch(ke(`/api/evidence/${w.timelineBlob}`)).then(t=>t.ok?t.json():null).then(t=>{const l=n&&cn(t);l&&(C(l.events),I(l.axis))}).catch(()=>{}),()=>{n=!1}},[w.timelineBlob]),c.useEffect(()=>{const n=p.current;if(!n)return;const t=()=>{const k=Math.round((n.currentTime||0)*1e3),$=Math.round((n.duration||0)*1e3);ge.current=k;const Q=$?k/$*100:0;K.current&&(K.current.style.width=`${Q}%`),V.current&&(V.current.style.left=`${Q}%`),ne.current&&(ne.current.textContent=`${we(k)} / ${we($)}`),he()},l=()=>{Pe(n.duration||0),t()},h=()=>Ee(!0),g=()=>Ee(!1);return n.addEventListener("timeupdate",t),n.addEventListener("seeked",t),n.addEventListener("loadedmetadata",l),n.addEventListener("durationchange",l),n.addEventListener("play",h),n.addEventListener("pause",g),l(),()=>{n.removeEventListener("timeupdate",t),n.removeEventListener("seeked",t),n.removeEventListener("loadedmetadata",l),n.removeEventListener("durationchange",l),n.removeEventListener("play",h),n.removeEventListener("pause",g)}},[H==null?void 0:H.hash,e.node,e.scenario,A,he]);const Y=Math.round(fs*1e3),ve=y[je]||null,Ve=O==="time"?Y:O==="frame"?ue.length:O==="index"?y.length:0,D=c.useCallback(n=>{const t=p.current;t&&(t.currentTime=n/1e3)},[]),fe=c.useCallback(()=>{const n=p.current;n&&(n.paused?n.play():n.pause())},[]),He=(n,t)=>{$e(n),t!=null&&D(t)},me=c.useCallback(async n=>{const t=p.current;if(!(t!=null&&t.videoWidth))return null;se(!0),_(d("annotator.capturing"));try{t.seeking&&await new Promise($=>t.addEventListener("seeked",$,{once:!0}));const l=document.createElement("canvas");l.width=t.videoWidth,l.height=t.videoHeight;const h=l.getContext("2d");h.drawImage(t,0,0,l.width,l.height),n&&(h.strokeStyle="#ff9a3c",h.lineWidth=Math.max(2,l.width/300),h.strokeRect(n.x/100*l.width,n.y/100*l.height,n.w/100*l.width,n.h/100*l.height));const g=await new Promise($=>l.toBlob($,"image/png")),{hash:k}=await Ds(g);if(!k)throw new Error("no hash");return _(""),k}catch{return _(d("annotator.failed")),null}finally{se(!1)}},[d]),ks=c.useCallback(async()=>{var l;const n=p.current;if(!n)return null;n.pause();const t=Math.round((n.currentTime??0)*1e3);return{tMs:t,step:((l=is(y,t))==null?void 0:l.step)??null,frame:await me(null)}},[y,me]),Re=c.useCallback(async n=>{const t=p.current;if(!t)return;t.pause();const l=Math.round((t.currentTime||0)*1e3),h=is(y,l),g=await me(n),k=[_s(l,h==null?void 0:h.step)];g&&k.push(`![frame](/api/evidence/${g})`),h!=null&&h.node&&h.node!==e.node&&k.push(`re: [[${h.node}]]`),k.push(""),o({seq:++P.current,body:k.join(`
2
- `)})},[y,e.node,me]),Ce=c.useCallback(n=>{var h;if(!z.length)return;let t=z.findIndex(g=>g.i===ce);if(t<0){const g=Math.round((((h=p.current)==null?void 0:h.currentTime)||0)*1e3);t=z.reduce((k,$,Q)=>$.tMs<=g?Q:k,-1)}t=Math.min(z.length-1,Math.max(0,t+n));const l=z[t];$e(l.i),D(l.tMs)},[z,ce,D]);c.useEffect(()=>{if(!X)return;const n=t=>{const l=document.activeElement;if(l&&(l.tagName==="INPUT"||l.tagName==="TEXTAREA"||l.tagName==="SELECT"||l.isContentEditable))return;const h=p.current;h&&(t.key===" "?(t.preventDefault(),fe()):t.key==="ArrowRight"?(t.preventDefault(),h.currentTime=Math.min(h.duration||h.currentTime,h.currentTime+(t.shiftKey?1:5))):t.key==="ArrowLeft"?(t.preventDefault(),h.currentTime=Math.max(0,h.currentTime-(t.shiftKey?1:5))):t.key===","?(t.preventDefault(),h.currentTime=Math.max(0,h.currentTime-1/30)):t.key==="."?(t.preventDefault(),h.duration&&(h.currentTime=Math.min(h.duration,h.currentTime+1/30))):t.key==="ArrowDown"?(t.preventDefault(),Ce(1)):t.key==="ArrowUp"?(t.preventDefault(),Ce(-1)):(t.key==="a"||t.key==="A")&&(t.preventDefault(),Re(null)))};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[X,fe,Ce,Re]);const Xe=n=>{var h;const t=(h=N.current)==null?void 0:h.getBoundingClientRect(),l=p.current;!t||!t.width||!l||!l.duration||(l.currentTime=Math.min(1,Math.max(0,(n-t.left)/t.width))*l.duration)},ys=n=>{n.preventDefault(),Le(!0),Xe(n.clientX)},gs=n=>{var l;const t=(l=N.current)==null?void 0:l.getBoundingClientRect();t!=null&&t.width&&Me(Math.min(100,Math.max(0,(n.clientX-t.left)/t.width*100)))};c.useEffect(()=>{if(!ze)return;const n=l=>Xe(l.clientX),t=()=>Le(!1);return window.addEventListener("mousemove",n),window.addEventListener("mouseup",t),()=>{window.removeEventListener("mousemove",n),window.removeEventListener("mouseup",t)}},[ze]);const Ye=n=>{const t=L.current.getBoundingClientRect();return{x:(n.clientX-t.left)/t.width*100,y:(n.clientY-t.top)/t.height*100}},js=n=>{if(n.button!==0||M)return;const t=Ye(n);T({x0:t.x,y0:t.y,x:t.x,y:t.y})},Es=n=>{var l,h;if(!f)return;const t=Ye(n);!((l=p.current)!=null&&l.paused)&&(Math.abs(t.x-f.x0)>1||Math.abs(t.y-f.y0)>1)&&((h=p.current)==null||h.pause()),T({...f,x:t.x,y:t.y})},Ls=()=>{if(!f)return;const n={x:Math.min(f.x0,f.x),y:Math.min(f.y0,f.y),w:Math.abs(f.x-f.x0),h:Math.abs(f.y-f.y0)};if(T(null),n.w<1&&n.h<1){fe();return}Re(n)},le=f&&{x:Math.min(f.x0,f.x),y:Math.min(f.y0,f.y),w:Math.abs(f.x-f.x0),h:Math.abs(f.y-f.y0)},Ss=async()=>{const n=await en(e.node,e.scenario).catch(t=>({error:String(t)}));v==null||v((n==null?void 0:n.error)||"")},Ms=[...rn({okd:!!w.humanOk,isLatest:!F||A===0},{ok:Ss}).map(n=>({name:n.name,description:d(n.descKey),ui:!0,color:n.color,run:n.run})),...ps.map(n=>({name:n.name,description:n.desc||n.title,source:"review",prefill:()=>on(n.body,{node:e.node,scenario:e.scenario,expected:w.expected||""})}))],$s=s.jsxs(s.Fragment,{children:[s.jsx(q,{kind:"eval",state:Te(w),showLabel:!0,className:"an-verdict-badge",size:16}),w.humanOk&&s.jsxs("span",{className:"an-okd","data-tip":d("annotator.okBy",{by:w.humanOk.by,at:new Date(w.humanOk.ts).toLocaleString()}),children:[s.jsx(Z,{name:"circle-check",size:14})," ",d("annotator.okd")]}),F&&F.length>1&&(()=>{const n=F.length,t=Math.min(xe,n),l=A<xe?Array.from({length:t},(k,$)=>t-1-$):[A,...Array.from({length:xe-1},(k,$)=>xe-2-$)],h=new Set(l),g=F.map((k,$)=>({...k,idx:$})).filter(k=>!h.has(k.idx));return s.jsxs("div",{className:"an-ab",children:[s.jsx(be,{icon:"chevron-left",size:13,className:"an-ab-nav",disabled:A>=F.length-1,onClick:()=>te(k=>Math.min(F.length-1,k+1)),label:d("annotator.abOlder")}),g.length>0&&s.jsx(dn,{hidden:g,total:n,histIdx:A,onPick:te}),s.jsx("div",{className:"an-ab-track",children:l.map(k=>{const $=F[k],Q=Te($);return s.jsx("button",{type:"button",className:`an-ab-pip ${k===A?"on":""}`,"aria-current":k===A?"true":void 0,onClick:()=>te(k),"aria-label":`${n-k}/${n} · ${d(`score.${Q}`)} · ${new Date($.ts).toLocaleString()}`,children:s.jsx(q,{kind:"eval",state:Q,size:13})},`${$.ts}-${k}`)})}),s.jsx(be,{icon:"chevron-right",size:13,className:"an-ab-nav",disabled:A<=0,onClick:()=>te(k=>Math.max(0,k-1)),label:d("annotator.abNewer")}),s.jsx("span",{className:"an-ab-pos",children:A===0?d("annotator.abLatest"):d("annotator.abPos",{i:F.length-A,n:F.length})})]})})()]}),Ns=s.jsxs(s.Fragment,{children:[s.jsxs(W,{label:d("detail.sideReading"),children:[w.evaluator&&s.jsx(G,{text:w.evaluator}),s.jsx(G,{text:new Date(w.ts).toLocaleString()})]}),s.jsx(W,{label:d("detail.sideNode"),children:s.jsx(G,{text:e.node,mono:!0,tip:m?d("session.issuesFocusNode"):e.node,onClick:m?()=>m(e.node):null})}),_e&&s.jsx(W,{label:d("detail.sideFiler"),children:s.jsx(qs,{originator:_e,sessions:b,kind:"eval",onOpenSession:x})}),w.humanOk&&s.jsxs(W,{label:d("detail.sideOk"),children:[s.jsx(G,{text:`☑ ${w.humanOk.by}`}),s.jsx(G,{text:new Date(w.humanOk.ts).toLocaleString(),dim:!0})]}),!w.fresh&&(((Je=w.staleAxes)==null?void 0:Je.length)??0)>0&&s.jsxs(W,{label:d("nodeView.eval.staleLabel"),children:[s.jsx(G,{text:w.staleAxes.join(" · "),tip:d("nodeView.eval.staleReadoutTitle")}),(((Ze=w.codeDrift)==null?void 0:Ze.length)??0)>0&&s.jsx(G,{text:w.codeDrift.map(n=>`${n.file.split("/").pop()} +${n.behind}`).join(", "),dim:!0})]}),(u.prev.length>0||u.next.length>0)&&s.jsx(W,{label:d("detail.sideQueue"),children:[["prev",d("detail.queuePrev")],["next",d("detail.queueNext")]].map(([n,t])=>u[n].length>0&&s.jsxs("div",{className:"ds-queue-group",children:[s.jsx("span",{className:"ds-queue-group-label",children:t}),u[n].map(l=>s.jsxs("a",{className:"ds-queue-row",href:l.href,"data-tip":`${l.node} · ${l.scenario}`,children:[s.jsx(q,{kind:"eval",state:l.state,size:13}),s.jsx("span",{className:"ds-queue-scenario",children:l.scenario}),s.jsx("span",{className:"ds-queue-node",children:l.node})]},l.key))]},n))})]}),Rs=s.jsx(Us,{onSend:(n,t)=>Ws({node:e.node,scenario:e.scenario,body:n,codeSha:w.codeSha,evidence:t}),specs:i,sessions:b,focusId:e.node,onDone:v,anchorNow:X?ks:null,draft:ie,commands:Ms},xs);return s.jsxs(Fe,{title:e.scenario,titleMeta:s.jsx("span",{className:"an-node",children:e.node}),status:$s,side:Ns,composer:Rs,listHref:j,backHref:E,backLabel:R,children:[w.expected&&s.jsxs("div",{className:"an-expected",children:[s.jsx("b",{children:d("nodeView.eval.expected")})," ",w.expected]}),ae.length>0&&((De=w.verdict)==null?void 0:De.note)&&s.jsxs("div",{className:"an-expected an-prior-note",children:[s.jsx("b",{children:d("nodeView.eval.noteLabel")})," ",w.verdict.note]}),H&&s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"an-player",ref:S,children:[s.jsxs("div",{className:`an-stage ${oe?"playing":"paused"}`,ref:L,onMouseDown:js,onMouseMove:Es,onMouseUp:Ls,children:[s.jsx("video",{className:"an-video",ref:p,src:ke(`/api/evidence/${H.hash}`),preload:"metadata",playsInline:!0}),le&&s.jsx("div",{className:"an-rect live",style:{left:`${le.x}%`,top:`${le.y}%`,width:`${le.w}%`,height:`${le.h}%`}}),!oe&&!f&&s.jsx("div",{className:"an-bigplay","aria-hidden":!0,children:s.jsx(Z,{name:"play",size:22})})]}),s.jsxs("div",{className:"an-bar",children:[s.jsx(be,{icon:oe?"pause":"play",size:14,className:"an-play",label:d(oe?"annotator.pause":"annotator.play"),onClick:fe}),s.jsxs("div",{className:"an-seek",ref:N,onMouseDown:ys,onMouseMove:gs,onMouseLeave:()=>Me(null),children:[s.jsx("div",{className:"an-seek-trk"}),Y>0&&O==="time"&&y.map((n,t)=>s.jsx("div",{className:"an-band",style:{left:`${n.at/Y*100}%`},"data-tip":n.step},`band-${t}`)),s.jsx("div",{className:"an-seek-play",ref:K}),Y>0&&z.map(n=>s.jsx("button",{type:"button",className:`an-mk ${ce===n.i?"on":""} ${Ie===n.i?"active":""}`,style:{left:`${n.tMs/Y*100}%`},"data-tip":n.label,onMouseDown:t=>t.stopPropagation(),onClick:t=>{t.stopPropagation(),He(n.i,n.tMs)}},`mk-${n.i}`)),s.jsx("div",{className:"an-knob",ref:V}),Se!=null&&Y>0&&s.jsx("div",{className:"an-seek-hov",style:{left:`${Se}%`},children:we(Se/100*Y)})]}),s.jsx("span",{className:"an-time",ref:ne}),ve&&s.jsx("span",{className:"an-curstep","data-tip":ve.node?`→ ${ve.node}`:void 0,children:ve.step}),s.jsx(Vs,{target:S})]})]}),y.length>0&&s.jsx(os,{events:y,axis:O,extent:Ve,activeStepIdx:je,onSeek:D}),B&&s.jsx("div",{className:"an-flash",children:B})]}),!H&&y.length>0&&s.jsx(os,{events:y,axis:O,extent:Ve,activeStepIdx:je,onSeek:D}),ue.length>0&&s.jsx("div",{className:"an-gallery",children:ue.map((n,t)=>s.jsx(ls,{e:n,alt:e.scenario},`${n.hash}-${t}`))}),ws.map((n,t)=>s.jsx(ls,{e:n,alt:e.scenario,collapsed:X||ue.length>0},`${n.hash}-${t}`)),ae.length===0&&((We=w.verdict)!=null&&We.note?s.jsx("pre",{className:"eval-transcript",children:w.verdict.note}):s.jsx("div",{className:"an-hint",children:d("nodeView.eval.noImage")})),s.jsx(vn,{entry:e,comments:Ne,seekMs:X?D:null,selIdx:ce,activeIdx:Ie,onSelect:X?He:null,events:X?y:null,onWrite:v})]})}function vn({entry:e,comments:a,seekMs:r,selIdx:i,activeIdx:b,onSelect:v,events:x,onWrite:m}){var E;const j=U();return s.jsxs("section",{className:"an-thread",children:[s.jsx("div",{className:"an-comments-head",children:s.jsx("span",{children:j("annotator.comments",{n:a.length})})}),s.jsx(Xs,{replies:a,onSeek:r,selIdx:i,activeIdx:b,onSelect:v,events:x,threadId:((E=e.thread)==null?void 0:E.id)??null,onRemarkChange:()=>m==null?void 0:m("")})]})}const pe=new Map,fn=[];function cs(e,a){if(!(e!=null&&e.evalRevision)||!(a!=null&&a.epoch))return!0;const r=e.evalRevision;return r.epoch!==a.epoch||r.generation<a.generation?!1:r.generation!==a.generation?!0:!(a.revision&&r.content!==a.revision||a.value&&e.summary&&["measured","total","pass","fail","review","blind","unknown"].some(b=>e.summary[b]!==a.value[b]))}function us(e,a,r){const i=`${r||""}\0${e}\0${a}`;if(pe.has(i))return pe.get(i);const b=new URLSearchParams({node:e,scenario:a});r&&b.set("scope",r);const v=fetch(ke(`/api/evals/detail?${b}`),{cache:"no-store"}).then(x=>x.ok?x.json():x.status===404?!1:Promise.reject(new Error(`HTTP ${x.status}`))).finally(()=>pe.delete(i));return pe.set(i,v),v}function mn(e,a,r,i=!0,b=null){const v=String(e||"").indexOf("/"),x=v>0?e.slice(0,v):e,m=v>0?e.slice(v+1):"",j=`${a||""}\0${x}\0${m}`,[E,R]=c.useState({identity:"",data:null,error:null}),u=c.useRef(0),d=c.useRef(r);d.current=r;const p=c.useCallback(()=>{if(!i||!x||!m)return Promise.resolve();const N=++u.current;return R(S=>S.identity===j?{...S,error:null}:{identity:j,data:null,error:null}),us(x,m,a).then(async S=>{if(N===u.current){if(S&&!cs(S,d.current)){const P=await us(x,m,a);if(N!==u.current)return;if(P&&!cs(P,d.current))throw new Error("stale session eval detail");S=P}R({identity:j,data:S,error:null})}}).catch(S=>{if(N!==u.current)return;const P=S instanceof Error?S.message:String(S);R(y=>({identity:j,data:y.identity===j&&y.data?y.data:!1,error:P}))})},[i,j,x,m,a]);c.useEffect(()=>{i&&p()},[i,x,m,a,b,r==null?void 0:r.epoch,r==null?void 0:r.generation,r==null?void 0:r.revision]);const L=E.identity===j?E:{data:null,error:null};return{data:L.data,error:L.error,reload:p}}function xn({sessionId:e}){const r=U()("sessionEval.scopeDoor");return s.jsx("a",{className:"se-door",href:ye(Js(e)),"data-tip":r,"aria-label":r,children:s.jsx(Z,{name:"arrow-left",size:16})})}function pn({sessionId:e,pageData:a,loading:r,error:i,sessions:b,queryText:v,onQueryText:x,hrefFor:m,hrefForPage:j,notice:E}){const R=U(),u=(a==null?void 0:a.unknown)||0,d=e&&!r&&!i&&((a==null?void 0:a.sourceTotal)??0)===0?R("sessionEval.none"):null,p=e?s.jsxs("div",{className:"se-gates",children:[s.jsx(xn,{sessionId:e}),a&&a.gates.map(L=>s.jsxs("span",{className:`se-gate ${L.ok?"ok":"bad"}`,"data-tip":L.detail,children:[s.jsx(Z,{name:L.ok?"check":"x",size:11})," ",L.label]},L.label)),u>0&&s.jsxs("span",{className:"se-gate bad","data-tip":R("sessionEval.unknownCoverage",{n:u}),children:[s.jsx(Z,{name:"info",size:11})," ",u]}),a&&s.jsx("span",{className:"se-acts",children:s.jsx("a",{className:"se-export",href:ke(`/api/sessions/${encodeURIComponent(e)}/evals?format=html`),target:"_blank",rel:"noreferrer","data-tip":R("sessionEval.exportTitle"),"aria-label":R("sessionEval.export"),children:s.jsx(Z,{name:"download",size:13})})})]}):null;return s.jsx(an,{pageData:a,loading:r,sessions:b,queryText:v,onQueryText:x,hrefFor:m,notice:E,leading:p,error:i?R("sessionEval.loadFailed",{reason:i}):null,empty:d,pagination:a?{page:a.page,pageCount:a.pageCount,prev:a.prev,next:a.next,hrefFor:j}:null})}function bn({param:e,detail:a,sessionId:r,loading:i=!1,error:b,specs:v,sessions:x,listHref:m,backHref:j,backLabel:E,onOpenSession:R,onFocusNode:u,onWrite:d,notice:p}){const L=U(),N=e.indexOf("/"),S=N>0?e.slice(0,N):e,P=N>0?e.slice(N+1):null,y=c.useMemo(()=>{const O=f=>({key:vs(f),node:f.node,scenario:f.scenario,state:f.state,href:ye(r?Ae(r,f.node,f.scenario):hs(f.node,f.scenario))}),I=(a==null?void 0:a.neighbors)||{prev:[],next:[]};return{prev:I.prev.map(O),next:I.next.map(O)}},[a==null?void 0:a.neighbors,r]);if(b)return s.jsx(Fe,{failure:L("sessionEval.loadFailed",{reason:b}),listHref:m,listLabel:L("reviewShell.backToEvals")});if(i)return s.jsx("div",{className:"fv-note",children:L("common.loading")});const C=(a==null?void 0:a.selected)||null;return C?s.jsxs("div",{className:"page-detail-stack",children:[p&&s.jsx("div",{className:"fv-notice",children:p}),s.jsx(hn,{entry:C,history:a.history,sourceKey:r||"project",specs:v,sessions:x,onOpenSession:R,onFocusNode:u,onWrite:d,listHref:m,backHref:j,backLabel:E,queue:y})]}):s.jsx(Fe,{missing:L("reviewShell.evalNotFound",{node:S,scenario:P||""}),listHref:m,listLabel:L("reviewShell.backToEvals")})}function En({specs:e=fn,sessions:a=[],issuesStamp:r=null,reloadBoard:i,onOpenSession:b,onFocusNode:v=null}){var _;const x=U(),{param:m,query:j}=Ts(),E=J(j.q||"","scope")||null,R=((_=a.find(M=>M.id===E))==null?void 0:_.evalSummary)||null,u=mn(m,E,R,!!m,r),d=String(j.q??"").trim()||re,p=Ys(j.page),L=Qs("evals",d,p,{enabled:!m,refreshKey:e}),[N,S]=c.useState(""),P=M=>{M&&(S(M),setTimeout(()=>S(""),6e3))},y=async M=>{P(M),await(i==null?void 0:i()),await u.reload()},C=M=>ye(E?Ae(E,M.node,M.scenario):hs(M.node,M.scenario)),O=E?ye(Ae(E)):es("evals"),I=Gs("evals",E),f=x("detail.backToEvals"),T=M=>Fs("evals",null,{query:As(M,re)}),B=M=>es("evals",null,Ps(d,re,M));return m?s.jsx(bn,{param:m,detail:u.data&&u.data!==!1?u.data:null,sessionId:E,loading:u.data===null,error:u.error,specs:e,sessions:a,listHref:O,backHref:I,backLabel:f,onOpenSession:b,onFocusNode:v,onWrite:y,notice:N}):s.jsx(pn,{sessionId:E,pageData:L.data,loading:L.loading,error:L.error,sessions:a,queryText:j.q||"",onQueryText:T,hrefFor:C,hrefForPage:B,notice:N})}export{bn as EvalDetailPage,xn as EvalScopeDoor,pn as EvalsListPage,En as default,cs as detailMatchesProjection};
@@ -1 +0,0 @@
1
- import{u as P,f as Y,k as C,r as v,j as e,n as H,g as A,c as D,I as $,h as G,q as Q,s as V}from"./index-DrVao0Ep.js";import{f as J,g as X,h as Z,i as W,j as ee}from"./data-B-RQmit6.js";import{l as se,n as te,D as T,x as _,j as ne,g as ie,d as E,f as I,O as le,a as U,q as F,R as ae,y as re,L as oe,S as ce,F as ue,z as de,M as fe,A as O,C as pe,T as q,B as K,G as me}from"./Thread-C6Go8HRh.js";import"./PageScroll-hT7UTLvD.js";const z="new",ve=t=>t.status!=="open",xe=t=>{const r=Math.max(0,(Date.now()-new Date(t).getTime())/1e3);return Number.isFinite(r)?r<3600?`${Math.max(1,Math.floor(r/60))}m`:r<86400?`${Math.floor(r/3600)}h`:`${Math.floor(r/86400)}d`:""},be=t=>{const r=String(t||"").split("#"),u=r.length>1?r.at(-1):r[0];return`#${u.length>16?`${u.slice(0,13)}…`:u}`},je=["is","state","store","author","node","session"],R=(t,r,u,o=i=>i)=>{var i,n;return(((n=(i=t==null?void 0:t.facets)==null?void 0:i[r])==null?void 0:n.options)??[]).map(c=>({value:c.value,label:c.value===""?u:o(c.value)}))};function ge({data:t,loading:r,error:u,query:o,notice:i}){var a,h,g,k;const n=P();if(t&&!t.enabled)return e.jsx("div",{className:"fv-note",children:n("session.issuesOff")});const c=Array.isArray(t==null?void 0:t.items)?t.items:[],l=String(o.q??"").trim()||C,b=s=>H("issues",null,{query:Q(s,C)}),p=(s,x)=>b(V(l,s,x)),f=(((h=(a=t==null?void 0:t.facets)==null?void 0:a.store)==null?void 0:h.options)??[]).map(s=>s.value).filter(Boolean),w=c,j=((g=t==null?void 0:t.counts)==null?void 0:g.open)||0,d=((k=t==null?void 0:t.counts)==null?void 0:k.closed)||0,y=D(l,"state"),S=w.map(s=>{var M,B;const x=s.status||"open";return{key:s.id,href:A("issues",s.id),content:e.jsx(e.Fragment,{children:e.jsx(ae,{state:e.jsx(U,{kind:"issue",state:x}),title:s.concern,meta:e.jsxs(e.Fragment,{children:[e.jsx("span",{"data-tip":s.id,children:be(s.id)}),s.by&&e.jsx("span",{"data-tip":s.by,children:n("reviewList.openedBy",{by:re(s.by)})}),s.created&&e.jsx("span",{children:n("reviewList.openedAt",{at:xe(s.created)})})]}),aside:e.jsxs(e.Fragment,{children:[(((M=s.replies)==null?void 0:M.length)??0)>0&&e.jsxs("span",{className:"rl-comments","data-tip":n("session.issuesReplies",{n:s.replies.length}),children:[e.jsx($,{name:"message-square",size:14}),s.replies.length]}),f.length>1&&e.jsx("span",{className:`rl-tag fv-store-${s.store==="local"?"local":"forge"}`,children:s.store}),((B=s.nodes)==null?void 0:B[0])&&e.jsx("span",{className:"rl-tag node",children:s.nodes[0]})]})})})}}),L=e.jsxs("a",{className:"rl-new",href:A("issues",z),children:[e.jsx($,{name:"plus",size:14}),n("session.issuesNew")]}),N={label:n("reviewList.facetStore"),value:D(l,"store"),options:R(t,"store",n("reviewList.all"))},m={label:n("reviewList.facetSession"),value:D(l,"session"),options:R(t,"session",n("reviewList.all"),s=>n(s==="present"?"reviewList.sessionPresent":"reviewList.sessionMissing"))};return e.jsx(oe,{notice:i,loading:r,error:u,title:n("reviewList.issuesTitle"),action:L,search:{value:String(o.q??"").trim()?o.q:C,onSubmit:b,placeholder:n("reviewList.searchIssues"),label:n("reviewList.search"),keys:je,suggest:{author:R(t,"author",n("reviewList.all")).filter(s=>s.value),node:R(t,"node",n("reviewList.all")).filter(s=>s.value)}},sections:[{key:"open",label:n("reviewList.open"),count:j,active:y===""||y==="open",onSelect:()=>p("state","open")},{key:"closed",label:n("reviewList.closed"),count:d,active:y!==""&&y!=="open",onSelect:()=>p("state","closed")}],facets:e.jsx(ue,{label:N.label,value:N.value,options:N.options,clearLabel:n("reviewList.all"),onChange:s=>p("store",s),mobile:!0}),secondaryFilters:e.jsx(ce,{label:n("reviewList.filters"),clearLabel:n("reviewList.all"),groups:[{label:m.label,value:m.value,active:!!m.value,options:m.options,onChange:s=>p("session",s)}]}),rows:S,pagination:t?{page:t.page,pageCount:t.pageCount,prev:t.prev,next:t.next,hrefFor:s=>A("issues",null,G(l,C,s))}:null,empty:{hasData:((t==null?void 0:t.sourceTotal)??0)>0,dataset:n("session.issuesEmpty"),filtered:n("session.issuesNoMatch")}})}function ye({issue:t,specs:r,sessions:u,onFocusNode:o,onOpenSession:i,onWrite:n,notice:c}){const l=P(),b=t.store==="local",p=ve(t),[f,w]=v.useState(""),[j,d]=v.useState(""),y=Array.isArray(t.nodes)?t.nodes:[],S=Array.isArray(t.replies)?t.replies:[],L=t.status||"open",N=(a,h)=>async()=>{if(!f){w(a);try{const g=await h();g!=null&&g.ok?(d(""),await(n==null?void 0:n(""))):d((g==null?void 0:g.error)||`${a} failed`)}finally{w("")}}},m=(a,h,g,k)=>e.jsx("button",{type:"button",className:`fv-close-issue fv-life-${a}`,disabled:!!f,"data-tip":k,onMouseDown:s=>s.preventDefault(),onClick:N(a,g),children:f===a?l("session.issuesActing"):h});return e.jsxs(T,{title:t.concern,backHref:F("issues"),backLabel:l("detail.backToIssues"),status:e.jsx(U,{kind:"issue",state:L,showLabel:!0,className:"ds-status-pill",size:16}),side:e.jsxs(e.Fragment,{children:[e.jsx(E,{label:l("detail.sideIssue"),children:e.jsx(I,{text:t.id,mono:!0})}),e.jsxs(E,{label:l("detail.sideStore"),children:[e.jsx(I,{text:t.store,className:`fv-store fv-store-${b?"local":"forge"}`}),t.url&&e.jsx(I,{text:l("session.issuesOpenOnStore",{store:Ne(t.store)}),href:t.url,external:!0})]}),t.by&&e.jsx(E,{label:l("detail.sideOriginator"),children:b?e.jsx(le,{originator:t.by,sessions:u,kind:"issue",onOpenSession:i}):e.jsx(I,{text:t.by,dim:!0})}),y.length>0&&e.jsx(E,{label:l("detail.sideNodes"),children:y.map(a=>e.jsx(I,{text:a,mono:!0,tip:l("session.issuesFocusNode"),onClick:()=>o==null?void 0:o(a)},a))})]}),composer:e.jsx(ie,{onSend:(a,h)=>Z(t.id,a,h),specs:r,sessions:u,focusId:y[0]||null,onDone:n,actionsEnd:!p&&e.jsxs(e.Fragment,{children:[j&&e.jsx("span",{className:"fv-error",children:j}),b&&m("promote",l("session.issuesPromote"),()=>J(t.id),l("session.issuesPromoteTitle")),m("close",l("session.issuesCloseIssue"),()=>X(t.id),l("session.issuesCloseIssueTitle"))]})},t.id),children:[c&&e.jsx("div",{className:"fv-notice",children:c}),t.body&&e.jsx("div",{className:"fvd-body",children:e.jsx(_,{body:t.body})}),e.jsx(ne,{replies:S,threadId:b?t.id:null,onRemarkChange:()=>n==null?void 0:n("")})]})}function he(t,r){const[u,o]=v.useState(null),[i,n]=v.useState(null),c=v.useRef(0),l=v.useCallback(async()=>{if(!t)return null;const p=++c.current;n(null);try{const f=await W(t);return p===c.current&&o(f),f}catch(f){return p===c.current&&(o(!1),n(f instanceof Error?f.message:String(f))),null}},[t]),b=v.useRef(null);return v.useEffect(()=>{t!==b.current&&(b.current=t,o(null),n(null)),t&&l()},[t,r,l]),{issue:u,error:i,reload:l}}function Ce({onFocusNode:t,onOpenSession:r,specs:u=[],sessions:o=[],issuesStamp:i=null}){var m;const n=P(),{param:c,query:l}=Y(),b=c===z,p=String(l.q??"").trim()||C,f=se(l.page),w=v.useMemo(()=>o.map(a=>a.id).join(","),[o]),j=te("issues",p,f,{enabled:!c||b,refreshKey:`${i??""}|${w}`}),d=he(b?null:c,i),[y,S]=v.useState(""),L=a=>{a&&(S(a),setTimeout(()=>S(""),6e3))},N=async a=>{L(a),await(c?d.reload():j.reload())};if(b){if(j.data&&!j.data.enabled)return e.jsx("div",{className:"fv-note",children:n("session.issuesOff")});const a=Array.isArray((m=j.data)==null?void 0:m.stores)&&j.data.stores.length?j.data.stores:[{id:"local",label:"local",kind:"local"}];return e.jsx(Se,{specs:u,sessions:o,stores:a,onCreated:(h,g)=>{L(g),H("issues",h,{replace:!0})}})}return c?d.issue==null?e.jsx("div",{className:"fv-note",children:n("session.issuesLoading")}):d.error?e.jsx(T,{failure:d.error,listHref:A("issues"),listLabel:n("reviewShell.backToIssues")}):d.issue===!1?e.jsx(T,{missing:n("reviewShell.issueNotFound",{id:c}),listHref:A("issues"),listLabel:n("reviewShell.backToIssues")}):e.jsx(ye,{issue:d.issue,specs:u,sessions:o,onFocusNode:t,onOpenSession:r,onWrite:N,notice:y}):e.jsx(ge,{data:j.data,loading:j.loading,error:j.error,query:l,notice:y})}const we={github:"GitHub",gitlab:"GitLab"},Ne=t=>we[t]||t;function Se({specs:t,sessions:r,stores:u,onCreated:o}){var k;const i=P(),[n,c]=v.useState(((k=u[0])==null?void 0:k.id)||"local"),[l,b]=v.useState(""),[p,f]=v.useState(""),[w,j]=v.useState(!1),[d,y]=v.useState(!1),[S,L]=v.useState(""),N=v.useRef(null),m=de({inputRef:N,value:p,setValue:f,specs:t,sessions:r});v.useEffect(()=>{var s;u.some(x=>x.id===n)||c(((s=u[0])==null?void 0:s.id)||"local")},[u,n]);const a=[...new Set([...p.matchAll(fe)].map(s=>s[1]))],h=async()=>{const s=l.trim();if(!(!s||d)){y(!0),L("");try{const x=await ee({concern:s,body:p.trim()||void 0,store:n});x!=null&&x.ok&&x.id?o==null||o(x.id,x.outcomes||""):L((x==null?void 0:x.error)||i("session.issuesPostFailed"))}finally{y(!1)}}},g=(s,x)=>e.jsx("button",{type:"button",role:"tab","aria-selected":w===s,className:`fv-tab ${w===s?"on":""}`,onClick:()=>j(s),children:x});return e.jsx(T,{title:i("session.issuesNewTitle"),backHref:F("issues"),backLabel:i("detail.backToIssues"),side:e.jsxs(e.Fragment,{children:[e.jsx(E,{label:i("session.issuesStoreLabel"),children:e.jsxs("label",{className:"fv-store-pick",children:[e.jsx("span",{className:"sr-only",children:i("session.issuesStoreLabel")}),e.jsx("select",{value:n,disabled:d,onChange:s=>c(s.target.value),children:u.map(s=>e.jsx("option",{value:s.id,children:s.label||s.id},s.id))})]})}),e.jsx(E,{label:i("detail.sideNodes"),children:a.length>0?a.map(s=>e.jsx(I,{text:s,mono:!0},s)):e.jsx(I,{text:i("session.issuesNodesHint"),dim:!0})})]}),children:e.jsxs("div",{className:"fv-new-page",children:[e.jsxs("label",{className:"fv-field",children:[e.jsx("span",{className:"fv-field-label",children:i("session.issuesTitleLabel")}),e.jsx("input",{className:"fv-input fv-new-title",value:l,placeholder:i("session.issuesConcernPlaceholder"),disabled:d,autoFocus:!0,onChange:s=>b(s.target.value),onKeyDown:s=>{O(s)||s.key==="Enter"&&(s.preventDefault(),h())}})]}),e.jsxs("div",{className:"fv-field",children:[e.jsxs("div",{className:"fv-field-head",children:[e.jsx("span",{className:"fv-field-label",children:i("session.issuesBodyLabel")}),e.jsxs("div",{className:"fv-tabs",role:"tablist","aria-label":i("session.issuesBodyLabel"),children:[g(!1,i("session.issuesWrite")),g(!0,i("session.issuesPreview"))]})]}),e.jsx(pe,{className:"fv-new-compose",editor:w?e.jsx("div",{className:"fv-new-preview",role:"tabpanel",children:p.trim()?e.jsx(_,{body:p}):e.jsx("span",{className:"fv-new-hint",children:i("session.issuesPreviewEmpty")})}):e.jsxs("div",{className:"fv-tawrap",role:"tabpanel",children:[e.jsx(me,{ref:N,className:"fv-textarea",rows:1,value:p,placeholder:i("session.issuesBodyPlaceholder"),disabled:d,onChange:s=>{f(s.target.value),m.sync(s.target)},onSelect:s=>m.sync(s.target),onBlur:m.close,onKeyDown:s=>{O(s)||m.onKeyDown(s)||s.key==="Enter"&&(s.metaKey||s.ctrlKey)&&(s.preventDefault(),h())}}),m.menuEl]}),footer:e.jsxs("div",{className:"fv-actions",children:[e.jsx(q,{label:i("thread.mentionActor"),disabled:d||w,onClick:()=>K(N.current,"@",f,m.sync),children:"@"}),e.jsx(q,{label:i("thread.mentionNode"),disabled:d||w,onClick:()=>K(N.current,"[[",f,m.sync),children:"[["})]})})]}),e.jsxs("div",{className:"fv-new-actions",children:[S&&e.jsx("span",{className:"fv-error",children:S}),e.jsx("a",{className:"fv-cancel",href:F("issues"),children:i("session.issuesCancel")}),e.jsx("button",{type:"button",className:"fv-post",disabled:d||!l.trim(),onClick:h,children:i(d?"session.issuesSending":"session.issuesPost")})]})]})})}export{je as ISSUE_QUERY_KEYS,ye as IssueDetailPage,ge as IssuesListPage,z as NEW_PARAM,Ce as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/EvalsPage-FixoOg_n.js","assets/index-DrVao0Ep.js","assets/index-CsI8DElI.css","assets/Thread-C6Go8HRh.js","assets/PageScroll-hT7UTLvD.js","assets/data-B-RQmit6.js","assets/IssuesPage-CuKLFhH3.js","assets/Settings-C2MsucfE.js","assets/bindings-BC9vqpYU.js","assets/terminalFont-C6oGNKrf.js"])))=>i.map(i=>d[i]);
2
- import{u as E,r as o,f as D,j as s,n as y,_ as O}from"./index-DrVao0Ep.js";import{A as L,u as H,S as $,R as B,a as U,F as Q,b as A}from"./SessionWindow-CixDi4PI.js";import{H as G,I as J,J as M,K,N as W,P as X,Q as Z,U as q,V as Y,W as ss,G as es,s as as,X as ns,o as ls,t as ts}from"./Thread-C6Go8HRh.js";import{u as is,T as cs,c as os}from"./launch-BBH02b1v.js";import"./PageScroll-hT7UTLvD.js";import"./data-B-RQmit6.js";const rs=o.lazy(()=>O(()=>import("./EvalsPage-FixoOg_n.js"),__vite__mapDeps([0,1,2,3,4,5]))),ms=o.lazy(()=>O(()=>import("./IssuesPage-CuKLFhH3.js"),__vite__mapDeps([6,1,2,5,3,4]))),ds=o.lazy(()=>O(()=>import("./Settings-C2MsucfE.js"),__vite__mapDeps([7,1,2,8,4,9]))),us={spec:"nodeView.paneSpec",history:"nodeView.paneHistory",issues:"nodeView.paneIssues",eval:"nodeView.paneEval",edit:"nodeView.paneEdit"},R=(e,l)=>l.filter(r=>{var m;return(m=r.ops)==null?void 0:m.some(t=>t.nodeId===e.id)});function V({status:e}){const l=A[e]||A.pending;return s.jsx("span",{className:"m-dot",style:{background:l.color}})}function hs({node:e,kids:l,editors:r,onTap:m}){return s.jsxs("button",{className:"m-row",onClick:m,children:[s.jsx(V,{status:e.status}),s.jsx("span",{className:"m-row-title",children:e.title}),r.length>0&&s.jsx("span",{className:"m-row-faces",children:r.slice(0,3).map(t=>s.jsx(L,{seed:t.id,status:t.status,title:M(t)},t.id))}),e.version?s.jsxs("span",{className:"m-row-ver",children:["v",e.version]}):null,l>0&&s.jsxs("span",{className:"m-row-kids",children:["▸",l]}),s.jsx("span",{className:"m-row-chev",children:"›"})]})}function bs({node:e,childrenOf:l,sessions:r,onOpenChild:m}){const t=E(),d=l(e.id),h=G(e),f=[...d.length?[{key:"children",label:t("mobile.childrenTab",{n:d.length})}]:[],...h.map(a=>({key:a.key,label:t(us[a.key])}))],[x,b]=o.useState(null),[N,j]=o.useState({issues:{},eval:{}});o.useEffect(()=>{b(null),j({issues:{},eval:{}})},[e.id]);const g=(a,w)=>j(p=>({...p,[a]:ss(p[a],w)})),i=x&&f.some(a=>a.key===x)?x:f[0].key,k=J(e.id,i==="history"),c=R(e,r);return s.jsxs("div",{className:"m-node",children:[s.jsxs("div",{className:"m-node-head",children:[s.jsx(V,{status:e.status}),s.jsx("span",{className:"m-node-title",children:e.title}),e.version?s.jsxs("span",{className:"m-node-ver",children:["v",e.version]}):null,s.jsx("span",{className:"m-node-status",children:t(`status.${e.status}`)}),c.length>0&&s.jsx("span",{className:"m-node-faces",title:t("mobile.liveEditors",{n:c.length}),children:c.map(a=>s.jsx(L,{seed:a.id,status:a.status,title:M(a)},a.id))})]}),e.desc&&s.jsx("div",{className:"m-node-desc",children:e.desc}),s.jsx("div",{className:"m-tabs",children:f.map(a=>s.jsx("button",{className:a.key===i?"m-tab on":"m-tab",onClick:()=>b(a.key),children:a.label},a.key))}),s.jsxs("div",{className:i==="history"?"m-pane-host fixed":"m-pane-host",children:[i==="children"&&s.jsx("div",{className:"m-children",children:d.map(a=>s.jsx(hs,{node:a,kids:l(a.id).length,editors:R(a,r),onTap:()=>m(a.id)},a.id))}),i==="spec"&&s.jsx(K,{node:e}),i==="history"&&s.jsx(W,{node:e,rows:k}),i==="issues"&&s.jsx(X,{node:e,sessions:r,filter:N.issues,onFilter:a=>g("issues",a)}),i==="eval"&&s.jsx(Z,{node:e,sessions:r,filter:N.eval,onFilter:a=>g("eval",a)}),i==="edit"&&s.jsx(q,{node:e})]})]})}function ps({s:e,sessions:l,onBack:r}){const m=E();return s.jsxs("div",{className:"m-sessdetail chat",children:[s.jsxs("div",{className:"m-sess-card",children:[s.jsx("button",{className:"m-sess-back",onClick:r,"aria-label":m("mobile.back"),children:"‹"}),s.jsxs("div",{className:"m-sess-meta",children:[s.jsx("span",{className:"m-sess-name",children:as(e)}),s.jsxs("span",{className:"m-sess-status",style:{color:ns[e.status]},children:[m(`status.${e.status}`),e.merges?` · ×${e.merges}`:""," · ",s.jsx("span",{className:"m-sess-id8",children:e.id.slice(0,8)})]})]}),s.jsx("a",{className:"m-sess-evalbtn",href:ls(ts(e.id)),title:m("sessionEval.btnTitle"),children:m("sessionEval.btn")})]}),s.jsx(cs,{s:e,sessions:l})]})}function xs({draft:e,setDraft:l,onBack:r,onLaunched:m}){const t=E(),{launchers:d,launcher:h,pickLauncher:f}=is(),[x,b]=o.useState(!1),[N,j]=o.useState(null),g=async()=>{const i=e.trim();if(!i||x)return;b(!0),j(null);const k=await os(i,h);b(!1),k.ok?(l(""),m()):j(k.error||t("mobile.launchFailed"))};return s.jsxs("div",{className:"m-sessdetail m-new",children:[s.jsxs("div",{className:"m-sess-card",children:[s.jsx("button",{className:"m-sess-back",onClick:r,"aria-label":t("mobile.back"),children:"‹"}),s.jsx("div",{className:"m-sess-meta",children:s.jsx("span",{className:"m-sess-name",children:t("mobile.newSession")})})]}),s.jsxs("div",{className:"m-new-body",children:[s.jsx(es,{className:"m-input m-new-input",rows:5,placeholder:t("mobile.newPlaceholder"),value:e,onChange:i=>l(i.target.value)}),d.length>0&&s.jsxs("label",{className:"m-new-launcher",children:[s.jsx("span",{className:"m-new-launcher-label",children:t("session.launcherLabel")}),s.jsx("select",{className:"m-new-launcher-select",value:h,onChange:i=>f(i.target.value),children:d.map(i=>s.jsx("option",{value:i.name,children:i.name},i.name))})]}),N&&s.jsx("div",{className:"m-senderr",children:N}),s.jsx("button",{className:"m-send m-new-go",disabled:!e.trim()||x,onClick:g,children:t(x?"mobile.launching":"mobile.launch")})]})]})}function js({specs:e,sessions:l,openId:r,setOpenId:m,creating:t,setCreating:d,newDraft:h,setNewDraft:f}){const x=E(),b=r?l.find(c=>c.id===r):null,{expanded:N,toggle:j}=H(),[g,i]=o.useState(!1),k=o.useMemo(()=>Y(l,c=>N.has(c),{zoneFolded:c=>c==="offline"&&!g}),[l,N,g]);return t?s.jsx(xs,{draft:h,setDraft:f,onBack:()=>d(!1),onLaunched:()=>d(!1)}):b?s.jsx(ps,{s:b,sessions:l,onBack:()=>m(null)}):s.jsxs("div",{className:"m-sesslist",children:[s.jsxs("button",{className:"m-new-btn",onClick:()=>d(!0),children:[s.jsx("span",{className:"m-new-btn-plus",children:"+"}),x("mobile.newSession")]}),!l.length&&s.jsx("div",{className:"m-empty big",children:x("mobile.noSessions")}),k.map(c=>{if(c.type==="zone")return s.jsx($,{item:c,baseClass:"m-zone",onToggle:()=>i(p=>!p)},`z-${c.zone}`);const a=c.s,w=c.expandable||c.depth?s.jsx(B,{guides:c.guides,expandable:c.expandable,kin:c.kin}):null;return s.jsxs("div",{className:"sess-tree-row m-sess-tree-row",style:{"--sess-fold-indent":`${c.depth*14}px`},children:[s.jsx("button",{type:"button",className:"m-sess-row",onClick:()=>m(a.id),children:s.jsx(U,{s:a,locked:!1,showAvatar:!1,lead:w})}),c.expandable&&s.jsx(Q,{expanded:c.expanded,rollup:c.rollup,kin:c.kin,onToggle:()=>j(a.id)})]},a.id)})]})}function Ss({specs:e,sessions:l,issuesStamp:r,reloadBoard:m}){const t=E(),d=o.useMemo(()=>Object.fromEntries(e.map(n=>[n.id,n])),[e]),h=o.useMemo(()=>e.find(n=>!n.parent)||e[0],[e]),f=o.useMemo(()=>{const n={};return e.forEach(u=>{var _;u.parent&&(n[_=u.parent]??(n[_]=[])).push(u)}),u=>n[u]||[]},[e]),[x,b]=o.useState("specs"),[N,j]=o.useState(()=>h?[h.id]:[]),[g,i]=o.useState(null),[k,c]=o.useState(!1),[a,w]=o.useState(""),{page:p,param:C}=D(),v=p==="evals"||p==="issues"||p==="settings"?p:x;o.useEffect(()=>{p==="sessions"&&C&&(b("sessions"),i(C))},[p,C]);const T=n=>{if(n==="evals"||n==="issues"){y(n);return}b(n),(p==="evals"||p==="issues"||p==="settings")&&y(n==="specs"?"graph":"sessions")},F=n=>{b("sessions"),i(n),y("sessions",n)},S=N.filter(n=>d[n]),I=S[S.length-1]||(h==null?void 0:h.id),P=I?d[I]:null,z=n=>j(u=>[...u.filter(_=>d[_]),n]);return s.jsxs("div",{className:"m-app",children:[s.jsx("main",{className:"m-main",children:v==="evals"||v==="issues"||v==="settings"?s.jsx("div",{className:"m-review",children:s.jsx(o.Suspense,{fallback:s.jsx("div",{className:"m-empty",children:t("common.loading")}),children:v==="settings"?s.jsx(ds,{}):v==="evals"?s.jsx(rs,{specs:e,sessions:l,issuesStamp:r,reloadBoard:m,onOpenSession:F,onFocusNode:n=>{b("specs"),j([h.id,n].filter(u=>d[u])),y("graph")}}):s.jsx(ms,{specs:e,sessions:l,issuesStamp:r,onOpenSession:F,onFocusNode:n=>{b("specs"),j([h.id,n].filter(u=>d[u])),y("graph")}})})}):v==="specs"?s.jsxs("div",{className:"m-specs",children:[s.jsx("nav",{className:"m-crumbs",children:S.map((n,u)=>s.jsxs("span",{className:"m-crumb",children:[u>0&&s.jsx("span",{className:"m-crumb-sep",children:"›"}),s.jsx("button",{className:u===S.length-1?"m-crumb-btn cur":"m-crumb-btn",onClick:()=>j(S.slice(0,u+1)),children:d[n].title})]},n))}),P&&s.jsx(bs,{node:P,childrenOf:f,sessions:l,onOpenChild:z},P.id)]}):s.jsx(js,{specs:e,sessions:l,openId:g,setOpenId:i,creating:k,setCreating:c,newDraft:a,setNewDraft:w})}),s.jsxs("nav",{className:"m-tabbar",children:[s.jsxs("button",{className:v==="specs"?"m-tabbar-btn on":"m-tabbar-btn",onClick:()=>T("specs"),children:[s.jsx("span",{className:"m-tabbar-ico",children:"❯_"}),t("mobile.specsTab")]}),s.jsxs("button",{className:v==="sessions"?"m-tabbar-btn on":"m-tabbar-btn",onClick:()=>T("sessions"),children:[s.jsx("span",{className:"m-tabbar-ico",children:"◐"}),t("mobile.sessionsTab"),l.length>0&&s.jsx("span",{className:"m-tabbar-badge",children:l.length})]}),s.jsxs("button",{className:v==="evals"?"m-tabbar-btn on":"m-tabbar-btn",onClick:()=>T("evals"),children:[s.jsx("span",{className:"m-tabbar-ico",children:"✓"}),t("mobile.evalsTab")]}),s.jsxs("button",{className:v==="issues"?"m-tabbar-btn on":"m-tabbar-btn",onClick:()=>T("issues"),children:[s.jsx("span",{className:"m-tabbar-ico",children:"◎"}),t("mobile.issuesTab")]})]})]})}export{Ss as default};
@@ -1 +0,0 @@
1
- import{r as d,o as c,j as e,e as i}from"./index-DrVao0Ep.js";function x({title:a,closeLabel:o,onClose:s,className:l,children:n}){return d.useEffect(()=>()=>c(),[]),e.jsx("div",{className:"legend-backdrop","data-focus-overlay":!0,onClick:s,children:e.jsxs("div",{className:l?`legend ${l}`:"legend",role:"dialog","aria-modal":"true","aria-label":a,onClick:r=>r.stopPropagation(),children:[e.jsxs("div",{className:"legend-head",children:[e.jsx("span",{className:"legend-title",children:a}),e.jsx(i,{icon:"x",size:13,className:"legend-close",label:o,onClick:s})]}),e.jsx("div",{className:"legend-body",children:n})]})})}export{x as M};
@@ -1 +0,0 @@
1
- import{r as h,j as L}from"./index-DrVao0Ep.js";const w="spex.page-scroll:",T=()=>typeof window>"u"?"":`${window.location.pathname}${window.location.search}${window.location.hash}`,$=n=>{try{return Number(sessionStorage.getItem(`${w}${n}`))||0}catch{return 0}},p=(n,r)=>{try{sessionStorage.setItem(`${w}${n}`,String(r))}catch{}};function A({className:n="",scrollKey:r=T(),children:g,...E}){const f=h.useRef(null);return h.useLayoutEffect(()=>{const e=f.current;if(!e)return;const o=$(r);let i=o,c=o>0,u=0,t=0,a;const m=()=>{c=!1,t&&cancelAnimationFrame(t),t=0,a==null||a.disconnect()},l=()=>{if(t=0,!c)return;const v=Math.max(0,e.scrollHeight-e.clientHeight);if(e.scrollTop=Math.min(o,v),v<o){u=0;return}if(Math.abs(e.scrollTop-o)>1){u=0,t=requestAnimationFrame(l);return}i=e.scrollTop,p(r,i),++u<2?t=requestAnimationFrame(l):m()},d=()=>{c||(i=e.scrollTop,p(r,i))},s=()=>{m(),d()};return e.scrollTop=o,c&&(a=new MutationObserver(()=>{t||(t=requestAnimationFrame(l))}),a.observe(e,{childList:!0,subtree:!0,characterData:!0}),t=requestAnimationFrame(l)),e.addEventListener("scroll",d,{passive:!0}),e.addEventListener("pointerdown",s,!0),e.addEventListener("wheel",s,{passive:!0,capture:!0}),e.addEventListener("keydown",s,!0),()=>{e.removeEventListener("scroll",d),e.removeEventListener("pointerdown",s,!0),e.removeEventListener("wheel",s,!0),e.removeEventListener("keydown",s,!0),m(),p(r,i)}},[r]),L.jsx("div",{ref:f,className:`page-scroll${n?` ${n}`:""}`,...E,children:g})}export{A as P};
@@ -1 +0,0 @@
1
- import{u as T,r,j as e,I as L,e as F,y as G,P as O,z as $,A as B}from"./index-DrVao0Ep.js";import{l as M,p as _,C as J,a as q,b as K,c as U,s as V,d as Q,e as W,i as X,f as Y,g as Z,h as ee,j as se,k as ae,m as te,n as oe,o as re}from"./App-F9uaAVcH.js";import{M as ne}from"./Modal-CQgYymmr.js";import{P as ce}from"./PageScroll-hT7UTLvD.js";import"./data-B-RQmit6.js";const R=["claude","codex","opencode","pi"];function D({onSet:s,onClear:l,placeholder:a,busy:o,t:c}){const[t,g]=r.useState("");return e.jsxs("form",{className:"proj-drawer proj-pw",onSubmit:d=>{d.preventDefault(),t&&(s(t),g(""))},children:[e.jsx("input",{className:"proj-add-path",type:"password",value:t,onChange:d=>g(d.target.value),placeholder:a,"aria-label":a}),e.jsx("button",{className:"proj-act primary",type:"submit",disabled:!t||o,children:c("projects.passwordSet")}),e.jsx("button",{className:"proj-act",type:"button",disabled:o,onClick:l,children:c("projects.passwordClear")})]})}function ie({onAdded:s,onClose:l,t:a}){const[o,c]=r.useState(""),[t,g]=r.useState(null),[d,u]=r.useState(!0),[i,b]=r.useState(!1),[k,m]=r.useState(null),[P,v]=r.useState(""),[w,f]=r.useState(!1),[S,N]=r.useState(!1),[h,E]=r.useState([]),n=r.useCallback(async p=>{if(i)return;u(!0),m(null),v("");const y=await Q(p);if(u(!1),!y.ok){m(y.error==="network"?a("projects.actionFailed"):y.error);return}g(y),c(y.path),f(!1),N(!1),E([])},[i,a]);r.useEffect(()=>{n("")},[]),r.useEffect(()=>{const p=y=>{y.key==="Escape"&&!i&&l()};return window.addEventListener("keydown",p),()=>window.removeEventListener("keydown",p)},[i,l]);const x=!!t&&o===t.path,I=x&&!t.gitRoot,A=x&&!t.initialized,j=x&&!d&&!i&&!t.cataloged&&(!I||w)&&(!S||!!h.length),C=p=>E(y=>y.includes(p)?y.filter(H=>H!==p):[...y,p]),z=async p=>{if(p.preventDefault(),!j)return;b(!0),m(null),v("");const y=await ee(t.path,{...I?{initGit:w}:{},...A&&S?{init:{harness:h.join(",")}}:{}});if(b(!1),y.ok){s(y.project);return}m(y.error==="network"?a("projects.actionFailed"):y.error),v(y.output||"")};return e.jsx(ne,{title:a("projects.addTitle"),closeLabel:a("common.close"),onClose:()=>{i||l()},className:"proj-add-modal",children:e.jsxs("form",{className:"proj-add-flow",onSubmit:z,children:[e.jsxs("div",{className:"proj-add-pathbar",children:[e.jsx(F,{icon:"arrow-left",size:14,className:"proj-act icon",label:a("projects.browseParent"),disabled:!(t!=null&&t.parent)||d||i,onClick:()=>n(t.parent)}),e.jsx("button",{type:"button",className:"proj-act icon proj-home-btn","data-tip":a("projects.browseHome"),"aria-label":a("projects.browseHome"),disabled:!(t!=null&&t.home)||d||i,onClick:()=>n(t.home),children:"~"}),e.jsx("input",{className:"proj-add-path",value:o,autoFocus:!0,spellCheck:!1,onChange:p=>{c(p.target.value),m(null)},onKeyDown:p=>{p.key==="Enter"&&(p.preventDefault(),o.trim()&&n(o.trim()))},placeholder:a("projects.addPlaceholder"),"aria-label":a("projects.addPlaceholder"),disabled:i}),e.jsx("button",{className:"proj-act",type:"button",disabled:!o.trim()||d||i,onClick:()=>n(o.trim()),children:a(d?"projects.browseLoading":"projects.browseGo")})]}),e.jsxs("div",{className:"proj-folder-list","aria-label":a("projects.folderList"),"aria-busy":d,children:[!d&&(t==null?void 0:t.entries.map(p=>e.jsxs("button",{type:"button",className:"proj-folder-row",onClick:()=>n(p.path),disabled:i,children:[e.jsx(L,{name:"chevron-right",size:13}),e.jsx("span",{className:"proj-folder-name",children:p.name}),p.git&&e.jsx("span",{className:"proj-folder-tag",children:"Git"}),p.initialized&&e.jsx("span",{className:"proj-folder-tag spex",children:"SpexCode"})]},p.path))),!d&&t&&!t.entries.length&&e.jsx("div",{className:"proj-folder-empty",children:a("projects.folderEmpty")}),d&&e.jsx("div",{className:"proj-folder-empty",children:a("projects.browseLoading")})]}),x&&e.jsxs("div",{className:"proj-add-options",children:[e.jsx("div",{className:"proj-add-selected",title:t.path,children:t.path}),t.gitRoot?e.jsxs("div",{className:"proj-add-state",children:[e.jsx(L,{name:"check",size:13})," Git ",e.jsx("code",{children:t.gitRoot})]}):e.jsxs("label",{className:"proj-add-check",children:[e.jsx("input",{type:"checkbox",checked:w,onChange:p=>f(p.target.checked),disabled:i}),e.jsx("span",{children:a("projects.initGit")})]}),t.initialized?e.jsxs("div",{className:"proj-add-state",children:[e.jsx(L,{name:"check",size:13})," ",a("projects.spexInitialized")]}):e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"proj-add-check",children:[e.jsx("input",{type:"checkbox",checked:S,onChange:p=>{N(p.target.checked),v(""),m(null)},disabled:i}),e.jsx("span",{children:a("projects.initSpex")})]}),S&&e.jsxs("fieldset",{className:"proj-add-harnesses",disabled:i,children:[e.jsx("legend",{children:a("projects.harnessTargets")}),R.map(p=>e.jsxs("label",{className:"proj-add-harness",children:[e.jsx("input",{type:"checkbox",checked:h.includes(p),onChange:()=>C(p)}),e.jsx("span",{children:p})]},p))]})]}),t.cataloged&&e.jsx("div",{className:"proj-op-status ok",children:a("projects.alreadyAdded")})]}),(k||P)&&e.jsxs("div",{className:"proj-add-result",children:[k&&e.jsx("div",{className:"proj-err",children:k}),P&&e.jsx("pre",{className:"proj-log",children:P})]}),e.jsxs("div",{className:"proj-add-actions",children:[e.jsx("button",{className:"proj-act",type:"button",disabled:i,onClick:l,children:a("common.cancel")}),e.jsx("button",{className:"proj-act primary",type:"submit",disabled:!j,children:a(i?"projects.addBusy":"projects.addSubmit")})]})]})})}function le({p:s,onRefresh:l,t:a}){const[o,c]=r.useState(null),[t,g]=r.useState(""),[d,u]=r.useState(!1),[i,b]=r.useState(null),[k,m]=r.useState(!1),[P,v]=r.useState(0),[w,f]=r.useState(s.identity.icon),[S,N]=r.useState(!1),[h,E]=r.useState(null);r.useEffect(()=>{let j=!0;return c(null),b(null),m(!1),W(s.id).then(C=>{if(j){if(!C.ok){b(C.error==="network"?a("projects.actionFailed"):C.error);return}c({content:C.content,revision:C.revision}),g(C.content),f(s.identity.icon)}}),()=>{j=!1}},[s.id,s.identity.icon,P,a]);let n=!1;try{const j=JSON.parse(t);n=!j||typeof j!="object"||Array.isArray(j)}catch{n=!0}const x=!!o&&t!==o.content,I=async()=>{var C,z;if(!o||n||!x||d)return;u(!0),b(null),m(!1);const j=await se(s.id,t,o.revision);if(u(!1),!j.ok){b(j.error==="network"?a("projects.actionFailed"):j.error);return}c({content:j.content,revision:j.revision}),g(j.content),m(!0);try{f(((z=(C=JSON.parse(j.content))==null?void 0:C.dashboard)==null?void 0:z.icon)||s.identity.icon)}catch{}l()},A=async j=>{if(!o||S)return!1;const C=w;f(j),N(!0),E(null),m(!1);const z=await ae(s.id,j,o.revision);return N(!1),z.ok?(c({content:z.content,revision:z.revision}),g(z.content),f(z.identity.icon),m(!0),l(),!0):(f(C),E(z.error==="network"?a("projects.actionFailed"):z.error),!1)};return e.jsxs("div",{className:"proj-drawer proj-config",children:[e.jsxs("div",{className:"proj-config-head",children:[e.jsx("code",{children:"spexcode.json"}),k&&e.jsx("span",{className:"proj-op-status ok",children:a("projects.configSaved")})]}),o?e.jsxs(e.Fragment,{children:[e.jsx("textarea",{className:n?"proj-config-editor invalid":"proj-config-editor",value:t,onChange:j=>{g(j.target.value),m(!1),b(null)},"aria-label":a("projects.configEditor"),spellCheck:!1,disabled:d}),e.jsxs("div",{className:"proj-setup-row",children:[e.jsx("button",{className:"proj-act primary",type:"button",disabled:!x||n||d,onClick:I,children:a(d?"projects.configSaving":"projects.configSave")}),e.jsx("button",{className:"proj-act",type:"button",disabled:d,onClick:()=>v(j=>j+1),children:a("projects.configReload")}),n&&e.jsx("span",{className:"proj-err",children:a("projects.configInvalid")}),i&&e.jsx("span",{className:"proj-err",children:i})]}),e.jsx(B,{value:w,onChange:A,label:a("projects.projectIcon"),editLabel:a("projects.editProjectIcon"),name:`project-icon-${s.id}`,disabled:d||S}),h&&e.jsx("span",{className:"proj-err",children:h})]}):e.jsxs("div",{className:"proj-setup-row",children:[!i&&e.jsx("span",{className:"proj-dim",children:a("projects.configLoading")}),i&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"proj-err",children:i}),e.jsx("button",{className:"proj-act",type:"button",onClick:()=>v(j=>j+1),children:a("projects.configReload")})]})]})]})}function de({p:s,busyOp:l,run:a,result:o,t:c}){const[t,g]=r.useState([]),d=u=>g(i=>i.includes(u)?i.filter(b=>b!==u):[...i,u]);return e.jsxs("div",{className:"proj-drawer proj-setup",children:[e.jsxs("div",{className:"proj-setup-row",children:[e.jsx("span",{className:"proj-dim",children:c("projects.harnessLabel")}),R.map(u=>e.jsx("button",{type:"button",className:t.includes(u)?"proj-act on":"proj-act","aria-pressed":t.includes(u),disabled:!!l,onClick:()=>d(u),children:u},u))]}),e.jsxs("div",{className:"proj-setup-row",children:[e.jsx("button",{className:"proj-act primary",type:"button",disabled:!!l||!t.length,title:t.length?void 0:c("projects.harnessRequired"),onClick:()=>a("init",()=>X(s.id,t.join(","))),children:c(l==="init"?"projects.running":"projects.init")}),e.jsx("button",{className:"proj-act",type:"button",disabled:!!l,onClick:()=>a("doctor",()=>Y(s.id)),children:c(l==="doctor"?"projects.running":"projects.doctor")})]}),o&&e.jsxs("div",{className:"proj-op-result proj-full",children:[e.jsx("div",{className:o.ok?"proj-op-status ok":"proj-op-status fail",children:o.ok?c("projects.opOk",{op:c(`projects.${o.op}`)}):c("projects.opFail",{op:c(`projects.${o.op}`),code:o.code??"?"})}),o.output?e.jsx("pre",{className:"proj-log",children:o.output}):null]})]})}function pe({p:s,health:l,onRefresh:a,t:o}){const[c,t]=r.useState(null),[g,d]=r.useState(!1),[u,i]=r.useState(null),[b,k]=r.useState(null),[m,P]=r.useState(null),v=s.id===O,w=s.online===!1,f=w?"stopped":l||"probing",S=async h=>{d(!0),k(null);const E=await h();d(!1),E.ok?t(null):k(E.error||o("projects.actionFailed")),a()},N=async(h,E)=>{i(h),k(null),P(null);const n=await E();i(null),h!=="serve"?P({op:h,ok:n.ok,code:n.code,output:n.output||(n.ok?"":n.error||"")}):n.ok||k(n.error||o("projects.actionFailed")),a()};return e.jsxs("li",{className:v?"proj-row current":"proj-row",children:[e.jsxs("div",{className:"proj-row-main",children:[e.jsx("span",{className:`proj-health h-${f}`,"data-tip":o(`projects.health.${f}`)}),e.jsx(G,{icon:s.identity.icon,size:26}),e.jsx("span",{className:"proj-name",children:s.identity.title}),s.gated&&e.jsx(L,{name:"lock",size:12,className:"proj-locked"}),v&&e.jsx("span",{className:"proj-tag",children:o("projects.current")}),e.jsx("span",{className:"proj-path",title:s.id,children:s.root||s.id}),e.jsxs("span",{className:"proj-actions",children:[e.jsx(F,{icon:"settings",label:o("projects.configTitle"),className:c==="config"?"proj-act icon on":"proj-act icon",size:13,onClick:()=>{t(h=>h==="config"?null:"config"),k(null)}}),e.jsx(F,{icon:"terminal",label:o("projects.setupTitle"),className:c==="setup"?"proj-act icon on":"proj-act icon",size:13,onClick:()=>{t(h=>h==="setup"?null:"setup"),k(null)}}),e.jsx(F,{icon:"lock",label:o("projects.passwordTitle"),className:c==="pw"?"proj-act icon on":"proj-act icon",size:13,onClick:()=>{t(h=>h==="pw"?null:"pw"),k(null)}}),w?e.jsx("button",{className:"proj-act primary",type:"button",disabled:!!u,onClick:()=>N("serve",()=>te(s.id)),children:o(u==="serve"?"projects.startBusy":"projects.start")}):e.jsx("a",{className:"proj-act primary",href:$(s.id),children:o("projects.open")})]})]}),b&&e.jsx("div",{className:"proj-err",children:b}),c==="pw"&&e.jsx(D,{t:o,busy:g,placeholder:o("projects.passwordPlaceholder"),onSet:h=>S(()=>re(s.id,h)),onClear:()=>S(()=>oe(s.id))}),c==="config"&&e.jsx(le,{p:s,onRefresh:a,t:o}),c==="setup"&&e.jsx(de,{p:s,busyOp:u,run:N,result:m,t:o})]})}function je({gateway:s,onRefresh:l,t:a}){const[o,c]=r.useState(s.identity.icon),[t,g]=r.useState(!1),[d,u]=r.useState(null);r.useEffect(()=>{c(s.identity.icon)},[s.identity.icon]);const i=async b=>{if(t||!s.revision)return!1;const k=o;c(b),g(!0),u(null);const m=await Z(b,s.revision);return g(!1),m.ok?(c(m.gateway.identity.icon),l(),!0):(c(k),u(m.error==="network"?a("projects.actionFailed"):m.error),!1)};return e.jsxs("div",{className:"proj-gateway-identity",children:[e.jsx(B,{value:o,onChange:i,label:a("projects.gatewayIcon"),editLabel:a("projects.editGatewayIcon"),name:"gateway-icon",fallback:"gateway",disabled:t||!s.revision}),d&&e.jsx("span",{className:"proj-err",children:d})]})}function ge(){const s=T(),[l,a]=r.useState({kind:"loading"}),[o,c]=r.useState({}),[t,g]=r.useState(null),[d,u]=r.useState(!1),[i,b]=r.useState(!1),[k,m]=r.useState(null),[P,v]=r.useState(1),w=r.useRef(0),f=r.useCallback(async()=>{const n=++w.current,x=await M();n===w.current&&(x.state==="ok"?(a({kind:"ok",adminGated:x.adminGated,gateway:x.gateway,projects:x.projects}),x.projects.filter(I=>I.online!==!1).forEach(I=>{_(I.id).then(A=>{n===w.current&&c(j=>({...j,[I.id]:A}))})})):x.state==="denied"?a({kind:"denied",reason:x.reason}):a(I=>I.kind==="ok"?I:{kind:"absent"}))},[]);r.useEffect(()=>{f();const n=setInterval(f,J),x=()=>{document.hidden||f()};return document.addEventListener("visibilitychange",x),()=>{clearInterval(n),document.removeEventListener("visibilitychange",x)}},[f]);const S=async n=>{b(!0),m(null);const x=await n();b(!1),x.ok?g(null):m(x.error||s("projects.actionFailed")),f()},N=q(l.kind==="ok"?l.projects:[],P);r.useEffect(()=>{N.page!==P&&v(N.page)},[N.page,P]);const h=l.kind==="loading"?e.jsx("div",{className:"loading",children:s("hud.loading")}):l.kind==="denied"?e.jsx(K,{scope:"admin",locked:l.reason==="locked",onUnlocked:f}):l.kind==="absent"?e.jsx("div",{className:"proj-empty",children:e.jsx("p",{children:s("projects.absent")})}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"proj-head",children:[e.jsx("span",{className:"proj-count",children:s("projects.count",{n:l.projects.length})}),e.jsxs("button",{className:d?"proj-act on":"proj-act",onClick:()=>u(!0),children:[e.jsx(L,{name:"plus",size:12})," ",s("projects.add")]}),e.jsxs("button",{className:t==="admin"?"proj-act on":"proj-act",onClick:()=>{g(n=>n==="admin"?null:"admin"),m(null)},children:[e.jsx(L,{name:"lock",size:12})," ",s("projects.adminPassword")]})]}),!l.adminGated&&e.jsx("div",{className:"proj-hint",children:s("projects.adminUngated")}),t==="admin"&&e.jsxs("div",{className:"proj-admin-pw",children:[e.jsx(D,{t:s,busy:i,placeholder:s("projects.adminPasswordPlaceholder"),onSet:n=>S(()=>V(n)),onClear:()=>S(()=>U())}),k&&e.jsx("div",{className:"proj-err",children:k})]}),l.projects.length?e.jsx("ul",{className:"proj-list",children:N.items.map(n=>e.jsx(pe,{p:n,health:o[n.id],onRefresh:f,t:s},n.id))}):e.jsx("div",{className:"proj-empty",children:e.jsx("p",{children:s("projects.empty")})}),N.pageCount>1&&e.jsxs("nav",{className:"proj-pagination","aria-label":s("projects.pagination"),children:[e.jsx(F,{icon:"arrow-left",label:s("projects.previousPage"),className:"proj-act icon",size:14,disabled:N.page===1,onClick:()=>v(n=>n-1)}),e.jsx("span",{className:"proj-page-label",children:s("projects.pageOf",{page:N.page,pages:N.pageCount})}),e.jsx(F,{icon:"chevron-right",label:s("projects.nextPage"),className:"proj-act icon",size:14,disabled:N.page===N.pageCount,onClick:()=>v(n=>n+1)})]}),e.jsx("div",{className:"proj-page-details","aria-label":s("projects.gatewaySettings"),children:e.jsx(je,{gateway:l.gateway,onRefresh:f,t:s})})]}),E=l.kind==="ok"?l.gateway.identity:{icon:"gateway"};return e.jsxs("div",{className:"page-pane page-projects",children:[e.jsx(ce,{className:"page-projects-scroll",children:e.jsxs("div",{className:"proj-body",children:[e.jsxs("div",{className:"cred-brand proj-brand",children:[e.jsx(G,{icon:E.icon,fallback:"gateway",size:30}),e.jsx("span",{children:"$ spexcode"})]}),e.jsx("h1",{className:"page-title",children:s("projects.title")}),h]})}),d&&e.jsx(ie,{t:s,onClose:()=>u(!1),onAdded:()=>{u(!1),f()}})]})}export{ge as default};
@@ -1,32 +0,0 @@
1
- /**
2
- * Copyright (c) 2014 The xterm.js authors. All rights reserved.
3
- * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
4
- * https://github.com/chjj/term.js
5
- * @license MIT
6
- *
7
- * Permission is hereby granted, free of charge, to any person obtaining a copy
8
- * of this software and associated documentation files (the "Software"), to deal
9
- * in the Software without restriction, including without limitation the rights
10
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
- * copies of the Software, and to permit persons to whom the Software is
12
- * furnished to do so, subject to the following conditions:
13
- *
14
- * The above copyright notice and this permission notice shall be included in
15
- * all copies or substantial portions of the Software.
16
- *
17
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
- * THE SOFTWARE.
24
- *
25
- * Originally forked from (with the author's permission):
26
- * Fabrice Bellard's javascript vt100 for jslinux:
27
- * http://bellard.org/jslinux/
28
- * Copyright (c) 2011 Fabrice Bellard
29
- * The original design remains. The terminal itself
30
- * has been extended to include xterm CSI codes, among
31
- * other features.
32
- */.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;-webkit-user-select:text;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}