elanous 0.2.4 → 0.2.6

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 (455) hide show
  1. package/README.md +7 -6
  2. package/apps/pwa/out/404/index.html +1 -1
  3. package/apps/pwa/out/404.html +1 -1
  4. package/apps/pwa/out/_next/static/chunks/1169-696263ac7af8c4d4.js +1 -0
  5. package/apps/pwa/out/_next/static/chunks/1883.c91a2648af4842fd.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/1947-9d64872eeb9cfdec.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/2808-dc06482994b40f70.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/{5080-1613752891fcadb4.js → 2984-977cfa339fcd65a5.js} +3 -3
  9. package/apps/pwa/out/_next/static/chunks/3165-95515ca5f299a120.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/{8142-011e1f474efb8b33.js → 3190-e9282753e7ebde85.js} +1 -1
  11. package/apps/pwa/out/_next/static/chunks/3995-bee512a7063036ce.js +1 -0
  12. package/apps/pwa/out/_next/static/chunks/{6062-73e68343a9814f6a.js → 4240-7153881b0b377306.js} +1 -1
  13. package/apps/pwa/out/_next/static/chunks/4259-99614149577e77cb.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/4283-329eabeaf233e6cd.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/4328-cb5058b1acc2de5e.js +25 -0
  16. package/apps/pwa/out/_next/static/chunks/4801-ecee6ef62b349b18.js +1 -0
  17. package/apps/pwa/out/_next/static/chunks/5110-8058791dd25a2e14.js +1 -0
  18. package/apps/pwa/out/_next/static/chunks/{3403.4bc97b4066945a94.js → 5329.8b7e4bca684b6eec.js} +2 -2
  19. package/apps/pwa/out/_next/static/chunks/5330-c41e9670f594c38f.js +1 -0
  20. package/apps/pwa/out/_next/static/chunks/5423-e95fd125d1794349.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/5478-b5eae07dc79ea619.js +1 -0
  22. package/apps/pwa/out/_next/static/chunks/5787-96ee6642b9a661e5.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/6448-79d72368589f98bc.js +1 -0
  24. package/apps/pwa/out/_next/static/chunks/6522-9866c002b5531836.js +1 -0
  25. package/apps/pwa/out/_next/static/chunks/6729-b4a558b7aa891e0c.js +1 -0
  26. package/apps/pwa/out/_next/static/chunks/6969-cb03f9410b7d2e03.js +1 -0
  27. package/apps/pwa/out/_next/static/chunks/7007-3b9861091bb8dd21.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/{5791-bb82743fa6299562.js → 763-7d0e1913b5074e98.js} +1 -1
  29. package/apps/pwa/out/_next/static/chunks/{4323.c5dfb6f503304775.js → 7633.0654fe6ea259c1ee.js} +1 -1
  30. package/apps/pwa/out/_next/static/chunks/7930-8dc7e20fc6fc19ca.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/8071-187edbc22a86741f.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/8198-d4101ad70cb9a579.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/8250.4a2c5553a07cdf47.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/8293-123b91e7b0330dc0.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/8296-d6d5d87dfa911d41.js +1 -0
  36. package/apps/pwa/out/_next/static/chunks/8305-603963c33ee8eec3.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/8612-4a0066f20951b8fd.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/{2ea96958-e8c7e112de50b067.js → 8d0d9faf-97887ff99713b84e.js} +1 -1
  39. package/apps/pwa/out/_next/static/chunks/9181-cf4e1b61c4783f92.js +1 -0
  40. package/apps/pwa/out/_next/static/chunks/{8046cadf-211ca3c0e00f2b72.js → 91ff6dda-3b33d42d20657429.js} +1 -1
  41. package/apps/pwa/out/_next/static/chunks/9262-26c2ecbd5a67e4a2.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/9328-45abdebce4fbecb7.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/9355-dbc67205adf8745f.js +1 -0
  44. package/apps/pwa/out/_next/static/chunks/9763.255b90dd69875689.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/9933-66d31ec25c0231af.js +1 -0
  46. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-bd06fb55f4da0381.js +1 -0
  47. package/apps/pwa/out/_next/static/chunks/app/approvals/page-4e586142da455a25.js +1 -0
  48. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-889ad5cddcf45b0d.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/app/board/page-47ba401d56572c27.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/app/botlab/page-0b54f9c83458e038.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/app/bots/page-4fcc296ef6c8ed90.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/app/chat/page-fe9fda494a87f4e5.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/app/control/page-f9642e25ce129590.js +1 -0
  54. package/apps/pwa/out/_next/static/chunks/app/design-check/page-e1063e8ba5f3e2e7.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/app/editor/page-9d0df30027d8aa9d.js +1 -0
  56. package/apps/pwa/out/_next/static/chunks/app/healthz/route-bd06fb55f4da0381.js +1 -0
  57. package/apps/pwa/out/_next/static/chunks/app/intake/page-d97adf2c9455b8d0.js +1 -0
  58. package/apps/pwa/out/_next/static/chunks/app/layout-236b80d202110362.js +1 -0
  59. package/apps/pwa/out/_next/static/chunks/app/live/page-21a30f35f1a276ad.js +1 -0
  60. package/apps/pwa/out/_next/static/chunks/app/market/page-b1a5be357c4fa25d.js +1 -0
  61. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1705a60303f7f573.js +1 -0
  62. package/apps/pwa/out/_next/static/chunks/app/morning/page-76b337c11ad0e237.js +1 -0
  63. package/apps/pwa/out/_next/static/chunks/app/not-found-7c0f85fbb56f64c6.js +1 -0
  64. package/apps/pwa/out/_next/static/chunks/app/observatory/page-65ca16b20617b44d.js +1 -0
  65. package/apps/pwa/out/_next/static/chunks/app/page-e7f9b8fc29411c1d.js +1 -0
  66. package/apps/pwa/out/_next/static/chunks/app/reflection/page-92ea6213d1aeec04.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-a913a005aacb5476.js +1 -0
  68. package/apps/pwa/out/_next/static/chunks/app/sessions/page-2d78804a40dfdef6.js +1 -0
  69. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-08a99148e780ac00.js +1 -0
  70. package/apps/pwa/out/_next/static/chunks/app/settings/page-deb674e7ed36f815.js +1 -0
  71. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-49f8de0534d192d7.js +1 -0
  72. package/apps/pwa/out/_next/static/chunks/app/setup/layout-bd06fb55f4da0381.js +1 -0
  73. package/apps/pwa/out/_next/static/chunks/app/setup/page-ba162a28d2176e18.js +1 -0
  74. package/apps/pwa/out/_next/static/chunks/app/share/page-1ff1a37b550ab41a.js +1 -0
  75. package/apps/pwa/out/_next/static/chunks/app/showroom/page-ccaa698f56c0fbdb.js +1 -0
  76. package/apps/pwa/out/_next/static/chunks/app/tasks/page-53b944082de1d7db.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/app/term/page-9b70adf1552789bf.js +1 -0
  78. package/apps/pwa/out/_next/static/chunks/app/trace/page-30d482aa63241fe8.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/app/vault/page-aecf786f54651d8a.js +1 -0
  80. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-6ab9b62c7b6e08f2.js +1 -0
  81. package/apps/pwa/out/_next/static/chunks/app/workflows/page-08949735455e0c9a.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/app/workspace/page-a1479005234a46c2.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-c3890e90bd232732.js +1 -0
  84. package/apps/pwa/out/_next/static/chunks/beb5cf10-9adcc10b83930090.js +1 -0
  85. package/apps/pwa/out/_next/static/chunks/framework-d68d41c88e05c801.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/main-app-11c63971b7a9593b.js +1 -0
  87. package/apps/pwa/out/_next/static/chunks/main-d09452353bd0d9cc.js +1 -0
  88. package/apps/pwa/out/_next/static/chunks/pages/_app-184d727cebeca767.js +1 -0
  89. package/apps/pwa/out/_next/static/chunks/pages/_error-21bbbbac99b720b1.js +1 -0
  90. package/apps/pwa/out/_next/static/chunks/{webpack-e5bea36f183b25e6.js → webpack-37b8bf78a3c6eec5.js} +1 -1
  91. package/apps/pwa/out/_next/static/css/eaa74e8bb2f62269.css +1 -0
  92. package/apps/pwa/out/_next/static/{zoQX5iTvXOsIvCjxCe1Ji → qMI0jnlZaBjjm4aIDYNGM}/_buildManifest.js +1 -1
  93. package/apps/pwa/out/approvals/index.html +1 -1
  94. package/apps/pwa/out/approvals/index.txt +29 -27
  95. package/apps/pwa/out/autopilot/index.html +1 -1
  96. package/apps/pwa/out/autopilot/index.txt +29 -27
  97. package/apps/pwa/out/board/index.html +1 -1
  98. package/apps/pwa/out/board/index.txt +29 -27
  99. package/apps/pwa/out/botlab/index.html +1 -1
  100. package/apps/pwa/out/botlab/index.txt +26 -24
  101. package/apps/pwa/out/bots/index.html +1 -1
  102. package/apps/pwa/out/bots/index.txt +26 -24
  103. package/apps/pwa/out/chat/index.html +1 -1
  104. package/apps/pwa/out/chat/index.txt +26 -24
  105. package/apps/pwa/out/control/index.html +1 -1
  106. package/apps/pwa/out/control/index.txt +29 -27
  107. package/apps/pwa/out/design-check/index.html +1 -1
  108. package/apps/pwa/out/design-check/index.txt +29 -27
  109. package/apps/pwa/out/editor/index.html +1 -1
  110. package/apps/pwa/out/editor/index.txt +29 -27
  111. package/apps/pwa/out/healthz +1 -1
  112. package/apps/pwa/out/icons/elanous-16.png +0 -0
  113. package/apps/pwa/out/icons/elanous-180.png +0 -0
  114. package/apps/pwa/out/icons/elanous-192.png +0 -0
  115. package/apps/pwa/out/icons/elanous-32.png +0 -0
  116. package/apps/pwa/out/icons/elanous-512.png +0 -0
  117. package/apps/pwa/out/index.html +1 -1
  118. package/apps/pwa/out/index.txt +26 -24
  119. package/apps/pwa/out/intake/index.html +1 -1
  120. package/apps/pwa/out/intake/index.txt +29 -27
  121. package/apps/pwa/out/live/index.html +1 -1
  122. package/apps/pwa/out/live/index.txt +29 -27
  123. package/apps/pwa/out/manifest.webmanifest +5 -2
  124. package/apps/pwa/out/market/index.html +1 -1
  125. package/apps/pwa/out/market/index.txt +26 -24
  126. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  127. package/apps/pwa/out/missions/placeholder/index.txt +26 -24
  128. package/apps/pwa/out/morning/index.html +1 -1
  129. package/apps/pwa/out/morning/index.txt +29 -27
  130. package/apps/pwa/out/observatory/index.html +1 -1
  131. package/apps/pwa/out/observatory/index.txt +29 -27
  132. package/apps/pwa/out/reflection/index.html +1 -1
  133. package/apps/pwa/out/reflection/index.txt +27 -25
  134. package/apps/pwa/out/scheduler/index.html +1 -1
  135. package/apps/pwa/out/scheduler/index.txt +29 -27
  136. package/apps/pwa/out/sessions/index.html +1 -1
  137. package/apps/pwa/out/sessions/index.txt +26 -24
  138. package/apps/pwa/out/settings/devices/index.html +1 -1
  139. package/apps/pwa/out/settings/devices/index.txt +29 -27
  140. package/apps/pwa/out/settings/index.html +1 -1
  141. package/apps/pwa/out/settings/index.txt +29 -27
  142. package/apps/pwa/out/setup/done/index.html +1 -1
  143. package/apps/pwa/out/setup/done/index.txt +29 -27
  144. package/apps/pwa/out/setup/index.html +1 -1
  145. package/apps/pwa/out/setup/index.txt +29 -27
  146. package/apps/pwa/out/share/index.html +1 -1
  147. package/apps/pwa/out/share/index.txt +29 -27
  148. package/apps/pwa/out/showroom/index.html +1 -1
  149. package/apps/pwa/out/showroom/index.txt +26 -24
  150. package/apps/pwa/out/sw-strategies.js +44 -0
  151. package/apps/pwa/out/sw.js +6 -44
  152. package/apps/pwa/out/tasks/index.html +1 -1
  153. package/apps/pwa/out/tasks/index.txt +29 -27
  154. package/apps/pwa/out/term/index.html +1 -1
  155. package/apps/pwa/out/term/index.txt +29 -27
  156. package/apps/pwa/out/trace/index.html +1 -1
  157. package/apps/pwa/out/trace/index.txt +29 -27
  158. package/apps/pwa/out/vault/index.html +1 -1
  159. package/apps/pwa/out/vault/index.txt +29 -27
  160. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  161. package/apps/pwa/out/workflows/chat-ui/index.txt +29 -27
  162. package/apps/pwa/out/workflows/index.html +1 -1
  163. package/apps/pwa/out/workflows/index.txt +29 -27
  164. package/apps/pwa/out/workspace/index.html +1 -1
  165. package/apps/pwa/out/workspace/index.txt +29 -27
  166. package/apps/pwa/out/worktrees/index.html +1 -1
  167. package/apps/pwa/out/worktrees/index.txt +29 -27
  168. package/catalog/resources.yaml +6 -6
  169. package/docs/goal-context/steward-directives-2026-09-28.md +35 -37
  170. package/graphs/landing/landing-heal.yaml +1 -1
  171. package/graphs/release/recipes.yaml +11 -1
  172. package/graphs/release/release-loop.yaml +9 -2
  173. package/graphs/video/README.md +1 -0
  174. package/graphs/video/explainer-line.yaml +58 -0
  175. package/package.json +3 -1
  176. package/plugins/card-followup/README.md +33 -0
  177. package/plugins/card-followup/examples/card-sample.json +7 -0
  178. package/plugins/card-followup/graphs/card-followup.yaml +16 -0
  179. package/plugins/card-followup/graphs/recipes.yaml +12 -0
  180. package/plugins/card-followup/graphs/run-step.ts +172 -0
  181. package/plugins/card-followup/plugin.json +25 -0
  182. package/plugins/geo-check/README.md +13 -0
  183. package/plugins/geo-check/examples/brand-sample.json +8 -0
  184. package/plugins/geo-check/graphs/geo-check.yaml +20 -0
  185. package/plugins/geo-check/graphs/recipes.yaml +18 -0
  186. package/plugins/geo-check/graphs/run-step.ts +177 -0
  187. package/plugins/geo-check/plugin.json +24 -0
  188. package/plugins/job-coach/.codex-plugin/plugin.json +18 -1
  189. package/plugins/job-coach/README.md +42 -0
  190. package/plugins/job-coach/connectors/ncs/server.ts +4 -3
  191. package/plugins/job-coach/graphs/gap-judge.ts +44 -0
  192. package/plugins/job-coach/graphs/recipes.yaml +27 -0
  193. package/plugins/job-coach/graphs/report-enterprise.yaml +28 -0
  194. package/plugins/job-coach/graphs/run-step.ts +211 -17
  195. package/plugins/job-coach/plugin.json +16 -3
  196. package/plugins/job-coach/skills/enterprise-ai-fit/SKILL.md +8 -0
  197. package/plugins/job-coach/skills/enterprise-competency/SKILL.md +8 -0
  198. package/plugins/job-coach/skills/enterprise-needs/SKILL.md +8 -0
  199. package/plugins/job-coach/skills/enterprise-roadmap/SKILL.md +8 -0
  200. package/plugins/job-coach/skills/enterprise-task-analysis/SKILL.md +8 -0
  201. package/plugins/job-coach/skills/interview-to-profile/SKILL.md +18 -1
  202. package/scripts/backup/elanous-backup.sh +4 -1
  203. package/scripts/build-docs-site.ts +4 -3
  204. package/scripts/coord-channel-watch.sh +23 -4
  205. package/scripts/coord-post.sh +49 -12
  206. package/scripts/coord-tracks.json +5 -5
  207. package/scripts/daemon-port-baseline.txt +1 -2
  208. package/scripts/eval-bot-vs-grok.ts +79 -0
  209. package/scripts/eval-grok-live-baseline.ts +36 -0
  210. package/scripts/fixtures/front-route-corpus.sample.json +17 -0
  211. package/scripts/fleet/node-setup.sh +46 -7
  212. package/scripts/landing-heal/must-fix-match.ts +26 -0
  213. package/scripts/landing-heal/run-mission.ts +114 -20
  214. package/scripts/lib/android-test-device.ts +32 -0
  215. package/scripts/lib/front-route-measurement.ts +131 -0
  216. package/scripts/lib/tui-sim-keys.ts +42 -0
  217. package/scripts/measure-front-route-classifier.ts +56 -0
  218. package/scripts/media/ocr-leak-scan.sh +21 -0
  219. package/scripts/public-export.ts +2 -3
  220. package/scripts/public-import-pr.ts +80 -6
  221. package/scripts/publish-internal-dist.ts +2 -3
  222. package/scripts/red-sweep-diff.ts +1 -1
  223. package/scripts/release-loop/auto-approve-node.ts +72 -0
  224. package/scripts/release-loop/checklist-gate-node.ts +35 -0
  225. package/scripts/release-loop/gate-diff.ts +29 -0
  226. package/scripts/release-loop/gate-node.ts +366 -45
  227. package/scripts/release-loop/publish-node.ts +7 -3
  228. package/scripts/release-loop/release-docs.ts +20 -13
  229. package/scripts/release-loop/shard-plan.ts +47 -0
  230. package/scripts/release-loop/test-durations.ts +63 -0
  231. package/scripts/release-loop/upgrade-node.ts +3 -2
  232. package/scripts/test-audit-coverage-per-file.sh +16 -0
  233. package/scripts/test-audit-meaningless.ts +88 -0
  234. package/scripts/test-audit-overlap-and-weak.ts +73 -0
  235. package/scripts/test-deterministic.ts +27 -5
  236. package/scripts/tui-sim.ts +59 -14
  237. package/scripts/ux/bump-installed.sh +20 -0
  238. package/scripts/ux/lib/cdp.ts +72 -0
  239. package/scripts/ux/record-page.ts +53 -0
  240. package/skills/explainer-video/SKILL.md +117 -0
  241. package/skills/explainer-video/engine/brand/elanous-mark-on-dark.svg +1 -0
  242. package/skills/explainer-video/engine/build.mjs +431 -0
  243. package/skills/explainer-video/engine/reel.mjs +128 -0
  244. package/skills/explainer-video/engine/reel.sh +8 -0
  245. package/skills/explainer-video/engine/vo.ts +79 -0
  246. package/skills/explainer-video/examples/elanous-0.2.5/script.json +155 -0
  247. package/src/agent/nested-agent-env.ts +1 -0
  248. package/src/agent-mission/driver.ts +95 -16
  249. package/src/agent-mission/mission-cli.ts +6 -0
  250. package/src/agent-mission/resource-ladder.ts +73 -25
  251. package/src/auth/acp-token.ts +16 -0
  252. package/src/auth/github-app-token.ts +112 -0
  253. package/src/autopilot/gh-rest-fallback.ts +177 -0
  254. package/src/autopilot/mission-origin.ts +20 -4
  255. package/src/autopilot/mission-phase-track.ts +11 -1
  256. package/src/autopilot/pr-manager.ts +51 -4
  257. package/src/autopilot/track-agent.ts +3 -3
  258. package/src/autopilot/track-courier.ts +2 -2
  259. package/src/boot/acp-server.ts +2 -16
  260. package/src/boot/daemon-tools/web-search.ts +2 -1
  261. package/src/boot/ws-bridge.ts +11 -0
  262. package/src/chat/index.ts +37 -8
  263. package/src/chat/log-scroll-key.ts +12 -0
  264. package/src/chat/submit-trace.ts +30 -0
  265. package/src/cli/agent-cli.ts +7 -2
  266. package/src/cli/decisions-cli.ts +94 -0
  267. package/src/cli/doctor-cli.ts +40 -54
  268. package/src/cli/doctor-readiness.ts +16 -24
  269. package/src/cli/intake-cli.ts +1 -1
  270. package/src/cli/mcp-call.ts +9 -0
  271. package/src/cli/mcp-gateway-cli.ts +7 -3
  272. package/src/cli/nexus-ios-bind.ts +25 -8
  273. package/src/cli/phone-link.ts +117 -0
  274. package/src/cli/plugin-cli.ts +136 -11
  275. package/src/cli/pr-lineage.ts +2 -1
  276. package/src/cli/private-ledger-commands.ts +31 -0
  277. package/src/cli/pwa-start.ts +3 -0
  278. package/src/cli/release-cli.ts +97 -7
  279. package/src/cli/self-update.ts +7 -4
  280. package/src/cli/start-cli.ts +33 -14
  281. package/src/dashboard/acp-boot.ts +3 -0
  282. package/src/dashboard/index.ts +62 -13
  283. package/src/dashboard/input/no-provider-reply.ts +13 -0
  284. package/src/dashboard/slash-runtime/unknown-slash-reply.ts +78 -0
  285. package/src/dashboard/stale-install-check.ts +77 -0
  286. package/src/decisions/decision-ledger.ts +404 -0
  287. package/src/domains/outbound-alert.ts +13 -7
  288. package/src/domains/telegram-kind-route.ts +21 -0
  289. package/src/execution-loop/dispatch-task.ts +139 -0
  290. package/src/execution-loop/gate-decision-summary.ts +29 -0
  291. package/src/execution-loop/gates.ts +197 -0
  292. package/src/field/field-media.ts +245 -0
  293. package/src/graph-kinds/installed-plugin-nodes.ts +95 -0
  294. package/src/graph-kinds/plugin-nodes.ts +10 -2
  295. package/src/graph-runner/runner.ts +35 -5
  296. package/src/grounding/token.ts +12 -6
  297. package/src/harness/harness-cli-command.ts +68 -9
  298. package/src/harness/harness-pod-dispatch.ts +8 -2
  299. package/src/harness/harness-stop.ts +147 -18
  300. package/src/harness/self-send-decide.ts +26 -17
  301. package/src/harness/self-send-target.ts +22 -1
  302. package/src/harness/worktree-branch-prefix.ts +4 -3
  303. package/src/index.ts +50 -13
  304. package/src/instance/resolve.ts +6 -0
  305. package/src/intake-plane/collect-telegram-saved.ts +5 -0
  306. package/src/intake-plane/digest.ts +11 -2
  307. package/src/live/detail-switch.ts +8 -3
  308. package/src/llm/usable-llm.ts +32 -0
  309. package/src/loops/registry.ts +27 -5
  310. package/src/market/publish.ts +59 -3
  311. package/src/native-tool-catalog.ts +2 -2
  312. package/src/nexus/api/field-uploads.ts +143 -0
  313. package/src/nexus/api/graph-approvals.ts +174 -0
  314. package/src/nexus/api/harness-api.ts +219 -5
  315. package/src/nexus/api/http-server.ts +69 -6
  316. package/src/nexus/api/log-fabric.ts +10 -1
  317. package/src/nexus/api/mcp-oauth-hint.ts +10 -9
  318. package/src/nexus/api/merge-approvals.ts +2 -1
  319. package/src/nexus/api/meta-api.ts +14 -0
  320. package/src/nexus/api/plugins-credentials-api.ts +47 -0
  321. package/src/nexus/api/plugins-market.ts +87 -3
  322. package/src/nexus/api/pod-credential-api.ts +68 -14
  323. package/src/nexus/api/public-routes.ts +7 -0
  324. package/src/nexus/api/trace.ts +57 -6
  325. package/src/nexus/boot/register-mcp-clients.ts +99 -14
  326. package/src/nexus/index.ts +33 -32
  327. package/src/nexus/outbound/router.ts +1 -1
  328. package/src/notify/llm-budget-alert.ts +119 -0
  329. package/src/onboarding.ts +25 -2
  330. package/src/plugins/core/host.ts +14 -0
  331. package/src/plugins/install/market-fetch.ts +4 -3
  332. package/src/plugins/install/plugin-credentials.ts +106 -0
  333. package/src/plugins/install/plugin-install.ts +163 -32
  334. package/src/plugins/maker/plugin-maker.ts +208 -0
  335. package/src/prompt-library/universal-preamble.ts +8 -2
  336. package/src/relay/channel.ts +184 -0
  337. package/src/relay/mux.ts +182 -0
  338. package/src/relay/test-vectors.json +29 -0
  339. package/src/release-loop/checklist.ts +217 -0
  340. package/src/release-loop/release-note.ts +6 -3
  341. package/src/seat-address/seat-address.ts +34 -0
  342. package/src/self-dev/dev-cli.ts +40 -20
  343. package/src/self-dev/dev-pipeline.ts +77 -1
  344. package/src/self-implement/gate-baseline.ts +3 -1
  345. package/src/self-implement/goal-author.ts +18 -1
  346. package/src/self-implement/host-regate.ts +6 -2
  347. package/src/self-implement/orchestrator.ts +7 -2
  348. package/src/self-implement/run-ledger-compact.ts +1 -1
  349. package/src/self-implement/seams.ts +4 -2
  350. package/src/session/index.ts +23 -10
  351. package/src/skills/tools/dev-harness.ts +42 -0
  352. package/src/steward/steward-cards.ts +45 -0
  353. package/src/steward/triage.ts +50 -14
  354. package/src/task-orchestrator/surfaces/pod-artifact-return.ts +61 -3
  355. package/src/task-orchestrator/surfaces/pod-bun-cache.ts +18 -0
  356. package/src/task-orchestrator/surfaces/pod-command-job.ts +36 -6
  357. package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +39 -9
  358. package/src/task-orchestrator/surfaces/pod-source-bundle.ts +16 -1
  359. package/src/task-orchestrator/surfaces/pod-source-receive.ts +51 -13
  360. package/src/task-orchestrator/surfaces/self-implement-pod.ts +172 -28
  361. package/src/telegram-report.ts +12 -6
  362. package/src/telegram.ts +108 -1
  363. package/src/tui-client/acp-transport-ws-client.ts +72 -5
  364. package/src/tui.ts +3 -2
  365. package/src/user-config.ts +32 -2
  366. package/src/util/spawn-sync-output.ts +15 -0
  367. package/src/version/code-revision.ts +1 -1
  368. package/src/version/packed-revision.json +1 -1
  369. package/src/video-pipeline/recipes/explainer.ts +213 -0
  370. package/src/video-pipeline/walk-line.ts +3 -2
  371. package/src/web-search/free.ts +77 -0
  372. package/src/web-search/index.ts +2 -0
  373. package/src/workflow-runtime/deps-bridge.ts +4 -3
  374. package/src/workflow-runtime/plugin-kind-node.ts +32 -4
  375. package/src/workflow-runtime/types.ts +2 -1
  376. package/apps/pwa/out/_next/static/chunks/1105-c473ed46272fba79.js +0 -1
  377. package/apps/pwa/out/_next/static/chunks/1191-7b13a24117a689fa.js +0 -1
  378. package/apps/pwa/out/_next/static/chunks/1201-09613bce624467c0.js +0 -1
  379. package/apps/pwa/out/_next/static/chunks/1377-1efeffbbac0963ff.js +0 -1
  380. package/apps/pwa/out/_next/static/chunks/1470.98a6ab61ccb4131c.js +0 -1
  381. package/apps/pwa/out/_next/static/chunks/216-5acd01cbde4acda7.js +0 -1
  382. package/apps/pwa/out/_next/static/chunks/2330-c2f07246c8788af1.js +0 -1
  383. package/apps/pwa/out/_next/static/chunks/2375-3fcae5186c64fe6b.js +0 -1
  384. package/apps/pwa/out/_next/static/chunks/2415.ed6428ff334c7ce2.js +0 -1
  385. package/apps/pwa/out/_next/static/chunks/2929-617f1e66a55be184.js +0 -1
  386. package/apps/pwa/out/_next/static/chunks/2977-e38442e86289f1d3.js +0 -1
  387. package/apps/pwa/out/_next/static/chunks/2982-2a2df543be3d2e5a.js +0 -25
  388. package/apps/pwa/out/_next/static/chunks/319-d37df1b6e0cbeff4.js +0 -1
  389. package/apps/pwa/out/_next/static/chunks/3441-a1dd4acfeda14488.js +0 -1
  390. package/apps/pwa/out/_next/static/chunks/371-4ad6af55dad02ced.js +0 -1
  391. package/apps/pwa/out/_next/static/chunks/4114-3e63117452378807.js +0 -1
  392. package/apps/pwa/out/_next/static/chunks/4836-3c93795ab834381e.js +0 -1
  393. package/apps/pwa/out/_next/static/chunks/5609-012bb3557211f07e.js +0 -1
  394. package/apps/pwa/out/_next/static/chunks/6090-1bd6077591603947.js +0 -1
  395. package/apps/pwa/out/_next/static/chunks/6320-baac91d68843a9a6.js +0 -1
  396. package/apps/pwa/out/_next/static/chunks/6416-505ba707cacafbba.js +0 -1
  397. package/apps/pwa/out/_next/static/chunks/6725-68ab7cc0b1faf00d.js +0 -1
  398. package/apps/pwa/out/_next/static/chunks/6998-a654fe5c58271600.js +0 -1
  399. package/apps/pwa/out/_next/static/chunks/7457-f5cb1cc8db9f7453.js +0 -1
  400. package/apps/pwa/out/_next/static/chunks/7647.2fcd30d894d5ee30.js +0 -1
  401. package/apps/pwa/out/_next/static/chunks/7673-2eda1507d38dadb8.js +0 -1
  402. package/apps/pwa/out/_next/static/chunks/7990-e12efba616f46e03.js +0 -1
  403. package/apps/pwa/out/_next/static/chunks/8067-f74bf14d67ad98f1.js +0 -1
  404. package/apps/pwa/out/_next/static/chunks/8519-0059d82bdb4812bf.js +0 -1
  405. package/apps/pwa/out/_next/static/chunks/8619-4365e03a2862830f.js +0 -1
  406. package/apps/pwa/out/_next/static/chunks/920-f7dceb78f1c585ef.js +0 -1
  407. package/apps/pwa/out/_next/static/chunks/9651-3cd291a6fa1370d2.js +0 -1
  408. package/apps/pwa/out/_next/static/chunks/9740-52467f244755917f.js +0 -1
  409. package/apps/pwa/out/_next/static/chunks/9804-64c02c3c127d5014.js +0 -1
  410. package/apps/pwa/out/_next/static/chunks/ae787e4c-f2998de7f1ba72a4.js +0 -1
  411. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-859cea1570b6227a.js +0 -1
  412. package/apps/pwa/out/_next/static/chunks/app/approvals/page-21c3261af6ab377c.js +0 -1
  413. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-1991445b8ea86274.js +0 -1
  414. package/apps/pwa/out/_next/static/chunks/app/board/page-4ebfaee2369fe248.js +0 -1
  415. package/apps/pwa/out/_next/static/chunks/app/botlab/page-9fa879ebf5959096.js +0 -1
  416. package/apps/pwa/out/_next/static/chunks/app/bots/page-ca7c3cc305c3285a.js +0 -1
  417. package/apps/pwa/out/_next/static/chunks/app/chat/page-9951930add3d2051.js +0 -1
  418. package/apps/pwa/out/_next/static/chunks/app/control/page-4472ddf1e2458e69.js +0 -1
  419. package/apps/pwa/out/_next/static/chunks/app/design-check/page-4de08d4b766f134b.js +0 -1
  420. package/apps/pwa/out/_next/static/chunks/app/editor/page-7a975e2b9db1dfb7.js +0 -1
  421. package/apps/pwa/out/_next/static/chunks/app/healthz/route-859cea1570b6227a.js +0 -1
  422. package/apps/pwa/out/_next/static/chunks/app/intake/page-49270714ef35bb96.js +0 -1
  423. package/apps/pwa/out/_next/static/chunks/app/layout-33fbdf353e2a5982.js +0 -1
  424. package/apps/pwa/out/_next/static/chunks/app/live/page-259f122e2dd64317.js +0 -1
  425. package/apps/pwa/out/_next/static/chunks/app/market/page-65b82726753658e1.js +0 -1
  426. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-4b8df3748dc06285.js +0 -1
  427. package/apps/pwa/out/_next/static/chunks/app/morning/page-112f7e477bda77fd.js +0 -1
  428. package/apps/pwa/out/_next/static/chunks/app/not-found-542a5c0006da637c.js +0 -1
  429. package/apps/pwa/out/_next/static/chunks/app/observatory/page-63ffb347831262ea.js +0 -1
  430. package/apps/pwa/out/_next/static/chunks/app/page-98e4e359d97263b4.js +0 -1
  431. package/apps/pwa/out/_next/static/chunks/app/reflection/page-97e24ac675ce576e.js +0 -1
  432. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-ac6391f26391d89d.js +0 -1
  433. package/apps/pwa/out/_next/static/chunks/app/sessions/page-9f45c9d45ffc43bd.js +0 -1
  434. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-36995b9cb5d98218.js +0 -1
  435. package/apps/pwa/out/_next/static/chunks/app/settings/page-0c795b577988d63f.js +0 -1
  436. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-b4311e2f71c6735a.js +0 -1
  437. package/apps/pwa/out/_next/static/chunks/app/setup/layout-859cea1570b6227a.js +0 -1
  438. package/apps/pwa/out/_next/static/chunks/app/setup/page-eb2381074df20dba.js +0 -1
  439. package/apps/pwa/out/_next/static/chunks/app/share/page-b01336e64eba01ae.js +0 -1
  440. package/apps/pwa/out/_next/static/chunks/app/showroom/page-7af7f21c1f2858ef.js +0 -1
  441. package/apps/pwa/out/_next/static/chunks/app/tasks/page-a98ecd364586c89b.js +0 -1
  442. package/apps/pwa/out/_next/static/chunks/app/term/page-57f0502dfbfa089b.js +0 -1
  443. package/apps/pwa/out/_next/static/chunks/app/trace/page-3467d2e1abd8a14a.js +0 -1
  444. package/apps/pwa/out/_next/static/chunks/app/vault/page-7842ca23d53ba682.js +0 -1
  445. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-ae9ac882912b0198.js +0 -1
  446. package/apps/pwa/out/_next/static/chunks/app/workflows/page-3a0d72e3f783bcef.js +0 -1
  447. package/apps/pwa/out/_next/static/chunks/app/workspace/page-f3b39fe8358c2a97.js +0 -1
  448. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-5a22af3181ac2afb.js +0 -1
  449. package/apps/pwa/out/_next/static/chunks/framework-ea806bb57f2b8923.js +0 -1
  450. package/apps/pwa/out/_next/static/chunks/main-8d2302399c2c8f87.js +0 -1
  451. package/apps/pwa/out/_next/static/chunks/main-app-1457627bb302a22c.js +0 -1
  452. package/apps/pwa/out/_next/static/chunks/pages/_app-b10928c60f0b8488.js +0 -1
  453. package/apps/pwa/out/_next/static/chunks/pages/_error-689039227d443fab.js +0 -1
  454. package/apps/pwa/out/_next/static/css/e66b7f5efc8df3f3.css +0 -1
  455. /package/apps/pwa/out/_next/static/{zoQX5iTvXOsIvCjxCe1Ji → qMI0jnlZaBjjm4aIDYNGM}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7007],{24253:(e,t,n)=>{n.d(t,{ZO:()=>Y,Ys:()=>w,Wq:()=>k,To:()=>y});var r=n(35563),a=n(19707),l=n(7548),o=n(90668),s=n(48497),i=n(96183),u=n(45787),c=n(53403);function d(e){return(null==e?void 0:e.terminalOriginCategory)==="direct-human"?"사람":(null==e?void 0:e.terminalOriginCategory)==="elanous"?"elanous":(null==e?void 0:e.terminalOriginCategory)==="external-tool"?e.externalToolName?"외부 도구: ".concat(e.externalToolName):"외부 도구":(null==e?void 0:e.terminalOriginReason)?"이 행에서는 알 수 없음: ".concat(e.terminalOriginReason):"이 행에서는 알 수 없음"}function m(e){return{action:e,sendsDestroy:"terminate"===e}}let f="elanous.webterm.tabs",p="elanous.webterm.hidden-tabs",g=new Map;function h(e){return(null==e?void 0:e.isAlive)&&void 0!==e.controller?"human"===e.controller?"release":"takeover":null}function b(e){return"takeover"===e?"넘겨받기":"놓기"}function w(){try{let e=window.localStorage.getItem(f);if(!e)return[];let t=JSON.parse(e);if(!Array.isArray(t))return[];return t.filter(e=>"string"==typeof e&&e.length>0)}catch(e){return[]}}function y(e){window.localStorage.setItem(f,JSON.stringify(e))}function v(e){window.localStorage.setItem(p,JSON.stringify(e))}function k(e){let t=1;for(;e.includes("preview-".concat(t));)t+=1;return"preview-".concat(t)}function x(e,t){let n=null==e?void 0:e.terminalId;if("string"==typeof n&&n.trim().length>0)return{id:n,issuedBy:"daemon"};let r=I(e)?e.spawnFailure:null==e?"no-response":"response-without-terminal-id";return{id:k(t),issuedBy:"local",fallbackReason:r}}function I(e){return"object"==typeof e&&null!==e&&"string"==typeof e.spawnFailure}async function N(e,t){let n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:c.cY,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:S,l=arguments.length>4?arguments[4]:void 0,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:C;if(r("webterm.tabs.add.start",{hasAcp:!!e,hasSessionId:!!t}),!e||!t){let t=e?"no-session":"no-acp";return r("webterm.tabs.add.skip",{reason:t}),{spawnFailure:t}}r("webterm.tabs.add.spawn-pending",{sessionId:t});let s=l?setTimeout(()=>{r("webterm.tabs.add.spawn-slow",{sessionId:t,slowMs:o}),l()},o):void 0;try{let l=new Promise(e=>{n=setTimeout(()=>e({spawnFailure:"spawn-timeout"}),a)}),o=await Promise.race([e.send("terminal/spawn",{sessionId:t}),l]);return I(o)&&r("webterm.tabs.add.spawn-timeout",{sessionId:t,timeoutMs:a}),o}catch(e){return r("webterm.tabs.add.spawn-error",{reason:String(e)}),{spawnFailure:"spawn-error",detail:String(e)}}finally{void 0!==n&&clearTimeout(n),void 0!==s&&clearTimeout(s)}}let C=8e3,S=9e4;function Y(e){let{activeId:t,onActiveChange:n,onInitialTerminalState:f,minimized:I=!1,onToggleMinimize:Y,recording:T=!1,peerCount:j=0,chatDockOpen:M=!0,onToggleChatDock:A,tabIntent:P=null,onTabsChange:R,suspendInitialSpawn:O=!1}=e,{client:D,sessionId:q}=(0,u.Q)(),[E,U]=(0,a.useState)(w),B=(0,a.useRef)(new Set(function(){try{let e=window.localStorage.getItem(p),t=e?JSON.parse(e):[];return Array.isArray(t)?t.filter(e=>"string"==typeof e&&e.length>0):[]}catch(e){return[]}}())),F=(0,a.useRef)(E);F.current=E;let L=(0,a.useRef)(t);L.current=t;let K=(0,a.useRef)(0),W=(0,a.useRef)(!1),_=(0,a.useRef)(null),J=(0,a.useRef)(!1),[G,H]=(0,a.useState)(0),Z=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(en.current+=1,K.current+=1,W.current=!1,J.current=!1,!q)return;let e=D.connectAcp({sessionId:q});Z.current=e;let t=e.onState(t=>{Z.current===e&&"OPEN"===t&&H(e=>e+1)});return"OPEN"===e.state&&H(e=>e+1),(0,c.cY)("webterm.tabs.acp.attach",{sessionId:q}),()=>{var n;t();let r=null!=(n=Z.current)?n:e;try{r.close()}catch(e){}Z.current=null}},[D,q]);let[$,Q]=(0,a.useState)({sessionId:null,entries:new Map}),[V,X]=(0,a.useState)(new Map),z=(0,a.useRef)(new Map),ee=null!==$.sessionId&&$.sessionId===q,et=ee?$.entries:g,en=(0,a.useRef)(0),er=(0,a.useCallback)(()=>{var e;let t=Z.current;if(!q)return null;if(null!==(e=t?t.state:null)&&"FAILED"!==e&&"CLOSED"!==e)return t;let n=t?t.state:"none";(0,c.cY)("webterm.tabs.acp.reacquire.attempt",{sessionId:q,previousState:n});try{null==t||t.close()}catch(e){}let r=D.connectAcp({sessionId:q});return Z.current=r,en.current+=1,Q({sessionId:null,entries:new Map}),(0,c.cY)("webterm.tabs.acp.reacquire.ok",{sessionId:q,previousState:n,state:r.state}),r},[D,q]),ea=(0,a.useCallback)(async()=>{let e;if(q){try{e=er()}catch(e){(0,c.cY)("webterm.tabs.list.error",{sessionId:q,connectionState:"reacquire-failed",reason:String(e)});return}if(e)try{let t=en.current,n=await e.send("terminal/list",{sessionId:q});if(t!==en.current)return void(0,c.cY)("webterm.tabs.list.stale",{sessionId:q,generation:t,now:en.current});let r=function(e){if(null==e)return{ok:!1,reason:"no-response"};let t=e.terminals;if(!Array.isArray(t))return{ok:!1,reason:"malformed"};let n=[];for(let e of t){if("object"!=typeof e||null===e)return{ok:!1,reason:"malformed"};let{terminalId:t,isAlive:r,pid:a,cols:l,rows:o,lastOutputAt:s,ownerRunUsage:i,terminalOriginCategory:u,terminalOriginReason:c,externalToolName:d,controller:m}=e;if("string"!=typeof t||0===t.trim().length||"boolean"!=typeof r)return{ok:!1,reason:"malformed"};let f=e=>"number"==typeof e&&Number.isFinite(e)?e:void 0;n.push({terminalId:t,isAlive:r,...void 0!==f(a)?{pid:f(a)}:{},...void 0!==f(l)?{cols:f(l)}:{},...void 0!==f(o)?{rows:f(o)}:{},...void 0!==f(s)?{lastOutputAt:f(s)}:{},..."running"===i||"terminated-live-owner"===i||"no-run-id"===i||"unknown"===i?{ownerRunUsage:i}:{},..."direct-human"===u||"elanous"===u||"external-tool"===u||"unknown"===u?{terminalOriginCategory:u}:{},..."string"==typeof c?{terminalOriginReason:c}:{},..."string"==typeof d?{externalToolName:d}:{},..."string"==typeof m?{controller:m}:{}})}return{ok:!0,entries:n}}(n);if(!r.ok)return void(0,c.cY)("webterm.tabs.list.error",{sessionId:q,connectionState:e.state,reason:"list-".concat(r.reason)});let a=r.entries,l=a.map(e=>e.terminalId),o=new Set(l);for(let e of B.current)o.has(e)||B.current.delete(e);v([...B.current]),Q({sessionId:q,entries:new Map(a.map(e=>[e.terminalId,e]))}),(0,c.cY)("webterm.tabs.list",{sessionId:q,local:E.length,daemon:l.length}),U(e=>{let t=[...e];for(let e of l)B.current.has(e)||t.includes(e)||t.push(e);return t.length===e.length?e:(y(t),t)})}catch(t){(0,c.cY)("webterm.tabs.list.error",{sessionId:q,connectionState:e.state,reason:String(t)})}}},[er,q,E.length]);(0,a.useEffect)(()=>{if(!Z.current)return;ea();let e=setInterval(()=>{ea()},15e3);return()=>clearInterval(e)},[Z.current]);let el=(0,a.useCallback)(e=>(y(e),e),[]);(0,a.useEffect)(()=>{null==R||R(E)},[R,E]);let eo=(0,a.useCallback)(async e=>{if(W.current||F.current.length>0)return;W.current=!0;let t=++K.current;null==f||f({status:"pending"});let r=await N(e,q,c.cY,S,()=>{t===K.current&&(null==f||f({status:"pending",slow:!0}))});if(t!==K.current||F.current.length>0){var a;W.current=!1;let e=r&&"spawned"===r.status&&"string"==typeof r.sessionId&&"string"==typeof r.terminalId&&r.sessionId.trim()&&r.terminalId.trim()?{sessionId:r.sessionId,terminalId:r.terminalId}:null;(0,c.cY)("webterm.tabs.initial.discarded",{reason:t!==K.current?"session-changed":"tabs-present",orphan:e}),e&&(null==(a=Z.current)||a.send("terminal/destroy",e).catch(t=>(0,c.cY)("webterm.tabs.initial.orphan-destroy-error",{...e,reason:String(t)})));return}let l=x(r,F.current),o=[l.id];J.current=!0,el(o),U(o),n(l.id),null==f||f({status:"ready",issuedBy:l.issuedBy,...l.fallbackReason?{fallbackReason:l.fallbackReason}:{}}),(0,c.cY)("webterm.tabs.initial",{id:l.id,issuedBy:l.issuedBy,...l.fallbackReason?{fallbackReason:l.fallbackReason}:{}})},[n,f,el,q]);(0,a.useEffect)(()=>{if(O)return;if(E.length>0){let e=J.current;W.current=!1,t||n(E[0]),e||null==f||f({status:"ready",issuedBy:"local",fallbackReason:"restored-tab"});return}let e=Z.current;if(!e||"OPEN"!==e.state){null==f||f({status:"pending"}),null===_.current&&(_.current=Date.now());let e=setTimeout(()=>{var e,t;if(F.current.length>0||(null==(e=Z.current)?void 0:e.state)==="OPEN")return;let r=k(F.current);J.current=!0,el([r]),U([r]),n(r),null==f||f({status:"ready",issuedBy:"local",fallbackReason:"acp-not-open"}),(0,c.cY)("webterm.tabs.initial",{id:r,issuedBy:"local",fallbackReason:"acp-not-open",waitedMs:Date.now()-(null!=(t=_.current)?t:Date.now())})},Math.max(0,C-(Date.now()-_.current)));return()=>clearTimeout(e)}_.current=null,eo(e)},[G,t,eo,n,f,el,O,E.length]);let es=(0,a.useCallback)(async()=>{let e=await N(Z.current,q);U(t=>{let{id:r,issuedBy:a,fallbackReason:l}=x(e,t);if(B.current.delete(r)&&v([...B.current]),t.includes(r))return n(r),(0,c.cY)("webterm.tabs.add.existing",{id:r,issuedBy:a,total:t.length}),t;let o=el([...t,r]);return n(r),(0,c.cY)("webterm.tabs.add",{id:r,total:o.length,issuedBy:a,...l?{fallbackReason:l}:{}}),o})},[n,el,q]),ei=(0,a.useCallback)(e=>{e!==t&&((0,c.cY)("webterm.tabs.switch",{from:t,to:e}),n(e))},[t,n]),eu=(0,a.useCallback)(function(e){var t;let r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];z.current.set(e,(null!=(t=z.current.get(e))?t:0)+1),X(t=>{if(!t.has(e))return t;let n=new Map(t);return n.delete(e),n});let a=F.current;if(r&&(B.current.add(e),v([...B.current])),!a.includes(e))return;let l=a.filter(t=>t!==e);el(l),U(l),e===L.current&&l.length>0&&n(l[0]),0===l.length&&(W.current=!1,null==f||f({status:"pending"}))},[n,f,el]),ec=(0,a.useCallback)(e=>{m("remove-local").sendsDestroy||(eu(e,!0),(0,c.cY)("webterm.tabs.remove-local",{id:e}),ea())},[ea,eu]),ed=(0,a.useCallback)(async(e,t)=>{var n;let r=V.get(e);if(r&&!r.message)return;let a=(null!=(n=z.current.get(e))?n:0)+1;z.current.set(e,a),X(n=>{let r=new Map(n);return r.set(e,{action:t}),r});try{let n=await D.controlTerminal(e,t);if(a!==z.current.get(e)||!F.current.includes(e))return;let r=function(e,t){switch(t.status){case"success":return"takeover"===e?"터미널을 넘겨받았습니다.":"터미널 제어를 놓았습니다.";case"unknown-pty":return"이 PTY를 찾을 수 없습니다. 목록을 새로고침해 주세요.";case"denied":return"이 PTY의 제어를 바꿀 권한이 없습니다.";case"failed":return"PTY 제어 전환에 실패했습니다. 잠시 후 다시 시도해 주세요.";case"owner-unreachable":return"PTY 소유 프로세스에 연결할 수 없어 제어를 전환하지 못했습니다.";default:return t.status}}(t,n);X(n=>{let a=new Map(n);return a.set(e,{action:t,message:r}),a}),(0,c.cY)("webterm.tabs.control",{id:e,action:t,status:n.status}),"success"===n.status&&ea()}catch(n){if(a!==z.current.get(e)||!F.current.includes(e))return;X(n=>{let r=new Map(n);return r.set(e,{action:t,message:"PTY 제어 요청을 전송하지 못했습니다. 네트워크 연결을 확인해 주세요."}),r}),(0,c.cY)("webterm.tabs.control.error",{id:e,action:t,reason:String(n)})}},[D,ea,V]),em=(0,a.useCallback)(async(e,t)=>{let n=m("terminate"),r=function(e){switch("running"===e||"terminated-live-owner"===e||"no-run-id"===e||"unknown"===e?e:"unknown"){case"running":return{title:"터미널을 끝낼까요?",message:"실행 중인 런이 이 터미널을 사용하고 있습니다. 끝내면 터미널과 그 프로세스가 종료됩니다."};case"terminated-live-owner":return{title:"터미널을 끝낼까요?",message:"소유 런은 종료됐지만 이 터미널은 아직 남아 있습니다. 끝내면 터미널과 그 프로세스가 종료됩니다."};case"no-run-id":return{title:"터미널을 끝낼까요?",message:"이 터미널에는 소유 런 정보가 없습니다. 끝내면 터미널과 그 프로세스가 종료됩니다."};case"unknown":return{title:"터미널을 끝낼까요?",message:"이 터미널의 사용 상태를 확인할 수 없습니다. 아무도 쓰지 않는다고 단정할 수 없으며, 끝내면 터미널과 그 프로세스가 종료됩니다."}}}(t);if(!window.confirm("".concat(r.title,"\n\n").concat(r.message))||!n.sendsDestroy)return;let a=Z.current;if(!a||!q)return void(0,c.cY)("webterm.tabs.destroy.error",{id:e,reason:"no-acp-or-session"});try{await a.send("terminal/destroy",{sessionId:q,terminalId:e}),(0,c.cY)("webterm.tabs.destroyed",{id:e}),eu(e,!0),ea()}catch(t){(0,c.cY)("webterm.tabs.destroy.error",{id:e,reason:String(t)})}},[eu,ea,q]);(0,a.useEffect)(()=>{!t||B.current.has(t)||U(e=>e.includes(t)?e:el([...e,t]))},[t,el]),(0,a.useEffect)(()=>{let e;if(!P||!t||0===E.length)return;let r=E.indexOf(t);if("next"===P.intent)e=E[(r+1)%E.length];else if("prev"===P.intent)e=E[(r-1+E.length)%E.length];else if("number"==typeof P.intent){let t=P.intent-1;t>=0&&t<E.length&&(e=E[t])}e&&e!==t&&((0,c.cY)("webterm.tabs.intent.apply",{intent:P.intent,from:t,to:e}),n(e))},[null==P?void 0:P.nonce]);let ef=(0,a.useCallback)(e=>{var t;return null==(t=et.get(e))?void 0:t.isAlive},[et]),ep=(0,a.useMemo)(()=>{if(!q)return"session 미설정";var e=function(e,t){let n=0,r=0,a=0;for(let l of e){let e=t(l);void 0===e?a+=1:e?n+=1:r+=1}return{total:e.length,alive:n,daemonKnownDead:r,daemonUnknown:a}}(E,ef);let t="".concat(e.total," terminal").concat(1===e.total?"":"s");if(!ee)return"".concat(t," \xb7 데몬 상태 미확인");let n=[];return e.alive>0&&n.push("".concat(e.alive," alive")),e.daemonKnownDead>0&&n.push("".concat(e.daemonKnownDead," 종료")),e.daemonUnknown>0&&n.push("".concat(e.daemonUnknown," 데몬이 모름")),n.length>0?"".concat(t," \xb7 ").concat(n.join(" \xb7 ")):t},[q,E,ef,ee]),eg=(0,a.useMemo)(()=>ee&&t?E.filter(e=>e!==t&&void 0===ef(e)):[],[ee,E,ef,t]),eh=(0,a.useCallback)(()=>{if(0===eg.length)return;let e=new Set(eg),t=E.filter(t=>!e.has(t));el(t),(0,c.cY)("webterm.tabs.clean-unknown",{removed:eg.length,remaining:t.length}),U(t)},[eg,el,E]);return(0,r.jsxs)("div",{className:"flex items-center gap-1 border-b bg-background/50 px-2 py-1 text-xs",children:[(0,r.jsxs)("div",{className:"flex flex-1 flex-wrap items-center gap-1",children:[E.map(e=>{let n=e===t,a=et.get(e),l=a?a.isAlive?"bg-emerald-500":"bg-rose-500":"bg-muted-foreground/40",o=function(e){if(!e||!Number.isFinite(e))return"";let t=Math.max(0,Math.floor((Date.now()-e)/1e3));return t<30?"방금":t<3600?"".concat(Math.floor(t/60),"분 전"):t<86400?"".concat(Math.floor(t/3600),"시간 전"):"".concat(Math.floor(t/86400),"일 전")}(null==a?void 0:a.lastOutputAt),s=(null==a?void 0:a.terminalOriginCategory)&&"unknown"!==a.terminalOriginCategory?d(a):"",i="출처: ".concat(d(a)),u=function(e,t){let n="preview-1"===e?"tui-preview":/^preview-\d+$/.test(e)?"web-scratch":e.startsWith("tui:")?"tui-surface":e.startsWith("term-")?"human-terminal":e.startsWith("webterm-")?"web-terminal":e.startsWith("self_")?"harness-run":e.startsWith("agent:")?"agent":e.startsWith("pty_")?"pty":"unknown",r=void 0;switch(n){case"tui-preview":return{text:"TUI 프리뷰",hint:"TUI 프리뷰 페인의 웹 이름 \xb7 ".concat(e),kind:n};case"web-scratch":return{text:e,hint:"이 브라우저가 만든 스크래치 터미널 \xb7 ".concat(e),kind:n};case"tui-surface":return{text:e,hint:"대화형 대시보드 TUI 표면 \xb7 ".concat(e),kind:n};case"human-terminal":return{text:e,hint:"사람이 만든 웹 터미널 \xb7 ".concat(e),kind:n};case"web-terminal":return{text:e,hint:"데몬이 발급한 웹 터미널 \xb7 ".concat(e),kind:n};case"harness-run":return{text:r||e,hint:"하니스 자율 런의 터미널 \xb7 ".concat(e),kind:n};case"agent":return{text:r||e,hint:"서브 에이전트 실행 \xb7 ".concat(e),kind:n};case"pty":return{text:r||e,hint:"PTY \xb7 ".concat(e),kind:n};default:return{text:e,hint:"분류를 모르는 터미널 \xb7 ".concat(e),kind:n}}}(e),c=V.get(e),m=a?"".concat(a.isAlive?"alive":"exited").concat("number"==typeof a.pid?" \xb7 pid ".concat(a.pid):"").concat(o?" \xb7 마지막 출력 ".concat(o):""," \xb7 ").concat(i).concat(a.controller?" \xb7 통제: ".concat(a.controller):""):"데몬 미기동 (선택 시 spawn) \xb7 ".concat(i);return(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-md border px-2 py-0.5 font-mono ".concat(n?"border-primary bg-primary/10 text-primary":"border-border text-muted-foreground hover:bg-accent"),children:[(0,r.jsx)("span",{className:"h-1.5 w-1.5 shrink-0 rounded-full ".concat(l),title:m,"aria-label":m}),(0,r.jsxs)("button",{type:"button",className:"cursor-pointer",onClick:()=>ei(e),title:"".concat(u.hint," — ").concat(n?"지금 보는 터미널":"눌러서 전환"," \xb7 ").concat(m),"aria-label":"switch to ".concat(e),children:[u.text,s?" \xb7 ".concat(s):"",(null==a?void 0:a.controller)?" \xb7 통제: ".concat(a.controller):""]}),(0,r.jsx)("button",{type:"button",className:"ml-0.5 rounded text-muted-foreground hover:text-rose-500",onClick:t=>{t.stopPropagation(),ec(e)},title:"목록에서 ".concat(e," 탭 빼기 — PTY는 유지합니다"),"aria-label":"remove ".concat(e," locally"),children:"\xd7"}),h(a)&&(0,r.jsx)("button",{type:"button",disabled:void 0!==c&&!c.message,className:"rounded text-muted-foreground hover:text-primary disabled:cursor-wait disabled:opacity-60",onClick:t=>{t.stopPropagation(),ed(e,h(a))},title:"".concat(b(h(a))," ").concat(e),"aria-label":"".concat(h(a)," ").concat(e),children:void 0===c||c.message?b(h(a)):"전환 중…"}),(0,r.jsx)("button",{type:"button",className:"rounded text-muted-foreground hover:text-rose-500",onClick:t=>{t.stopPropagation(),em(e,null==a?void 0:a.ownerRunUsage)},title:"끝내기 ".concat(e),"aria-label":"terminate ".concat(e),children:"끝내기"})]},e)}),(0,r.jsx)("button",{type:"button",className:"rounded-md border border-dashed border-border px-2 py-0.5 text-muted-foreground hover:bg-accent",onClick:()=>{es()},title:"new terminal",children:"+"})]}),[...V.values()].filter(e=>e.message).map((e,t)=>(0,r.jsx)("p",{role:"status",className:"text-muted-foreground",children:e.message},"".concat(e.action,"-").concat(t))),I&&T&&(0,r.jsxs)("span",{className:"ml-2 flex items-center gap-1 rounded bg-rose-500/15 px-1.5 py-0.5 font-medium text-rose-600 dark:text-rose-400",title:"recording in progress",children:[(0,r.jsx)("span",{className:"h-1.5 w-1.5 rounded-full bg-rose-500 animate-pulse","aria-hidden":!0}),"REC"]}),I&&j>1&&(0,r.jsxs)("span",{className:"ml-1 flex items-center gap-1 rounded bg-amber-500/15 px-1.5 py-0.5 font-medium text-amber-700 dark:text-amber-400",title:"".concat(j," devices on this session"),children:[(0,r.jsx)(l.A,{className:"h-3 w-3","aria-hidden":!0}),j]}),(0,r.jsx)("span",{className:"ml-2 text-[11px] text-muted-foreground",title:"터미널 PTY 는 데몬에 상주 — 연결이 끊겨도 유지되고 재접속 시 이어집니다",children:ep}),eg.length>0&&(0,r.jsxs)("button",{type:"button",className:"ml-1 rounded-md border border-dashed border-border px-1.5 py-0.5 text-[11px] text-muted-foreground hover:bg-accent",onClick:eh,title:"데몬이 모르는 탭 ".concat(eg.length,"개를 목록에서 뺍니다 — PTY 는 건드리지 않고, 활성 탭은 남깁니다"),children:["정리 ",eg.length]}),A&&(0,r.jsx)("button",{type:"button",onClick:A,"aria-label":M?"hide terminal chat dock":"show terminal chat dock",title:M?"terminal chat dock 숨기기":"terminal chat dock 보이기",className:"ml-1 rounded-md p-1 ".concat(M?"bg-primary/10 text-primary":"text-muted-foreground hover:bg-accent hover:text-foreground"),children:(0,r.jsx)(o.A,{className:"h-3.5 w-3.5"})}),Y&&(0,r.jsx)("button",{type:"button",onClick:Y,"aria-label":I?"expand panels":"collapse panels",title:I?"패널 펼치기":"패널 접기",className:"ml-1 rounded-md p-1 text-muted-foreground hover:bg-accent hover:text-foreground",children:I?(0,r.jsx)(s.A,{className:"h-3.5 w-3.5"}):(0,r.jsx)(i.A,{className:"h-3.5 w-3.5"})})]})}},52479:(e,t,n)=>{n.d(t,{GG:()=>i,HS:()=>c,KN:()=>a,L4:()=>l,U$:()=>f,XG:()=>d,h7:()=>o,t_:()=>m,vq:()=>p,xV:()=>s});var r=n(24253);function a(e){return e?{all:!0,includeTest:!0}:{}}function l(){try{let e=(0,r.Ys)(),t=(0,r.Wq)(e);return(0,r.To)([...e,t]),t}catch(e){return null}}function o(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=Object.entries(a(e)).map(e=>{let[t,n]=e;return"".concat(encodeURIComponent(t),"=").concat(encodeURIComponent(String(n)))}).join("&");return 0===t.length?"/v1/terminals":"/v1/terminals?".concat(t)}function s(e){return"/v1/terminals/".concat(encodeURIComponent(e),"/frame")}function i(){return"/v1/terminals/view"}let u={unknown:"Unknown target: this PTY was not found. Check the subject list and try again.",denied:"Denied: takeover was refused. Check ownership and try again.","owner-unreachable":"Owner unreachable: could not reach the PTY owner. Check the owner process and try again.",failed:"Server failed: ownership transfer did not complete. Check status and try again.",http:"Takeover failed. Check status and try again.",network:"Network failed: could not request takeover. Check the connection and try again."};async function c(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:globalThis.fetch,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{var r,a;let l=await t("/v1/terminals/".concat(encodeURIComponent(e),"/control"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"takeover"}),signal:n.signal});if(200===l.status)return{ok:!0,ptyId:e};let o=(r=l.status,404===r?"unknown":409===r?"denied":504===r?"owner-unreachable":502===r?"failed":"http");return{ok:!1,ptyId:e,kind:o,status:l.status,message:(a=l.status,"http"===o&&void 0!==a?"Takeover failed (".concat(a,"). Check status and try again."):u[o])}}catch(t){return{ok:!1,ptyId:e,kind:"network",message:u.network}}}function d(e){return{talk:e.talk.length>0,screen:e.screen.ptyIds.length>0,agent:e.agent.names.length>0||e.agent.controllers.length>0}}function m(e){let t=d(e);return e.screen.liveCount>0?"live":!t.screen&&t.agent?"unknown":"inactive"}function f(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t?[...e]:e.filter(e=>"inactive"!==m(e))}function p(e,t){let n=new Map;for(let a of e){var r;let e=(function(e){let t=new Set,n=[];for(let r of e)!1===r.hasPty||t.has(r.id)||(t.add(r.id),n.push({id:r.id,value:r}));return n})(a.screen.ptyIds.map(e=>({id:e}))).sort((e,t)=>e.id.localeCompare(t.id));if(0===e.length){n.set(a.id,{kind:"no-screen"});continue}let l=null==(r=e.find(e=>{let{id:n}=e;return t.has(n)}))?void 0:r.id,o=void 0===l?void 0:t.get(l);n.set(a.id,void 0===l||void 0===o?{kind:"no-progress"}:{kind:"progress",ptyId:l,...o})}return n}},67007:(e,t,n)=>{n.d(t,{Dw:()=>g,Kh:()=>u,OZ:()=>s,cl:()=>i,gA:()=>p,hH:()=>d,lH:()=>m,tC:()=>o,x3:()=>c,xu:()=>l});var r=n(52479);function a(e){return"number"==typeof e&&Number.isFinite(e)?Number.isNaN(new Date(e).getTime())?null:e:null}function l(e){let t=new Set,n=[];for(let r of e){let e=c(r);!1===r.hasPty||t.has(e)||(t.add(e),n.push(r))}return n.sort((e,t)=>{var n,r,l,o;let s=a(e.startedAt),i=a(t.startedAt);if(null!==s&&null!==i&&s!==i)return i-s;if(null!==s&&null===i)return -1;if(null===s&&null!==i)return 1;let u=(n=e.id)<(r=t.id)?-1:+(n>r);return 0!==u?u:(l=c(e))<(o=c(t))?-1:+(l>o)})}function o(e){return(0,r.KN)(e)}function s(e){return"number"!=typeof e||!Number.isFinite(e)||Number.isNaN(new Date(e).getTime())?"시작 시각 알 수 없음":new Date(e).toLocaleString()}function i(e,t){return e&&!t?"프로세스 실행 중 \xb7 출력 스트림 열림":e&&t?"프로세스 실행 중 \xb7 출력 스트림 닫힘":e||t?"프로세스 종료 \xb7 출력 스트림 닫힘":"프로세스 종료 \xb7 출력 스트림 열림"}function u(e,t){if(null===e)return null;if("unrequested"===t.status||"loading"===t.status)return{kind:"loading",unreadablePayloadsSummary:null,groups:[]};if("error"===t.status)return{kind:"error",unreadablePayloadsSummary:null,groups:[]};let{lineage:n}=t,r=void 0===n.unreadablePayloads?"읽지 못한 계보 payload 수를 데몬이 알리지 않았습니다.":0===n.unreadablePayloads?"읽지 못한 계보 payload가 0개입니다.":"읽지 못한 계보 payload가 ".concat(n.unreadablePayloads,"개입니다.");return{kind:0===n.groups.length?"empty":"content",unreadablePayloadsSummary:r,groups:n.groups.map(t=>({joinedBy:t.joinedBy,key:t.key,rows:t.rows.map(t=>({ptyId:t.ptyId,kind:t.kind,instance:t.instance,alive:t.alive,startedAt:t.startedAt,closed:!0===t.closed||void 0!==t.closedAt,selected:t.ptyId===e}))}))}}function c(e){var t,n;return"".concat(null!=(n=null==(t=e.sourceRoot)?void 0:t.dbPath)?n:"","\0").concat(e.id)}function d(e,t){let n=t.filter(t=>t.id===e);if(1===n.length){let e=n[0];return{kind:"selected",terminal:e,terminalKey:c(e),candidates:[e],reason:"unique-id"}}return n.length>1?{kind:"ambiguous",terminal:null,terminalKey:null,candidates:n,reason:"duplicate-id"}:{kind:"not-found",terminal:null,terminalKey:null,candidates:[],reason:0===t.length?"empty-terminal-list":"terminal-id-not-found"}}function m(e,t,n,r,a){let l=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"raw",o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:new Map,s=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"raw",a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:new Map,l=null!==t&&e.some(e=>c(e)===t);return e.map(e=>{var o,s,i;let u=l&&c(e)===t,d=u?"raw"===r?"unrequested"===(i=null!=(o=n.get(c(e)))?o:{status:"unrequested"}).status?{kind:"loading",text:"화면 글자를 아직 불러오지 않았습니다.",frameInfo:null,frameMetadata:null}:"loading"===i.status?{kind:"loading",text:"화면 글자를 불러오는 중…",frameInfo:null,frameMetadata:null}:"error"===i.status?{kind:"error",text:"화면 글자를 불러오지 못했습니다.",frameInfo:null,frameMetadata:null}:0===i.scrollback.length?{kind:"empty",text:"표시할 화면 글자가 없습니다.",frameInfo:null,frameMetadata:null}:{kind:"content",text:i.scrollback,frameInfo:null,frameMetadata:null}:function(e){if("unrequested"===e.status)return{kind:"loading",text:"렌더 화면을 아직 불러오지 않았습니다.",frameInfo:null,frameMetadata:null};if("loading"===e.status)return{kind:"loading",text:"렌더 화면을 불러오는 중…",frameInfo:null,frameMetadata:null};if("error"===e.status)return{kind:"error",text:"렌더 화면을 불러오지 못했습니다.",frameInfo:null,frameMetadata:null};let[t,...n]=e.frame.split("\n"),r=n.join("\n"),a={frameAt:e.frameAt,frameSource:e.frameSource};return 0===r.length?{kind:"empty",text:"표시할 렌더 화면이 없습니다.",frameInfo:t||null,frameMetadata:a}:{kind:"content",text:r,frameInfo:t||null,frameMetadata:a}}(null!=(s=a.get(c(e)))?s:{status:"unrequested"}):null;return{terminal:e,selected:u,scrollback:d,view:null===d?null:{visible:!0,modes:[{mode:"raw",label:"원시 글자",selected:"raw"===r},{mode:"render",label:"렌더 화면",selected:"render"===r}],display:d}}})}(t,r,a,l,o);return{includeAll:e,scopeSummary:["number"!=typeof(null==n?void 0:n.hiddenDead)?null:0===n.hiddenDead?"숨긴 종료 PTY가 0개입니다.":"숨긴 종료 PTY가 ".concat(n.hiddenDead,"개입니다."),function(e){let t=e.filter(e=>{let{terminal:t}=e;return"terminated-live-owner"===t.ownerRunUsage}).length;return"소유 런이 끝났는데 터미널이 남아 있는 행이 ".concat(t,"개입니다.")}(s)].filter(e=>null!==e).join(" "),rows:s}}function f(e,t){return e.observedAt-t.observedAt||e.logId-t.logId}function p(e){var t,n,r;let a=new Map;for(let n of e){let e=function(e){if("headless.progress-frame"!==e.event||!e.data||"object"!=typeof e.data)return null;let t=e.data;if("string"!=typeof t.ptyId||"string"!=typeof t.runId||"string"!=typeof t.planId||!Number.isSafeInteger(t.seq)||t.seq<1||"string"!=typeof t.humanLine)return null;let n=Date.parse(e.ts);return{ptyId:t.ptyId,runId:t.runId,planId:t.planId,seq:t.seq,humanLine:t.humanLine,observedAt:Number.isFinite(n)?n:0,logId:e.id}}(n);if(!e)continue;let r=null!=(t=a.get(e.ptyId))?t:[];r.push(e),a.set(e.ptyId,r)}let l=new Map;for(let[e,t]of a){t.sort(f);let a=t.at(-1),o=new Map;for(let e of t){let t="".concat(e.runId,"\0").concat(e.planId),r=null!=(n=o.get(t))?n:new Set;r.add(e.seq),o.set(t,r)}let s=[...o.values()].some(e=>{let t=[...e].sort((e,t)=>e-t);return t.some((e,n)=>0===n&&1!==e||n>0&&e-t[n-1]!=1)});l.set(e,{line:a.humanLine,status:(r=a.humanLine,/^\s*●/.test(r))?"complete":"running",hasMissingFrames:s})}return l}function g(e){var t;let n=null==(t=e.storedId)?void 0:t.trim();if(n)return{terminalId:n,reason:"stored"};let r=e.terminals.find(e=>!0===e.alive&&"web-terminal"===e.cmd);return r?{terminalId:r.id,reason:"live-pty"}:void 0!==e.fallbackId&&null!==e.fallbackId?{terminalId:e.fallbackId,reason:"fallback"}:{terminalId:null,reason:"no-terminals"}}}}]);
@@ -1 +1 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5791],{44130:(e,r,n)=>{n.d(r,{BX:()=>o});let t=new Map;function o(e,r){var n,o;let l=t.get(e);if(!l){let o;try{o=new EventSource(e)}catch(e){return null==(n=r.onConstructError)||n.call(r,e),()=>{}}let u={source:o,subscribers:new Set};o.onmessage=e=>{var r,n;for(let t of[...u.subscribers])null==(r=(n=t.handlers).onMessage)||r.call(n,e)},o.onerror=e=>{var r,n;for(let t of[...u.subscribers])null==(r=(n=t.handlers).onError)||r.call(n,e)},t.set(e,u),l=u}let u=l,i=[];for(let[e,n]of Object.entries(null!=(o=r.events)?o:{})){let r=e=>{n(e)};u.source.addEventListener(e,r),i.push([e,r])}let a={handlers:r};u.subscribers.add(a);let s=!1;return()=>{if(!s){for(let[e,r]of(s=!0,i))try{u.source.removeEventListener(e,r)}catch(e){}if(u.subscribers.delete(a),0===u.subscribers.size){try{u.source.close()}catch(e){}t.get(e)===u&&t.delete(e)}}}}},75791:(e,r,n)=>{n.d(r,{Ck:()=>E,Ux:()=>h,XL:()=>k,Yk:()=>A,b_:()=>F,hM:()=>p,j3:()=>f,mP:()=>d,oE:()=>v,up:()=>y,uz:()=>b,xd:()=>w,yM:()=>c,zD:()=>g});var t=n(91269),o=n(24818),l=n(42012),u=n(6015),i=n(91514),a=n(67842),s=n(44130);function d(){let e=(0,i.M1)(),r=(0,o.jE)(),n=(0,l.I)({queryKey:a.AF.workflows(),queryFn:()=>e.getWorkflows(),refetchInterval:6e4});return(0,t.useEffect)(()=>{let n=e.workflowsEventsUrl();if(n)return(0,s.BX)(n,{events:{change:()=>{r.invalidateQueries({queryKey:a.AF.workflows()})}}})},[e,r]),n}function f(e){var r;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=(0,i.M1)();return(0,l.I)({queryKey:a.AF.workflow(e),queryFn:()=>t.getWorkflow(e),enabled:null!=(r=n.enabled)?r:e.length>0})}function c(){let e=(0,i.M1)(),r=(0,o.jE)();return(0,u.n)({mutationFn:r=>{let{name:n,body:t}=r;return e.saveWorkflow(n,t)},onSuccess:(e,n)=>{let{name:t}=n;r.invalidateQueries({queryKey:a.AF.workflows()}),r.invalidateQueries({queryKey:a.AF.workflow(t)})}})}function v(){let e=(0,i.M1)(),r=(0,o.jE)();return(0,u.n)({mutationFn:r=>{let{name:n,scope:t}=r;return e.deleteWorkflow(n,t?{scope:t}:void 0)},onSuccess:(e,n)=>{let{name:t}=n;r.invalidateQueries({queryKey:a.AF.workflows()}),r.invalidateQueries({queryKey:a.AF.workflow(t)})}})}function w(){let e=(0,i.M1)();return(0,u.n)({mutationFn:r=>{let{yaml:n,signal:t}=r;return e.validateWorkflow(n,t?{signal:t}:void 0)}})}function y(){let e=(0,i.M1)();return(0,u.n)({mutationFn:r=>e.generateWorkflow(r)})}function p(){let e=(0,i.M1)();return(0,u.n)({mutationFn:r=>e.synthesizeWorkflow(r)})}function k(){let e=(0,i.M1)();return(0,u.n)({mutationFn:r=>{let{name:n,args:t,dryRun:o}=r;return e.runWorkflow(n,t,o?{dryRun:!0}:void 0)}})}function F(){var e;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=(0,i.M1)();return(0,l.I)({queryKey:a.AF.workflowRuns(),queryFn:()=>n.getWorkflowRuns(),enabled:null==(e=r.enabled)||e,refetchInterval:3e4})}function g(){var e;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=(0,i.M1)();return(0,l.I)({queryKey:a.AF.pendingApprovals(),queryFn:()=>n.getPendingApprovals(),enabled:null==(e=r.enabled)||e,refetchInterval:1e3})}function A(){let e=(0,i.M1)(),r=(0,o.jE)();return(0,u.n)({mutationFn:r=>{let{runId:n,response:t}=r;return e.approveRun(n,t?{response:t}:{})},onSuccess:(e,n)=>{let{runId:t}=n;r.invalidateQueries({queryKey:a.AF.pendingApprovals()}),r.invalidateQueries({queryKey:a.AF.workflowRun(t)})}})}function h(){let e=(0,i.M1)(),r=(0,o.jE)();return(0,u.n)({mutationFn:r=>{let{runId:n,reason:t}=r;return e.rejectRun(n,t?{reason:t}:{})},onSuccess:(e,n)=>{let{runId:t}=n;r.invalidateQueries({queryKey:a.AF.pendingApprovals()}),r.invalidateQueries({queryKey:a.AF.workflowRun(t)})}})}function b(e){let r=(0,i.M1)();return(0,l.I)({queryKey:e?a.AF.workflowRun(e):["nexus","workflow-run","__none__"],queryFn:()=>{if(!e)throw Error("runId required");return r.getWorkflowRun(e)},enabled:!!e,refetchInterval:e=>{let r=e.state.data;return r?void 0===r.ok&&3e4:3e4}})}function E(){var e;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=(0,i.M1)(),l=(0,o.jE)(),u=null==(e=r.enabled)||e,s=r.EventSourceImpl;(0,t.useEffect)(()=>{if(u)return function(e,r){var n;let t,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=null!=(n=o.EventSourceImpl)?n:globalThis.EventSource;if(!l)return()=>{};let u="".concat(e,"/v1/events?topics=").concat(encodeURIComponent("workflow."));try{t=new l(u)}catch(e){return()=>{}}let i=e=>{try{var r;let n=JSON.parse(e.data);if("string"==typeof(null==n||null==(r=n.detail)?void 0:r.runId)&&n.detail.runId.length>0)return n.detail.runId}catch(e){}};for(let e of(t.addEventListener("workflow.approval.pending",()=>r.onApprovalPending()),t.addEventListener("workflow.approval.resolved",e=>r.onApprovalResolved(i(e))),["workflow.run.started","workflow.run.node-started","workflow.run.node-skipped","workflow.run.node-done","workflow.run.completed","workflow.run.failed"]))t.addEventListener(e,e=>r.onRunEvent(i(e)));return()=>{try{t.close()}catch(e){}}}(n.baseUrl,{onApprovalPending:()=>l.invalidateQueries({queryKey:a.AF.pendingApprovals()}),onApprovalResolved:e=>{l.invalidateQueries({queryKey:a.AF.pendingApprovals()}),e&&l.invalidateQueries({queryKey:a.AF.workflowRun(e)})},onRunEvent:e=>{l.invalidateQueries({queryKey:a.AF.workflowRuns()}),e&&l.invalidateQueries({queryKey:a.AF.workflowRun(e)})}},s?{EventSourceImpl:s}:{})},[n.baseUrl,u,l,s])}}}]);
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[763],{45454:(e,r,n)=>{n.d(r,{BX:()=>o});let t=new Map;function o(e,r){var n,o;let l=t.get(e);if(!l){let o;try{o=new EventSource(e)}catch(e){return null==(n=r.onConstructError)||n.call(r,e),()=>{}}let u={source:o,subscribers:new Set};o.onmessage=e=>{var r,n;for(let t of[...u.subscribers])null==(r=(n=t.handlers).onMessage)||r.call(n,e)},o.onerror=e=>{var r,n;for(let t of[...u.subscribers])null==(r=(n=t.handlers).onError)||r.call(n,e)},t.set(e,u),l=u}let u=l,i=[];for(let[e,n]of Object.entries(null!=(o=r.events)?o:{})){let r=e=>{n(e)};u.source.addEventListener(e,r),i.push([e,r])}let a={handlers:r};u.subscribers.add(a);let s=!1;return()=>{if(!s){for(let[e,r]of(s=!0,i))try{u.source.removeEventListener(e,r)}catch(e){}if(u.subscribers.delete(a),0===u.subscribers.size){try{u.source.close()}catch(e){}t.get(e)===u&&t.delete(e)}}}}},50763:(e,r,n)=>{n.d(r,{Ck:()=>E,Ux:()=>h,XL:()=>k,Yk:()=>A,b_:()=>F,hM:()=>p,j3:()=>f,mP:()=>d,oE:()=>v,up:()=>y,uz:()=>b,xd:()=>w,yM:()=>c,zD:()=>g});var t=n(19707),o=n(39120),l=n(71718),u=n(82229),i=n(61622),a=n(79822),s=n(45454);function d(){let e=(0,i.M1)(),r=(0,o.jE)(),n=(0,l.I)({queryKey:a.AF.workflows(),queryFn:()=>e.getWorkflows(),refetchInterval:6e4});return(0,t.useEffect)(()=>{let n=e.workflowsEventsUrl();if(n)return(0,s.BX)(n,{events:{change:()=>{r.invalidateQueries({queryKey:a.AF.workflows()})}}})},[e,r]),n}function f(e){var r;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=(0,i.M1)();return(0,l.I)({queryKey:a.AF.workflow(e),queryFn:()=>t.getWorkflow(e),enabled:null!=(r=n.enabled)?r:e.length>0})}function c(){let e=(0,i.M1)(),r=(0,o.jE)();return(0,u.n)({mutationFn:r=>{let{name:n,body:t}=r;return e.saveWorkflow(n,t)},onSuccess:(e,n)=>{let{name:t}=n;r.invalidateQueries({queryKey:a.AF.workflows()}),r.invalidateQueries({queryKey:a.AF.workflow(t)})}})}function v(){let e=(0,i.M1)(),r=(0,o.jE)();return(0,u.n)({mutationFn:r=>{let{name:n,scope:t}=r;return e.deleteWorkflow(n,t?{scope:t}:void 0)},onSuccess:(e,n)=>{let{name:t}=n;r.invalidateQueries({queryKey:a.AF.workflows()}),r.invalidateQueries({queryKey:a.AF.workflow(t)})}})}function w(){let e=(0,i.M1)();return(0,u.n)({mutationFn:r=>{let{yaml:n,signal:t}=r;return e.validateWorkflow(n,t?{signal:t}:void 0)}})}function y(){let e=(0,i.M1)();return(0,u.n)({mutationFn:r=>e.generateWorkflow(r)})}function p(){let e=(0,i.M1)();return(0,u.n)({mutationFn:r=>e.synthesizeWorkflow(r)})}function k(){let e=(0,i.M1)();return(0,u.n)({mutationFn:r=>{let{name:n,args:t,dryRun:o}=r;return e.runWorkflow(n,t,o?{dryRun:!0}:void 0)}})}function F(){var e;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=(0,i.M1)();return(0,l.I)({queryKey:a.AF.workflowRuns(),queryFn:()=>n.getWorkflowRuns(),enabled:null==(e=r.enabled)||e,refetchInterval:3e4})}function g(){var e;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=(0,i.M1)();return(0,l.I)({queryKey:a.AF.pendingApprovals(),queryFn:()=>n.getPendingApprovals(),enabled:null==(e=r.enabled)||e,refetchInterval:1e3})}function A(){let e=(0,i.M1)(),r=(0,o.jE)();return(0,u.n)({mutationFn:r=>{let{runId:n,response:t}=r;return e.approveRun(n,t?{response:t}:{})},onSuccess:(e,n)=>{let{runId:t}=n;r.invalidateQueries({queryKey:a.AF.pendingApprovals()}),r.invalidateQueries({queryKey:a.AF.workflowRun(t)})}})}function h(){let e=(0,i.M1)(),r=(0,o.jE)();return(0,u.n)({mutationFn:r=>{let{runId:n,reason:t}=r;return e.rejectRun(n,t?{reason:t}:{})},onSuccess:(e,n)=>{let{runId:t}=n;r.invalidateQueries({queryKey:a.AF.pendingApprovals()}),r.invalidateQueries({queryKey:a.AF.workflowRun(t)})}})}function b(e){let r=(0,i.M1)();return(0,l.I)({queryKey:e?a.AF.workflowRun(e):["nexus","workflow-run","__none__"],queryFn:()=>{if(!e)throw Error("runId required");return r.getWorkflowRun(e)},enabled:!!e,refetchInterval:e=>{let r=e.state.data;return r?void 0===r.ok&&3e4:3e4}})}function E(){var e;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=(0,i.M1)(),l=(0,o.jE)(),u=null==(e=r.enabled)||e,s=r.EventSourceImpl;(0,t.useEffect)(()=>{if(u)return function(e,r){var n;let t,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=null!=(n=o.EventSourceImpl)?n:globalThis.EventSource;if(!l)return()=>{};let u="".concat(e,"/v1/events?topics=").concat(encodeURIComponent("workflow."));try{t=new l(u)}catch(e){return()=>{}}let i=e=>{try{var r;let n=JSON.parse(e.data);if("string"==typeof(null==n||null==(r=n.detail)?void 0:r.runId)&&n.detail.runId.length>0)return n.detail.runId}catch(e){}};for(let e of(t.addEventListener("workflow.approval.pending",()=>r.onApprovalPending()),t.addEventListener("workflow.approval.resolved",e=>r.onApprovalResolved(i(e))),["workflow.run.started","workflow.run.node-started","workflow.run.node-skipped","workflow.run.node-done","workflow.run.completed","workflow.run.failed"]))t.addEventListener(e,e=>r.onRunEvent(i(e)));return()=>{try{t.close()}catch(e){}}}(n.baseUrl,{onApprovalPending:()=>l.invalidateQueries({queryKey:a.AF.pendingApprovals()}),onApprovalResolved:e=>{l.invalidateQueries({queryKey:a.AF.pendingApprovals()}),e&&l.invalidateQueries({queryKey:a.AF.workflowRun(e)})},onRunEvent:e=>{l.invalidateQueries({queryKey:a.AF.workflowRuns()}),e&&l.invalidateQueries({queryKey:a.AF.workflowRun(e)})}},s?{EventSourceImpl:s}:{})},[n.baseUrl,u,l,s])}}}]);
@@ -1,4 +1,4 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4323],{14323:(e,t,i)=>{i.r(t),i.d(t,{WebglAddon:()=>t6});var s,r,n=i(11518),o=Object.defineProperty,a=Object.getOwnPropertyDescriptor,h=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?u.isErrorNoTelemetry(e)?new u(e.message+`
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7633],{67633:(e,t,i)=>{i.r(t),i.d(t,{WebglAddon:()=>t6});var s,r,n=i(16396),o=Object.defineProperty,a=Object.getOwnPropertyDescriptor,h=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?u.isErrorNoTelemetry(e)?new u(e.message+`
2
2
 
3
3
  `+e.stack):Error(e.message+`
4
4
 
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7930],{5031:(e,t,n)=>{n.d(t,{GM:()=>l,J3:()=>i,WF:()=>r,bR:()=>s,m:()=>d,r5:()=>a});let r="/v1/devices",a="/v1/approvals/merges",s="/v1/templates/capability-preview",i="/v1/idle-nudge/preview",l="/v1/morning-digest/showroom",d="/v1/next-fluent/dispatch"},14560:(e,t,n)=>{function r(e,t){var n,r;let a=null!=(n=t.minDistance)?n:100,s=null!=(r=t.minVelocity)?r:.3,i=0,l=0,d=0,o=!1,c=null,u=e=>{var n;null!=(n=t.shouldIgnore)&&n.call(t,e.target)||(i=e.clientX,l=e.clientY,d=e.timeStamp,o=!0,c=e.pointerId)},m=e=>{if(!o||e.pointerId!==c)return;o=!1,c=null;let n=e.clientX-i,r=e.clientY-l,u=Math.max(1,e.timeStamp-d),m=Math.abs(n),p=Math.abs(r);m<a||p>=m||m/u<s||t.onSwipe(n<0?"left":"right")},p=()=>{o=!1,c=null};return e.addEventListener("pointerdown",u),e.addEventListener("pointerup",m),e.addEventListener("pointercancel",p),()=>{e.removeEventListener("pointerdown",u),e.removeEventListener("pointerup",m),e.removeEventListener("pointercancel",p)}}function a(e,t){let n=0,r=0,a=0,s=!1,i=null,l=e=>{var l;null!=(l=t.shouldIgnore)&&l.call(t,e.target)||(n=e.clientX,r=e.clientY,a=e.timeStamp,s=!0,i=e.pointerId)},d=e=>{if(!s||e.pointerId!==i)return;s=!1,i=null;let l=function(e){var t,n;let r=null!=(t=e.minDistance)?t:100,a=null!=(n=e.minVelocity)?n:.3,s=Math.abs(e.dx),i=Math.abs(e.dy),l=Math.max(1,e.dt),d=Math.max(s,i);return d<r||d/l<a?null:s>=i?e.dx<0?"left":"right":e.dy<0?"up":"down"}({dx:e.clientX-n,dy:e.clientY-r,dt:e.timeStamp-a,...void 0!==t.minDistance?{minDistance:t.minDistance}:{},...void 0!==t.minVelocity?{minVelocity:t.minVelocity}:{}});l&&t.onSwipe(l)},o=()=>{s=!1,i=null};return e.addEventListener("pointerdown",l),e.addEventListener("pointerup",d),e.addEventListener("pointercancel",o),()=>{e.removeEventListener("pointerdown",l),e.removeEventListener("pointerup",d),e.removeEventListener("pointercancel",o)}}n.d(t,{gI:()=>r,ix:()=>a})},61066:(e,t,n)=>{n.d(t,{SY:()=>_});var r=n(35563),a=n(19707),s=n(45787),i=n(7090);let l=/https?:\/\/[^\s<>"']+/g;function d(e){return e.slice(0,40)}async function o(e,t){let n=function(e){var t;let n=null!=(t=e.match(l))?t:[];return 0===n.length?[{text:e}]:n.map(e=>({url:e}))}(t),r=await e.fetchJson("/v1/intake-ledger/items",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({items:n,source:"pwa"})});return{ids:r.ids,added:r.added,merged:r.merged}}async function c(e,t){return{acceptanceId:(await e.fetchJson("/v1/harness/ask",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t})})).acceptanceId}}function u(e,t,n){return e.fetchJson("/v1/intake/route",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t,consent:"route",source:"pwa",...(null==n?void 0:n.classify)!==void 0?{classify:n.classify}:{}})})}let m=["absorbed","discarded","routed","checked"],p={new:"대기 중",queued:"대기 중",absorbed:"흡수됨",routed:"다른 갈래로 넘김",checked:"확인됨",discarded:"버림",deferred:"미룸"};function g(e){var t,n,r;return null===e?{label:"찾을 수 없음",settled:!1,noteRef:null}:{label:Object.hasOwn(p,e.status)?p[e.status]:e.status,settled:m.includes(e.status),noteRef:null!=(r=null==(n=e.outputs)||null==(t=n.find(e=>"note"===e.kind))?void 0:t.ref)?r:null}}let f={"headless.spawn":"실행 시작","gate.baseline":"게이트 검사","review.diff-scope":"리뷰 중","headless.done":"실행 종료","run-terminal":"종료"};function h(e){var t,n,r,a,s;let i=e.at(-1),l=e.find(e=>"run-terminal"===e.event),d=null==l||null==(t=l.payload)?void 0:t.runStatus;return{stage:i?null!=(r=f[i.event])?r:i.event:null,lastEventAt:null!=(a=null==i?void 0:i.ts)?a:null,done:void 0!==l,outcome:l?"completed"===d||"failed"===d?d:"unknown":null,error:null!=(s=null==l||null==(n=l.payload)?void 0:n.error)?s:null}}var x=n(84240),v=n(53403),k=n(14560);class b{preview(e){return this.client.fetchJson("/v1/intake/pipeline-preview",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)})}commit(e){return this.client.fetchJson("/v1/intake/pipeline-commit",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)})}async submitPhotoOcr(e,t){let n=new FormData;return n.append("image",e,t),n.append("polishMode","minimal"),await this.client.fetchJson("/v1/notes/from-image",{method:"POST",body:n})}constructor(e){this.client=e}}var y=n(21483);let w={pending:"대기",approved:"승인",rejected:"거절",deferred:"잠시 멈춤"},j={pending:"bg-muted text-muted-foreground ring-border",approved:"bg-emerald-500/15 text-emerald-700 ring-emerald-500/30",rejected:"bg-rose-500/15 text-rose-700 ring-rose-500/30",deferred:"bg-amber-500/15 text-amber-700 ring-amber-500/30"},N={high:"bg-orange-500/15 text-orange-700 ring-orange-500/30",medium:"bg-sky-500/15 text-sky-700 ring-sky-500/30",low:"bg-muted text-muted-foreground ring-border"},I={research:"\uD83D\uDD0D","research-and-plan":"\uD83D\uDCCB","dev-feature":"⚙","dev-spec":"\uD83D\uDCD0",cognitive:"\uD83E\uDDE0",debug:"\uD83D\uDEE0","workflow-update":"↻"};function S(e){var t,n;let{card:a,verdict:s,active:i,stackIndex:l=0}=e,d=i?0:6*l,o=i?1:Math.max(.92,1-.04*l),c=i?1:Math.max(.6,1-.18*l),{task:u}=a,m=u.urls.length+u.keywords.length+u.refs.length;return(0,r.jsxs)("article",{"data-testid":"memo-intake-card","data-task-key":u.taskKey,"data-active":i?"true":"false","data-stack-index":l,"data-verdict":s,className:"absolute inset-0 flex flex-col gap-2 rounded-2xl border border-border bg-card p-5 shadow-lg ring-1 ring-foreground/5",style:{zIndex:i?30:30-l,transform:"translateY(".concat(d,"px) scale(").concat(o,")"),opacity:c},children:[(0,r.jsxs)("header",{className:"flex items-start justify-between gap-3",children:[(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("p",{className:"truncate text-[10px] uppercase tracking-wider text-muted-foreground","data-testid":"memo-card-mission",children:a.missionTitle}),(0,r.jsx)("h3",{className:"font-heading text-base font-medium leading-snug","data-testid":"memo-card-title",children:u.title})]}),(0,r.jsx)("span",{"data-testid":"memo-card-verdict",className:"shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium ring-1 ".concat(j[s]),children:w[s]})]}),(0,r.jsx)("p",{className:"line-clamp-3 text-sm text-foreground","data-testid":"memo-card-intent",children:u.intent}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5 text-[10px]",children:[(0,r.jsxs)("span",{"data-testid":"memo-card-category",className:"inline-flex items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-muted-foreground ring-1 ring-border",children:[(0,r.jsx)("span",{"aria-hidden":!0,children:null!=(t=I[u.category])?t:"•"}),u.category]}),(0,r.jsx)("span",{"data-testid":"memo-card-priority",className:"rounded-full px-2 py-0.5 font-medium ring-1 ".concat(null!=(n=N[u.priority])?n:N.low),children:u.priority}),u.workflowEligible?(0,r.jsx)("span",{"data-testid":"memo-card-workflow",className:"rounded-full bg-violet-500/15 px-2 py-0.5 text-violet-700 ring-1 ring-violet-500/30",children:"workflow"}):(0,r.jsx)("span",{"data-testid":"memo-card-workflow",className:"rounded-full bg-muted px-2 py-0.5 text-muted-foreground ring-1 ring-border",children:"no-workflow"}),m>0&&(0,r.jsxs)("span",{"data-testid":"memo-card-refs",className:"rounded-full bg-muted px-2 py-0.5 text-muted-foreground ring-1 ring-border",children:[m," ref",1===m?"":"s"]})]}),i&&(0,r.jsxs)("footer",{"data-testid":"memo-card-hint",className:"mt-auto grid grid-cols-2 gap-1 pt-2 text-[10px] text-muted-foreground",children:[(0,r.jsx)("span",{children:"← 거절"}),(0,r.jsx)("span",{className:"text-right",children:"승인 →"}),(0,r.jsx)("span",{children:"↑ 잠시 멈춤"}),(0,r.jsx)("span",{className:"text-right",children:"펼치기 ↓"})]})]})}function R(e,t,n,r){y.K.emit({surface:"pwa",intent:{layer:"selection",kind:"pwa.selection.toggle_change",target:{kind:"toggle",id:e},value:{from:t,to:n}},...r?{context:{active_workflow_run_id:r}}:{}})}let C={left:"reject",right:"approve",up:"defer",down:"expand"},E={ArrowLeft:"reject",ArrowRight:"approve",ArrowUp:"defer",ArrowDown:"expand"," ":"approve"},O={reject:"rejected",approve:"approved",defer:"deferred"};function L(){let{initialMemo:e,onClose:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:n}=(0,s.Q)(),l=(0,a.useMemo)(()=>new b(n),[n]),[d,o]=(0,a.useState)(null!=e?e:""),[c,u]=(0,a.useState)(!1),[m,p]=(0,a.useState)(null),[g,f]=(0,a.useState)({}),[h,k]=(0,a.useState)(0),[y,w]=(0,a.useState)(null),[j,N]=(0,a.useState)(null),[I,S]=(0,a.useState)(!1),[C,E]=(0,a.useState)(""),L=(0,a.useRef)(null),[P,D]=(0,a.useState)(!1),[K,A]=(0,a.useState)(!1),[$,_]=(0,a.useState)(!1),[U,X]=(0,a.useState)(!1),V=(0,a.useMemo)(()=>m?function(e){let t=[];for(let n of e)for(let e of n.tasks)t.push({missionId:n.id,missionTitle:n.title,task:e});return t}(m.decomposition.missions):[],[m]),H=(0,a.useMemo)(()=>{let e={approved:0,rejected:0,deferred:0,pending:0};for(let n of V){var t;let r=null!=(t=g[n.task.taskKey])?t:"pending";e[r]+=1}return e},[V,g]),B=H.approved+H.rejected+H.deferred>0,F=(0,a.useMemo)(()=>V.filter(e=>"approved"===g[e.task.taskKey]).map(e=>e.task.taskKey),[V,g]),W=(0,a.useCallback)(()=>{p(null),f({}),k(0),w(null),N(null),S(!1),E(""),null==t||t()},[t]),q=(0,a.useCallback)(()=>{var e;null==(e=L.current)||e.click()},[]),Q=(0,a.useCallback)(async e=>{var t,n;let r=null==(t=e.target.files)?void 0:t[0];if(e.target.value="",r){(0,v.cY)("intake.memo-preview.photo.pick",{name:r.name,size:r.size,type:r.type}),D(!0);try{let e=await l.submitPhotoOcr(r,r.name||"memo-photo.jpg"),t=(null!=(n=e.markdown)?n:"").trim();if(!t)return void x.oR.error("OCR 결과가 비어 있습니다 — 사진을 다시 찍거나 다른 이미지를 선택하세요.");o(e=>e.trim()?"".concat(t,"\n\n---\n\n").concat(e):t),x.oR.success("OCR 추가됨 (provider=".concat(e.provider," \xb7 ").concat(t.length,"자) — 수정 후 Run preview 누르세요."))}catch(e){x.oR.error("OCR 실패: ".concat(e instanceof Error?e.message:e)),(0,v.cY)("intake.memo-preview.photo.error",{err:String(e)})}finally{D(!1)}}},[l]),G=(0,a.useCallback)(async()=>{let e=d.trim(),t=C.trim();if(e&&t&&m){(0,v.cY)("intake.memo-preview.refine",{hintLen:t.length,useRealLlm:K}),u(!0),w(null),N(null);try{let n=await l.preview({rawText:e,refinementHint:t,priorDecomposition:{missions:m.decomposition.missions},...K?{useRealLlm:!0}:{},...U?{useRealEnrich:!0}:{}});p(n),f({}),k(0),E(""),S(!1)}catch(e){x.oR.error("refine failed: ".concat(e instanceof Error?e.message:e)),(0,v.cY)("intake.memo-preview.refine.error",{err:String(e)})}finally{u(!1)}}},[l,d,C,m,K,U]),Z=(0,a.useCallback)(async()=>{let e=d.trim();if(e){(0,v.cY)("intake.memo-preview.submit",{length:e.length,useRealLlm:K,useRealEnrich:U}),u(!0),w(null),N(null);try{let t=await l.preview({rawText:e,...K?{useRealLlm:!0}:{},...U?{useRealEnrich:!0}:{}});p(t),f({}),k(0)}catch(e){x.oR.error("pipeline preview failed: ".concat(e instanceof Error?e.message:e)),(0,v.cY)("intake.memo-preview.error",{err:String(e)})}finally{u(!1)}}},[l,d,K,U]),ee=(0,a.useCallback)(e=>{if(!V.length||h>=V.length)return;let t=V[h];if((0,v.cY)("intake.memo-preview.decision",{taskKey:t.task.taskKey,decision:e}),"expand"===e)return void w(t);f(n=>({...n,[t.task.taskKey]:O[e]})),k(e=>Math.min(e+1,V.length))},[V,h]),et=(0,a.useCallback)(()=>{V.length&&((0,v.cY)("intake.memo-preview.approve-all-pending",{count:H.pending}),f(e=>{let t={...e};for(let e of V){var n;(null!=(n=t[e.task.taskKey])?n:"pending")==="pending"&&(t[e.task.taskKey]="approved")}return t}))},[V,H.pending]),en=(0,a.useCallback)(async()=>{var e,t,n;let r=d.trim();if(!r)return;let a=B?F:void 0;if(B&&0===F.length)return void x.oR.error("승인된 카드가 없습니다 — 카드를 → 스와이프해서 승인하세요.");(0,v.cY)("intake.memo-preview.register.submit",{length:r.length,mode:B?"selective":"express",includeCount:null!=(e=null==a?void 0:a.length)?e:null,useRealLlm:K,commitToTox:$}),u(!0);try{let e={rawText:r,...a?{includeTaskKeys:a}:{},...K?{useRealLlm:!0}:{},...U?{useRealEnrich:!0}:{}},s=$?await l.commit(e):await l.preview({...e,register:!0});p(s);let i=s.register;if(i){let e=null!=(n=null==(t=i.skippedTaskKeys)?void 0:t.length)?n:0;N({missions:i.missionIds.length,tasks:i.taskIds.length,skipped:e});let r=e>0?" \xb7 ".concat(e," skipped"):"",a=$?"~/.elanous/tasks/tasks.db":"in-memory";x.oR.success("registered ".concat(i.missionIds.length," mission").concat(1===i.missionIds.length?"":"s"," \xb7 ").concat(i.taskIds.length," task").concat(1===i.taskIds.length?"":"s"," (").concat(a,")").concat(r))}else x.oR.error("register skipped — endpoint returned no register payload")}catch(e){x.oR.error("register failed: ".concat(e instanceof Error?e.message:e)),(0,v.cY)("intake.memo-preview.register.error",{err:String(e)})}finally{u(!1)}},[l,d,B,F,K,$,U]);return(0,r.jsxs)("section",{className:"mx-auto flex max-w-md flex-col gap-4 p-4","data-testid":"memo-intake-preview",children:[(0,r.jsxs)("header",{className:"space-y-1",children:[(0,r.jsx)("h2",{className:"font-heading text-lg font-medium",children:"New from memo"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Raw memo dump → 자동 task graph. ←/→/↑/↓ swipe = 거절/승인/잠시 멈춤/펼치기."}),(0,r.jsxs)("label",{"data-testid":"memo-intake-llm-toggle",className:"flex items-center gap-2 text-[10px] text-muted-foreground",children:[(0,r.jsx)("input",{type:"checkbox",checked:K,onChange:e=>{let t=e.target.checked;R("use-real-llm",K,t,null==m?void 0:m.intakeId),A(t)},disabled:c||P,"data-testid":"memo-intake-llm-toggle-input"}),(0,r.jsxs)("span",{children:[(0,r.jsx)("strong",{className:K?"text-foreground":"",children:"Enable Real LLM"})," ","— ",K?"실 streamLLM 호출 (provider 는 ~/.elanous/config.json \xb7 user-config 우선)":"LLM 미호출 \xb7 skeleton fallback \xb7 pipeline 흐름 + cards 렌더만 검증"]})]}),(0,r.jsxs)("label",{"data-testid":"memo-intake-enrich-toggle",className:"flex items-center gap-2 text-[10px] text-muted-foreground",children:[(0,r.jsx)("input",{type:"checkbox",checked:U,onChange:e=>{let t=e.target.checked;R("use-real-enrich",U,t,null==m?void 0:m.intakeId),X(t)},disabled:c||P,"data-testid":"memo-intake-enrich-toggle-input"}),(0,r.jsxs)("span",{children:[(0,r.jsx)("strong",{className:U?"text-foreground":"",children:"Enable Real enrich"})," ","— ",U?"URL fetch + gh repo view 호출 (keyword crawl 은 stub \xb7 FU-I7b.2)":'모든 enrichment 가 per-row "no plugin" diag \xb7 외부 HTTP 호출 0']})]}),(0,r.jsxs)("label",{"data-testid":"memo-intake-commit-toggle",className:"flex items-center gap-2 text-[10px] text-muted-foreground",children:[(0,r.jsx)("input",{type:"checkbox",checked:$,onChange:e=>{let t=e.target.checked;R("commit-to-tox",$,t,null==m?void 0:m.intakeId),_(t)},disabled:c||P,"data-testid":"memo-intake-commit-toggle-input"}),(0,r.jsxs)("span",{children:[(0,r.jsx)("strong",{className:$?"text-rose-700 dark:text-rose-400":"",children:"Commit to real TOX"})," ","— ",$?"Register 가 ~/.elanous/tasks/tasks.db 에 실 mission/task 쓰기 + workflow YAML 디스크 저장 (되돌릴 수 없음)":"Register 가 in-memory store 만 사용 \xb7 사용자 TOX 미터치"]})]})]}),(0,r.jsx)("textarea",{value:d,onChange:e=>o(e.target.value),placeholder:"- 스크린 레코딩 능력 흡수\n https://github.com/siddharthvaddem/openscreen\n- 이미지 바로 보기 안 되는 이유 분석\n\n==== 다이어그램 강화 ====\n위젯 surface \xb7 Mermaid \xb7 DrawIO repo 확인",rows:6,disabled:c,"data-testid":"memo-intake-textarea",className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 font-mono text-sm shadow-xs focus:outline-none focus:ring-2 focus:ring-ring"}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsx)(i.$,{type:"button",size:"sm",onClick:()=>void Z(),disabled:c||P||!d.trim(),"data-testid":"memo-intake-submit",children:c&&!m?"Running…":"Run preview"}),(0,r.jsx)(i.$,{type:"button",size:"sm",variant:"ghost",onClick:q,disabled:c||P,"data-testid":"memo-intake-photo","aria-label":"upload photo for OCR",title:"사진 / 화이트보드 / post-it → OCR → memo",children:P?"⏳ OCR…":"\uD83D\uDCF7 Photo"}),(0,r.jsx)("input",{ref:L,type:"file",accept:"image/*",capture:"environment",className:"hidden","data-testid":"memo-intake-photo-input",onChange:e=>void Q(e)}),m&&(0,r.jsx)(i.$,{type:"button",size:"sm",variant:"ghost",onClick:W,disabled:c,"data-testid":"memo-intake-reset",children:"Reset"})]}),m&&(0,r.jsx)(z,{res:m,registered:j}),m&&null===j&&(0,r.jsx)(T,{open:I,hint:C,busy:c,onToggle:()=>S(e=>!e),onHintChange:E,onSubmit:()=>void G()}),m&&V.length>0&&(0,r.jsx)(J,{cards:V,verdicts:g,topIndex:h,onSwipe:ee}),m&&V.length>0&&(0,r.jsx)(M,{tallies:H,total:V.length}),m&&V.length>0&&(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsx)(i.$,{type:"button",size:"sm",variant:"ghost",onClick:et,disabled:c||0===H.pending||null!==j,"data-testid":"memo-intake-approve-pending",children:"Approve all pending (".concat(H.pending,")")}),(0,r.jsx)(i.$,{type:"button",size:"sm",onClick:()=>void en(),disabled:c||null!==j||B&&0===F.length,"data-testid":"memo-intake-register",children:j?"Registered ✓ (".concat(j.tasks," tasks)"):c?"Registering…":B?"Register approved (".concat(F.length,")"):"Register all (".concat(V.length,")")}),(0,r.jsx)("span",{className:"text-[10px] text-muted-foreground",children:"".concat(h," / ").concat(V.length," reviewed")})]}),y&&(0,r.jsx)(Y,{card:y,onClose:()=>w(null)})]})}function M(e){let{tallies:t,total:n}=e;return(0,r.jsxs)("div",{"data-testid":"memo-intake-tally",className:"flex flex-wrap items-center gap-2 text-[10px] text-muted-foreground",children:[(0,r.jsxs)("span",{className:"font-medium",children:[n," 카드"]}),(0,r.jsxs)("span",{"data-testid":"memo-tally-approved",className:"rounded-full bg-emerald-500/15 px-2 py-0.5 text-emerald-700 ring-1 ring-emerald-500/30",children:["✓ ",t.approved]}),(0,r.jsxs)("span",{"data-testid":"memo-tally-rejected",className:"rounded-full bg-rose-500/15 px-2 py-0.5 text-rose-700 ring-1 ring-rose-500/30",children:["✗ ",t.rejected]}),(0,r.jsxs)("span",{"data-testid":"memo-tally-deferred",className:"rounded-full bg-amber-500/15 px-2 py-0.5 text-amber-700 ring-1 ring-amber-500/30",children:["⏸ ",t.deferred]}),(0,r.jsxs)("span",{"data-testid":"memo-tally-pending",className:"rounded-full bg-muted px-2 py-0.5 ring-1 ring-border",children:["… ",t.pending]})]})}function T(e){let{open:t,hint:n,busy:a,onToggle:s,onHintChange:l,onSubmit:d}=e;return(0,r.jsxs)("div",{"data-testid":"memo-intake-refine",className:"space-y-2",children:[(0,r.jsx)(i.$,{type:"button",size:"sm",variant:"ghost",onClick:s,disabled:a,"data-testid":"memo-intake-refine-toggle",className:"text-xs",children:t?"↓ Hide refine":"↻ Refine decomposition"}),t&&(0,r.jsxs)("div",{className:"space-y-2 rounded-lg border border-dashed border-border bg-card/30 p-3",children:[(0,r.jsx)("p",{className:"text-[10px] text-muted-foreground",children:"LLM 에 다시 prompt — 원본 memo + 이전 분해 + hint 를 함께 보냅니다. 결과 카드의 verdict 는 초기화됩니다."}),(0,r.jsx)("textarea",{value:n,onChange:e=>l(e.target.value),placeholder:'예: "missions 더 작게" \xb7 "P0 만 남겨" \xb7 "t-9 ~ t-11 을 하나로 합쳐"',rows:2,disabled:a,"data-testid":"memo-intake-refine-textarea",className:"w-full resize-y rounded-md border border-input bg-background px-2 py-1.5 text-xs shadow-xs focus:outline-none focus:ring-2 focus:ring-ring"}),(0,r.jsx)(i.$,{type:"button",size:"sm",onClick:d,disabled:a||!n.trim(),"data-testid":"memo-intake-refine-submit",children:a?"Refining…":"Re-run with hint"})]})]})}function z(e){let{res:t,registered:n}=e;return(0,r.jsxs)("div",{"data-testid":"memo-intake-summary",className:"space-y-1 rounded-lg border border-dashed border-border bg-card/50 p-3 text-xs text-muted-foreground",children:[(0,r.jsxs)("p",{children:["intake ",(0,r.jsx)("code",{"data-testid":"memo-intake-id",className:"rounded bg-muted px-1 text-foreground",children:t.intakeId})," \xb7 ",t.decomposition.fallback?"skeleton fallback":"live"]}),(0,r.jsxs)("p",{children:[t.decomposition.missionCount," mission",1===t.decomposition.missionCount?"":"s"," \xb7"," ",t.decomposition.taskCount," task",1===t.decomposition.taskCount?"":"s"," \xb7"," ","workflow-eligible ",t.categorize.counts.workflowEligible,"/",t.categorize.counts.total," \xb7"," ","deps ",t.align.dependencyCount]}),n&&(0,r.jsxs)("p",{"data-testid":"memo-intake-registered",className:"text-emerald-600 dark:text-emerald-400",children:["✓ registered ",n.missions," mission",1===n.missions?"":"s"," \xb7 ",n.tasks," task",1===n.tasks?"":"s"," (in-memory)",n.skipped>0?" \xb7 ".concat(n.skipped," skipped"):""]})]})}function J(e){let{cards:t,verdicts:n,topIndex:s,onSwipe:i}=e,l=(0,a.useRef)(null),d=(0,a.useRef)(i);if((0,a.useEffect)(()=>{d.current=i},[i]),(0,a.useEffect)(()=>{let e=l.current;if(e)return(0,k.ix)(e,{onSwipe:e=>d.current(C[e])})},[]),(0,a.useEffect)(()=>{if(s>=t.length)return;let e=e=>{let t=E[e.key];t&&(e.preventDefault(),d.current(t))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[s,t.length]),s>=t.length)return(0,r.jsx)("div",{"data-testid":"memo-deck-empty",className:"flex h-72 items-center justify-center rounded-2xl border border-dashed border-border text-sm text-muted-foreground",children:'모든 카드 검토 완료 — 아래 "Approve all & Register" 를 눌러 등록.'});let o=t.slice(s,s+3);return(0,r.jsxs)("div",{ref:l,"data-testid":"memo-deck","data-top-index":s,role:"region","aria-label":"memo intake card deck \xb7 좌우 = 거절/승인 \xb7 위 = 잠시 멈춤 \xb7 아래 = 펼치기",tabIndex:0,className:"relative h-80 select-none touch-none",children:[o.map((e,t)=>{var a;return(0,r.jsx)(S,{card:e,verdict:null!=(a=n[e.task.taskKey])?a:"pending",active:0===t,stackIndex:t},e.task.taskKey)}),(0,r.jsxs)("div",{"data-testid":"memo-deck-progress",className:"absolute -bottom-6 left-0 right-0 text-center text-[10px] text-muted-foreground",children:[s+1," / ",t.length]})]})}function Y(e){let{card:t,onClose:n}=e,{task:a}=t;return(0,r.jsx)("div",{"data-testid":"memo-card-expand",role:"dialog","aria-modal":"true",className:"fixed inset-0 z-50 flex items-end justify-center bg-foreground/40 p-4 sm:items-center",onClick:n,children:(0,r.jsxs)("div",{onClick:e=>e.stopPropagation(),className:"w-full max-w-md space-y-3 rounded-2xl border border-border bg-card p-5 shadow-xl",children:[(0,r.jsxs)("header",{className:"space-y-1",children:[(0,r.jsx)("p",{className:"text-[10px] uppercase tracking-wider text-muted-foreground",children:t.missionTitle}),(0,r.jsx)("h3",{className:"font-heading text-base font-medium",children:a.title})]}),(0,r.jsx)("p",{className:"text-sm text-foreground",children:a.intent}),(a.urls.length>0||a.keywords.length>0||a.refs.length>0)&&(0,r.jsxs)("div",{className:"space-y-1 text-xs text-muted-foreground",children:[a.urls.length>0&&(0,r.jsxs)("p",{"data-testid":"memo-card-expand-urls",children:["URLs: ",a.urls.join(" \xb7 ")]}),a.keywords.length>0&&(0,r.jsxs)("p",{"data-testid":"memo-card-expand-keywords",children:["Keywords: ",a.keywords.join(" \xb7 ")]}),a.refs.length>0&&(0,r.jsxs)("p",{"data-testid":"memo-card-expand-refs",children:["Refs: ",a.refs.join(" \xb7 ")]})]}),(0,r.jsxs)("p",{className:"text-[10px] text-muted-foreground",children:[a.category," \xb7 ",a.priority," priority \xb7 ",a.workflowEligible?"workflow":"no-workflow"," \xb7 confidence ",a.confidence]}),(0,r.jsx)("div",{className:"flex justify-end pt-1",children:(0,r.jsx)(i.$,{type:"button",size:"sm",variant:"ghost",onClick:n,"data-testid":"memo-card-expand-close",children:"Close"})})]})})}let P="elanous.intake.recent",D={absorb:"→ 흡수",tasks:"→ 작업",graph:"→ 그래프","ask-human":"→ 직접 고르세요"};function K(e){if(null==e?void 0:e.storage)return e.storage;try{return globalThis.localStorage}catch(e){return null}}function A(e){try{var t;let n=null==(t=K(e))?void 0:t.getItem(P);if(!n)return[];let r=JSON.parse(n);return Array.isArray(r)?r:[]}catch(e){return[]}}async function $(e,t,n){let r=d(n);return"absorb"===t?{absorbIds:(await o(e,n)).ids,recentPreview:r}:{acceptanceId:(await c(e,n)).acceptanceId,recentPreview:r}}function _(){var e,t;let{state:n,deps:l}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:o}=(0,s.Q)(),[c,m]=(0,a.useState)(""),[p,f]=(0,a.useState)(!1),[x,v]=(0,a.useState)(null),[k,b]=(0,a.useState)(null),[y,w]=(0,a.useState)(null),[j,N]=(0,a.useState)(null),[I,S]=(0,a.useState)({}),[R,C]=(0,a.useState)(!1),[E,O]=(0,a.useState)(""),[M,T]=(0,a.useState)([]),[z,J]=(0,a.useState)({}),Y=(0,a.useRef)(z),_=(0,a.useMemo)(()=>[...new Set(M.filter(e=>"absorb"===e.track).flatMap(e=>{var t;return null!=(t=e.ids)?t:[]}))],[M]),U=(0,a.useRef)(_);U.current=_;let X=(0,a.useRef)(()=>{}),[V,H]=(0,a.useState)(null),[B,F]=(0,a.useState)(!1),W=(0,a.useRef)(!1),q=(0,a.useRef)(0),Q=(0,a.useRef)(c);Q.current=c;let G=(0,a.useRef)(null),Z=(0,a.useRef)(I),ee=(0,a.useRef)(M),et=(0,a.useMemo)(()=>[...new Set([...M.filter(e=>"graph"===e.track).map(e=>e.runId),null==j?void 0:j.runId].filter(e=>!!e))],[M,null==j?void 0:j.runId]);(0,a.useEffect)(()=>{T(A(l))},[l]),(0,a.useEffect)(()=>{ee.current=M},[M]),(0,a.useEffect)(()=>{let e=!1,t=new Map,n=async r=>{var a;if(e||!U.current.includes(r)||g(null!=(a=Y.current[r])?a:null).settled)return;let s=null;try{s=await o.fetchJson("/v1/intake-ledger/items/".concat(encodeURIComponent(r)))}catch(e){}e||(Y.current={...Y.current,[r]:s},J(Y.current),U.current.includes(r)&&!g(s).settled?t.set(r,setTimeout(()=>{n(r)},6e4)):t.delete(r))};return X.current=e=>{var r;t.has(e)||g(null!=(r=Y.current[e])?r:null).settled||(t.set(e,null),n(e))},U.current.forEach(X.current),()=>{for(let n of(e=!0,t.values()))null!==n&&clearTimeout(n);t.clear(),X.current=()=>{}}},[o]),(0,a.useEffect)(()=>{_.forEach(X.current)},[_]);let en=(0,a.useCallback)(e=>{var t,n;T(function(e,t){let n=[e,...A(t)].slice(0,20);try{var r;null==(r=K(t))||r.setItem(P,JSON.stringify(n))}catch(e){}return n}({...e,at:null!=(n=null==l||null==(t=l.now)?void 0:t.call(l))?n:new Date().toISOString()},l))},[l]),er=(0,a.useCallback)(async()=>{let e=c.trim();if(e&&!p){f(!0),v(null),b(null);try{var t;let n=await $(o,"absorb",e);b(null!=(t=n.absorbIds)?t:[]),en({track:"absorb",preview:n.recentPreview,ids:n.absorbIds})}catch(e){v(e instanceof Error?e.message:String(e))}finally{f(!1)}}},[p,o,en,c]),ea=(0,a.useCallback)(()=>{let e=c.trim();e&&!p&&(O(e),C(!0),en({track:"split",preview:d(e)}))},[p,en,c]),es=(0,a.useCallback)(async()=>{let e=c.trim();if(e&&!p){f(!0),v(null),w(null),N(null);try{var t;let n=await $(o,"graph",e);w(null!=(t=n.acceptanceId)?t:null),G.current=Date.now(),en({track:"graph",preview:n.recentPreview,acceptanceId:n.acceptanceId})}catch(e){v(e instanceof Error?e.message:String(e))}finally{f(!1)}}},[p,o,en,c]);(0,a.useEffect)(()=>{let e=++q.current;if(H(null),!c.trim())return;let t=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e)},r=e.trim();if(!r)return()=>{};let a=n.setTimeout(()=>t(r),500);return()=>n.clearTimeout(a)}(c,t=>{u(o,t).then(t=>{q.current===e&&H(t)},()=>{q.current===e&&H(null)})});return()=>{++q.current,t()}},[o,c]);let ei=(0,a.useCallback)(async()=>{let e=c.trim();if(!e||W.current||p||(null==V?void 0:V.reason)!=="rule-unknown")return;let t=++q.current;W.current=!0,F(!0);try{let n=await u(o,e,{classify:!0});q.current===t&&Q.current.trim()===e&&H(n)}catch(n){q.current===t&&Q.current.trim()===e&&H({track:"ask-human",confidence:0,reason:"classifier-failed:request-error",decidedBy:"classifier"})}finally{W.current=!1,F(!1)}},[p,o,null==V?void 0:V.reason,c]);(0,a.useEffect)(()=>{if(!y)return;let e=!1,t=async()=>{var t,n;if(e)return;let r=null!=(t=G.current)?t:Date.now();if(!(Date.now()-r>3e5))try{let t=await o.fetchJson("/v1/harness/ask-status?acceptanceId=".concat(encodeURIComponent(y)));if(!e&&(N(t),t.runId&&ee.current.some(e=>"graph"===e.track&&e.acceptanceId===y&&e.runId!==t.runId))){let e=ee.current.map(e=>"graph"===e.track&&e.acceptanceId===y?{...e,runId:t.runId}:e);ee.current=e;try{null==(n=K(l))||n.setItem(P,JSON.stringify(e))}catch(e){}T(e)}}catch(e){}};t();let n=setInterval(()=>{t()},5e3);return()=>{e=!0,clearInterval(n)}},[y,o,l]),(0,a.useEffect)(()=>{Z.current=I},[I]),(0,a.useEffect)(()=>{let e;if(0===et.length)return;let t=!1,n=!1,r=async()=>{if(t||n)return;let a=et.filter(e=>{var t;return!h(null!=(t=Z.current[e])?t:[]).done});if(0!==a.length){n=!0;try{let e=await Promise.allSettled(a.map(e=>o.fetchJson("/v1/harness/run-events?runId=".concat(encodeURIComponent(e)))));if(t)return;let n={};e.forEach((e,t)=>{"fulfilled"===e.status&&(n[a[t]]=e.value)}),Object.keys(n).length>0&&(Z.current={...Z.current,...n},S(Z.current))}finally{n=!1,!t&&et.some(e=>{var t;return!h(null!=(t=Z.current[e])?t:[]).done})&&(e=setTimeout(()=>{r()},3e4))}}};return r(),()=>{t=!0,e&&clearTimeout(e)}},[o,et]);let el=null!=n?n:{text:c,busy:p,error:x,absorbIds:k,acceptanceId:y,graph:j,runEvents:I,splitOpen:R,splitMemo:E,recent:M,route:V},ed=(0,a.useMemo)(()=>{var e,t;return el.acceptanceId?{acceptanceId:el.acceptanceId,phase:null==(e=el.graph)?void 0:e.phase,runId:null==(t=el.graph)?void 0:t.runId}:null},[el.acceptanceId,el.graph]),eo=0===el.text.trim().length,ec=null!=(e=el.route)?e:null,eu=ec?"absorb"===(t=ec.track)?"absorb":"tasks"===t?"split":"graph"===t?"graph":null:null,em=e=>eu===e?"ring-2 ring-ring":void 0;return(0,r.jsxs)("section",{className:"mx-auto flex max-w-lg flex-col gap-4 p-4","data-testid":"intake-front-door",children:[(0,r.jsx)("header",{className:"space-y-1",children:(0,r.jsx)("h1",{className:"font-heading text-lg font-medium",children:"Intake"})}),(0,r.jsx)("textarea",{value:el.text,onChange:e=>m(e.target.value),rows:6,disabled:el.busy,"data-testid":"intake-front-door-field","aria-label":"intake",className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-sm shadow-xs focus:outline-none focus:ring-2 focus:ring-ring"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground","data-testid":"intake-front-door-explainer",children:"보내면 elanous 가 이 글을 처리합니다(흡수 \xb7 작업 분할 \xb7 그래프 실행)."}),ec&&(0,r.jsxs)("div",{"data-testid":"intake-route-chip","data-auto-submit":"0",className:"space-y-0.5 text-sm",children:[(0,r.jsx)("p",{"data-testid":"intake-route-chip-label",children:D[ec.track]}),"classifier"===ec.decidedBy&&(0,r.jsxs)("p",{"data-testid":"intake-route-chip-classifier",children:["분류기 판정 \xb7 확신 ",Math.round(100*ec.confidence),"%"]}),(0,r.jsx)("p",{"data-testid":"intake-route-chip-reason",className:"text-xs text-muted-foreground",children:function(e){if("classifier"!==e.decidedBy)return e.reason;if(e.reason.startsWith("classifier-failed:"))return"분류기가 못 갈랐습니다 — 직접 골라 주세요";if(e.reason.startsWith("classifier-low-confidence:")){var t,n;let r=e.reason.slice(26);return"분류기 추정: ".concat(null!=(n=null==(t=D[r])?void 0:t.slice(2))?n:r," (확신 낮음)")}return e.reason}(ec)}),"rule-unknown"===ec.reason&&(0,r.jsx)(i.$,{type:"button",size:"sm",variant:"outline",disabled:B||el.busy||eo,onClick:()=>void ei(),"data-testid":"intake-route-classify",children:"분류기로 가르기"})]}),(0,r.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,r.jsx)(i.$,{type:"button",size:"sm",className:em("absorb"),"aria-pressed":"absorb"===eu,disabled:eo||el.busy,onClick:()=>void er(),"data-testid":"intake-absorb","data-emphasized":"absorb"===eu?"true":"false",children:"흡수"}),(0,r.jsx)(i.$,{type:"button",size:"sm",variant:"outline",className:em("split"),"aria-pressed":"split"===eu,disabled:eo||el.busy,onClick:ea,"data-testid":"intake-split","data-emphasized":"split"===eu?"true":"false",children:"작업으로 나누기"}),(0,r.jsx)(i.$,{type:"button",size:"sm",variant:"secondary",className:em("graph"),"aria-pressed":"graph"===eu,disabled:eo||el.busy,onClick:()=>void es(),"data-testid":"intake-graph","data-emphasized":"graph"===eu?"true":"false",children:"그래프로 실행"})]}),el.absorbIds&&(0,r.jsxs)("div",{"data-testid":"intake-absorb-result",className:"space-y-1 text-sm",children:[(0,r.jsx)("p",{children:"대기열에 넣었습니다(아침 정기 흡수에서 처리)"}),(0,r.jsx)("ul",{children:el.absorbIds.map(e=>(0,r.jsx)("li",{"data-testid":"intake-absorb-id",children:e},e))})]}),ed&&(0,r.jsxs)("div",{"data-testid":"intake-graph-result",className:"space-y-1 text-sm",children:[(0,r.jsx)("p",{"data-testid":"intake-acceptance-id",children:ed.acceptanceId}),ed.phase&&(0,r.jsx)("p",{"data-testid":"intake-graph-phase",children:ed.phase}),ed.runId&&(0,r.jsx)("p",{"data-testid":"intake-graph-run",children:ed.runId})]}),el.error&&(0,r.jsx)("p",{className:"text-sm text-destructive","data-testid":"intake-front-door-error",children:el.error}),el.splitOpen&&(0,r.jsx)("div",{"data-testid":"intake-split-host",children:(0,r.jsx)(L,{initialMemo:el.splitMemo,onClose:()=>C(!1)})}),el.recent.length>0&&(0,r.jsx)("ul",{"data-testid":"intake-recent",className:"space-y-1 text-xs text-muted-foreground",children:el.recent.map((e,t)=>{var n;let a=(e=>{var t,n,r;let a=null!=(n=e.runId)?n:e.acceptanceId===el.acceptanceId?null==ed?void 0:ed.runId:void 0;return a?h(null!=(r=null==(t=el.runEvents)?void 0:t[a])?r:[]):null})(e);return(0,r.jsxs)("li",{"data-testid":"intake-recent-row",children:[e.track," \xb7 ",e.preview,e.ids?" \xb7 ".concat(e.ids.join(", ")):"","absorb"===e.track&&(null==(n=e.ids)?void 0:n.map(e=>{var t,n;let a=Object.hasOwn(z,e)?g(null!=(t=z[e])?t:null):null;return(0,r.jsxs)("span",{"data-testid":"intake-absorb-status",children:[" \xb7 흡수: ",null!=(n=null==a?void 0:a.label)?n:"조회 중",(null==a?void 0:a.noteRef)?" \xb7 ".concat(a.noteRef):""]},e)})),e.acceptanceId?" \xb7 ".concat(e.acceptanceId):"",(null==a?void 0:a.stage)&&(0,r.jsxs)("span",{"data-testid":"intake-run-stage",children:[" \xb7 단계: ",a.stage]}),(null==a?void 0:a.lastEventAt)&&(0,r.jsxs)("time",{"data-testid":"intake-run-last-event",dateTime:a.lastEventAt,children:[" \xb7 마지막 사건: ",a.lastEventAt]}),(null==a?void 0:a.done)&&(0,r.jsxs)("span",{"data-testid":"intake-run-outcome",children:[" \xb7 ","completed"===a.outcome?"완료":"failed"===a.outcome?"실패":"결과 미상",a.error?" \xb7 ".concat(a.error.split("\n")[0]):""]})]},"".concat(e.at,"-").concat(t))})})]})}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8071],{4123:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("store",[["path",{d:"M15 21v-5a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v5",key:"slp6dd"}],["path",{d:"M17.774 10.31a1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.451 0 1.12 1.12 0 0 0-1.548 0 2.5 2.5 0 0 1-3.452 0 1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.77-3.248l2.889-4.184A2 2 0 0 1 7 2h10a2 2 0 0 1 1.653.873l2.895 4.192a2.5 2.5 0 0 1-3.774 3.244",key:"o0xfot"}],["path",{d:"M4 10.95V19a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8.05",key:"wn3emo"}]])},5025:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("palette",[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]])},5053:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("message-square",[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]])},6955:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("git-branch",[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]])},7225:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},9594:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("square-terminal",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]])},12385:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]])},13267:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("square-kanban",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M8 7v7",key:"1x2jlm"}],["path",{d:"M12 7v4",key:"xawao1"}],["path",{d:"M16 7v9",key:"1hp2iy"}]])},41519:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("inbox",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]])},44824:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("crosshair",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"22",x2:"18",y1:"12",y2:"12",key:"l9bcsi"}],["line",{x1:"6",x2:"2",y1:"12",y2:"12",key:"13hhkx"}],["line",{x1:"12",x2:"12",y1:"6",y2:"2",key:"10w3f3"}],["line",{x1:"12",x2:"12",y1:"22",y2:"18",key:"15g9kq"}]])},50939:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("layout-grid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]])},53249:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("calendar-clock",[["path",{d:"M16 14v2.2l1.6 1",key:"fo4ql5"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]])},56519:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]])},57866:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("git-pull-request",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["line",{x1:"6",x2:"6",y1:"9",y2:"21",key:"rroup"}]])},61193:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]])},65951:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]])},71767:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("sliders-vertical",[["path",{d:"M10 8h4",key:"1sr2af"}],["path",{d:"M12 21v-9",key:"17s77i"}],["path",{d:"M12 8V3",key:"13r4qs"}],["path",{d:"M17 16h4",key:"h1uq16"}],["path",{d:"M19 12V3",key:"o1uvq1"}],["path",{d:"M19 21v-5",key:"qua636"}],["path",{d:"M3 14h4",key:"bcjad9"}],["path",{d:"M5 10V3",key:"cb8scm"}],["path",{d:"M5 21v-7",key:"1w1uti"}]])},73280:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("book-open",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]])},79349:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]])},82012:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("telescope",[["path",{d:"m10.065 12.493-6.18 1.318a.934.934 0 0 1-1.108-.702l-.537-2.15a1.07 1.07 0 0 1 .691-1.265l13.504-4.44",key:"k4qptu"}],["path",{d:"m13.56 11.747 4.332-.924",key:"19l80z"}],["path",{d:"m16 21-3.105-6.21",key:"7oh9d"}],["path",{d:"M16.485 5.94a2 2 0 0 1 1.455-2.425l1.09-.272a1 1 0 0 1 1.212.727l1.515 6.06a1 1 0 0 1-.727 1.213l-1.09.272a2 2 0 0 1-2.425-1.455z",key:"m7xp4m"}],["path",{d:"m6.158 8.633 1.114 4.456",key:"74o979"}],["path",{d:"m8 21 3.105-6.21",key:"1fvxut"}],["circle",{cx:"12",cy:"13",r:"2",key:"1c1ljs"}]])},86413:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("layers-2",[["path",{d:"M13 13.74a2 2 0 0 1-2 0L2.5 8.87a1 1 0 0 1 0-1.74L11 2.26a2 2 0 0 1 2 0l8.5 4.87a1 1 0 0 1 0 1.74z",key:"15q6uc"}],["path",{d:"m20 14.285 1.5.845a1 1 0 0 1 0 1.74L13 21.74a2 2 0 0 1-2 0l-8.5-4.87a1 1 0 0 1 0-1.74l1.5-.845",key:"byia6g"}]])},86464:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("layers",[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]])},93868:(e,a,y)=>{y.d(a,{A:()=>t});let t=(0,y(42735).A)("compass",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z",key:"9ktpf1"}]])}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8198],{664:(e,t,n)=>{n.d(t,{bK:()=>I,Ju:()=>b,yN:()=>E,Wl:()=>g,FM:()=>T,uS:()=>d,$Q:()=>_,tw:()=>R,ZH:()=>D,py:()=>U,lY:()=>P,HD:()=>C,er:()=>y});var r=n(5456),a=n(77962),o=n(87329),l=n(53403),i=n(48274);let s=/^https?:\/\/[^\s"']+\.(png|jpe?g|webp|gif)(\?[^\s"']*)?$/i,c=/https?:\/\/[^\s"'<>)\]]+?\.(?:png|jpe?g|webp|gif)(?:\?[^\s"'<>)\]]*)?/gi;function u(e){var t,n;let r=null==(t=(null!=(n=e.split("?")[0])?n:"").split(".").pop())?void 0:t.toLowerCase();return"jpg"===r||"jpeg"===r?"image/jpeg":"webp"===r?"image/webp":"gif"===r?"image/gif":"image/png"}function d(e){if(!e||"object"!=typeof e||Array.isArray(e))return[];let t=new Set,n=[],r=[],a=(e,o)=>{if(o>4||null===e)return;if(Array.isArray(e)){for(let t of e)a(t,o+1);return}if("object"!=typeof e)return;let l="string"==typeof e.uri?e.uri:e.result_url;if("string"==typeof l&&s.test(l)&&!t.has(l)){t.add(l);let r="string"==typeof e.description?e.description:"string"==typeof e.name?e.name:void 0;n.push({src:l,mediaType:u(l),...r?{alt:r}:{}})}for(let[t,n]of Object.entries(e)){if("string"==typeof n&&("output"===t||"text"===t)){r.push(n);continue}a(n,o+1)}};for(let o of(a(e,0),r))for(let e of o.matchAll(c)){let r=e[0];t.has(r)||(t.add(r),n.push({src:r,mediaType:u(r)}))}return n}let p=new Map,f=new Set,h=[],m=!1;function g(){return m&&(h=Array.from(p.values()).sort((e,t)=>{var n,r;return(null!=(n=e.priority)?n:50)-(null!=(r=t.priority)?r:50)}),m=!1),h}function y(e){return f.add(e),()=>{f.delete(e)}}function k(e){return"hud.segment"===e.kind&&("applied"===(0,r.VQ)(p,e)&&function(){for(let e of(m=!0,f))try{e()}catch(e){(0,l.cY)("chat-runtime.hud.subscriber-error",e)}}(),!0)}function b(e){k(e)}let v=/^\[elanous\/feedback\/[a-zA-Z]+\] /;function w(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return;let n=(Array.isArray(e.content)?e.content:[]).filter(e=>null!==e&&"object"==typeof e&&!Array.isArray(e)&&"resource"===e.type).map(e=>e.resource).find(e=>{var n;return!(null===e||"object"!=typeof e||Array.isArray(e))&&e.uri===t&&"string"==typeof(n=e.mimeType)&&"text/html"===n.split(";")[0].trim().toLowerCase()&&"string"==typeof e.text});if(!n)return;let r=n._meta,a=r&&"object"==typeof r&&!Array.isArray(r)?r.ui:void 0,o=a&&"object"==typeof a&&!Array.isArray(a)?a.csp:void 0,l=o&&"object"==typeof o&&!Array.isArray(o)?o.connectDomains:void 0,i=o&&"object"==typeof o&&!Array.isArray(o)?o.resourceDomains:void 0,s=Array.isArray(l)?l.filter(e=>"string"==typeof e):void 0,c=Array.isArray(i)?i.filter(e=>"string"==typeof e):void 0;return{html:n.text,...s?{connectDomains:s}:{},...c?{resourceDomains:c}:{}}}let x="예산 상태를 읽지 못했습니다",I=[{name:"help",description:"Show this help"},{name:"session",description:"Show current session id"},{name:"fork",description:"Allocate a fresh session id"},{name:"budget",description:"Show this month spend and the notify threshold"},{name:"history",description:"Summarize the last N local turns (default 10) as role: first 80 chars"},{name:"clear",description:"Clear local message buffer"}],A=["Meta commands (enter :name or /name):",...I.map(e=>{let{name:t,description:n}=e;return" :".concat(t.padEnd(16)).concat(n)})].join("\n"),S={":help":async()=>({text:A}),":session":async(e,t)=>({text:"session = ".concat(t.sessionId)}),":fork":async()=>{let e=(0,o.Zr)();return{text:"forked → new session ".concat(e),newSessionId:e}},":budget":async(e,t)=>{let n=t.daemon;if(!(null==n?void 0:n.baseUrl))return{text:x};let r=await (0,i.gh)(n);return r?{text:function(e){let t=Number.isFinite(e.monthSoFarUsd)?e.monthSoFarUsd:0;return"budget ".concat(e.monthYYYYMM,": $").concat(t.toFixed(2)," \xb7 알림 ").concat(e.notifyAtPct,"%")}(r)}:{text:x}},":history":async(e,t)=>{var n;let r=Number(e[0]),a=Number.isFinite(r)&&r>0?Math.floor(r):10;return{text:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;return 0===e.length?"아직 대화가 없습니다":e.slice(Math.max(0,e.length-t)).map(e=>"".concat(e.role,": ").concat(e.text.slice(0,80))).join("\n")}(null!=(n=t.messages)?n:[],a)}},":clear":async()=>({text:"__CLEAR__"})};function T(e){let t=e.trimStart();if(t.startsWith(":"))return!0;if(!t.startsWith("/"))return!1;let[n]=t.split(/\s+/);return Object.hasOwn(S,":".concat(n.slice(1)))}async function E(e,t){let n=e.trim();if(!n.startsWith(":")&&!n.startsWith("/"))return null;let[r,...a]=n.split(/\s+/),o=r.startsWith("/")?":".concat(r.slice(1)):r;if(r.startsWith("/")&&!Object.hasOwn(S,o))return null;(0,l.cY)("webterm.chat.meta-command",{cmd:o});let i=Object.hasOwn(S,o)?S[o]:void 0;return i?i(a,t):{text:"unknown meta command: ".concat(r)}}async function C(e,t){var n,a,o;let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,l.cY)("webterm.chat.runturn.stream.start",{sessionId:t.sessionId,provider:t.provider,len:e.length,contentBlocks:null!=(a=null==(n=i.userContent)?void 0:n.length)?a:0});let s=[],c=-1,u=0,d=0,p=0,f=0,h=()=>s.map(e=>({...e})),m=e=>{(0,l.cY)("webterm.chat.runturn.stream.end",{stopReason:e.stopReason,sessionId:e.sessionId,...void 0!==e.error?{error:e.error}:{},images:u,tools:d,mcpApps:p,feedback:f})},g=await t.client.promptStream({sessionId:t.sessionId||void 0,userText:e,...i.userContent&&i.userContent.length>0?{userContent:i.userContent}:{},provider:t.provider||void 0},{onError:i.onError,onTextDelta:e=>{var t,n;let{full:r}=e;-1===c?(c=s.length,s.push({kind:"text",text:r})):s[c]={kind:"text",text:r},null==(t=i.onPartial)||t.call(i,r),null==(n=i.onPartialBlocks)||n.call(i,h())},onImageBlock:e=>{var t;let{src:n,mediaType:r,alt:a}=e;u+=1,s.push(void 0!==a?{kind:"image",src:n,mediaType:r,alt:a}:{kind:"image",src:n,mediaType:r}),null==(t=i.onPartialBlocks)||t.call(i,h())},onFeedback:e=>{if(!k(e)&&"applied"===(0,r.K4)(s,e)){var t;f+=1,null==(t=i.onPartialBlocks)||t.call(i,h())}},onToolCall:e=>{var t;let{id:n,name:r,args:a}=e;d+=1,s.push({kind:"tool_use",id:n,name:r,status:"running",startedAt:Date.now(),args:a}),null==(t=i.onPartialBlocks)||t.call(i,h())},onToolResult:e=>{var t;let{id:n,name:r,ok:a,summary:o,rawOutput:l,resourceUri:c}=e,u=s.findIndex(e=>"tool_use"===e.kind&&e.id===n),f=a?"done":"error";if(-1===u)d+=1,s.push({kind:"tool_use",id:n,name:r,status:f,startedAt:Date.now(),endedAt:Date.now(),...void 0!==o?{summary:o}:{}});else{let e=s[u];s[u]={...e,status:f,endedAt:Date.now(),...void 0!==o?{summary:o}:{}}}if("string"==typeof c&&c.trim().length>0){p+=1;let e=w(l,c);s.push({kind:"mcp_app",toolId:n,toolName:r,screenUrl:c,...void 0!==l?{toolResult:l}:{},...e||{},...void 0!==o?{fallbackText:o}:{}})}null==(t=i.onPartialBlocks)||t.call(i,h())},...i.signal?{signal:i.signal}:{},...!0===i.debugTap?{debugTap:!0}:{}}).catch(e=>{var t;throw m({stopReason:(null==(t=i.signal)?void 0:t.aborted)===!0?"aborted":"error",error:e instanceof Error?e.message:String(e)}),e});m({stopReason:g.stopReason,sessionId:g.sessionId}),-1!==c&&g.text&&(s[c]={kind:"text",text:g.text});let y=u>0||d>0||p>0||f>0;return{message:{id:"m-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"assistant",text:null!=(o=g.text)?o:"",timestamp:Date.now(),meta:{provider:t.provider,stopReason:g.stopReason},...y?{blocks:h()}:{}},newSessionId:g.sessionId!==t.sessionId?g.sessionId:void 0}}function R(e,t){return{id:"u-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"user",text:e,timestamp:Date.now(),...t?{terminalId:t}:{}}}function _(e,t){return{id:"meta-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"meta",text:e,timestamp:Date.now(),...t?{terminalId:t}:{}}}function P(e,t,n){let a=null,o=[],i=-1,s=0,c=0,u=0,d=0,p=!1,f=()=>{a=null,o.length=0,i=-1,s=0,c=0,u=0,d=0,p=!1},h=()=>o.map(e=>({...e}));return e.subscribeChatEvents(t,{onTurnBegin:e=>{var t;if(f(),null==(t=n.isLocalTurnInFlight)?void 0:t.call(n)){p=!0;return}let r=n.onPlaceholder({sessionId:e.sessionId});if(null===r){p=!0;return}a=r},onTextDelta:e=>{let{full:t}=e;p||null===a||(-1===i?(i=o.length,o.push({kind:"text",text:t})):o[i]={kind:"text",text:t},n.onPartialBlocks(a,h()))},onImageBlock:e=>{let{src:t,mediaType:r,alt:l}=e;p||null===a||(s+=1,o.push(void 0!==l?{kind:"image",src:t,mediaType:r,alt:l}:{kind:"image",src:t,mediaType:r}),n.onPartialBlocks(a,h()))},onFeedback:e=>{k(e)||p||null===a||"applied"===(0,r.K4)(o,e)&&(d+=1,n.onPartialBlocks(a,h()))},onToolCall:e=>{let{id:t,name:r,args:l}=e;p||null===a||(c+=1,o.push({kind:"tool_use",id:t,name:r,status:"running",startedAt:Date.now(),args:l}),n.onPartialBlocks(a,h()))},onToolResult:e=>{let{id:t,name:r,ok:l,summary:i,rawOutput:s,resourceUri:d}=e;if(p||null===a)return;let f=o.findIndex(e=>"tool_use"===e.kind&&e.id===t),m=l?"done":"error";if(-1===f)c+=1,o.push({kind:"tool_use",id:t,name:r,status:m,startedAt:Date.now(),endedAt:Date.now(),...void 0!==i?{summary:i}:{}});else{let e=o[f];o[f]={...e,status:m,endedAt:Date.now(),...void 0!==i?{summary:i}:{}}}if("string"==typeof d&&d.trim().length>0){u+=1;let e=w(s,d);o.push({kind:"mcp_app",toolId:t,toolName:r,screenUrl:d,...void 0!==s?{toolResult:s}:{},...e||{},...void 0!==i?{fallbackText:i}:{}})}n.onPartialBlocks(a,h())},onTurnEnd:e=>{var r;if(p||null===a){(0,l.cY)("webterm.chat.runturn.observer.end",{sessionId:t,stopReason:e.stopReason,dropped:!0,reason:p?"dropped-turn":"no-placeholder"}),f();return}-1!==i&&e.text&&(o[i]={kind:"text",text:e.text});let m=s>0||c>0||u>0||d>0;(0,l.cY)("webterm.chat.runturn.observer.end",{sessionId:t,stopReason:e.stopReason,dropped:!1,images:s,tools:c,mcpApps:u,feedback:d});let g={id:"m-obs-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"assistant",text:null!=(r=e.text)?r:"",timestamp:Date.now(),meta:{...n.provider?{provider:n.provider}:{},stopReason:e.stopReason},...m?{blocks:h()}:{}};n.onFinalize(a,g),f()},onError:e=>{null!==a&&n.onError&&n.onError(a,e),f()}})}async function U(e,t,n){var o,i;let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},c=n.sessionId;if(!c)throw Error("runChatTurnAcp: sessionId required (daemon handshake first)");let u=[],p=-1,f=0,h=0,m=0,g="",y=-1,b="",x=0,I=0,A=0,S=()=>{if(-1===y)return!1;let e=u[y];return!e.done&&(u[y]={...e,done:!0},!0)},T=()=>u.map(e=>({...e})),E=e.on("sessionUpdate",e=>{var t,n,o,l,i,E,C,R,_,P;let U=e.params;if(!U||U.sessionId!==c)return;let D=U.update;if(D){if("agent_message_chunk"===D.sessionUpdate){let e=D.content;if((null==e?void 0:e.type)==="text"&&"string"==typeof e.text&&e.text.length>0){let r=e.text;g+=r,-1===p?(S(),p=u.length,u.push({kind:"text",text:g})):u[p]={kind:"text",text:g},null==(t=s.onPartial)||t.call(s,g),null==(n=s.onPartialBlocks)||n.call(s,T())}else if((null==e?void 0:e.type)==="image"&&"string"==typeof e.data&&"string"==typeof e.mimeType){f+=1;let t={kind:"image",src:e.data,mediaType:e.mimeType};"string"==typeof e.uri&&(t.alt=e.uri),S(),u.push(t),null==(o=s.onPartialBlocks)||o.call(s,T())}}else if("agent_thought_chunk"===D.sessionUpdate){let e=D.content;if((null==e?void 0:e.type)==="text"&&"string"==typeof e.text&&e.text.length>0){let t=function(e){let t=e.split("\n"),n=t[0];if(!n)return null;let r=/^\[elanous\/feedback\/([a-zA-Z]+)\] (.+)$/.exec(n);if(!r||"emit"!==r[1])return null;let o=[];for(let e=1;e<t.length;e+=1){let n=t[e];if(/^<<elanous-feedback-end /.test(n))break;o.push(n)}try{let e=JSON.parse(o.join("\n"));return(0,a.L)(e)?{method:"emit",payload:e}:null}catch(e){return null}}(e.text);if(t){k(t.payload)||"applied"===(0,r.K4)(u,t.payload)&&(I+=1,null==(i=s.onPartialBlocks)||i.call(s,T()));return}if(v.test(e.text)){A+=1;return}if(b+=e.text,-1===y)x+=1,y=u.length,u.push({kind:"agent_thinking",blockId:"acp-thought-".concat(c),msg:b,done:!1});else{let e=u[y];u[y]={...e,msg:b}}null==(l=s.onPartialBlocks)||l.call(s,T())}}else if("tool_call"===D.sessionUpdate&&"string"==typeof D.toolCallId)h+=1,u.push({kind:"tool_use",id:D.toolCallId,name:null!=(C=D.title)?C:"",status:"running",startedAt:Date.now(),...D.rawInput?{args:D.rawInput}:{}}),null==(E=s.onPartialBlocks)||E.call(s,T());else if("tool_call_update"===D.sessionUpdate&&"string"==typeof D.toolCallId){let e=u.findIndex(e=>"tool_use"===e.kind&&e.id===D.toolCallId),t="completed"===D.status?"done":"error";if(-1===e)h+=1,u.push({kind:"tool_use",id:D.toolCallId,name:null!=(_=D.title)?_:"",status:t,startedAt:Date.now(),endedAt:Date.now(),...D.title?{summary:D.title}:{}});else{let n=u[e];u[e]={...n,status:t,endedAt:Date.now(),...D.title?{summary:D.title}:{}}}for(let e of d(D.rawOutput))u.some(t=>"image"===t.kind&&t.src===e.src)||(f+=1,u.push({kind:"image",...e}));let n=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;let t=e._meta,n=t&&"object"==typeof t&&!Array.isArray(t)?t.ui:void 0,r=n&&"object"==typeof n&&!Array.isArray(n)?n.resourceUri:void 0;if("string"==typeof r&&r.trim().length>0)return r;let a=e["ui/resourceUri"];return"string"==typeof a&&a.trim().length>0?a:void 0}(D.rawOutput);if(n){m+=1;let e=w(D.rawOutput,n);u.push({kind:"mcp_app",toolId:D.toolCallId,toolName:null!=(P=D.title)?P:"",screenUrl:n,...void 0!==D.rawOutput?{toolResult:D.rawOutput}:{},...e||{},...D.title?{fallbackText:D.title}:{}})}null==(R=s.onPartialBlocks)||R.call(s,T())}}}),C=()=>{e.send("session/cancel",{sessionId:c}).catch(()=>{})},R=s.signal;if(R){if(R.aborted)throw E(),Error("aborted");R.addEventListener("abort",C,{once:!0})}let _=s.userContent&&s.userContent.length>0?s.userContent:[{type:"text",text:t}];(0,l.cY)("webterm.chat.runturn.acp.start",{sessionId:c,provider:n.provider,len:t.length,blocks:_.length});let P=e=>{(0,l.cY)("webterm.chat.runturn.acp.end",{sessionId:c,stopReason:e.stopReason,...void 0!==e.error?{error:e.error}:{},textLen:g.length,images:f,tools:h,mcpApps:m,thoughts:x,feedbackEnvelopes:A})};try{let t=await e.send("session/prompt",{sessionId:c,prompt:_}),r=null!=(o=null==t?void 0:t.stopReason)?o:"end_turn";S(),P({stopReason:r});let a=f>0||h>0||m>0||x>0||I>0;return{message:{id:"m-acp-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"assistant",text:g,timestamp:Date.now(),meta:{provider:n.provider,stopReason:r},...a?{blocks:T()}:{}}}}catch(e){throw P({stopReason:(null==R?void 0:R.aborted)===!0?"aborted":"error",error:e instanceof Error?e.message:String(e)}),e}finally{S()&&(null==(i=s.onPartialBlocks)||i.call(s,T())),R&&R.removeEventListener("abort",C),E()}}function D(e,t,n){var r;let a=null!=(r=n.idleFinalizeMs)?r:3e3,o=null,i=[],s=-1,c=0,u=0,d=null,p=()=>{if(null!==o)return!0;let e=n.onPlaceholder({sessionId:t});return null!==e&&(o=e,(0,l.cY)("webterm.chat.acp.foreign-turn.start",{id:e}),!0)},f=e.on("sessionUpdate",e=>{var r,f,h,m;if((null==(r=n.isLocalTurnInFlight)?void 0:r.call(n))||(null==(f=n.isRemoteSseTurnInFlight)?void 0:f.call(n)))return;let g=e.params;if(!g||g.sessionId!==t)return;let y=g.update;if(!y)return;let k=!1;if("agent_message_chunk"===y.sessionUpdate){let e=y.content;if((null==e?void 0:e.type)==="text"&&"string"==typeof e.text&&e.text.length>0){if(!p())return;let t=e.text;if(-1===s)s=i.length,i.push({kind:"text",text:t});else{let e=i[s];i[s]={kind:"text",text:e.text+t}}k=!0}else if((null==e?void 0:e.type)==="image"&&"string"==typeof e.data&&"string"==typeof e.mimeType){if(!p())return;c+=1;let t={kind:"image",src:e.data,mediaType:e.mimeType};"string"==typeof e.uri&&(t.alt=e.uri),i.push(t),k=!0}}else if("tool_call"===y.sessionUpdate&&"string"==typeof y.toolCallId){if(!p())return;u+=1,i.push({kind:"tool_use",id:y.toolCallId,name:null!=(h=y.title)?h:"",status:"running",startedAt:Date.now(),...y.rawInput?{args:y.rawInput}:{}}),k=!0}else if("tool_call_update"===y.sessionUpdate&&"string"==typeof y.toolCallId){if(!p())return;let e=i.findIndex(e=>"tool_use"===e.kind&&e.id===y.toolCallId),t="completed"===y.status?"done":"error";if(-1===e)u+=1,i.push({kind:"tool_use",id:y.toolCallId,name:null!=(m=y.title)?m:"",status:t,startedAt:Date.now(),endedAt:Date.now(),...y.title?{summary:y.title}:{}});else{let n=i[e];i[e]={...n,status:t,endedAt:Date.now(),...y.title?{summary:y.title}:{}}}k=!0}k&&null!==o&&(n.onPartialBlocks(o,i.map(e=>({...e}))),d&&clearTimeout(d),d=setTimeout(()=>{let e=o;if(e&&(0,l.cY)("webterm.chat.acp.foreign-turn.end",{id:e,images:c,tools:u}),d&&(clearTimeout(d),d=null),o=null,i=[],s=-1,c=0,u=0,e&&n.onFinalize)try{n.onFinalize(e)}catch(e){(0,l.cY)("webterm.chat.acp.finalize.error",{reason:String(e)})}},a))});return()=>{f(),d&&(clearTimeout(d),d=null)}}},5456:(e,t,n)=>{n.d(t,{K4:()=>a,VQ:()=>l});let r=new Set(["normal","warn","danger","success","info","muted"]);function a(e,t){switch(t.kind){case"agent.thinking":return function(e,t){var n,r;let a=null!=(n=t.payload)?n:{},o=null!=(r=a.msg)?r:"Thinking",l=a.metrics&&"number"==typeof a.metrics.elapsedMs&&"number"==typeof a.metrics.tokenCount?{elapsedMs:a.metrics.elapsedMs,tokenCount:a.metrics.tokenCount}:void 0,i={kind:"agent_thinking",blockId:t.blockId,msg:o,done:"end"===t.phase,...l?{metrics:l}:{},...t.asciiFallback.length>0?{asciiFallback:t.asciiFallback}:{}},s=e.findIndex(e=>"agent_thinking"===e.kind&&e.blockId===t.blockId);return -1===s?e.push(i):e[s]=i,"applied"}(e,t);case"agent.status":var n=e,r=t;let a=r.payload;if(!a||"string"!=typeof a.agentId||"string"!=typeof a.status)return"unhandled";let l={kind:"agent_status",blockId:r.blockId,agentId:a.agentId,status:a.status,...void 0!==a.lastEvent?{lastEvent:a.lastEvent}:{}},i=n.findIndex(e=>"agent_status"===e.kind&&e.blockId===r.blockId);return -1===i?n.push(l):n[i]=l,"applied";case"agent.plan":var s=e,c=t;let u=c.payload;if(!u||"string"!=typeof u.ref||!Array.isArray(u.steps))return"unhandled";let d={kind:"agent_plan",blockId:c.blockId,ref:u.ref,steps:u.steps.map(e=>({text:e.text,status:e.status})),...void 0!==u.activeIndex?{activeIndex:u.activeIndex}:{}},p=s.findIndex(e=>"agent_plan"===e.kind&&e.blockId===c.blockId);return -1===p?s.push(d):s[p]=d,"applied";case"tool.diff":var f=e,h=t;let m=h.payload;if(!m||"string"!=typeof m.filePath||!Array.isArray(m.hunks))return"unhandled";for(let e of m.hunks)if("number"!=typeof e.oldStart||"number"!=typeof e.oldLines||"number"!=typeof e.newStart||"number"!=typeof e.newLines||!Array.isArray(e.lines))return"unhandled";let g={kind:"tool_diff",blockId:h.blockId,filePath:m.filePath,...void 0!==m.language?{language:m.language}:{},hunks:m.hunks.map(e=>({oldStart:e.oldStart,oldLines:e.oldLines,newStart:e.newStart,newLines:e.newLines,lines:e.lines.map(e=>({kind:e.kind,text:e.text}))})),...void 0!==h.parentToolCallId?{parentToolCallId:h.parentToolCallId}:{}},y=f.findIndex(e=>"tool_diff"===e.kind&&e.blockId===h.blockId);return -1===y?f.push(g):f[y]=g,"applied";case"tool.search-hit":return function(e,t){let n=t.payload;if(!n||"string"!=typeof n.query||!Array.isArray(n.hits)||"number"!=typeof n.accumCount)return"unhandled";for(let e of n.hits)if("string"!=typeof e.filePath||"number"!=typeof e.line||"string"!=typeof e.snippet)return"unhandled";let r=e.findIndex(e=>"tool_search_hits"===e.kind&&e.blockId===t.blockId),a=n.hits.map(e=>({filePath:e.filePath,line:e.line,snippet:e.snippet,...void 0!==e.column?{column:e.column}:{},...Array.isArray(e.contextBefore)?{contextBefore:[...e.contextBefore]}:{},...Array.isArray(e.contextAfter)?{contextAfter:[...e.contextAfter]}:{}})),o=a;if(-1!==r&&"delta"===t.phase){let t=e[r],n=new Set(t.hits.map(e=>{var t;return"".concat(e.filePath,":").concat(e.line,":").concat(null!=(t=e.column)?t:0)})),l=a.filter(e=>{var t;return!n.has("".concat(e.filePath,":").concat(e.line,":").concat(null!=(t=e.column)?t:0))});o=[...t.hits,...l]}let l={kind:"tool_search_hits",blockId:t.blockId,query:n.query,hits:o,accumCount:n.accumCount,...n.truncated?{truncated:!0}:{},...void 0!==t.parentToolCallId?{parentToolCallId:t.parentToolCallId}:{}};return -1===r?e.push(l):e[r]=l,"applied"}(e,t);case"tool.progress":return function(e,t){let n,r=t.payload;if(!r||"string"!=typeof r.stream||!o.has(r.stream)||!Array.isArray(r.lines))return"unhandled";for(let e of r.lines)if("string"!=typeof e)return"unhandled";let a=e.findIndex(e=>"tool_progress"===e.kind&&e.blockId===t.blockId);if(-1===a)n=[...r.lines];else{let o=e[a];n="update"===t.phase?[...r.lines]:[...o.lines,...r.lines]}let l={kind:"tool_progress",blockId:t.blockId,stream:r.stream,lines:n,done:"end"===t.phase,...void 0!==r.bytesSoFar?{bytesSoFar:r.bytesSoFar}:{},...void 0!==r.exitCode?{exitCode:r.exitCode}:{},...void 0!==t.parentToolCallId?{parentToolCallId:t.parentToolCallId}:{}};return -1===a?e.push(l):e[a]=l,"applied"}(e,t);case"debug.line":return function(e,t){let n,r=t.payload;if(!r||"string"!=typeof r.category||"string"!=typeof r.event||"number"!=typeof r.loggedAt)return"unhandled";let a={seq:t.seq,category:r.category,event:r.event,...void 0!==r.data?{data:r.data}:{},loggedAt:r.loggedAt},o=e.findIndex(e=>"debug_session"===e.kind&&e.blockId===t.blockId);-1===o?n=[a]:(n=[...e[o].lines,a]).length>200&&n.splice(0,n.length-200);let l={kind:"debug_session",blockId:t.blockId,lines:n};return -1===o?e.push(l):e[o]=l,"applied"}(e,t);case"perf.tick":return function(e,t){let n,r=t.payload;if(!r||"string"!=typeof r.metric||0===r.metric.length||"number"!=typeof r.value||!Number.isFinite(r.value))return"unhandled";let a={seq:t.seq,metric:r.metric,value:r.value,..."string"==typeof r.unit?{unit:r.unit}:{},emittedAt:t.emittedAt},o=e.findIndex(e=>"perf_session"===e.kind&&e.blockId===t.blockId);-1===o?n=[a]:(n=[...e[o].samples,a]).length>60&&n.splice(0,n.length-60);let l={kind:"perf_session",blockId:t.blockId,samples:n};return -1===o?e.push(l):e[o]=l,"applied"}(e,t);default:return"unhandled"}}let o=new Set(["stdout","stderr","http","generic"]);function l(e,t){let n=t.payload;if(!n||"string"!=typeof n.key||0===n.key.length)return"unhandled";if("end"===t.phase)return e.has(n.key)?(e.delete(n.key),"applied"):"unhandled";if("string"!=typeof n.value)return"unhandled";let a={key:n.key,value:n.value,..."number"==typeof n.priority&&Number.isFinite(n.priority)?{priority:n.priority}:{},..."string"==typeof n.tone&&r.has(n.tone)?{tone:n.tone}:{},..."string"==typeof n.glyph&&n.glyph.length>0?{glyph:n.glyph}:{}};return e.set(n.key,a),"applied"}},7077:(e,t,n)=>{n.d(t,{K:()=>o,v:()=>a});var r=n(53403);async function a(e){var t;let n=e.baseUrl.replace(/\/$/,"");if(!n)return{ok:!1,status:0,reason:"baseUrl not configured"};let a=null!=(t=e.filename)?t:e.file instanceof File?e.file.name:"upload.bin";(0,r.cY)("webterm.attach.upload.begin",{filename:a,size:e.file.size,type:e.file.type});let o=new FormData;o.append("file",e.file,a),o.append("filename",a);try{let t=await fetch("".concat(n,"/v1/attachments"),{method:"POST",body:o,...e.token?{headers:{authorization:"Bearer ".concat(e.token)}}:{}});if(!t.ok){let e=await t.text().catch(()=>"");return(0,r.cY)("webterm.attach.upload.error",{status:t.status,detail:e.slice(0,200)}),{ok:!1,status:t.status,reason:e||"HTTP ".concat(t.status)}}let a=await t.json();return(0,r.cY)("webterm.attach.upload.ok",{id:a.id,size:a.size}),{ok:!0,meta:a}}catch(t){let e=String(t instanceof Error?t.message:t);return(0,r.cY)("webterm.attach.upload.exception",{reason:e}),{ok:!1,status:0,reason:e}}}async function o(e,t){return Promise.all(e.map(e=>a({baseUrl:t.baseUrl,...void 0!==t.token?{token:t.token}:{},file:e.file,...void 0!==e.filename?{filename:e.filename}:{}})))}},11205:(e,t,n)=>{n.d(t,{u:()=>d});var r=n(35563),a=n(19707),o=n(31778),l=n(98429),i=n(45787),s=n(84240),c=n(53403),u=n(7077);function d(e){let{onAttached:t}=e,{config:n}=(0,i.Q)(),[d,p]=(0,a.useState)(!1),f=(0,a.useRef)(null),h=async e=>{let r=e.target.files;if(e.target.value="",!r||0===r.length)return;if(!n.baseUrl)return void s.oR.error("Daemon URL 미설정 — Settings 에서 입력");p(!0);let a=Array.from(r);(0,c.cY)("webterm.files.pick",{count:a.length,totalBytes:a.reduce((e,t)=>e+t.size,0)});try{let e=await (0,u.K)(a.map(e=>({file:e,filename:e.name})),{baseUrl:n.baseUrl,...n.token?{token:n.token}:{}}),r=e.filter(e=>e.ok),o=e.filter(e=>!e.ok);r.length>0&&(s.oR.success(1===r.length?"\uD83D\uDCCE ".concat(r[0].meta.filename):"\uD83D\uDCCE ".concat(r.length," files attached")),null==t||t(r.map(e=>e.meta))),o.length>0&&s.oR.error(1===o.length?"업로드 실패: ".concat(o[0].reason.slice(0,80)):"".concat(o.length," 파일 업로드 실패"))}finally{p(!1)}};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{type:"button",onClick:()=>{var e;return null==(e=f.current)?void 0:e.click()},disabled:d,"aria-label":"attach files",title:"attach files (Files.app \xb7 iCloud \xb7 multi-select)",className:"rounded p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-50",children:d?(0,r.jsx)(o.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,r.jsx)(l.A,{className:"h-3.5 w-3.5"})}),(0,r.jsx)("input",{ref:f,type:"file",multiple:!0,className:"hidden",onChange:h})]})}},20976:(e,t,n)=>{n.d(t,{z:()=>g});var r=n(35563),a=n(19707),o=n(31778),l=n(25709),i=n(10708),s=n(4856),c=n(84240),u=n(45787),d=n(53403),p=n(21483);function f(){var e,t;if("undefined"==typeof globalThis)return null;let n=globalThis;return null!=(t=null!=(e=n.SpeechRecognition)?e:n.webkitSpeechRecognition)?t:null}async function h(e){var t,n;let r=e.transcript.trim();if(!r)return{ok:!1,status:0,reason:"empty transcript"};let a=e.baseUrl.replace(/\/$/,"");if(!a)return{ok:!1,status:0,reason:"baseUrl not configured"};let o=null!=(t=e.fetchImpl)?t:"undefined"!=typeof fetch?fetch:null;if(!o)return{ok:!1,status:0,reason:"fetch unavailable"};try{let t=await o("".concat(a,"/v1/intake"),{method:"POST",headers:{"content-type":"application/json",...e.token?{authorization:"Bearer ".concat(e.token)}:{}},body:JSON.stringify(function(e){let t={text:e.transcript.trim(),actor:"pwa-voice",channelContext:{kind:"pwa-voice"}};return e.intakeId&&(t.intakeId=e.intakeId),t}({transcript:r,...e.intakeId?{intakeId:e.intakeId}:{}}))});if(!t.ok){let e=await t.text().catch(()=>"");return{ok:!1,status:t.status,reason:e||"HTTP ".concat(t.status)}}let l=await t.json().catch(()=>({}));return{ok:!0,intakeId:null!=(n=l.intakeId)?n:""}}catch(e){return{ok:!1,status:0,reason:String(e instanceof Error?e.message:e)}}}function m(e){let{phase:t,transcript:n,onTranscriptChange:a,error:c,apiAvailable:u,onPressStart:d,onPressEnd:p,onConfirm:f,onCancel:h}=e,m="recording"===t,g="submitting"===t;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{type:"button",onPointerDown:u?d:void 0,onPointerUp:u?p:void 0,onPointerLeave:m?p:void 0,disabled:!u||g,"aria-label":u?"음성 메모 (길게 누르기)":"음성 메모 (브라우저 미지원)",title:u?"길게 눌러 녹음 → intake 저장":"브라우저가 Web Speech API 미지원","data-testid":"showroom-voice-button","data-phase":t,className:"rounded p-1.5 transition disabled:cursor-not-allowed disabled:opacity-50 ".concat(m?"animate-pulse bg-red-500 text-white":"text-muted-foreground hover:bg-accent hover:text-foreground"),children:g?(0,r.jsx)(o.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,r.jsx)(l.A,{className:"h-3.5 w-3.5"})}),("review"===t||"submitting"===t)&&(0,r.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":"Voice intake review","data-testid":"showroom-voice-modal",className:"fixed inset-0 z-40 flex items-center justify-center bg-black/40 p-4 backdrop-blur-sm",children:(0,r.jsxs)("div",{className:"flex w-[min(calc(100vw-2rem),28rem)] flex-col gap-3 rounded-2xl border border-zinc-200 bg-white p-4 shadow-2xl dark:border-zinc-800 dark:bg-zinc-900",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-sm font-medium text-zinc-900 dark:text-zinc-100",children:"음성 메모 검토"}),(0,r.jsx)("button",{type:"button",onClick:h,disabled:g,"aria-label":"cancel","data-testid":"showroom-voice-cancel",className:"rounded p-1 text-zinc-500 hover:bg-zinc-100 disabled:opacity-50 dark:text-zinc-400 dark:hover:bg-zinc-800",children:(0,r.jsx)(i.A,{className:"h-4 w-4"})})]}),(0,r.jsx)("textarea",{value:n,onChange:e=>a(e.target.value),disabled:g,placeholder:"(녹음된 텍스트가 비어있습니다)",rows:4,"data-testid":"showroom-voice-transcript",className:"rounded border border-zinc-300 bg-white px-2 py-1.5 text-sm text-zinc-900 disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-100"}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:h,disabled:g,"data-testid":"showroom-voice-discard",className:"flex-1 rounded-lg border border-zinc-300 bg-white px-3 py-1.5 text-sm font-medium text-zinc-800 transition hover:bg-zinc-100 disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700",children:"버리기"}),(0,r.jsx)("button",{type:"button",onClick:f,disabled:g||0===n.trim().length,"data-testid":"showroom-voice-confirm",className:"flex-1 rounded-lg border border-emerald-500 bg-emerald-500 px-3 py-1.5 text-sm font-semibold text-white transition hover:bg-emerald-600 disabled:cursor-not-allowed disabled:opacity-50",children:(0,r.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,r.jsx)(s.A,{className:"h-3.5 w-3.5"}),"Intake 저장"]})})]}),c&&(0,r.jsx)("div",{role:"alert","data-testid":"showroom-voice-error",className:"text-xs text-red-600 dark:text-red-400",children:c})]})})]})}function g(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];let{config:e}=(0,u.Q)(),[t,n]=(0,a.useState)("idle"),[o,l]=(0,a.useState)(""),[i,s]=(0,a.useState)(null),g=(0,a.useRef)(null),[y,k]=(0,a.useState)(!0);(0,a.useEffect)(()=>{k(null!==f())},[]);let b=()=>{n("idle"),l(""),s(null),g.current=null},v=async()=>{var t;if(0===o.trim().length)return;if(!e.baseUrl)return void s("Daemon URL 미설정 — Settings 에서 입력");n("submitting"),s(null),(0,d.cY)("showroom.voice.submit",{len:o.trim().length});let r=await h({baseUrl:e.baseUrl,...e.token?{token:e.token}:{},transcript:o});if(!r.ok){s("intake 실패: ".concat(r.reason)),n("review"),(0,d.cY)("showroom.voice.error",{status:r.status});return}c.oR.success("\uD83D\uDCE5 음성 메모 저장됨 \xb7 intake ".concat(r.intakeId||"(id 없음)")),(0,d.cY)("showroom.voice.ok",{intakeId:r.intakeId}),p.K.emit({surface:"pwa",intent:{layer:"utterance",kind:"pwa.utterance.voice_send",target:{kind:"intake",id:null!=(t=r.intakeId)?t:"(unknown)"},value:{transcriptLen:o.trim().length}},...r.intakeId?{context:{active_workflow_run_id:r.intakeId}}:{}}),b()};return(0,r.jsx)(m,{phase:t,transcript:o,onTranscriptChange:l,error:i,apiAvailable:y,onPressStart:()=>{if("idle"!==t)return;s(null),l(""),(0,d.cY)("showroom.voice.press-start",{});let e=function(){var e,t,n;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=null!=(e=r.recognitionImpl)?e:f();if(!a)return null;let o=new a;o.lang=null!=(t=r.lang)?t:"ko-KR",o.interimResults=!0,o.continuous=!0;let l="",i=!0,s=null,c=new Promise(e=>{s=e});o.onresult=e=>{var t;let n="";for(let t=0;t<e.results.length;t+=1){let r=e.results[t];if(!r)continue;let a=r[0];a&&(n+=a.transcript)}l=n,null==(t=r.onUpdate)||t.call(r,n)},o.onerror=e=>{var t;null==(t=r.onError)||t.call(r,{code:e.error,message:e.message})},o.onend=()=>{i=!1,s&&(s(l),s=null)};try{o.start()}catch(e){return null==(n=r.onError)||n.call(r,{code:"start-failed",message:String(e)}),null}return{get transcript(){return l},get active(){return i},async stop(){try{o.stop()}catch(e){}return c},async abort(){try{o.abort()}catch(e){}return c}}}({lang:"ko-KR",onUpdate:e=>l(e),onError:e=>{s("음성 인식 오류: ".concat(e.code)),(0,d.cY)("showroom.voice.recog-error",{code:e.code,message:e.message})}});if(!e)return void s("Web Speech API 미사용 — 브라우저가 미지원");g.current=e,n("recording")},onPressEnd:()=>{if("recording"!==t)return;let e=g.current;if(!e)return void n("idle");(0,d.cY)("showroom.voice.press-end",{}),e.stop().then(e=>{if(l(e),0===e.trim().length)return void b();n("review")})},onConfirm:()=>{v()},onCancel:b})}},21483:(e,t,n)=>{n.d(t,{K:()=>r}),n(19707);let r={emit:async function(e){return{ok:!1,reason:"not-configured"}}}},72106:(e,t,n)=>{n.d(t,{sS:()=>f});var r=n(19707),a=n(53403);async function o(e){let t=new Blob(["\nclass ElanousCaptureProcessor extends AudioWorkletProcessor {\n constructor(opts) {\n super();\n const o = opts.processorOptions || {};\n this.targetHz = o.targetHz | 0 || 16000;\n this.frameBytes = o.frameBytes | 0 || 640;\n // int16 → 2 bytes per sample\n this.frameSamples = this.frameBytes >> 1;\n this.outBuf = new Int16Array(this.frameSamples);\n this.outIdx = 0;\n this.ratio = sampleRate / this.targetHz;\n this.acc = 0;\n }\n process(inputs) {\n const input = inputs[0];\n if (!input || !input[0]) return true;\n const ch0 = input[0];\n for (let i = 0; i < ch0.length; i++) {\n this.acc += 1;\n if (this.acc < this.ratio) continue;\n this.acc -= this.ratio;\n const v = Math.max(-1, Math.min(1, ch0[i]));\n this.outBuf[this.outIdx++] = v < 0 ? Math.round(v * 0x8000) : Math.round(v * 0x7fff);\n if (this.outIdx >= this.frameSamples) {\n const copy = new Int16Array(this.outBuf);\n this.port.postMessage(copy.buffer, [copy.buffer]);\n this.outBuf = new Int16Array(this.frameSamples);\n this.outIdx = 0;\n }\n }\n return true;\n }\n}\nregisterProcessor('elanous-capture', ElanousCaptureProcessor);\n"],{type:"application/javascript"}),n=URL.createObjectURL(t);try{await e.audioWorklet.addModule(n)}finally{URL.revokeObjectURL(n)}}async function l(e){var t,n,r,l;let i=null!=(t=e.targetSampleRateHz)?t:16e3,s=null!=(n=e.framePcmBytes)?n:640,c=null,u=null,d=null,p=null,f=null;(0,a.cY)("voice.capture.start",{targetHz:i,frameBytes:s});try{(0,a.cY)("voice.capture.gum-request",{hasMediaDevices:"undefined"!=typeof navigator&&!!navigator.mediaDevices,hasGetUserMedia:"undefined"!=typeof navigator&&"function"==typeof(null==(r=navigator.mediaDevices)?void 0:r.getUserMedia)}),c=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,channelCount:1}}),(0,a.cY)("voice.capture.gum-ok",{tracks:c.getTracks().map(e=>({kind:e.kind,label:e.label,state:e.readyState}))}),u=new AudioContext,(0,a.cY)("voice.capture.audiocontext",{sampleRate:u.sampleRate,state:u.state}),await o(u),(0,a.cY)("voice.capture.worklet-loaded"),(d=new AudioWorkletNode(u,"elanous-capture",{processorOptions:{targetHz:i,frameBytes:s}})).port.onmessage=t=>{e.onFrame(new Uint8Array(t.data))},p=u.createMediaStreamSource(c),(f=u.createGain()).gain.value=1,p.connect(f),f.connect(d),(0,a.cY)("voice.capture.wired",{hasGain:!0})}catch(n){let t=n instanceof Error?n:Error(String(n));throw(0,a.cY)("voice.capture.error",{name:t.name,message:t.message}),null==(l=e.onError)||l.call(e,t),c&&c.getTracks().forEach(e=>e.stop()),u&&await u.close(),t}let h=!1;return{async stop(){if(!h){h=!0;try{null==p||p.disconnect()}catch(e){}try{null==f||f.disconnect()}catch(e){}try{null==d||d.disconnect()}catch(e){}try{null==c||c.getTracks().forEach(e=>e.stop())}catch(e){}try{await (null==u?void 0:u.close())}catch(e){}}},setMicGain(e){if(!f||!u)return;let t=Number.isFinite(e)?Math.max(0,Math.min(1,e)):1;try{let e=u.currentTime;f.gain.cancelScheduledValues(e),f.gain.setValueAtTime(f.gain.value,e),f.gain.linearRampToValueAtTime(t,e+.005),(0,a.cY)("voice.mic.duck.set",{gain:t})}catch(e){try{f.gain.value=t}catch(e){}(0,a.cY)("voice.mic.duck.fallback",{gain:t,err:e instanceof Error?e.message:String(e)})}}}}let i={UPSTREAM_PCM:1,UPSTREAM_FINALIZE:2,UPSTREAM_HELLO:3,UPSTREAM_INTERRUPT:4,DOWNSTREAM_PCM:129,DOWNSTREAM_STATE:130,DOWNSTREAM_ERROR:131,DOWNSTREAM_TRANSCRIPT:132};function s(e,t){let n=new ArrayBuffer(4+t.byteLength),r=new DataView(n);return r.setUint8(0,e),r.setUint8(1,0),r.setUint16(2,0,!1),new Uint8Array(n,4).set(t),n}function c(e){return JSON.parse(new TextDecoder().decode(e))}var u=n(79544),d=n(73821);function p(e){return"speaking"===e?.5:1}function f(e){let[t,n]=(0,r.useState)("idle"),[o,f]=(0,r.useState)(null),[h,m]=(0,r.useState)(!1),g=(0,r.useRef)(null),y=(0,r.useRef)(null),k=(0,r.useRef)(null),b=(0,r.useRef)(e.onTranscript);(0,r.useEffect)(()=>{b.current=e.onTranscript},[e.onTranscript]);let v=(0,r.useRef)(e.onSpeechActivity);(0,r.useEffect)(()=>{v.current=e.onSpeechActivity},[e.onSpeechActivity]);let w=(0,r.useRef)(null);if(null===w.current){let e=(0,d.lu)();w.current=(0,u.cK)({speakingThresholdMultiplier:e.speakingThresholdMultiplier})}let x=(0,r.useRef)("idle"),I=(0,r.useCallback)(e=>{var t,r;let a=x.current;if(x.current=e,null==(t=w.current)||t.setSpeakingActive("speaking"===e),p(a)!==p(e))try{null==(r=g.current)||r.setMicGain(p(e))}catch(e){}n(e)},[]),A=(0,r.useCallback)(async()=>{var e,t,n;try{null==(e=k.current)||e.close()}catch(e){}try{await (null==(t=g.current)?void 0:t.stop())}catch(e){}try{await (null==(n=y.current)?void 0:n.close())}catch(e){}g.current=null,y.current=null,k.current=null},[]);(0,r.useEffect)(()=>()=>{A()},[A]);let S=(0,r.useCallback)(async()=>{f(null),I("connecting");try{let t=function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=null!=(e=t.inputSampleRateHz)?e:24e3,r=new AudioContext,a=0,o=[];function l(){for(let e of o){try{e.stop()}catch(e){}try{e.disconnect()}catch(e){}}o=[],a=r.currentTime}async function i(){l();try{await r.close()}catch(e){}}return{enqueue:function(e){try{let t=e.byteLength>>1,l=new DataView(e.buffer,e.byteOffset,e.byteLength),i=new Float32Array(t);for(let e=0;e<t;e++){let t=l.getInt16(2*e,!0);i[e]=t<0?t/32768:t/32767}let s=r.createBuffer(1,t,n);s.copyToChannel(i,0);let c=r.createBufferSource();c.buffer=s,c.connect(r.destination);let u=r.currentTime,d=Math.max(u,a);c.start(d),a=d+s.duration,o.push(c),c.onended=()=>{o=o.filter(e=>e!==c)}}catch(e){var l;null==(l=t.onError)||l.call(t,e instanceof Error?e:Error(String(e)))}},cancel:l,close:i}}({onError:e=>f(e.message)});y.current=t;let n=function(e){let t,n="connecting",r=t=>{var r;n=t,null==(r=e.onSocketState)||r.call(e,t),(0,a.cY)("voice.ws.state",{state:t,url:e.url})};(0,a.cY)("voice.ws.construct",{url:e.url,hasToken:!!e.token,location:window.location.href,pageProto:window.location.protocol,wsProto:e.url.startsWith("wss:")?"wss":e.url.startsWith("ws:")?"ws":"(other)"});try{(t=new WebSocket(e.url)).binaryType="arraybuffer",(0,a.cY)("voice.ws.constructed",{readyState:t.readyState,url:t.url})}catch(l){var o;r("error");let t=l instanceof Error?l.message:String(l);return(0,a.cY)("voice.ws.construct-throw",{msg:t,url:e.url}),null==(o=e.onError)||o.call(e,{error:"ws construct failed: ".concat(t)}),{sendUpstreamPcm(){},finalize(){},sendInterrupt(){},close(){},getState:()=>n}}return t.onopen=()=>{var n;(0,a.cY)("voice.ws.open",{readyState:t.readyState,url:t.url,protocol:t.protocol,extensions:t.extensions}),r("open");let o={...null!=(n=e.hello)?n:{},...e.token?{token:e.token}:{}},l=new TextEncoder().encode(JSON.stringify(o));t.send(s(i.UPSTREAM_HELLO,l)),(0,a.cY)("voice.ws.hello-sent",{helloKeys:Object.keys(o)})},t.onmessage=t=>{var n,r,a,o,l,s;if("string"==typeof t.data){null==(n=e.onError)||n.call(e,{error:"unexpected text frame: ".concat(t.data.slice(0,200))});return}try{let n=function(e){if(e.byteLength<4)throw Error("frame too short (".concat(e.byteLength," bytes)"));let t=new DataView(e);return{kind:t.getUint8(0),flags:t.getUint8(1),payload:new Uint8Array(e,4)}}(t.data);switch(n.kind){case i.DOWNSTREAM_PCM:e.onDownstreamPcm(n.payload);break;case i.DOWNSTREAM_STATE:{let{state:t}=c(n.payload);null==(r=e.onState)||r.call(e,t);break}case i.DOWNSTREAM_ERROR:{let t=c(n.payload);null==(a=e.onError)||a.call(e,t);break}case i.DOWNSTREAM_TRANSCRIPT:{let t=c(n.payload);null==(o=e.onTranscript)||o.call(e,t);break}default:null==(l=e.onError)||l.call(e,{error:"unknown frame kind 0x".concat(n.kind.toString(16))})}}catch(t){null==(s=e.onError)||s.call(e,{error:t instanceof Error?t.message:String(t)})}},t.onclose=e=>{(0,a.cY)("voice.ws.close",{code:e.code,reason:e.reason,wasClean:e.wasClean,readyState:t.readyState,priorState:n}),r("closed")},t.onerror=n=>{var o;let l={readyState:t.readyState,url:t.url,eventType:n.type,isTrusted:n.isTrusted};(0,a.cY)("voice.ws.error",l),r("error"),null==(o=e.onError)||o.call(e,{error:"websocket transport error (readyState=".concat(t.readyState,", url=").concat(t.url,")")})},{sendUpstreamPcm:function(e){"open"===n&&t.send(s(i.UPSTREAM_PCM,e))},finalize:function(){"open"===n&&t.send(s(i.UPSTREAM_FINALIZE,new Uint8Array(0)))},sendInterrupt:function(){"open"===n&&t.send(s(i.UPSTREAM_INTERRUPT,new Uint8Array(0)))},close:function(){if("closed"!==n&&"closing"!==n){r("closing");try{t.close(1e3,"client-close")}catch(e){}}},getState:()=>n}}({url:e.wsUrl,...e.token?{token:e.token}:{},hello:{surface:"pwa",userAgent:navigator.userAgent},onDownstreamPcm:e=>{t.enqueue(e),I("speaking")},onState:e=>I(function(e){switch(e){case"connecting":return"connecting";case"streaming":return"listening";default:return"idle"}}(e)),onTranscript:e=>{if("final"===e.kind){var t;null==(t=b.current)||t.call(b,e.text)}},onError:e=>{I("error"),f(e.error)},onSocketState:e=>{let t="connecting"===e?"connecting":"error"===e?"error":"closed"===e?"idle":null;t&&I(t)}});k.current=n,g.current=await l({onFrame:e=>{n.sendUpstreamPcm(e);let t=w.current;if(t&&t.push(e)){(0,a.cY)("voice.barge-in.rms-fire");let e=v.current;try{null==e||e()}catch(e){}if("speaking"===x.current){var r,o;try{null==(r=y.current)||r.cancel()}catch(e){}try{null==(o=k.current)||o.sendInterrupt()}catch(e){}I("listening"),(0,a.cY)("voice.barge-in.auto-fire")}}},onError:e=>{I("error"),f(e.message)}}),m(!0),I("listening")}catch(e){I("error"),f(e instanceof Error?e.message:String(e)),await A()}},[e.wsUrl,e.token,A,I]),T=(0,r.useCallback)(async()=>{var e,t;m(!1),null==(e=k.current)||e.finalize(),await A(),null==(t=w.current)||t.reset(),I("idle")},[A,I]),E=(0,r.useCallback)(async()=>{h?await T():await S()},[h,S,T]),C=(0,r.useCallback)(async()=>{h||await S()},[h,S]);return{phase:t,errorMsg:o,active:h,start:S,stop:T,toggle:E,forceListen:C,interrupt:(0,r.useCallback)(()=>{var e,t;try{null==(e=y.current)||e.cancel()}catch(e){}try{null==(t=k.current)||t.sendInterrupt()}catch(e){}"speaking"===x.current&&(I("listening"),(0,a.cY)("voice.barge-in.manual-fire"))},[I])}}},79544:(e,t,n)=>{n.d(t,{Si:()=>l,cK:()=>o});var r=n(19707),a=n(53403);function o(){var e,t,n,r;let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=null!=(e=a.threshold)?e:.04,l=null!=(t=a.speakingThresholdMultiplier)?t:2,i=null!=(n=a.sustainMs)?n:150,s=null!=(r=a.frameMs)?r:20,c=Math.max(1,Math.ceil(i/s)),u=Math.max(1,Math.ceil(500/s)),d=0,p=0,f=!1,h=!1,m=()=>h?o*l:o;return{push(e){if(function(e){if(e.byteLength<2)return 0;let t=e.byteLength>>1,n=new Int16Array(e.buffer,e.byteOffset,t),r=0;for(let e=0;e<t;e+=1){let t=n[e]/32768;r+=t*t}return Math.sqrt(r/t)}(e)>=m()){if(d+=1,p=0,!f&&d>=c)return f=!0,!0}else d=0,p+=1,f&&p>=u&&(f=!1);return!1},reset(){d=0,p=0,f=!1},setSpeakingActive(e){h!==e&&(h=e,d=0,p=0)},effectiveThreshold:m}}function l(e){var t,n;let o=(0,r.useRef)(e.enabled);o.current=e.enabled;let l=(0,r.useRef)(e.onActivate);l.current=e.onActivate;let i=null!=(t=e.thresholdMs)?t:250,s=null==(n=e.ignoreFocusedInput)||n;(0,r.useEffect)(()=>{let e=null,t=!1,n=n=>{!(!o.current||"Space"!==n.code&&" "!==n.key||n.repeat||s&&function(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return"INPUT"===t||"TEXTAREA"===t||e.isContentEditable}(n.target))&&(t||(t=!0,e=setTimeout(()=>{t&&((0,a.cY)("voice.barge-in.spacebar-longpress",{ms:i}),l.current(n))},i)))},r=n=>{(!n||"Space"===n.code||" "===n.key)&&(t=!1,e&&(clearTimeout(e),e=null))};return window.addEventListener("keydown",n),window.addEventListener("keyup",r),window.addEventListener("blur",()=>r()),()=>{e&&clearTimeout(e),window.removeEventListener("keydown",n),window.removeEventListener("keyup",r),window.removeEventListener("blur",()=>r())}},[i,s])}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8250],{68250:(t,e,a)=>{function i(t,e){let a=Error(e);return a.code=t,a}async function o(t){var e;if(!t.type.startsWith("audio/"))throw i("unsupported","not an audio file: ".concat(t.type||"(unknown)"));let a=null!=(e=globalThis.AudioContext)?e:globalThis.webkitAudioContext;if(!a)throw i("unavailable","Web Audio API unsupported");let o=new a;try{let e=await t.arrayBuffer();return{durationSec:(await o.decodeAudioData(e.slice(0)).catch(t=>{throw i("decode",t instanceof Error?t.message:String(t))})).duration,mimeType:t.type,sizeBytes:t.size}}finally{try{await o.close()}catch(t){}}}a.d(e,{extractAudioMeta:()=>o})}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8293],{11535:(e,t,n)=>{n.d(t,{xl:()=>v});var a=n(35563),l=n(19707),s=n(30165);let r={author:"PLAN",decompose:"PLAN",build:"ROUTE",gate:"VERIFY",review:"VERIFY",land:"SHIP"},o=(e,t)=>"phase:".concat(e,":").concat(t),i=new Set(["model","target","account","universe","pod"]);var c=n(56456);let d={PLAN:"#38bdf8",ROUTE:"#a78bfa",VERIFY:"#fbbf24",HEAL:"#34d399",ESCALATE:"#fb7185",SHIP:"#4ade80"},u={harness:"#e0e7ff",run:"#818cf8",phase:"#c7d2fe",pr:"#4ade80",model:"#f0abfc",target:"#93c5fd",event:"#a5b4fc",site:"#f5d0fe",account:"#fbcfe8",request:"#f0abfc",universe:"#67e8f9",piece:"#7dd3fc",pod:"#fcd34d"},p={ok:"#4ade80",bad:"#fb7185",info:"#c7d2fe"},h=["#f0abfc","#c4b5fd","#93c5fd","#67e8f9","#a7f3d0","#fde68a","#fca5a5"],m={harness:16,run:8,phase:5.5,pr:5,model:7,target:4,event:2.6,site:3,account:6,request:1.2,universe:7,piece:3.4,pod:7},f=new Set(["harness","run","phase","pr","model","account","target","universe","pod"]),x=[];function g(e){return!!(e.why||e.purpose||e.target)}function v(e){var t,n,v,C;let{board:L,rows:P=x,windowMinutes:O=60,sourceLabel:F="this instance",shippedSource:H="log",autoReplay:W=!0,publicCapture:q=!1,onSelectRun:D}=e,U=(0,l.useRef)(null),B=(0,l.useRef)({nodes:[],edges:[]}),$=(0,l.useRef)([]),G=(0,l.useRef)([]),V=(0,l.useRef)(null),z=(0,l.useRef)([]),[Y,J]=(0,l.useState)(null),[K,_]=(0,l.useState)(!1),[Q,X]=(0,l.useState)(0),[Z,ee]=(0,l.useState)(""),[et,en]=(0,l.useState)(5),[ea,el]=(0,l.useState)({nodes:0,edges:0}),es=(0,l.useRef)(1500),er=()=>"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,eo=e=>{$.current.push({from:e.from,to:e.to,kind:e.kind,t:0,speed:.022,alpha:1,size:3.6}),"SHIP"===e.kind&&G.current.push({id:e.to,t:0})},ei=(0,l.useMemo)(()=>(0,c.Gp)(P),[P]),ec=(0,l.useMemo)(()=>{let e=Date.now(),t=6e4*O,n=(0,c.lb)(P).map(e=>e.ms/6e4).filter(e=>e>0),a=ei.map(e=>e.input+e.output).filter(e=>e>0);return{now:e,candles:(0,c.OL)(ei,e,40,Math.max(6e4,6e4*Math.ceil(t/40/6e4))),bucketMin:Math.max(1,Math.ceil(t/40/6e4)),ticker:(0,c.kJ)(ei,e,t),heat:(0,c.f)(ei),hist:(0,c.JW)(n,40),tokHist:(0,c.JW)(a.map(e=>Math.log10(e)),40),spans:n.length,gate:(0,c.cD)(P),load:(0,c.HR)(L),events:(0,c.fT)(P),universes:(0,c.IE)(P),plans:(0,c.D3)(P),pods:(0,c.GJ)(P),retries:(0,c.Jo)(P)}},[ei,P,L,O]),ed=(0,l.useMemo)(()=>{let e=new Map;return ec.ticker.forEach((t,n)=>e.set(t.model,h[n%h.length])),t=>{var n;return null!=(n=e.get(t))?n:"#a5b4fc"}},[ec.ticker]);(0,l.useEffect)(()=>{let e=()=>{ee(new Date().toLocaleTimeString(void 0,{hour12:!1})),en(e=>e<=1?5:e-1)};e();let t=window.setInterval(e,1e3);return()=>window.clearInterval(t)},[]),(0,l.useEffect)(()=>{en(5)},[P]),(0,l.useEffect)(()=>{var e,t;let n=function(e){var t,n,a,l,i,c,d,u;let p=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},h=new Map,m=[],f=function(e,t,n){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,l=h.get(e);if(l)return l.weight+=a,l;let s="harness"===t?{x:.5,y:.5}:function(e){let t=0x811c9dc5;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),0x1000193);let n=(t>>>0)%3600/3600*Math.PI*2,a=.25+(t>>>12)%1e3/1e3*.2;return{x:.5+Math.cos(n)*a,y:.5+Math.sin(n)*a}}(e),r={id:e,kind:t,label:n,weight:a,x:s.x,y:s.y,vx:0,vy:0};return h.set(e,r),r},x=(e,t,n)=>{m.some(a=>a.from===e&&a.to===t&&a.kind===n)||m.push({from:e,to:t,kind:n})};for(let t of(f("harness","harness","harness",3),e.snapshot.runs.slice(0,12).forEach((e,t)=>{let n="run:".concat(e.runId);f(n,"run",e.runId.replace(/^run-/,"").slice(0,6),2),x("harness",n,"PLAN");let a=null;if(t<8){let t=n;for(let n of s.lV){let l=e.stages[n];if(!l&&e.current!==n)continue;let i=o(e.runId,n),c=f(i,"phase",s.fQ[n]);c.current=e.current===n,c.tone=null!=l?l:"info",x(t,i,"bad"===l?"ESCALATE":r[n]),t=i,a=i}}e.pr&&(f("pr:".concat(e.pr),"pr","#".concat(e.pr)),x(null!=a?a:n,"pr:".concat(e.pr),"ok"===e.stages.land?"SHIP":"VERIFY")),e.blocked&&x(n,"harness","ESCALATE")}),e.scorecard.slice(0,6)))f("model:".concat(t.model),"model",t.model.length>18?"".concat(t.model.slice(0,17),"…"):t.model,Math.max(1,Math.round(Math.log2(1+t.requests)))),x("harness","model:".concat(t.model),"ROUTE");let g=0;for(let e of null!=(t=p.events)?t:[]){if(g>=180)break;let t="run:".concat(e.runId);if(!h.has(t))continue;let n=e.stage?o(e.runId,e.stage):null,a=n&&h.has(n)?n:t,l=f("ev:".concat(e.key),"event",e.label,Math.max(1,Math.round(Math.log2(1+e.count))));e.bad&&(l.tone="bad"),x(a,l.id,e.bad?"ESCALATE":e.stage?r[e.stage]:"PLAN"),g+=1}let v=new Set,b=0;for(let e of null!=(n=p.reqs)?n:[]){let t="model:".concat(e.model);if(!h.has(t))continue;let n="site:".concat(e.model,"|").concat(e.site);if(v.has(n)?h.get(n).weight+=.05:(v.add(n),f(n,"site",e.site),x(t,n,"ROUTE")),e.provider){let n="acct:".concat(e.provider);h.has(n)||f(n,"account",e.provider,2),x(n,t,"ROUTE")}b<220&&(x(n,f("req:".concat(e.model,"|").concat(e.site,"|").concat(e.ts,"|").concat(b),"request","",Math.max(1,Math.log10(1+e.input+e.output))).id,"ROUTE"),b+=1)}for(let e of null!=(a=p.universes)?a:[]){let t="run:".concat(e.runId);if(!h.has(t))continue;let n="uni:".concat(e.instance);h.has(n)?h.get(n).weight+=1:f(n,"universe",e.instance,2),x(n,t,"PLAN")}for(let e of null!=(l=p.plans)?l:[]){let t="run:".concat(e.runId);if(!h.has(t))continue;let n=o(e.runId,"decompose"),a=h.has(n)?n:t;e.pieces.forEach((t,n)=>{let l="piece:".concat(e.runId,":").concat(n);f(l,"piece",t.length>22?"".concat(t.slice(0,21),"…"):t,1.5),x(a,l,"PLAN")})}for(let e of null!=(i=p.pods)?i:[]){let t="pod:".concat(e.pool);h.has(t)?h.get(t).weight+=.2:f(t,"pod",null!=(c=e.pool.replace(/^pool-/,"").split("@")[0])?c:e.pool,2),x("harness",t,"ROUTE")}for(let e of null!=(d=p.retries)?d:[]){let t=h.get(o(e.runId,e.stage));t&&(t.retries=Math.max(null!=(u=t.retries)?u:0,e.retries))}let y=0;for(let t of e.stream){let e=t.runId&&h.has("run:".concat(t.runId))?"run:".concat(t.runId):"harness";if("SHIP"===t.kind&&t.target)f("pr:".concat(t.target.replace(/^#/,"")),"pr",t.target),x(e,"pr:".concat(t.target.replace(/^#/,"")),"SHIP");else if(t.target&&y<10&&!t.target.startsWith("#")){let n="target:".concat(t.target);h.has(n)||(y+=1),f(n,"target",t.target.length>18?"".concat(t.target.slice(0,17),"…"):t.target),x(e,n,t.kind)}else("HEAL"===t.kind||"VERIFY"===t.kind)&&x(e,e,t.kind)}return{nodes:[...h.values()],edges:m}}(L,{events:ec.events,reqs:ei,universes:ec.universes,plans:ec.plans,pods:ec.pods,retries:ec.retries}),a=new Map(B.current.nodes.map(e=>[e.id,e]));for(let e of n.nodes){let t=a.get(e.id);t&&(e.x=t.x,e.y=t.y,e.vx=t.vx,e.vy=t.vy)}B.current=n,el(e=>e.nodes===n.nodes.length&&e.edges===n.edges.length?e:{nodes:n.nodes.length,edges:n.edges.length});let l=ec.pods.map(e=>"pod|".concat(e.ts,"|").concat(e.pool));if(V.current)for(let e of ec.pods){let t="pod|".concat(e.ts,"|").concat(e.pool);V.current.has(t)||eo({from:"harness",to:"pod:".concat(e.pool),kind:"ROUTE"})}let i=function(e,t){let n=[];for(let l of t.stream){var a;let t="".concat(l.ts,"|").concat(l.kind,"|").concat(null!=(a=l.runId)?a:"","|").concat(l.what);if(e.has(t))continue;let s=l.runId?"run:".concat(l.runId):"harness",r="SHIP"===l.kind&&l.target?"pr:".concat(l.target.replace(/^#/,"")):l.target?"target:".concat(l.target):s;n.push({key:t,kind:l.kind,from:s,to:r})}return n}(null!=(e=V.current)?e:new Set,L);if(V.current){let e=new Map(L.stream.map(e=>{var t;return["".concat(e.ts,"|").concat(e.kind,"|").concat(null!=(t=e.runId)?t:"","|").concat(e.what),e]})),t=[...i].reverse();t.forEach((n,a)=>{let l=e.get(n.key);!l||!g(l)||er()||a<t.length-6?eo(n):z.current.push({key:n.key,line:l,from:n.from,to:n.to})}),X(e=>e+1)}V.current=new Set([...null!=(t=V.current)?t:[],...i.map(e=>e.key),...l])},[L,ec.events,ec.universes,ec.plans,ec.pods,ec.retries,ei]),(0,l.useEffect)(()=>{if(Y)return;let e=z.current.shift();if(!e){K&&_(!1);return}J({item:e,folding:!1})},[Y,Q,K]),(0,l.useEffect)(()=>{if(!Y)return;if(!Y.folding){let e=setTimeout(()=>J({item:Y.item,folding:!0}),es.current);return()=>clearTimeout(e)}eo({from:Y.item.from,to:Y.item.to,kind:Y.item.line.kind});let e=setTimeout(()=>J(null),250);return()=>clearTimeout(e)},[Y]),(0,l.useEffect)(()=>{es.current=K?550:1500},[K]);let eu=(0,l.useRef)(!1);(0,l.useEffect)(()=>{if(!W||eu.current||0===L.stream.length||er())return;eu.current=!0;let e=setTimeout(()=>ep(),1200);return()=>clearTimeout(e)},[L.stream.length]);let ep=()=>{z.current=L.stream.filter(g).slice(0,40).reverse().map(e=>{let t=e.runId?"run:".concat(e.runId):"harness",n="SHIP"===e.kind&&e.target?"pr:".concat(e.target.replace(/^#/,"")):e.target?"target:".concat(e.target):t;return{key:"replay|".concat(e.ts,"|").concat(e.what),line:e,from:t,to:n}}),_(!0),X(e=>e+1)};(0,l.useEffect)(()=>{let e=U.current;if(!e)return;let t=e.getContext("2d");if(!t)return;let n=er(),a=new Map,l=e=>{let t=a.get(e);if(t)return t;let n=document.createElement("canvas");n.width=64,n.height=64;let l=n.getContext("2d");if(l){let t=l.createRadialGradient(32,32,0,32,32,32);t.addColorStop(0,"".concat(e,"ff")),t.addColorStop(.25,"".concat(e,"88")),t.addColorStop(1,"".concat(e,"00")),l.fillStyle=t,l.fillRect(0,0,64,64)}return a.set(e,n),n},s=0,r=0,o=()=>{let a=window.devicePixelRatio||1,c=e.clientWidth,h=e.clientHeight;(e.width!==Math.round(c*a)||e.height!==Math.round(h*a))&&(e.width=Math.round(c*a),e.height=Math.round(h*a)),t.setTransform(a,0,0,a,0,0);let x=B.current;n||function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,{nodes:n,edges:a}=e,l=new Map(n.map(e=>[e.id,e])),s=Math.min(1,60/Math.max(1,n.length));for(let e=0;e<n.length;e++)for(let t=e+1;t<n.length;t++){let a=n[e],l=n[t],r=a.x-l.x,o=a.y-l.y,i=r*r+o*o;i<1e-6&&(r=.01,o=.01,i=2e-4);let c=e=>"phase"===e||"request"===e||"event"===e||"piece"===e,d=s*(c(a.kind)||c(l.kind)?"request"===a.kind||"request"===l.kind?12e-6:5e-5:18e-5)/i;a.vx+=r*d,a.vy+=o*d,l.vx-=r*d,l.vy-=o*d}for(let e of a){if(e.from===e.to)continue;let t=l.get(e.from),n=l.get(e.to);if(!t||!n)continue;let a=n.x-t.x,s=n.y-t.y,r=Math.sqrt(a*a+s*s)||.001,o=(r-("request"===n.kind?.035:"site"===n.kind?.06:i.has(t.kind)||i.has(n.kind)?.34:"harness"===t.kind||"harness"===n.kind?.2:"phase"===t.kind||"phase"===n.kind?.07:.12))*("phase"===t.kind||"phase"===n.kind?.05:.02);t.vx+=a/r*o,t.vy+=s/r*o,n.vx-=a/r*o,n.vy-=s/r*o}for(let e of n){if("harness"===e.kind){e.x=.5,e.y=.5,e.vx=0,e.vy=0;continue}if(i.has(e.kind)){let t=e.x-.5,n=e.y-.5,a=Math.sqrt(t*t+n*n)||.001,l=(("universe"===e.kind?.44:.3)-a)*.01;e.vx+=t/a*l,e.vy+=n/a*l}else e.vx+=(.5-e.x)*.003,e.vy+=(.5-e.y)*.003;e.x<.08&&(e.vx+=(.08-e.x)*.06),e.x>.92&&(e.vx-=(e.x-.92)*.06),e.y<.18&&(e.vy+=(.18-e.y)*.06),e.y>.87&&(e.vy-=(e.y-.87)*.06),e.vx*=.86,e.vy*=.86,e.x=Math.min(.97,Math.max(.03,e.x+e.vx*t)),e.y=Math.min(.95,Math.max(.1,e.y+e.vy*t))}}(x),r+=1;let g=new Map(x.nodes.map(e=>[e.id,e])),v=e=>n?0:1.4*Math.sin(r/40+e.id.length%7),b=e=>{let t=g.get(e);return t?{x:t.x*c+v(t),y:t.y*h+.7*v(t)}:null};for(let e of(t.clearRect(0,0,c,h),t.globalCompositeOperation="lighter",x.edges)){let n=b(e.from),a=b(e.to);n&&a&&(t.strokeStyle=d[e.kind],t.globalAlpha=e.to.startsWith("ev:")||e.to.startsWith("site:")?.15:.25,t.lineWidth="SHIP"===e.kind?1.4:.7,t.beginPath(),e.from===e.to?t.arc(n.x+8,n.y-8,8,0,2*Math.PI):(t.moveTo(n.x,n.y),t.lineTo(a.x,a.y)),t.stroke())}if(!n&&x.edges.length&&r%4==0&&$.current.length<110){let e=x.edges[7919*r%x.edges.length];e.from!==e.to&&$.current.push({from:e.from,to:e.to,kind:e.kind,t:0,speed:.008,alpha:.45,size:1.6})}for(let e of($.current=$.current.filter(e=>e.t<=1),$.current)){let a=b(e.from),s=b(e.to);if(!a||!s){e.t=2;continue}e.t+=n?1:e.speed;let r=a.x+(s.x-a.x)*e.t,o=a.y+(s.y-a.y)*e.t-(e.from===e.to?24*Math.sin(e.t*Math.PI):0),i=5*e.size;t.globalAlpha=e.alpha,t.drawImage(l(d[e.kind]),r-i,o-i,2*i,2*i)}for(let e of(G.current=G.current.filter(e=>e.t<=1),G.current)){let a=b(e.id);if(!a){e.t=2;continue}e.t+=n?1:.014;let s=10+70*Math.min(1,e.t/.3);t.globalAlpha=1-e.t,t.strokeStyle=d.SHIP,t.lineWidth=2.5,t.beginPath(),t.arc(a.x,a.y,s,0,2*Math.PI),t.stroke(),t.drawImage(l(d.SHIP),a.x-s,a.y-s,2*s,2*s)}for(let e of x.nodes){let a=b(e.id),s="phase"===e.kind,o="harness"===e.kind||s&&e.current,i=m[e.kind]+("model"===e.kind||"run"===e.kind?Math.min(4,.4*e.weight):"event"===e.kind?Math.min(3,.5*e.weight):0),c=o&&!n?i*(1+Math.sin(r/(s?9:20))*(s?.35:.12)):i,h=(s||"event"===e.kind)&&e.tone?p[e.tone]:u[e.kind],f=o||"run"===e.kind||"model"===e.kind||"account"===e.kind||"universe"===e.kind,x=c*(f?8:3);if(t.globalAlpha=f?.6:.35,t.drawImage(l(h),a.x-x,a.y-x,2*x,2*x),t.globalAlpha="event"===e.kind?.85:1,t.fillStyle=h,t.beginPath(),t.arc(a.x,a.y,c,0,2*Math.PI),t.fill(),s&&e.retries){t.globalAlpha=.75,t.strokeStyle=d.HEAL,t.lineWidth=1,t.setLineDash([3,3]);for(let l=1;l<=Math.min(4,e.retries);l+=1)t.lineDashOffset=n?0:-(r*(.4+.1*l)),t.beginPath(),t.arc(a.x,a.y,c+4+4*l,0,2*Math.PI),t.stroke();t.setLineDash([])}if(s&&e.current&&!n){let e=r%60/60;t.strokeStyle=h,t.globalAlpha=1-e,t.lineWidth=1.2,t.beginPath(),t.arc(a.x,a.y,c+18*e,0,2*Math.PI),t.stroke()}}for(let e of(t.globalCompositeOperation="source-over",t.globalAlpha=1,x.nodes)){if(!f.has(e.kind))continue;let n=b(e.id);t.fillStyle="harness"===e.kind?"#eef2ff":"phase"===e.kind?"rgba(199,210,254,.65)":"rgba(226,232,240,.82)",t.font="harness"===e.kind?"600 12px ui-monospace, SFMono-Regular, monospace":"10px ui-monospace, SFMono-Regular, monospace";let a="harness"===e.kind?"ELANOUS HARNESS":"phase"===e.kind?e.label:e.label.toUpperCase();t.fillText(a,n.x+m[e.kind]+4,n.y+3)}n||(s=requestAnimationFrame(o))};s=requestAnimationFrame(o);let c=t=>{let n=e.getBoundingClientRect(),a=(t.clientX-n.left)/n.width,l=(t.clientY-n.top)/n.height,s=B.current.nodes.find(e=>"run"===e.kind&&.02>Math.hypot(e.x-a,e.y-l));s&&(null==D||D(s.id.replace(/^run:/,"")))};return e.addEventListener("click",c),()=>{cancelAnimationFrame(s),e.removeEventListener("click",c)}},[D]);let eh=L.gauges,em=function(e){var t;let n=e.snapshot.runs.filter(e=>"ok"===e.stages.land);if(n.length)return{run:[...n].sort((t,n)=>{var a,l;return(null!=(a=e.rounds[n.runId])?a:0)-(null!=(l=e.rounds[t.runId])?l:0)||n.events-t.events})[0],why:"merged"};let a=null!=(t=e.snapshot.runs.find(e=>e.current&&!e.blocked))?t:e.snapshot.runs[0];return a?{run:a,why:"in-flight"}:null}(L),ef=null!=(t=null==em?void 0:em.run)?t:null,ex=Object.values(L.rounds),eg=s.jg.map(e=>({k:e,n:L.stream.filter(t=>t.kind===e).length})),ev=ei.reduce((e,t)=>e+t.input+t.output,0),eb=ei.reduce((e,t)=>e+t.apiUsd,0),ey=Math.max(1,...ei.slice(0,10).map(e=>e.input+e.output)),ew=ef?s.lV.filter(e=>ef.stages[e]):[];return(0,a.jsxs)("div",{className:"live-stage live-v5 space-y-1.5 rounded-xl p-1.5 text-slate-100","data-live-max-stage":!0,"data-live-v5":!0,children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 rounded-md border border-indigo-400/10 bg-slate-950/60 px-2 py-1",children:[(0,a.jsx)("span",{className:"shrink-0 text-xl tracking-tight text-slate-50",style:{fontFamily:'Georgia, "Times New Roman", serif'},children:"Elanous"}),(0,a.jsx)("span",{className:"hidden shrink-0 font-mono text-[11px] sm:inline lg:text-[10.5px] tracking-[.18em] text-indigo-200/80",children:"\xd7 HARNESS \xb7 판단"}),(0,a.jsx)(w,{tone:"live",children:"● LIVE"}),(0,a.jsx)("div",{className:"min-w-0 flex-1",children:(0,a.jsx)(N,{ariaLabel:"판단 띠",bare:!0,items:L.stream.slice(0,16).map((e,t)=>(0,a.jsxs)("span",{className:"mx-4 whitespace-nowrap",children:[(0,a.jsxs)("span",{style:{color:d[e.kind]},children:["▸ ",e.kind]})," ",(0,a.jsx)("span",{className:"text-slate-300",children:e.what}),e.target&&(0,a.jsxs)("span",{className:"text-slate-500",children:[" → ",e.target]})]},"".concat(e.ts,"-").concat(t)))})}),(0,a.jsx)("span",{className:"shrink-0 font-mono text-lg tabular-nums text-slate-200",suppressHydrationWarning:!0,children:Z})]}),(0,a.jsx)(N,{ariaLabel:"모델 띠",slow:!0,items:[(0,a.jsxs)("span",{className:"mx-4 whitespace-nowrap",children:[(0,a.jsx)("span",{className:"text-rose-300",children:"● LIVE RUNS"})," ",eh.live]},"live"),(0,a.jsxs)("span",{className:"mx-4 whitespace-nowrap",children:[(0,a.jsx)("span",{className:"text-emerald-300",children:"SHIPPED"})," ",eh.shipped]},"ship"),(0,a.jsxs)("span",{className:"mx-4 whitespace-nowrap",children:[(0,a.jsx)("span",{className:"text-indigo-300",children:"DECISIONS/MIN"})," ",eh.decisionsPerMin]},"dpm"),(0,a.jsxs)("span",{className:"mx-4 whitespace-nowrap",children:[(0,a.jsx)("span",{className:"text-indigo-300",children:"BURN/MIN"})," ",b(eh.burnTokensPerMin)]},"burn"),...ec.ticker.map(e=>(0,a.jsxs)("span",{className:"mx-4 whitespace-nowrap",children:[(0,a.jsx)("span",{style:{color:ed(e.model)},children:e.model.toUpperCase()})," ",(0,a.jsx)("span",{className:e.delta>0?"text-emerald-300":e.delta<0?"text-rose-300":"text-slate-400",children:e.delta>0?"▲":e.delta<0?"▼":"■"})," ",e.count," req \xb7 ",b(e.tokens)," tok"]},e.model))]}),(0,a.jsxs)("div",{className:"grid grid-cols-12 gap-1.5",children:[(0,a.jsxs)(y,{className:"col-span-12 lg:col-span-4",title:"SHIPPED \xb7 병합된 PR",stat:"".concat("github"===H?"GITHUB":"LOG"," \xb7 ").concat(O>=60?"".concat(O/60,"H"):"".concat(O,"M")),children:[(0,a.jsxs)("div",{className:"flex items-end gap-3",children:[(0,a.jsx)(M,{value:eh.shipped,accent:d.SHIP}),(0,a.jsxs)("div",{className:"mb-3 flex flex-col gap-1",children:[(0,a.jsx)(w,{tone:"ok",children:"MERGED"}),eh.selfHealRuns>0&&(0,a.jsx)(w,{tone:"heal",children:"SELF-HEALED"}),L.snapshot.counters.blocked>0&&(0,a.jsxs)(w,{tone:"bad",children:["BLOCKED ",L.snapshot.counters.blocked]})]})]}),(0,a.jsxs)("div",{className:"mt-1 grid grid-cols-3 gap-2 border-t border-indigo-400/10 pt-2",children:[(0,a.jsx)(k,{label:"SELF-HEAL",value:null===eh.selfHealRate?"—":"".concat(eh.selfHealRate,"%"),color:d.HEAL}),(0,a.jsx)(k,{label:"RUNS",value:String(L.snapshot.runs.length),color:"#c7d2fe"}),(0,a.jsx)(k,{label:"DECISIONS",value:String(eh.decisions),color:d.PLAN})]})]}),(0,a.jsx)(y,{className:"col-span-12 lg:col-span-4",title:(null==em?void 0:em.why)==="merged"?"BEST RUN \xb7 오늘 최고의 런":"NOW \xb7 지금 런",stat:ef?"R ".concat(null!=(n=L.rounds[ef.runId])?n:0,"/3"):"—",children:ef?(0,a.jsxs)("button",{type:"button",className:"block w-full text-left",onClick:()=>null==D?void 0:D(ef.runId),"data-live-v5-best":!0,children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"font-mono text-[11px] text-slate-400",children:ef.runId}),(null==em?void 0:em.why)==="merged"?(0,a.jsxs)(w,{tone:"ok",children:["VERIFIED \xb7 MERGED",ef.pr?" #".concat(ef.pr):""]}):(0,a.jsx)(w,{tone:"live",children:"IN FLIGHT"})]}),(0,a.jsxs)("div",{className:"mt-1 flex items-baseline gap-3",children:[(0,a.jsx)("span",{className:"font-mono text-6xl font-semibold tabular-nums text-indigo-100",style:{textShadow:"0 0 24px #818cf888"},children:ef.pr?"#".concat(ef.pr):ef.current?s.fQ[ef.current]:"—"}),(0,a.jsxs)("span",{className:"font-mono text-xs text-slate-400",children:[ef.events," signals \xb7 라운드 ",null!=(v=L.rounds[ef.runId])?v:0]})]}),(0,a.jsx)("div",{className:"mt-2 flex flex-wrap gap-1",children:ew.map(e=>{let t=ef.stages[e];return(0,a.jsxs)(w,{tone:"bad"===t?"bad":"ok"===t?"ok":"dim",children:[s.fQ[e],"ok"===t?" ✓":"bad"===t?" ✗":""]},e)})})]}):(0,a.jsx)("p",{className:"py-6 text-xs text-slate-500",children:"이 창에 런 신호가 없다 — ▶ REPLAY 로 최근 판단을 본다."})}),(0,a.jsx)(y,{className:"col-span-12 lg:col-span-4",title:"LLM \xb7 ".concat(ec.bucketMin,"분 봉 ⊕ 요청 창"),stat:"".concat(ei.length," REQ \xb7 ").concat(b(ev)," TOK"),children:(0,a.jsxs)("div",{className:"grid grid-cols-5 gap-2",children:[(0,a.jsx)(S,{candles:ec.candles,color:ed,unit:"/".concat(ec.bucketMin,"M"),className:"col-span-3"}),(0,a.jsxs)("ul",{className:"col-span-2 h-28 space-y-0.5 overflow-hidden font-mono text-[11px] lg:text-[10px]","data-live-v5-book":!0,children:[ei.slice(0,10).map((e,t)=>(0,a.jsxs)("li",{className:"relative flex justify-between gap-1 overflow-hidden px-1 ".concat(0===t?"live-line-in":""),children:[(0,a.jsx)("span",{className:"absolute inset-y-0 right-0 opacity-20",style:{width:"".concat((e.input+e.output)/ey*100,"%"),background:ed(e.model)}}),(0,a.jsx)("span",{className:"relative truncate",style:{color:ed(e.model)},children:e.model}),(0,a.jsx)("span",{className:"relative tabular-nums text-slate-300",children:b(e.input+e.output)})]},"".concat(e.ts,"-").concat(t))),0===ei.length&&(0,a.jsx)("li",{className:"text-slate-500",children:"요청 없음"})]})]})})]}),(0,a.jsx)(y,{title:"EXECUTION CYCLE \xb7 하니스 한 바퀴",stat:"".concat(ef?"ROUND ".concat(null!=(C=L.rounds[ef.runId])?C:0,"/3 \xb7 "):"","NEXT ").concat(et,"S"),children:(0,a.jsx)("div",{className:"grid grid-cols-3 gap-1.5 sm:grid-cols-6",children:s.lV.map((e,t)=>{let n=ef?ef.current===e:ec.load.busiest===e,l=null==ef?void 0:ef.stages[e];return(0,a.jsxs)("div",{"data-live-v5-stage":e,"data-hot":n?"1":void 0,className:"rounded-md border px-3 py-2 ".concat(n?"live-v5-hot":""),style:n?{borderColor:"#a78bfa",boxShadow:"0 0 18px #a78bfa66, inset 0 0 18px #a78bfa33",background:"rgba(124,58,237,.28)"}:{borderColor:"rgba(99,102,241,.18)",background:"rgba(2,6,23,.55)"},children:[(0,a.jsxs)("div",{className:"flex justify-between font-mono text-[11px] lg:text-[10px] text-slate-400",children:[(0,a.jsx)("span",{children:String(t+1).padStart(2,"0")}),l&&(0,a.jsx)("span",{style:{color:p[l]},children:"ok"===l?"✓":"bad"===l?"✗":"●"})]}),(0,a.jsxs)("div",{className:"flex items-baseline justify-between",children:[(0,a.jsx)("span",{className:n?"text-sm font-semibold text-white":"text-sm text-slate-300",children:s.fQ[e]}),(0,a.jsx)("span",{className:"font-mono text-xs tabular-nums text-slate-400",title:"지금 이 단계에 있는 런",children:ec.load.counts[e]})]})]},e)})})}),(0,a.jsxs)("div",{className:"grid grid-cols-12 gap-1.5",children:[(0,a.jsxs)(y,{className:"relative col-span-12 xl:col-span-10",title:"JUDGMENT GRAPH \xb7 FORCE",stat:"NODES ".concat(ea.nodes," \xb7 EDGES ").concat(ea.edges),bodyClass:"p-0",hot:!0,children:[(0,a.jsx)("canvas",{ref:U,className:"h-[370px] w-full bg-[radial-gradient(ellipse_at_center,rgba(79,70,229,.26),rgba(2,6,23,.96)_70%)]","aria-label":"판단 그래프"}),(0,a.jsx)("div",{className:"pointer-events-none absolute left-3 top-9 flex flex-col gap-0.5 rounded-md bg-slate-950/60 p-2 font-mono text-[11px] lg:text-[10px]",children:eg.map(e=>{let{k:t,n}=e;return(0,a.jsxs)("span",{style:{color:d[t]},children:["● ",t," ",(0,a.jsx)("span",{className:"text-slate-400",children:n})]},t)})}),(0,a.jsx)("button",{type:"button",onClick:ep,disabled:K||0===L.stream.length,"data-elanous-action":"live-replay",className:"absolute bottom-3 right-3 rounded-full border border-indigo-400/40 bg-slate-950/70 px-3 py-1 font-mono text-[11px] lg:text-[10px] text-indigo-200 hover:bg-indigo-500/20 disabled:opacity-40",title:"이 창의 판단을 옛것부터 빨리 감기(최근 40)",children:K?"REPLAY \xb7 ".concat(z.current.length):"▶ REPLAY"}),Y&&(0,a.jsx)(T,{item:Y.item,folding:Y.folding})]}),(0,a.jsx)(y,{className:"col-span-12 xl:col-span-2",title:"STATS",stat:"".concat(et,"S"),children:(0,a.jsxs)("dl",{className:"grid grid-cols-2 gap-x-2 gap-y-1.5 font-mono","data-live-v5-stats":!0,children:[(0,a.jsx)(j,{label:"PATHS",value:L.stream.reduce((e,t)=>{var n;return e+(null!=(n=t.paths)?n:0)},0)||"—"}),(0,a.jsx)(j,{label:"CONV",value:L.convergence.length?"".concat(L.convergence.filter(e=>{var t;return(null==(t=e.points.at(-1))?void 0:t.asks)===0}).length,"/").concat(L.convergence.length):"—"}),(0,a.jsx)(j,{label:"ROUNDS AVG",value:ex.length?(ex.reduce((e,t)=>e+t,0)/ex.length).toFixed(1):"—"}),(0,a.jsx)(j,{label:"DECISIONS/MIN",value:eh.decisionsPerMin}),(0,a.jsx)(j,{label:"SIGNALS",value:P.length}),(0,a.jsx)(j,{label:"LLM REQ",value:ei.length}),q?(0,a.jsx)(j,{label:"MODELS",value:ec.ticker.length}):(0,a.jsx)(j,{label:"API ≈ USD",value:"$".concat(eb.toFixed(2))}),(0,a.jsx)(j,{label:"NEXT POLL",value:"".concat(et,"s")})]})})]}),(0,a.jsxs)("div",{className:"grid grid-cols-12 gap-1.5",children:[(0,a.jsx)(y,{className:"col-span-12 md:col-span-6 xl:col-span-3",title:"MODEL \xd7 SITE \xb7 요청 수",stat:"MAX ".concat(ec.heat.max),children:(0,a.jsx)(I,{heat:ec.heat,color:ed})}),(0,a.jsx)(y,{className:"col-span-12 md:col-span-6 xl:col-span-3",title:"DISTRIBUTION \xb7 런 소요 ⊕ 요청 토큰",stat:"".concat(ec.spans," RUNS \xb7 ").concat(ei.length," REQ"),children:(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-2",children:[(0,a.jsx)(E,{hist:ec.hist,label:e=>"".concat(e.toFixed(0),"분")}),(0,a.jsx)(E,{hist:ec.tokHist,label:e=>b(10**e)})]})}),(0,a.jsx)(y,{className:"col-span-12 md:col-span-6 xl:col-span-3",title:"CONVERGENCE \xb7 must-fix ⊕ GATE",stat:"".concat(L.convergence.length," PR"),children:(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-2",children:[(0,a.jsx)("div",{className:"col-span-2",children:(0,a.jsx)(R,{series:L.convergence})}),(0,a.jsx)(A,{pass:ec.gate.pass,fail:ec.gate.fail,verdicts:L.snapshot.reviewVerdicts})]})}),(0,a.jsx)(y,{className:"col-span-12 md:col-span-6 xl:col-span-3",title:"EXECUTION LOG \xb7 LIVE",stat:"".concat(L.stream.length),bodyClass:"px-2 py-1",children:(0,a.jsxs)("ul",{className:"h-[124px] space-y-0.5 overflow-hidden font-mono text-[11px] lg:text-[10.5px]","data-live-max-stream":!0,children:[L.stream.slice(0,9).map((e,t)=>(0,a.jsxs)("li",{className:"flex gap-1.5 ".concat(0===t?"live-line-in":""),style:"SHIP"===e.kind?{textShadow:"0 0 10px ".concat(d.SHIP)}:void 0,children:[(0,a.jsx)("span",{className:"shrink-0 text-slate-500",title:e.ts,children:(0,s.qo)(e.ts)}),(0,a.jsx)("span",{className:"w-14 shrink-0 rounded px-1 text-center",style:{color:d[e.kind],background:"".concat(d[e.kind],"1f")},children:e.kind}),(0,a.jsxs)("span",{className:"truncate",children:[e.what,e.target&&(0,a.jsxs)("span",{className:"text-slate-500",children:[" → ",e.target]})]})]},"".concat(e.ts,"-").concat(t))),0===L.stream.length&&(0,a.jsx)("li",{className:"text-slate-500",children:"이 창에 판단 신호가 없다."})]})})]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-x-6 gap-y-1 rounded-md border border-indigo-400/10 bg-slate-950/60 px-3 py-1 font-mono text-[11px] lg:text-[10px] text-slate-400",children:[(0,a.jsxs)("span",{children:["STACK ",(0,a.jsx)("span",{className:"text-slate-200",children:"elanous-core"})]}),(0,a.jsxs)("span",{children:["SOURCE ",(0,a.jsx)("span",{className:"text-slate-200",children:F})]}),(0,a.jsxs)("span",{children:["SIGNALS ",(0,a.jsx)("span",{className:"text-slate-200",children:P.length})]}),(0,a.jsxs)("span",{children:["LLM ",(0,a.jsxs)("span",{className:"text-slate-200",children:[ei.length," req"]})]}),(0,a.jsxs)("span",{children:["EMITTED ",(0,a.jsx)("span",{className:"text-slate-200",children:L.emitted})]}),q&&(0,a.jsx)("span",{className:"text-emerald-300","data-live-public-capture":!0,children:"PUBLIC CAPTURE \xb7 계정\xb7과금 가림"}),(0,a.jsx)("span",{className:"ml-auto",children:"EVERY NUMBER IS REAL \xb7 보이는 수는 전부 진짜"})]})]})}function b(e){return e>=1e6?"".concat((e/1e6).toFixed(1),"M"):e>=1e3?"".concat((e/1e3).toFixed(e>=1e5?0:1),"k"):String(Math.round(e))}function y(e){let{title:t,stat:n,children:l,className:s="",bodyClass:r="p-2.5",hot:o=!1}=e;return(0,a.jsxs)("section",{className:"overflow-hidden rounded-lg border bg-slate-950/70 ".concat(s),style:o?{borderColor:"rgba(167,139,250,.7)",boxShadow:"0 0 22px #a78bfa33"}:{borderColor:"rgba(99,102,241,.16)"},"aria-label":t,"data-live-v5-panel":t,children:[(0,a.jsxs)("header",{className:"flex items-center justify-between border-b border-indigo-400/10 px-2.5 py-1 font-mono text-[11px] lg:text-[10.5px] tracking-[.08em] text-slate-400",children:[(0,a.jsxs)("span",{children:["▸ ",t]}),n&&(0,a.jsx)("span",{className:"tabular-nums text-slate-300",children:n})]}),(0,a.jsx)("div",{className:r,children:l})]})}function w(e){let{tone:t,children:n}=e,l="ok"===t?d.SHIP:"bad"===t?d.ESCALATE:"heal"===t?d.HEAL:"dim"===t?"#a5b4fc":"#f0abfc";return(0,a.jsx)("span",{className:"inline-block whitespace-nowrap rounded px-1.5 py-0.5 font-mono text-[11px] lg:text-[10px] font-semibold tracking-wider ".concat("live"===t?"live-v5-blink":""),style:{color:l,background:"".concat(l,"22"),boxShadow:"inset 0 0 0 1px ".concat(l,"66")},children:n})}function k(e){let{label:t,value:n,color:l}=e;return(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"font-mono text-[11px] lg:text-[9.5px] tracking-widest text-slate-500",children:t}),(0,a.jsx)("div",{className:"font-mono text-3xl font-semibold tabular-nums",style:{color:l,textShadow:"0 0 14px ".concat(l,"55")},children:n})]})}function j(e){let{label:t,value:n}=e;return(0,a.jsxs)("div",{className:"border-b border-indigo-400/10 pb-1",children:[(0,a.jsx)("dt",{className:"text-[11px] lg:text-[9.5px] tracking-widest text-slate-500",children:t}),(0,a.jsx)("dd",{className:"text-lg font-semibold tabular-nums text-indigo-100",children:n})]})}function N(e){let{items:t,ariaLabel:n,slow:l=!1,bare:s=!1}=e;return(0,a.jsx)("div",{className:"relative overflow-hidden font-mono text-[11px] ".concat(s?"":"rounded-md border border-indigo-400/10 bg-slate-950/60 py-1"),"aria-label":n,children:0===t.length?(0,a.jsx)("span",{className:"px-3 text-slate-500",children:"—"}):(0,a.jsxs)("div",{className:"live-v5-marquee flex w-max",style:{animationDuration:"".concat(Math.max(30,t.length*(l?9:6)),"s")},children:[(0,a.jsx)("div",{className:"flex",children:t}),(0,a.jsx)("div",{className:"flex","aria-hidden":!0,children:t})]})})}function M(e){let{value:t,accent:n}=e,[s,r]=(0,l.useState)(t),[o,i]=(0,l.useState)(!1),c=(0,l.useRef)(t);return(0,l.useEffect)(()=>{let e=c.current;t>e&&(i(!0),setTimeout(()=>i(!1),700)),c.current=t;let n=performance.now(),a=0,l=s=>{let o=Math.min(1,(s-n)/900);r(e+(t-e)*(1-Math.pow(1-o,3))),o<1&&(a=requestAnimationFrame(l))};return a=requestAnimationFrame(l),()=>cancelAnimationFrame(a)},[t]),(0,a.jsx)("div",{className:"font-mono text-[112px] font-semibold leading-none tabular-nums",style:{color:n,textShadow:"0 0 ".concat(o?40:26,"px ").concat(n).concat(o?"cc":"66")},"data-live-max-gauge":"SHIPPED",children:Math.round(s)})}function S(e){let{candles:t,color:n,unit:l,className:s=""}=e,r=Math.max(1,...t.map(e=>e.count)),o=240/t.length;return(0,a.jsxs)("svg",{viewBox:"0 0 ".concat(240," ").concat(120),className:"h-28 w-full ".concat(s),"data-live-v5-candles":!0,"aria-label":"분당 LLM 요청",children:[[.25,.5,.75].map(e=>(0,a.jsx)("line",{x1:0,x2:240,y1:120*e,y2:120*e,stroke:"#1e293b",strokeDasharray:"2 3"},e)),t.map((e,t)=>{let l=120;return Object.entries(e.byModel).map(e=>{let[s,i]=e,c=i/r*114;return l-=c,(0,a.jsx)("rect",{x:t*o+1,y:l,width:Math.max(1,o-2),height:c,fill:n(s),opacity:.85},"".concat(t,"-").concat(s))})}),(0,a.jsxs)("text",{x:238,y:10,fill:"#64748b",fontSize:8,fontFamily:"monospace",textAnchor:"end",children:[r,l]})]})}function I(e){let{heat:t,color:n}=e;return 0===t.models.length?(0,a.jsx)("p",{className:"py-6 text-xs text-slate-500",children:"이 창에 요청이 없다."}):(0,a.jsxs)("table",{className:"w-full border-separate border-spacing-0.5 font-mono text-[11px] lg:text-[10px]","data-live-v5-heat":!0,children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{}),t.sites.map(e=>(0,a.jsx)("th",{className:"max-w-16 truncate font-normal text-slate-500",children:e},e))]})}),(0,a.jsx)("tbody",{children:t.models.map(e=>(0,a.jsxs)("tr",{children:[(0,a.jsx)("td",{className:"max-w-24 truncate pr-1",style:{color:n(e)},children:e}),t.sites.map(n=>{var l;let s=null!=(l=t.cells["".concat(e,"|").concat(n)])?l:0,r=0===s?0:Math.min(5,Math.ceil(s/Math.max(1,t.max)*5));return(0,a.jsx)("td",{className:"rounded-sm px-1 py-0.5 text-center tabular-nums",style:{background:r?"rgba(167,139,250,".concat(.12+.15*r,")"):"rgba(30,41,59,.5)",color:r>=4?"#fff":"#cbd5e1"},children:s||"\xb7"},n)})]},e))})]})}function E(e){let{hist:t,label:n}=e,l=200/t.bins.length;return(0,a.jsxs)("div",{children:[(0,a.jsxs)("svg",{viewBox:"0 0 ".concat(200," ").concat(90),className:"h-20 w-full","data-live-v5-hist":!0,"aria-label":"분포",children:[(0,a.jsx)("defs",{children:(0,a.jsxs)("linearGradient",{id:"v5hist",x1:"0",x2:"1",y1:"0",y2:"0",children:[(0,a.jsx)("stop",{offset:"0%",stopColor:d.HEAL}),(0,a.jsx)("stop",{offset:"60%",stopColor:d.PLAN}),(0,a.jsx)("stop",{offset:"100%",stopColor:d.ROUTE})]})}),t.bins.map((e,n)=>{let s=t.max?e/t.max*86:0;return(0,a.jsx)("rect",{x:n*l+.5,y:90-s,width:Math.max(1,l-1),height:s,fill:"url(#v5hist)",opacity:.9},n)}),(0,a.jsx)("line",{x1:0,x2:200,y1:89.5,y2:89.5,stroke:"#334155"})]}),(0,a.jsxs)("div",{className:"flex justify-between font-mono text-[11px] lg:text-[9.5px] text-slate-500",children:[(0,a.jsx)("span",{children:t.max?n(t.lo):"—"}),(0,a.jsx)("span",{children:t.max?n(t.hi):""})]})]})}function A(e){let{pass:t,fail:n,verdicts:l}=e,s=[{name:"GATE ✓",count:t,c:d.SHIP},{name:"GATE ✗",count:n,c:d.ESCALATE},...l.slice(0,3).map(e=>({name:e.name.toUpperCase(),count:e.count,c:d.VERIFY}))],r=Math.max(1,...s.map(e=>e.count));return(0,a.jsx)("ul",{className:"space-y-1 font-mono text-[11px] lg:text-[9.5px]","data-live-v5-gate":!0,children:s.map(e=>(0,a.jsxs)("li",{children:[(0,a.jsxs)("div",{className:"flex justify-between text-slate-400",children:[(0,a.jsx)("span",{className:"truncate",children:e.name}),(0,a.jsx)("span",{className:"tabular-nums text-slate-200",children:e.count})]}),(0,a.jsx)("div",{className:"h-1.5 rounded-full bg-slate-800",children:(0,a.jsx)("div",{className:"h-1.5 rounded-full",style:{width:"".concat(e.count/r*100,"%"),background:e.c,boxShadow:"0 0 8px ".concat(e.c,"88")}})})]},e.name))})}function T(e){var t;let{item:n,folding:l}=e,{line:r}=n,o=d[r.kind];return(0,a.jsxs)("div",{"data-live-decision-card":r.kind,className:"pointer-events-none absolute left-1/2 top-12 w-[min(92%,580px)] rounded-xl border bg-slate-950/85 p-3 backdrop-blur transition-all duration-200",style:{borderColor:"".concat(o,"88"),boxShadow:"0 0 32px ".concat(o,"55"),opacity:+!l,transform:"translateX(-50%) scale(".concat(l?.6:1,")")},children:[(0,a.jsxs)("div",{className:"mb-2 flex items-center gap-2 font-mono text-[11px] lg:text-[10px]",children:[(0,a.jsxs)("span",{style:{color:o},children:["● ",r.kind]}),(0,a.jsx)("span",{className:"text-slate-500",children:(0,s.qo)(r.ts)}),r.runId&&(0,a.jsx)("span",{className:"text-slate-500",children:r.runId.replace(/^run-/,"").slice(0,8)}),r.paths?(0,a.jsxs)("span",{className:"ml-auto text-slate-400",children:["PATHS ",r.paths]}):null]}),(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-2 text-[11px] leading-snug",children:[(0,a.jsx)(C,{label:"무엇 \xb7 WHAT",value:r.what,strong:!0}),(0,a.jsx)(C,{label:"왜 \xb7 WHY",value:null!=(t=r.why)?t:r.purpose}),(0,a.jsx)(C,{label:"어디로 \xb7 TO",value:r.target,accent:o})]})]})}function C(e){let{label:t,value:n,strong:l=!1,accent:s}=e;return(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("div",{className:"font-mono text-[11px] lg:text-[9px] tracking-widest text-slate-500",children:t}),(0,a.jsx)("div",{className:l?"line-clamp-3 font-medium text-slate-100":"line-clamp-3 text-slate-300",style:s&&n?{color:s}:void 0,children:null!=n?n:"—"})]})}function R(e){let{series:t}=e,n=Math.max(1,...t.flatMap(e=>e.points.map(e=>e.asks))),l=Math.max(3,...t.flatMap(e=>e.points.map(e=>e.round))),s=e=>20+(e-1)/Math.max(1,l-1)*146,r=e=>84-e/n*72,o=Array.from({length:l},(e,t)=>t+1);return(0,a.jsx)("div",{"data-live-convergence":!0,children:0===t.length?(0,a.jsx)("div",{className:"py-8 text-center text-[11px] text-slate-500",children:"이 창에 리뷰 라운드가 없다."}):(0,a.jsxs)("svg",{viewBox:"0 0 ".concat(200," ").concat(100),className:"h-24 w-full",children:[(0,a.jsx)("line",{x1:20,y1:84,x2:166,y2:84,stroke:"#334155"}),(0,a.jsx)("line",{x1:20,y1:12,x2:20,y2:84,stroke:"#334155"}),o.map(e=>(0,a.jsxs)("g",{children:[(0,a.jsx)("line",{x1:s(e),y1:12,x2:s(e),y2:84,stroke:"#1e293b",strokeDasharray:"2 3"}),(0,a.jsxs)("text",{x:s(e),y:96,fill:"#64748b",fontSize:8,fontFamily:"monospace",textAnchor:"middle",children:["R",e]})]},e)),(0,a.jsx)("text",{x:17,y:r(n)+3,fill:"#64748b",fontSize:8,fontFamily:"monospace",textAnchor:"end",children:n}),(0,a.jsx)("text",{x:17,y:r(0)+3,fill:d.SHIP,fontSize:8,fontFamily:"monospace",textAnchor:"end",children:"0"}),t.slice(0,6).map((e,t)=>{let n=e.points.at(-1),l=0===n.asks?d.SHIP:["#818cf8","#fbbf24","#38bdf8","#f0abfc","#fb7185"][t%5];return(0,a.jsxs)("g",{children:[(0,a.jsx)("polyline",{fill:"none",stroke:l,strokeWidth:1.6,points:e.points.map(e=>"".concat(s(e.round),",").concat(r(e.asks))).join(" ")}),e.points.map(e=>(0,a.jsx)("circle",{cx:s(e.round),cy:r(e.asks),r:2.5,fill:l},e.round)),(0,a.jsxs)("text",{x:s(n.round)+4,y:r(n.asks)-3,fill:l,fontSize:8,fontFamily:"monospace",children:["#",e.pr," ",n.asks]})]},e.pr)})]})})}},27668:(e,t,n)=>{n.d(t,{Er:()=>l,cj:()=>c,yR:()=>i});let a=/^(oauth\.|harness\.decision|llm\.router)/;function l(e){let t=[],n=e=>{"string"==typeof e&&e.trim()&&!t.includes(e.trim())&&t.push(e.trim())};for(let t of e){var l;let e=null!=(l=t.data)?l:{};if(t.category.startsWith("oauth.")){for(let t of["from","to","name","account"])n(e[t]);if(Array.isArray(e.usage))for(let t of e.usage)n(null==t?void 0:t.name);continue}if(a.test(t.category))for(let t of(n(e.account),["what","why","reason"])){let a=e[t];if("string"==typeof a)for(let e of a.matchAll(/계정\s+([A-Za-z0-9][\w.-]*)/g))n(e[1])}}return t}function s(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function r(e){let t=new Map(e.map((e,t)=>[e,"account-".concat(t+1)])),n=e.length?RegExp("(^|[^\\w-])(".concat(e.map(s).sort((e,t)=>t.length-e.length).join("|"),")(?![\\w-])"),"g"):null,a=new Map;return(e,l)=>{let s=e.replace(/\b[a-z0-9-]+\.tail[0-9a-f]+\.ts\.net\b/gi,"tailnet-host").replace(/\bmsb\d+\b/gi,e=>(e=>{let t=e.toLowerCase();a.has(t)||a.set(t,"remote-".concat(a.size+1));let n=a.get(t);return e===e.toUpperCase()?n.toUpperCase():n})(e)).replace(/\bmbp\b/gi,e=>e===e.toUpperCase()?"LOCAL":"local").replace(/\/Users\/[^/\s"']+/g,"~").replace(/(크레딧|credits?|💳)(\s*[:=]?\s*)[\d][\d,.]*/gi,"$1$2•••").replace(/[\d][\d,.]*(\s*)(크레딧|credits?)/gi,"•••$1$2").replace(/\$\s?[\d][\d,.]*/g,"$•••").replace(/(잔량?|remaining|left)(\s*[:=]?\s*)(?:[A-Za-z0-9][\w.-]*\s+)?\d+(?:\.\d+)?\s?%/gi,"$1$2•••");return l&&n&&(s=s.replace(n,(e,n,a)=>{var l;return"".concat(n).concat(null!=(l=t.get(a))?l:"account")})),s}}function o(e,t){if("string"==typeof e)return t(e);if(Array.isArray(e))return e.map(e=>o(e,t));if(e&&"object"==typeof e){let n={};for(let[a,l]of Object.entries(e))"apiEquivalentUsd"===a||"usd"===a||/credit(s|Balance)?$/i.test(a)||(n[a]=o(l,t));return n}return e}function i(e){let t=r(l(e));return e.map(e=>{let n=a.test(e.category);return{...e,event:t(e.event,!1),data:e.data?o(e.data,e=>t(e,n)):e.data}})}function c(e,t){let n=r(t);return o(e,e=>n(e,!0))}},30165:(e,t,n)=>{n.d(t,{jg:()=>x,lV:()=>i,fQ:()=>c,Hc:()=>v,dl:()=>d,qo:()=>m,BP:()=>f});let a={budget:"예산",placement:"장소",relation:"관계",memory:"기억"},l=e=>null===e||"object"!=typeof e||Array.isArray(e)?null:e,s=new Set(["한도 도달","후보 없음","측정 불가: 시간 초과"]);function r(e){if("string"!=typeof e)return null;let t=e.trim();return s.has(t)?t.slice(0,80):null}function o(e){let t=r(e);return"확인 못 함".concat(t?" \xb7 ".concat(t):"")}let i=["author","decompose","build","gate","review","land"],c={author:"저작",decompose:"분해",build:"구현",gate:"게이트",review:"리뷰",land:"착지"};function d(e){let t=e.category,n=e.event,a="error"===e.level||/(fail|reject|block|abandon|conflict|error|unconvergeable|timeout)/i.test(n)?"bad":/(merged|pass|done|ok|opened|completed|approved)/i.test(n)?"ok":"info";return t.startsWith("goal-author")||t.startsWith("harness.frontdoor")||"dev-pipeline"===t&&/^(plan|selection|base-selection)$/.test(n)?{stage:"author",tone:a}:t.startsWith("self-dev")&&/decompos/i.test(n)||"self-dev.orchestrate"===t&&"start"===n?{stage:"decompose",tone:a}:t.startsWith("self-dev.spawn")||t.startsWith("harness.substrate")||"self-implement"===t||"dev-pipeline"===t&&"harness.launch"===n?{stage:"build",tone:a}:t.startsWith("self-gate")||t.startsWith("self-dev.reduce")&&/gate/i.test(n)?{stage:"gate",tone:a}:t.startsWith("review-loop")&&/(merged|auto-merge)/i.test(n)?{stage:"land",tone:"ok"}:t.startsWith("review-loop")?{stage:"review",tone:a}:t.startsWith("self-dev.reduce")&&/(pr-opened|merged)/i.test(n)||"dev-pipeline"===t&&"done"===n?{stage:"land",tone:a}:{stage:null,tone:a}}let u=e=>"string"==typeof e&&e.trim()?e:null,p=e=>"number"==typeof e&&Number.isFinite(e)?e:0;function h(e){var t,n,a,l,s;let r=null!=(t=e.data)?t:{},o=null!=(n=u(r.pr))?n:p(r.prNumber)?String(r.prNumber):null;return e.category.startsWith("review-loop")&&"judge-verdict"===e.event?"리뷰 판정: ".concat(null!=(a=u(r.verdict))?a:"?").concat(o?" \xb7 #".concat(o):"").concat(p(r.asks)?" \xb7 요구 ".concat(p(r.asks)):""):e.category.startsWith("review-loop")&&/merged/.test(e.event)?"자동 병합".concat(o?" #".concat(o):""):e.category.startsWith("review-loop")&&"rework-start"===e.event?"리뷰 반영 라운드 ".concat(p(r.round)||"?"," 시작").concat(o?" \xb7 #".concat(o):""):e.category.startsWith("llm.router")&&/fallback/i.test(e.event)?"모델 폴백: ".concat(null!=(l=u(r.from))?l:"?"," → ").concat(null!=(s=u(r.to))?s:"?"):e.category.startsWith("oauth")&&/rotat/i.test(e.event)?"계정 회전".concat(u(r.account)?": ".concat(u(r.account)):""):e.category.startsWith("harness.boundary")?"경계 밖 쓰기 거절".concat(u(r.path)?": ".concat(u(r.path)):""):e.category.startsWith("self-dev.reduce")&&/gate-failed/.test(e.event)?"게이트 실패 → 수리 라운드":"dev-pipeline"===e.category&&"rejected"===e.event?"발사 전 검사가 막았다".concat(u(r.reason)?": ".concat(u(r.reason)):""):null}function m(e,t){let n=new Date(e);return Number.isNaN(n.getTime())?e.slice(11,19):n.toLocaleTimeString("en-GB",{hour12:!1,...t?{timeZone:t}:{}})}function f(e,t){var n;let a=null!=(n=e.data)?n:{},l=["runId","pr","verdict","model","provider","round","reason"].map(e=>void 0!==a[e]&&null!==a[e]&&""!==a[e]?"".concat(e,"=").concat(String(a[e]).slice(0,40)):null).filter(Boolean).join(" ");return"".concat(m(e.ts,t)," ").concat(e.category," ").concat(e.event).concat(l?" \xb7 ".concat(l):"").replace(/\b(sk-[A-Za-z0-9_-]{8,}|ghp_[A-Za-z0-9]{8,}|gho_[A-Za-z0-9]{8,}|xox[abpr]-[A-Za-z0-9-]{8,}|AKIA[0-9A-Z]{12,})\b/g,"[redacted]").replace(/(Bearer\s+)[A-Za-z0-9._~+/=-]{8,}/gi,"$1[redacted]").replace(/("?(?:token|secret|password|apiKey|api_key|authorization)"?\s*[:=]\s*")[^"]{4,}"/gi,'$1[redacted]"')}let x=["PLAN","ROUTE","VERIFY","HEAL","ESCALATE","SHIP"];function g(e){let t=e.category,n=e.event;if("harness.decision"===t){var a;let t="string"==typeof(null==(a=e.data)?void 0:a.kind)?e.data.kind.toUpperCase():"";return x.includes(t)?t:null}return t.startsWith("review-loop")&&/merged/.test(n)||t.startsWith("self-dev.reduce")&&/(pr-opened|merged)/.test(n)?"SHIP":/(needs-human|hitl|escalat|parked)/i.test(n)||"dev-pipeline"===t&&"rejected"===n?"ESCALATE":t.startsWith("review-loop")&&/^rework-start$/.test(n)||/repair|rework-round/i.test(n)||t.startsWith("self-dev.supervisor")&&/(resume|retry)/i.test(n)?"HEAL":t.startsWith("review-loop")&&/verdict/.test(n)||t.startsWith("self-gate")||t.startsWith("self-dev.reduce")&&/gate/.test(n)?"VERIFY":t.startsWith("oauth.codex-account")&&/rotation$/.test(n)||t.startsWith("llm.router")&&/fallback/i.test(n)||t.startsWith("harness.role-llm")||t.startsWith("harness.substrate")&&/dispatch/.test(n)||t.startsWith("harness.boundary")?"ROUTE":t.startsWith("goal-author")&&/(done|assembled|phase-end)/.test(n)||t.startsWith("self-dev")&&/decompos/i.test(n)||"dev-pipeline"===t&&"plan"===n?"PLAN":null}function v(e,t,n){let s=function(e,t,n){var a,l,s,r,o,i,c,m,f,x;let g=n.now-6e4*n.windowMinutes,v=e.filter(e=>Date.parse(e.ts)>=g).sort((e,t)=>Date.parse(e.ts)-Date.parse(t.ts)),b=new Map,y=[],w=new Map,k=new Map,j=0,N=0;for(let e of v){let t=null!=(l=e.data)?l:{},n=u(t.runId);if(e.category.startsWith("llm.usage")){j+=1,N+=p(t.inputTokens)+p(t.outputTokens)+p(t.totalTokens&&!t.inputTokens?t.totalTokens:0);let e=null!=(r=null!=(s=u(t.model))?s:u(t.provider))?r:"unknown";w.set(e,(null!=(o=w.get(e))?o:0)+1)}if(e.category.startsWith("review-loop")&&"judge-verdict"===e.event){let e=null!=(i=u(t.verdict))?i:"unknown";k.set(e,(null!=(c=k.get(e))?c:0)+1)}let a=h(e),{stage:x,tone:g}=d(e);if(a&&y.push({ts:e.ts,runId:n,tone:/merged/.test(e.event)?"ok":g,text:a}),!n||!x)continue;let v=null!=(m=b.get(n))?m:{runId:n,stages:{},current:null,lastTs:e.ts,events:0,blocked:!1,pr:null,ledgerStatus:null};v.stages[x]=g,v.current=x,v.lastTs=e.ts,v.events+=1,v.blocked="bad"===g,v.pr=null!=(f=u(t.pr))?f:p(t.prNumber)?String(p(t.prNumber)):v.pr,b.set(n,v)}let M=new Map(t.map(e=>[e.runId,e]));for(let e of b.values())e.ledgerStatus=null!=(x=null==(a=M.get(e.runId))?void 0:a.status)?x:null;let S=[...b.values()].sort((e,t)=>Date.parse(t.lastTs)-Date.parse(e.lastTs)),I=S.filter(e=>"land"!==e.current&&n.now-Date.parse(e.lastTs)<9e5).length,E=e=>[...e.entries()].map(e=>{let[t,n]=e;return{name:t,count:n}}).sort((e,t)=>t.count-e.count);return{runs:S,cards:y.slice(-40).reverse(),counters:{activeRuns:I,llmRequests:j,llmRequestsPerMin:n.windowMinutes>0?Math.round(j/n.windowMinutes*10)/10:0,tokens:N,landed:S.filter(e=>"ok"===e.stages.land).length,blocked:S.filter(e=>e.blocked).length},providers:E(w),reviewVerdicts:E(k),windowMinutes:n.windowMinutes}}(e,t,n),i=n.now-6e4*n.windowMinutes,c=e.filter(e=>Date.parse(e.ts)>=i).sort((e,t)=>Date.parse(e.ts)-Date.parse(t.ts)),m=[],f={},x=new Set,v=new Map,b=new Map,y=new Map,w=0,k=new Set(c.filter(e=>"harness.decision"===e.category).map(e=>g(e)).filter(Boolean));for(let e of c){var j,N,M,S,I,E,A,T,C,R,L,P,O,F,H;let t=null!=(j=e.data)?j:{},n=u(t.runId);if(e.category.startsWith("review-loop")&&p(t.round)&&n&&(f[n]=Math.max(null!=(N=f[n])?N:0,p(t.round))),e.category.startsWith("review-loop")&&"judge-verdict"===e.event&&u(t.pr)&&p(t.round)){let e=null!=(M=y.get(u(t.pr)))?M:new Map;e.set(p(t.round),p(t.asks)),y.set(u(t.pr),e)}if(e.category.startsWith("llm.usage")){let e=p(t.inputTokens)+p(t.outputTokens);w+=e;let n=null!=(S=u(t.model))?S:"unknown",a=null!=(I=b.get(n))?I:{requests:0,tokens:0,billing:u(t.billing)};a.requests+=1,a.tokens+=e,b.set(n,a)}let s=g(e);if(!s||"harness.decision"!==e.category&&k.has(s))continue;let i="harness.decision"===e.category&&"string"==typeof t.what?function(e,t){var n,s;let i,c=/^execution-loop (budget|placement|relation|memory) gate$/.exec(e);if(!c)return null;let d=c[1],u="관문 \xb7 ".concat(a[d]),p=null;try{p=l(JSON.parse(null!=t?t:""))}catch(e){p=null!=(n=function(e,t){if(!t||t.startsWith("{"))return null;if(t.startsWith("unavailable"))return{decision:"unavailable"};let n=new Map;for(let e of t.split(" \xb7 ")){let t=e.indexOf("=");t>0&&!n.has(e.slice(0,t))&&n.set(e.slice(0,t),e.slice(t+1))}if(!n.size)return null;switch(e){case"budget":if(!n.has("action"))return null;return{decision:{action:n.get("action"),...n.get("provider")?{provider:n.get("provider")}:{},reasons:n.get("reason")?[n.get("reason")]:[]}};case"placement":{if(!n.has("substrate"))return null;let e=n.get("pool");return{decision:{substrate:n.get("substrate"),pool:e&&"none"!==e?e:null,...n.get("memory")?{memory:{limit:n.get("memory")}}:{}}}}case"relation":{let e=Number(n.get("overlap"));if(!Number.isInteger(e)||e<0)return null;return{decision:{action:"record",overlappingCards:Array.from({length:e},(e,t)=>"card-".concat(t+1))}}}case"memory":{let e=n.get("context");if("recalled"!==e&&"none"!==e)return null;return{decision:{action:"record",context:"recalled"===e?"recalled":null}}}}}(d,null!=t?t:""))?n:function(e){if(!e.startsWith('{"decision":{'))return null;let t={},n=t=>{var n;return null==(n=new RegExp('"'.concat(t,'":"([^"\\\\]*)"')).exec(e))?void 0:n[1]},a=n("action");a&&(t.action=a);let l=n("provider");l&&(t.provider=l);let s=n("substrate");s&&(t.substrate=s);let r=/"pool":(null|"([^"\\]*)")/.exec(e);r&&(t.pool="null"===r[1]?null:r[2]);let o=/"memory":\{[^}]*"limit":"([^"\\]*)"/.exec(e);o&&(t.memory={limit:o[1]});let i=/"overlappingCards":\[([^\]]*)\]/.exec(e);i&&(t.overlappingCards=i[1].trim()?i[1].split(",").map(e=>e.trim().replace(/^"|"$/g,"")):[]);let c=/"context":(null|")/.exec(e);if(c&&(t.context="null"===c[1]?null:"recalled"),/"reasons":\[/.test(e)){let n=/"reasons":\[((?:"[^"\\]*",?)*)\]/.exec(e);t.reasons=n?[...n[1].matchAll(/"([^"\\]*)"/g)].map(e=>e[1]):[]}return Object.keys(t).length?{decision:t}:null}(null!=t?t:"")}let h=l(null==p?void 0:p.decision),m=null==p?void 0:p.explanation;if(!h)return{what:u,why:o(m)};switch(d){case"budget":{let e,t=h.action,n="string"==typeof(e=h.provider)&&/^(openai-codex|grok|anthropic|openai|google|local|openrouter)$/.test(e)?e:null,a="proceed"===t?"그대로 진행":"next-provider"===t?"다른 제공자로".concat(n?"(".concat(n,")"):""):"wait-reset"===t?"한도 회복까지 대기":"stop"===t?"멈춤":null;if(!a||!Array.isArray(h.reasons))return{what:u,why:o(m)};let l=r(h.reasons[0]);i="".concat(a).concat(l?" \xb7 ".concat(l):"");break}case"placement":{let e,t,n=h.substrate;if("pod"!==n&&"local"!==n&&"unknown"!==n)return{what:u,why:o(m)};let a="string"==typeof(e=h.pool)&&/^(?:fast-\d{1,2}|pool-msb\d{1,2}(?:@msb\d{1,2}:\d{1,2})?)$/.test(e)?e:null,r="string"==typeof(t=null==(s=l(h.memory))?void 0:s.limit)&&/^\d+(?:\.\d+)?\s*(?:[KMGT]i?B?|bytes?)$/i.test(t)?t.replace(/\s+/g," "):null;i="".concat("pod"===n?"Pod".concat(a?" ".concat(a):""):"local"===n?"이 기기":"모름").concat(r?" \xb7 메모리 한도 ".concat(r):"");break}case"relation":if("record"!==h.action||!Array.isArray(h.overlappingCards)||!h.overlappingCards.every(e=>"string"==typeof e))return{what:u,why:o(m)};i=h.overlappingCards.length?"겹치는 카드 ".concat(h.overlappingCards.length,"개"):"겹치는 일 없음";break;case"memory":if("record"!==h.action||"string"!=typeof h.context&&null!==h.context)return{what:u,why:o(m)};i=h.context?"지난 기록 있음":"지난 기록 없음"}return{what:u,why:i}}(t.what,null!=(E=u(t.reason))?E:void 0):null,c=null!=(T=null!=(A=null==i?void 0:i.why)?A:u(t.reason))?T:u(t.why),d=i?null:u(t.purpose),W=i?null:null!=(O=null!=(R=null!=(C=u(t.target))?C:u(t.to))?R:u(t.account))?O:"SHIP"===s&&(null!=(L=u(t.pr))?L:p(t.prNumber)?String(p(t.prNumber)):null)?"#".concat(null!=(P=u(t.pr))?P:p(t.prNumber)):null,q=i?null:n;"HEAL"===s&&n&&x.add(n);let D=p(t.paths)||void 0;m.push({ts:e.ts,kind:s,runId:q,what:null!=(F=null==i?void 0:i.what)?F:function(e,t){var n,a;return"harness.decision"===e.category&&"string"==typeof(null==(n=e.data)?void 0:n.what)?e.data.what:null!=(a=h(e))?a:"".concat(e.category," ").concat(e.event).slice(0,80)}(e,0),why:c,purpose:d,target:W,...D?{paths:D}:{}});let U=[c?null:"why",d?null:"purpose",W?null:"target"].filter(Boolean);if(U.length){let t=i?"harness.decision decision":"".concat(e.category," ").concat(e.event),n=null!=(H=v.get(t))?H:{count:0,lacks:new Set};n.count+=1,U.forEach(e=>n.lacks.add(e)),v.set(t,n)}}let W=[...x],q=W.filter(e=>{var t;return(null==(t=s.runs.find(t=>t.runId===e))?void 0:t.stages.land)==="ok"}).length;return{snapshot:s,gauges:{live:s.counters.activeRuns,decisions:m.length,decisionsPerMin:n.windowMinutes>0?Math.round(m.length/n.windowMinutes*10)/10:0,shipped:m.filter(e=>"SHIP"===e.kind).length,selfHealRate:W.length?Math.round(q/W.length*100):null,selfHealRuns:W.length,burnTokensPerMin:n.windowMinutes>0?Math.round(w/n.windowMinutes):0},stream:m.slice(-80).reverse(),emitted:c.filter(e=>"harness.decision"===e.category).length,rounds:f,convergence:[...y.entries()].map(e=>{let[t,n]=e;return{pr:t,points:[...n.entries()].sort((e,t)=>e[0]-t[0]).map(e=>{let[t,n]=e;return{round:t,asks:n}})}}),scorecard:[...b.entries()].map(e=>{let[t,n]=e;return{model:t,...n}}).sort((e,t)=>t.requests-e.requests),missing:[...v.entries()].map(e=>{let[t,n]=e;return{key:t,count:n.count,lacks:[...n.lacks]}}).sort((e,t)=>t.count-e.count)}}},37442:(e,t,n)=>{n.d(t,{RT:()=>h});var a=n(35563),l=n(19707),s=n(75423),r=n.n(s),o=n(71718),i=n(61622),c=n(30165),d=n(53403);let u={"no-screen-key":"이 인스턴스 로그에 이 런의 화면 키가 없다 — 다른 우주(시험\xb7Pod)에서 돈 런이면 그 우주에서 본다.","screen-missing":"화면 키는 있는데 화면 파일이 없다 — 런이 끝나 화면이 정리됐을 수 있다.","log-store-missing":"이 인스턴스에 로그 저장소가 없다.","log-store-unreadable":"로그 저장소를 읽지 못했다."};function p(e){var t,n;let{runId:l,run:s,screen:o,screenError:i,lines:d,stopState:p,stopMessage:h,onStop:m,onConfirmStop:f,onCancelStop:x,onClose:g,max:v}=e,b=!!(null==o?void 0:o.stoppable);return(0,a.jsxs)("section",{className:"space-y-2 rounded-lg border border-primary/40 bg-card/60 p-3","aria-label":"런 서랍","data-live-run-drawer":l,children:[(0,a.jsxs)("header",{className:"flex flex-wrap items-center gap-2 text-sm",children:[(0,a.jsx)("span",{className:"font-mono text-xs text-muted-foreground",children:l}),(null==s?void 0:s.current)&&(0,a.jsx)("span",{className:"rounded bg-primary/15 px-1.5 py-0.5 text-[11px]",children:c.fQ[s.current]}),(null==s?void 0:s.blocked)&&(0,a.jsx)("span",{className:"rounded bg-error/15 px-1.5 py-0.5 text-[11px] text-error",children:"막힘"}),(null==s?void 0:s.pr)&&(0,a.jsxs)("span",{className:"font-mono text-[11px]",children:["PR #",s.pr]}),(0,a.jsxs)("span",{className:"ml-auto flex items-center gap-2",children:[v&&("confirm"===v.state?(0,a.jsxs)("span",{className:"flex items-center gap-1 text-xs",role:"alertdialog","aria-label":"MAX 이 런만 확인",children:[(0,a.jsx)("span",{className:"text-amber-500",children:"이 런만 30분 상세 계측(부하가 든다)?"}),(0,a.jsx)("button",{type:"button",onClick:v.confirm,className:"rounded-md border border-amber-500 px-2 py-1 text-amber-600 hover:bg-amber-500/10","data-elanous-action":"live-run-max-confirm",children:"켜기"}),(0,a.jsx)("button",{type:"button",onClick:v.cancel,className:"rounded-md px-2 py-1 text-muted-foreground hover:bg-muted",children:"취소"})]}):(0,a.jsx)("button",{type:"button",onClick:v.ask,disabled:"on"===v.state,className:"rounded-md border px-2 py-1 text-xs hover:bg-muted disabled:opacity-50","data-elanous-action":"live-run-max",title:"이 런의 판단 \xab왜\xb7목적\xb7어디로\xbb를 30분 자세히 남긴다",children:"on"===v.state?"● MAX 이 런 켜짐":"failed"===v.state?"MAX 못 켬 \xb7 다시":"MAX 이 런만"})),(0,a.jsx)(r(),{href:"/trace?level=L2&run=".concat(encodeURIComponent(l)),className:"rounded-md border px-2 py-1 text-xs hover:bg-muted","data-elanous-action":"live-run-trace",children:"Trace 로 →"}),!!(null==s?void 0:s.pr)&&"ok"!==s.stages.land&&(0,a.jsx)(r(),{href:"/approvals?pr=".concat(encodeURIComponent(s.pr)),className:"rounded-md border px-2 py-1 text-xs hover:bg-muted","data-elanous-action":"live-run-approvals",children:"승인 카드로 →"}),"confirm"===p?(0,a.jsxs)("span",{className:"flex items-center gap-1 text-xs",role:"alertdialog","aria-label":"멈춤 확인",children:[(0,a.jsx)("span",{className:"text-error",children:"이 런을 멈출까요? 되돌릴 수 없습니다."}),(0,a.jsx)("button",{type:"button",onClick:f,className:"rounded-md border border-error px-2 py-1 text-error hover:bg-error/10","data-elanous-action":"live-run-stop-confirm",children:"멈춤"}),(0,a.jsx)("button",{type:"button",onClick:x,className:"rounded-md px-2 py-1 text-muted-foreground hover:bg-muted",children:"취소"})]}):(0,a.jsx)("button",{type:"button",onClick:m,disabled:!b||"stopping"===p||"stopped"===p,title:b?"부드러운 멈춤을 보낸다(확인 한 번)":"살아 있는 화면이 없어 멈출 수 없다",className:"rounded-md border px-2 py-1 text-xs hover:bg-muted disabled:opacity-40","data-elanous-action":"live-run-stop",children:"⏹ 멈춤"}),(0,a.jsx)("button",{type:"button",onClick:g,className:"rounded-md px-2 py-1 text-xs text-muted-foreground hover:bg-muted","aria-label":"서랍 닫기",children:"✕"})]})]}),h&&(0,a.jsx)("p",{className:"text-xs ".concat("failed"===p?"text-error":"text-muted-foreground"),"data-live-run-stop-result":!0,children:h}),(0,a.jsxs)("div",{className:"grid gap-2 lg:grid-cols-2",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("h3",{className:"mb-1 text-xs font-medium text-muted-foreground",children:["화면",(null==o?void 0:o.screenKey)?(0,a.jsxs)("span",{className:"ml-1 font-mono",children:["\xb7 ",o.screenKey]}):null]}),(0,a.jsx)("pre",{className:"max-h-64 overflow-auto rounded-md border bg-muted/30 p-2 text-[11px] leading-relaxed","data-live-run-screen":!0,children:i?"화면을 못 읽었다: ".concat(i):null!=(n=null==o?void 0:o.text)?n:(null==o?void 0:o.reason)?null!=(t=u[o.reason])?t:o.reason:"불러오는 중…"})]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("h3",{className:"mb-1 text-xs font-medium text-muted-foreground",children:["로그 ",(0,a.jsxs)("span",{className:"font-mono",children:["\xb7 ",d.length]})]}),(0,a.jsx)("pre",{className:"max-h-64 overflow-auto rounded-md border bg-muted/30 p-2 text-[11px] leading-relaxed","data-live-run-log":!0,children:d.slice(0,40).join("\n")||"—"})]})]})]})}function h(e){var t;let{runId:n,run:s,lines:r,onClose:c}=e,u=(0,i.M1)(),h=(0,o.I)({queryKey:["live","run-screen",n],queryFn:()=>u.getRunScreen(n,60),refetchInterval:3e3}),[m,f]=(0,l.useState)("idle"),[x,g]=(0,l.useState)(null),[v,b]=(0,l.useState)("idle");return(0,a.jsx)(p,{runId:n,run:s,screen:null!=(t=h.data)?t:null,screenError:h.error?h.error instanceof Error?h.error.message:String(h.error):null,lines:r,stopState:m,stopMessage:x,onStop:()=>f("confirm"),onConfirmStop:()=>{var e;let t=null==(e=h.data)?void 0:e.screenKey;t&&(f("stopping"),u.stopHarness(t).then(e=>{var t;let a=!!e.stopped;(0,d.cY)("pwa.live.run-stop",{runId:n,ok:a}),f(a?"stopped":"failed"),g(a?"멈춤을 보냈다 — 런이 다음 확인 지점에서 멈춘다(".concat(e.stopped,")."):"멈추지 못했다: ".concat(null!=(t=e.error)?t:"알 수 없음"))}).catch(e=>{(0,d.cY)("pwa.live.run-stop",{runId:n,ok:!1}),f("failed"),g("멈추지 못했다: ".concat(e instanceof Error?e.message:String(e)))}))},onCancelStop:()=>f("idle"),onClose:c,max:{state:v,ask:()=>b("confirm"),confirm:()=>{u.setLiveDetail({scope:n,ttlMin:30,by:"pwa-run-drawer"}).then(e=>{b(e.on?"on":"failed"),(0,d.cY)("pwa.live.run-max",{runId:n,on:e.on})}).catch(()=>b("failed"))},cancel:()=>b("idle")}})}},45505:(e,t,n)=>{n.d(t,{cn:()=>s});var a=n(36757),l=n(78049);function s(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,l.QP)((0,a.$)(t))}},53403:(e,t,n)=>{let a;n.d(t,{cY:()=>d,x8:()=>o});let l={debug:0,info:1,warn:2,error:3},s="/v1/debug-logs/batch",r=null;function o(e){r=e}class i{health(){return{pending:this.queue.length,consecutiveFailures:this.consecutiveFailures,lastOkAt:this.lastOkAt,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches}}push(e){if(!(l[function(e){let t=e.slice(e.lastIndexOf(".")+1).toLowerCase();return/^(error|exception|crash|fail|failed)$/.test(t)?"error":/^(warn|degraded|timeout)$/.test(t)?"warn":/^(boot|ready|start|begin|open|ok|done|resolve|end|stop|close)$/.test(t)?"info":"debug"}(e.category)]<l[this.minLevel])){if(this.queue.push(e),this.queue.length>500){let e=this.queue.length-500;this.droppedByCap+=e,this.queue.splice(0,e)}null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},100))}}async flush(){if(this.timer&&(clearTimeout(this.timer),this.timer=null),this.inFlight||0===this.queue.length)return;let e=this.queue.slice(0,100);this.inFlight=!0;let t=!1,n=JSON.stringify({records:e});try{var a,l;t=await (a=this.fetchFn(n),l=this.postTimeoutMs,new Promise((e,t)=>{let n=setTimeout(()=>t(Error("debug-forward timeout after ".concat(l,"ms"))),l);a.then(t=>{clearTimeout(n),e(t)},e=>{clearTimeout(n),t(e)})}))}catch(e){t=!1}finally{this.inFlight=!1}if(!t){if(this.consecutiveFailures+=1,this.consecutiveFailures>=2&&r)try{await r(JSON.stringify({records:[...e,this.blockedNotice()]}))&&(this.fallbackBatches+=1)}catch(e){}this.wasFailing=!0,this.scheduleRetry();return}let s=this.lastOkAt;this.lastOkAt=Date.now();let o=this.consecutiveFailures;this.consecutiveFailures=0,this.queue.splice(0,e.length),this.wasFailing&&(this.wasFailing=!1,this.queue.push({ts:new Date().toISOString(),category:"pwa.debug-forwarder.recovered",event:"recovered",data:{consecutiveFailures:o,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches,pending:this.queue.length,previousOkAt:s},source:{platform:"pwa"}})),this.queue.length>0&&null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},100))}scheduleRetry(){if(null!==this.timer||0===this.queue.length)return;let e=Math.min(100*2**this.consecutiveFailures,3e4);this.timer=setTimeout(()=>{this.flush()},e)}blockedNotice(){return{ts:new Date().toISOString(),category:"pwa.debug-forwarder.http-blocked",event:"http-blocked",data:{consecutiveFailures:this.consecutiveFailures,pending:this.queue.length,droppedByCap:this.droppedByCap,lastOkAt:this.lastOkAt,via:"acp-fallback"},source:{platform:"pwa"}}}beaconFlush(){if(0!==this.queue.length)try{if("undefined"!=typeof navigator&&"function"==typeof navigator.sendBeacon){let e=this.queue.slice(0,100),t=new Blob([JSON.stringify({records:e})],{type:"application/json"});navigator.sendBeacon(s,t)&&this.queue.splice(0,e.length)}}catch(e){}}get pending(){return this.queue.length}constructor(e=c,t="debug",n=1e4){this.fetchFn=e,this.minLevel=t,this.postTimeoutMs=n,this.queue=[],this.timer=null,this.inFlight=!1,this.consecutiveFailures=0,this.lastOkAt=null,this.droppedByCap=0,this.fallbackBatches=0,this.wasFailing=!1}}async function c(e){return(await fetch(s,{method:"POST",headers:{"content-type":"application/json"},body:e,keepalive:!0,..."undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout?{signal:AbortSignal.timeout(1e4)}:{}})).ok}function d(e,t){if("undefined"==typeof console)return;let n=new Date().toISOString();if(void 0!==t){let a="";try{let e=new WeakSet;a=JSON.stringify(t,(t,n)=>{if("bigint"==typeof n)return"".concat(n.toString(),"n");if("function"==typeof n)return"[fn ".concat(n.name||"anon","]");if(n&&"object"==typeof n){if(e.has(n))return"[circular]";e.add(n)}return n})}catch(e){a="[unserializable: ".concat(String(e),"]")}a&&a.length>800&&(a=a.slice(0,797)+"..."),console.debug("[".concat(n,"] ").concat(e," ").concat(a),t),u(n,e,a)}else console.debug("[".concat(n,"] ").concat(e)),u(n,e,void 0)}function u(e,t,n){let l,s=function(){if(void 0!==a)return a;let e=function(){try{let e="off"!==window.localStorage.getItem("elanous.pwa.debug.forward"),t=window.localStorage.getItem("elanous.pwa.debug.forwardLevel");return{forward:e,level:"info"===t||"warn"===t||"error"===t?t:"debug"}}catch(e){return{forward:!0,level:"debug"}}}();if(!e.forward)return a=null,null;let t=new i(c,e.level);try{window.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&t.beaconFlush()})}catch(e){}return a=t,t}();if(!s)return;let r=t.slice(t.lastIndexOf(".")+1)||t;if(void 0!==n&&""!==n)try{l=JSON.parse(n)}catch(e){l=n}s.push({ts:e,category:t,event:r,...void 0!==l?{data:l}:{},source:{platform:"pwa"}})}},56456:(e,t,n)=>{n.d(t,{D3:()=>x,GJ:()=>g,Gp:()=>r,HR:()=>p,IE:()=>f,JW:()=>u,Jo:()=>v,NZ:()=>m,OL:()=>o,cD:()=>h,f:()=>c,fT:()=>b,kJ:()=>i,lb:()=>d});var a=n(30165);let l=e=>"string"==typeof e&&e.trim()?e:null,s=e=>"number"==typeof e&&Number.isFinite(e)?e:0;function r(e){let t=[];for(let i of e){var n,a,r,o;if(!i.category.startsWith("llm.usage"))continue;let e=null!=(n=i.data)?n:{},c=Date.parse(i.ts);if(!Number.isFinite(c))continue;let d=null!=(a=e.cost)?a:{};t.push({ts:i.ts,t:c,model:null!=(r=l(e.model))?r:"unknown",site:null!=(o=l(e.site))?o:"unknown",billing:l(e.billing),provider:l(e.billingProvider),input:s(e.inputTokens),output:s(e.outputTokens),cache:s(e.cacheReadInputTokens),apiUsd:s(d.apiEquivalentUsd)})}return t.sort((e,t)=>t.t-e.t)}function o(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:30,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:6e4,l=Math.floor(t/a)*a-(n-1)*a,s=Array.from({length:n},(e,t)=>({t:l+t*a,count:0,tokens:0,byModel:{}}));for(let t of e){var r;let e=Math.floor((t.t-l)/a);if(e<0||e>=n)continue;let o=s[e];o.count+=1,o.tokens+=t.input+t.output,o.byModel[t.model]=(null!=(r=o.byModel[t.model])?r:0)+1}return s}function i(e,t,n){let a=t-n/2,l=new Map;for(let r of e){var s;if(r.t<t-n)continue;let e=null!=(s=l.get(r.model))?s:{count:0,tokens:0,late:0,early:0};e.count+=1,e.tokens+=r.input+r.output,r.t>=a?e.late+=1:e.early+=1,l.set(r.model,e)}return[...l.entries()].map(e=>{let[t,n]=e;return{model:t,count:n.count,tokens:n.tokens,delta:n.late>n.early?1:n.late<n.early?-1:0}}).sort((e,t)=>t.count-e.count)}function c(e){var t,n,a;let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:7,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:4,r=new Map,o=new Map;for(let a of e)r.set(a.model,(null!=(t=r.get(a.model))?t:0)+1),o.set(a.site,(null!=(n=o.get(a.site))?n:0)+1);let i=[...r.entries()].sort((e,t)=>t[1]-e[1]).slice(0,l).map(e=>{let[t]=e;return t}),c=[...o.entries()].sort((e,t)=>t[1]-e[1]).slice(0,s).map(e=>{let[t]=e;return t}),d={},u=0;for(let t of e){if(!i.includes(t.model)||!c.includes(t.site))continue;let e="".concat(t.model,"|").concat(t.site);d[e]=(null!=(a=d[e])?a:0)+1,u=Math.max(u,d[e])}return{models:i,sites:c,cells:d,max:u}}function d(e){let t=new Map;for(let a of e){var n;let e=l(null==(n=a.data)?void 0:n.runId),s=Date.parse(a.ts);if(!e||!Number.isFinite(s))continue;let r=t.get(e);r?(r.lo=Math.min(r.lo,s),r.hi=Math.max(r.hi,s)):t.set(e,{lo:s,hi:s})}return[...t.entries()].map(e=>{let[t,n]=e;return{runId:t,ms:n.hi-n.lo}})}function u(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:40,n=Array(t).fill(0);if(0===e.length)return{bins:n,lo:0,hi:0,max:0};let a=Math.min(...e),l=Math.max(...e),s=(l-a)/t||1;for(let l of e)n[Math.min(t-1,Math.floor((l-a)/s))]+=1;return{bins:n,lo:a,hi:l,max:Math.max(...n)}}function p(e){let t=Object.fromEntries(a.lV.map(e=>[e,0]));for(let n of e.snapshot.runs)n.current&&(t[n.current]+=1);let n=null;for(let e of a.lV)t[e]>0&&(!n||t[e]>t[n])&&(n=e);return{counts:t,busiest:n}}function h(e){let t=0,n=0;for(let l of e){let e=(0,a.dl)(l);"gate"===e.stage&&("ok"===e.tone?t+=1:"bad"===e.tone&&(n+=1))}return{pass:t,fail:n}}function m(e){let t=new Set,n=new Set;for(let o of e){var a,r;if(!o.category.startsWith("review-loop"))continue;let e=null!=(a=o.data)?a:{},i=null!=(r=l(e.pr))?r:s(e.prNumber)?String(s(e.prNumber)):null;i&&(("rework-start"===o.event||"judge-verdict"===o.event&&s(e.asks)>0)&&t.add(i),/merged/.test(o.event)&&n.add(i))}return[...t].filter(e=>n.has(e))}function f(e){let t=new Map;for(let a of e){var n;let e=l(null==(n=a.data)?void 0:n.runId);e&&a.instance&&!t.has(e)&&t.set(e,a.instance)}return[...t.entries()].map(e=>{let[t,n]=e;return{runId:t,instance:n}})}function x(e){let t=new Map;for(let i of e){var n,a,r,o;let e=l(null==(n=i.data)?void 0:n.runId);if(!e)continue;let c=Date.parse(i.ts),d=null;if("decompose-and-retry.applied"===i.event&&Array.isArray(null==(a=i.data)?void 0:a.pieceFeatures))d=i.data.pieceFeatures.map(e=>"string"==typeof e?e:"").filter(Boolean);else if("goal-steps-decomposed"===i.event&&s(null==(r=i.data)?void 0:r.stepCount)>1){let e=Math.min(12,s(null==(o=i.data)?void 0:o.stepCount));d=Array.from({length:e},(t,n)=>"단계 ".concat(n+1,"/").concat(e))}if(!d||0===d.length)continue;let u=t.get(e);(!u||c>=u.t)&&t.set(e,{t:c,pieces:d.slice(0,12)})}return[...t.entries()].map(e=>{let[t,n]=e;return{runId:t,pieces:n.pieces}})}function g(e){let t=[];for(let a of e){var n;if("harness.substrate"!==a.category||"dispatch-pod"!==a.event)continue;let e=l(null==(n=a.data)?void 0:n.podPool);e&&t.push({pool:e,ts:a.ts})}return t}function v(e){let t=new Map,n=new Map;for(let u of e){var r,o,i,c,d;let e=l(null==(r=u.data)?void 0:r.runId);if(!e)continue;u.category.startsWith("review-loop")&&"rework-start"===u.event&&t.set(e,Math.max(null!=(i=t.get(e))?i:0,s(null==(o=u.data)?void 0:o.round)||(null!=(c=t.get(e))?c:0)+1));let p=(0,a.dl)(u);"gate"===p.stage&&"bad"===p.tone&&n.set(e,(null!=(d=n.get(e))?d:0)+1)}return[...[...t.entries()].map(e=>{let[t,n]=e;return{runId:t,stage:"review",retries:n}}),...[...n.entries()].map(e=>{let[t,n]=e;return{runId:t,stage:"gate",retries:n}})]}function b(e){let t=new Map;for(let s of e){var n;let e=l(null==(n=s.data)?void 0:n.runId);if(!e)continue;let{stage:r,tone:o}=(0,a.dl)(s),i="".concat(e,"|").concat(s.category,".").concat(s.event),c=t.get(i);if(c){c.count+=1,c.bad||(c.bad="bad"===o);continue}t.set(i,{runId:e,key:i,label:s.event,stage:r,count:1,bad:"bad"===o})}return[...t.values()]}},61622:(e,t,n)=>{n.d(t,{M1:()=>c,Qj:()=>d,tI:()=>i});var a=n(35563),l=n(19707),s=n(55893),r=n(39120);let o=(0,l.createContext)(null);function i(e){let{client:t,queryClient:n,defaultStaleTimeMs:i,children:c}=e,d=(0,l.useMemo)(()=>null!=n?n:new s.E({defaultOptions:{queries:{staleTime:null!=i?i:2e3,refetchOnWindowFocus:!1}}}),[n,i]);return(0,a.jsx)(o.Provider,{value:t,children:(0,a.jsx)(r.Ht,{client:d,children:c})})}function c(){let e=(0,l.useContext)(o);if(!e)throw Error("useNexusClient must be used within <NexusProvider>");return e}function d(){return(0,l.useContext)(o)}},70329:(e,t,n)=>{n.d(t,{HI:()=>r});var a=n(19707),l=n(71718),s=n(61622);function r(e){var t,n,r;let o=(0,s.M1)(),i=(t,n)=>{var a;return{queryKey:["live","logs",t,null!=(a=e.store)?a:"",e.windowMinutes],queryFn:()=>o.getLogs({category:t,since:"".concat(e.windowMinutes,"m"),limit:n,store:e.store}),refetchInterval:5e3}},c=(0,l.I)(i("goal-author,harness.frontdoor,harness.substrate,harness.boundary,harness.role-llm,dev-pipeline,self-dev,self-gate,review-loop",1500)),d=(0,l.I)(i("llm.usage",2e3)),u=(0,l.I)(i("harness.decision,oauth.codex-account,harness.boundary",300)),p=(0,l.I)(i("research",300)),h=(0,a.useMemo)(()=>{var e,t,n,a,l,s,r,o;return[...null!=(l=null==(e=c.data)?void 0:e.logs)?l:[],...null!=(s=null==(t=d.data)?void 0:t.logs)?s:[],...null!=(r=null==(n=u.data)?void 0:n.logs)?r:[],...null!=(o=null==(a=p.data)?void 0:a.logs)?o:[]]},[c.data,d.data,u.data,p.data]),m={data:(0,a.useMemo)(()=>({ok:!0,logs:h,count:h.length}),[h]),error:null!=(r=null!=(n=null!=(t=c.error)?t:d.error)?n:u.error)?r:null,dataUpdatedAt:Math.max(c.dataUpdatedAt,d.dataUpdatedAt,u.dataUpdatedAt,p.dataUpdatedAt),truncated:[c,d,u].some(e=>e.data&&e.data.count>=(e===d?2e3:e===c?1500:300)),...function(e){let t=new Set,n=new Set,a=null;for(let r of e){var l,s;for(let e of null!=(l=null==r?void 0:r.stores)?l:[])t.add(e);for(let e of null!=(s=null==r?void 0:r.failedStores)?s:[])n.add(e.name);"number"==typeof(null==r?void 0:r.registeredStores)&&(a=Math.max(null!=a?a:0,r.registeredStores))}return{stores:[...t],failedStores:[...n],registeredStores:a}}([c.data,d.data,u.data,p.data])};return{logs:m,runs:(0,l.I)({queryKey:["live","runs"],queryFn:()=>o.getHarnessRuns(),refetchInterval:6e4}),instances:(0,l.I)({queryKey:["live","instances"],queryFn:()=>o.getLogInstances(),staleTime:6e4})}}}}]);