elanous 0.2.12 → 0.2.13

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 (289) hide show
  1. package/apps/pwa/out/404/index.html +1 -1
  2. package/apps/pwa/out/404.html +1 -1
  3. package/apps/pwa/out/_next/static/chunks/{1394-ee3795b112907122.js → 1394-931c9827067b2276.js} +1 -1
  4. package/apps/pwa/out/_next/static/chunks/{3992-2e522a8ac5f2afde.js → 3992-fe5c06d6b31f8b25.js} +1 -1
  5. package/apps/pwa/out/_next/static/chunks/5250-c78ca295585bbf95.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/6511-ff8360be3d65aaa4.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/6588-ba380869b67c4fa7.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/{7758-0b018a9e4fc56200.js → 7758-85c2b53f731da024.js} +1 -1
  9. package/apps/pwa/out/_next/static/chunks/{8605-0259994816604c49.js → 8605-9da4678f8a310d18.js} +1 -1
  10. package/apps/pwa/out/_next/static/chunks/9906-e7b8b5310a169dfe.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/app/approvals/{page-cb169620945d1952.js → page-e5b4e1b256f41076.js} +1 -1
  12. package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-cefe8169e36cf62a.js → page-e49b9b76c565a0b1.js} +1 -1
  13. package/apps/pwa/out/_next/static/chunks/app/board/page-b4f032c893b21cc9.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/app/botlab/page-f14987d5850a31e0.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/app/bots/page-b433308aad13ceb6.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/app/chat/{page-813c4a52c9d05ca8.js → page-4c1dbb21861beab2.js} +1 -1
  17. package/apps/pwa/out/_next/static/chunks/app/consult/{page-4731f2c215358937.js → page-c85b816e3b269dbb.js} +1 -1
  18. package/apps/pwa/out/_next/static/chunks/app/control/{page-a022b257950f39e6.js → page-f6bc66b919b2ea7d.js} +1 -1
  19. package/apps/pwa/out/_next/static/chunks/app/design-check/{page-a2ffc717e04b8b0a.js → page-60603c1e056c9b25.js} +1 -1
  20. package/apps/pwa/out/_next/static/chunks/app/editor/{page-b59ee4e70fc18fcf.js → page-a0ea8f5a2341ee6b.js} +1 -1
  21. package/apps/pwa/out/_next/static/chunks/app/exec/page-45c5bf04b4a605e6.js +1 -0
  22. package/apps/pwa/out/_next/static/chunks/app/field/{page-c172dabd796eb7a3.js → page-36c6c4183353ac9e.js} +1 -1
  23. package/apps/pwa/out/_next/static/chunks/app/inside/{page-1efd0cb9e0ed9d13.js → page-cb2eb0fd809980da.js} +1 -1
  24. package/apps/pwa/out/_next/static/chunks/app/intake/{page-d5dc7ff69a37b4cf.js → page-31012264da8a341f.js} +1 -1
  25. package/apps/pwa/out/_next/static/chunks/app/layout-50309aeb0bdd554a.js +1 -0
  26. package/apps/pwa/out/_next/static/chunks/app/live/page-bc00e964e855f4df.js +1 -0
  27. package/apps/pwa/out/_next/static/chunks/app/market/{page-dfca9b7d2de0b135.js → page-0696ee3fac9fe56c.js} +1 -1
  28. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-793fa536b3a6ef37.js → page-66c27608f651b866.js} +1 -1
  29. package/apps/pwa/out/_next/static/chunks/app/morning/{page-6dd3bfbbde2a5c2c.js → page-6ddd2109b7fc3a80.js} +1 -1
  30. package/apps/pwa/out/_next/static/chunks/app/not-found-4e50b7298c1f69a5.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/app/observatory/{page-77447356baad75d2.js → page-7a2bf830038a2264.js} +1 -1
  32. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-1f327f18694fabca.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-e5cef2fe6e4028df.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-cf596128d2b420ba.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/app/outputs/{page-6d604227e1664b71.js → page-f672536f14f0969f.js} +1 -1
  36. package/apps/pwa/out/_next/static/chunks/app/page-b52365662232db89.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/app/reflection/{page-4048543b4b7ad5e0.js → page-e7a6c80f288b1948.js} +1 -1
  38. package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-4c3a3126abed551a.js → page-29a709616df9b050.js} +1 -1
  39. package/apps/pwa/out/_next/static/chunks/app/sessions/{page-64b0aecb1ca75e75.js → page-fee842d7c2151129.js} +1 -1
  40. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-78b40a344ed22f24.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/app/settings/page-75d199f448171014.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-a011dd5b0bff29c5.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/app/setup/{page-9547b5cec7cf76bf.js → page-d92e32d51ab5157e.js} +1 -1
  44. package/apps/pwa/out/_next/static/chunks/app/share/page-5f21aed6932ef375.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/app/showroom/page-1e1a53946804debf.js +1 -0
  46. package/apps/pwa/out/_next/static/chunks/app/tasks/{page-2cddeb9e2aeedc55.js → page-a1833cd43d832601.js} +1 -1
  47. package/apps/pwa/out/_next/static/chunks/app/term/{page-e297866051595d81.js → page-63d14a4d8fe1e1c1.js} +1 -1
  48. package/apps/pwa/out/_next/static/chunks/app/today/{page-baba2e047872fb0f.js → page-2a511d320f762e06.js} +1 -1
  49. package/apps/pwa/out/_next/static/chunks/app/trace/{page-e895da4ec9cac345.js → page-1c3e03f88dac1e21.js} +1 -1
  50. package/apps/pwa/out/_next/static/chunks/app/vault/page-c4d5289c2ea97a89.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b91f8952deaeaf27.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/app/workflows/page-71b43a2588489987.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/app/workspace/{page-2e9e2fb01c9da1c9.js → page-2b256feed331546f.js} +1 -1
  54. package/apps/pwa/out/_next/static/chunks/app/worktrees/{page-d62ceb13411ebba4.js → page-505bb96d69a8622c.js} +1 -1
  55. package/apps/pwa/out/approvals/index.html +1 -1
  56. package/apps/pwa/out/approvals/index.txt +13 -13
  57. package/apps/pwa/out/autopilot/index.html +1 -1
  58. package/apps/pwa/out/autopilot/index.txt +13 -13
  59. package/apps/pwa/out/board/index.html +1 -1
  60. package/apps/pwa/out/board/index.txt +13 -13
  61. package/apps/pwa/out/botlab/index.html +1 -1
  62. package/apps/pwa/out/botlab/index.txt +13 -13
  63. package/apps/pwa/out/bots/index.html +1 -1
  64. package/apps/pwa/out/bots/index.txt +13 -13
  65. package/apps/pwa/out/chat/index.html +1 -1
  66. package/apps/pwa/out/chat/index.txt +13 -13
  67. package/apps/pwa/out/consult/index.html +1 -1
  68. package/apps/pwa/out/consult/index.txt +13 -13
  69. package/apps/pwa/out/control/index.html +1 -1
  70. package/apps/pwa/out/control/index.txt +13 -13
  71. package/apps/pwa/out/design-check/index.html +1 -1
  72. package/apps/pwa/out/design-check/index.txt +13 -13
  73. package/apps/pwa/out/editor/index.html +1 -1
  74. package/apps/pwa/out/editor/index.txt +13 -13
  75. package/apps/pwa/out/exec/index.html +1 -1
  76. package/apps/pwa/out/exec/index.txt +13 -13
  77. package/apps/pwa/out/field/index.html +1 -1
  78. package/apps/pwa/out/field/index.txt +13 -13
  79. package/apps/pwa/out/healthz +1 -1
  80. package/apps/pwa/out/index.html +1 -1
  81. package/apps/pwa/out/index.txt +13 -13
  82. package/apps/pwa/out/inside/index.html +1 -1
  83. package/apps/pwa/out/inside/index.txt +13 -13
  84. package/apps/pwa/out/intake/index.html +1 -1
  85. package/apps/pwa/out/intake/index.txt +13 -13
  86. package/apps/pwa/out/live/index.html +1 -1
  87. package/apps/pwa/out/live/index.txt +13 -13
  88. package/apps/pwa/out/market/index.html +1 -1
  89. package/apps/pwa/out/market/index.txt +13 -13
  90. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  91. package/apps/pwa/out/missions/placeholder/index.txt +13 -13
  92. package/apps/pwa/out/morning/index.html +1 -1
  93. package/apps/pwa/out/morning/index.txt +13 -13
  94. package/apps/pwa/out/observatory/index.html +1 -1
  95. package/apps/pwa/out/observatory/index.txt +13 -13
  96. package/apps/pwa/out/ops/checklist/index.html +1 -1
  97. package/apps/pwa/out/ops/checklist/index.txt +13 -13
  98. package/apps/pwa/out/ops/release/index.html +1 -1
  99. package/apps/pwa/out/ops/release/index.txt +13 -13
  100. package/apps/pwa/out/ops/seats/index.html +1 -1
  101. package/apps/pwa/out/ops/seats/index.txt +13 -13
  102. package/apps/pwa/out/outputs/index.html +1 -1
  103. package/apps/pwa/out/outputs/index.txt +13 -13
  104. package/apps/pwa/out/reflection/index.html +1 -1
  105. package/apps/pwa/out/reflection/index.txt +14 -14
  106. package/apps/pwa/out/scheduler/index.html +1 -1
  107. package/apps/pwa/out/scheduler/index.txt +13 -13
  108. package/apps/pwa/out/sessions/index.html +1 -1
  109. package/apps/pwa/out/sessions/index.txt +13 -13
  110. package/apps/pwa/out/settings/devices/index.html +1 -1
  111. package/apps/pwa/out/settings/devices/index.txt +13 -13
  112. package/apps/pwa/out/settings/index.html +1 -1
  113. package/apps/pwa/out/settings/index.txt +13 -13
  114. package/apps/pwa/out/setup/done/index.html +1 -1
  115. package/apps/pwa/out/setup/done/index.txt +13 -13
  116. package/apps/pwa/out/setup/index.html +1 -1
  117. package/apps/pwa/out/setup/index.txt +13 -13
  118. package/apps/pwa/out/share/index.html +1 -1
  119. package/apps/pwa/out/share/index.txt +13 -13
  120. package/apps/pwa/out/showroom/index.html +1 -1
  121. package/apps/pwa/out/showroom/index.txt +13 -13
  122. package/apps/pwa/out/tasks/index.html +1 -1
  123. package/apps/pwa/out/tasks/index.txt +13 -13
  124. package/apps/pwa/out/term/index.html +1 -1
  125. package/apps/pwa/out/term/index.txt +13 -13
  126. package/apps/pwa/out/today/index.html +1 -1
  127. package/apps/pwa/out/today/index.txt +13 -13
  128. package/apps/pwa/out/trace/index.html +1 -1
  129. package/apps/pwa/out/trace/index.txt +13 -13
  130. package/apps/pwa/out/vault/index.html +1 -1
  131. package/apps/pwa/out/vault/index.txt +13 -13
  132. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  133. package/apps/pwa/out/workflows/chat-ui/index.txt +13 -13
  134. package/apps/pwa/out/workflows/index.html +1 -1
  135. package/apps/pwa/out/workflows/index.txt +13 -13
  136. package/apps/pwa/out/workspace/index.html +1 -1
  137. package/apps/pwa/out/workspace/index.txt +13 -13
  138. package/apps/pwa/out/worktrees/index.html +1 -1
  139. package/apps/pwa/out/worktrees/index.txt +13 -13
  140. package/examples/teams/personas/backend.yaml +4 -0
  141. package/examples/teams/personas/pm.yaml +4 -0
  142. package/examples/teams/personas/qa.yaml +4 -0
  143. package/examples/teams/small-product.yaml +20 -0
  144. package/graphs/lecture/lecture-note.yaml +28 -0
  145. package/graphs/lecture/recipes.yaml +17 -0
  146. package/package.json +2 -1
  147. package/scripts/context-hooks/emit.ts +36 -14
  148. package/scripts/coord-channel-watch.sh +1 -0
  149. package/scripts/discord-seat-probe.ts +144 -0
  150. package/scripts/hq/hq-standby.sh +65 -0
  151. package/scripts/hq/standby-promote.ts +173 -0
  152. package/scripts/hq/standby-role.ts +59 -0
  153. package/scripts/hq/standby-snapshot.ts +226 -0
  154. package/scripts/hq/standby-verify.ts +219 -0
  155. package/scripts/lecture-note/node.ts +256 -0
  156. package/scripts/release-loop/gate-node.ts +53 -15
  157. package/scripts/release-loop/ops-upgrade-node.ts +17 -5
  158. package/scripts/test-deterministic.ts +53 -3
  159. package/skills/omni-crawl/SKILL.md +16 -16
  160. package/skills/omni-crawl/package-lock.json +1 -544
  161. package/skills/omni-crawl/package.json +3 -4
  162. package/skills/omni-crawl/scripts/main.ts +13 -13
  163. package/skills/omni-crawl/scripts/monitor.ts +8 -8
  164. package/skills/omni-crawl/src/apify.ts +13 -2
  165. package/skills/omni-crawl/src/capture.ts +6 -0
  166. package/skills/omni-crawl/src/registry.ts +2 -2
  167. package/skills/omni-crawl/src/stdout-json.ts +4 -0
  168. package/skills/omni-digest/SKILL.md +10 -11
  169. package/skills/omni-digest/package-lock.json +0 -545
  170. package/skills/omni-digest/package.json +2 -5
  171. package/skills/omni-digest/scripts/main.ts +3 -3
  172. package/skills/omni-digest/src/delegate.ts +5 -5
  173. package/skills/omni-digest/src/fetch.ts +2 -2
  174. package/skills/omni-digest/src/media.ts +25 -11
  175. package/skills/omni-digest/src/visual.ts +3 -2
  176. package/skills/omni-market/scripts/main.ts +1 -1
  177. package/skills/omni-market/scripts/stdout-json.ts +4 -0
  178. package/src/agent/identity-env.ts +11 -0
  179. package/src/agent-mission/driver.ts +12 -7
  180. package/src/agent-mission/duo.ts +94 -0
  181. package/src/agent-mission/pty-decision.ts +1 -1
  182. package/src/autopilot/track-agent-shadow.ts +2 -1
  183. package/src/autopilot/track-agent.ts +4 -1
  184. package/src/boot/daemon-prompt-request.ts +3 -0
  185. package/src/boot/daemon-prompt-turn.ts +6 -2
  186. package/src/boot/daemon-runtime.ts +48 -16
  187. package/src/cli/decisions-cli.ts +51 -19
  188. package/src/cli/outputs-cli.ts +92 -0
  189. package/src/cli/persona-cli.ts +29 -0
  190. package/src/cli/pod-cli.ts +10 -3
  191. package/src/cli/pr-cli.ts +15 -1
  192. package/src/cli/release-cli.ts +108 -28
  193. package/src/context-bus/condense.ts +194 -0
  194. package/src/context-bus/context-day.ts +82 -0
  195. package/src/context-bus/context-now-surfaces.ts +15 -2
  196. package/src/context-bus/long-term-memory.ts +118 -22
  197. package/src/context-bus/nightly-condense.ts +1 -1
  198. package/src/decisions/decision-cards.ts +13 -7
  199. package/src/decisions/decision-ledger.ts +43 -17
  200. package/src/graph-kinds/registry.ts +2 -2
  201. package/src/graph-runner/graph-approval-card.ts +2 -2
  202. package/src/graph-runner/graph-grow.ts +64 -11
  203. package/src/graph-runner/graph-tick.ts +9 -2
  204. package/src/graph-runner/runner.ts +81 -17
  205. package/src/harness/harness-cli-command.ts +27 -1
  206. package/src/harness/harness-queue-child.ts +37 -0
  207. package/src/harness/harness-queue.ts +306 -0
  208. package/src/hooks/github-shadow.ts +72 -2
  209. package/src/hooks/receiver.ts +4 -2
  210. package/src/hq/hq.ts +318 -0
  211. package/src/hq/lease.ts +210 -0
  212. package/src/hq/ledger-write-target.ts +41 -0
  213. package/src/index.ts +199 -7
  214. package/src/intake-plane/discord-seat-work.ts +13 -6
  215. package/src/intake-plane/linear-wish.ts +44 -0
  216. package/src/intake-plane/persona-answer.ts +5 -0
  217. package/src/intake-plane/telegram-seat-work.ts +13 -6
  218. package/src/intake-plane/wish-card.ts +1 -1
  219. package/src/loops/checker.ts +178 -0
  220. package/src/loops/loop-cli.ts +37 -3
  221. package/src/loops/observe.ts +49 -0
  222. package/src/loops/orchestrator/overlap.ts +141 -0
  223. package/src/loops/orchestrator/traffic.ts +150 -0
  224. package/src/loops/package/verify.ts +125 -0
  225. package/src/loops/verdict.ts +22 -0
  226. package/src/maturity/feature-maturity.ts +3 -3
  227. package/src/memory.ts +37 -4
  228. package/src/nexus/api/card-followup-route.ts +118 -0
  229. package/src/nexus/api/decisions-route.ts +68 -0
  230. package/src/nexus/api/http-server.ts +47 -0
  231. package/src/nexus/api/personas.ts +2 -1
  232. package/src/nexus/api/skill-exec-route.ts +97 -0
  233. package/src/persona/loader.ts +18 -0
  234. package/src/persona/persona-todo.ts +14 -9
  235. package/src/persona/presets.ts +2 -1
  236. package/src/persona/team.ts +105 -0
  237. package/src/persona/types.ts +4 -0
  238. package/src/pod-lease/host-lease.ts +130 -20
  239. package/src/release-loop/landed-but-yellow.ts +12 -0
  240. package/src/seat-dispatch/seat-ask.ts +57 -12
  241. package/src/seat-loop/seat-loop.ts +90 -16
  242. package/src/seat-loop/seat-pack.ts +127 -0
  243. package/src/self-dev/ask-launch-flow.ts +3 -0
  244. package/src/self-implement/l8-merge-queue.ts +157 -1
  245. package/src/steward/launch.ts +5 -1
  246. package/src/steward/readiness.ts +125 -0
  247. package/src/steward/rescue.ts +75 -0
  248. package/src/steward/triage.ts +48 -9
  249. package/src/task-cards/card-cli.ts +78 -0
  250. package/src/task-orchestrator/surfaces/pod-lease.ts +18 -6
  251. package/src/task-orchestrator/surfaces/pod-pool.ts +27 -10
  252. package/src/task-orchestrator/surfaces/self-implement-pod.ts +38 -8
  253. package/src/telegram-dispatch-forward.ts +1 -1
  254. package/src/telegram-fabric-plan.ts +90 -0
  255. package/src/telegram-project-command.ts +10 -4
  256. package/src/telegram.ts +5 -0
  257. package/src/tool-runtime/elanous-control-runtimes.ts +2 -1
  258. package/src/user-config.ts +94 -10
  259. package/src/version/packed-revision.json +1 -1
  260. package/src/workflow-runtime/executor.ts +4 -0
  261. package/src/workflow-runtime/node-catalog.ts +13 -0
  262. package/src/workflow-runtime/nodes/knowledge.ts +38 -0
  263. package/src/workflow-runtime/schema.ts +17 -1
  264. package/src/workflow-runtime/types.ts +13 -1
  265. package/apps/pwa/out/_next/static/chunks/1147-466ec15afacc1a65.js +0 -1
  266. package/apps/pwa/out/_next/static/chunks/7277-0b2fc7c16ba2d64b.js +0 -1
  267. package/apps/pwa/out/_next/static/chunks/9906-482c6619b3fdda20.js +0 -1
  268. package/apps/pwa/out/_next/static/chunks/9920-5cfdc5e8fd209825.js +0 -1
  269. package/apps/pwa/out/_next/static/chunks/app/board/page-d2e35228bc497119.js +0 -1
  270. package/apps/pwa/out/_next/static/chunks/app/botlab/page-5c05b0da4bc1392c.js +0 -1
  271. package/apps/pwa/out/_next/static/chunks/app/bots/page-e0ccdb576812b523.js +0 -1
  272. package/apps/pwa/out/_next/static/chunks/app/exec/page-a67e11ba962337b5.js +0 -1
  273. package/apps/pwa/out/_next/static/chunks/app/layout-e71c84189e8c683e.js +0 -1
  274. package/apps/pwa/out/_next/static/chunks/app/live/page-1d6a533ce5a6efcb.js +0 -1
  275. package/apps/pwa/out/_next/static/chunks/app/not-found-490653e8d4cc8852.js +0 -1
  276. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-29e961191f6057df.js +0 -1
  277. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-c822f55b884d9104.js +0 -1
  278. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fa4ccfc432424e52.js +0 -1
  279. package/apps/pwa/out/_next/static/chunks/app/page-9c7e8f744a765daf.js +0 -1
  280. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-4292d0149020e8a7.js +0 -1
  281. package/apps/pwa/out/_next/static/chunks/app/settings/page-db14d0be7f1c460c.js +0 -1
  282. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-e5d8072cd7cfef73.js +0 -1
  283. package/apps/pwa/out/_next/static/chunks/app/share/page-e6dcb83265530636.js +0 -1
  284. package/apps/pwa/out/_next/static/chunks/app/showroom/page-45248f08d6aecae5.js +0 -1
  285. package/apps/pwa/out/_next/static/chunks/app/vault/page-4344faf20216233b.js +0 -1
  286. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-698bb29f11864b89.js +0 -1
  287. package/apps/pwa/out/_next/static/chunks/app/workflows/page-bd6a6dc1ddc273f2.js +0 -1
  288. /package/apps/pwa/out/_next/static/{-6XrAoD3eU7NyMHAE4xPS → D51l8jUBplJrIpWvENsDK}/_buildManifest.js +0 -0
  289. /package/apps/pwa/out/_next/static/{-6XrAoD3eU7NyMHAE4xPS → D51l8jUBplJrIpWvENsDK}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8517],{4112:(e,t,s)=>{"use strict";s.d(t,{Q:()=>c});var r=s(54456),i=s(60500),a=s(10080),n=s(95564),l=s(43468),o=s(23869);function d(e){if(e instanceof o.Iu&&e.body&&"object"==typeof e.body){var t;let s=e.body;return[null!=(t=s.reason)?t:s.error,s.path].filter(Boolean).join(": ")}return e instanceof Error?e.message:String(e)}function c(){let e=(0,l.Qj)(),[t,s]=(0,i.useState)(!1),[o,c]=(0,i.useState)(null),[u,h]=(0,i.useState)({vault:"",selection:"custom",dirs:""}),{vault:p,selection:f,dirs:m}=u,[x,b]=(0,i.useState)(!0),[g,v]=(0,i.useState)(!1),[j,y]=(0,i.useState)(""),[k,w]=(0,i.useState)(""),[N,S]=(0,i.useState)("");(0,i.useEffect)(()=>{s(!0)},[]);let C=(0,i.useCallback)(async function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"all";if(e){b(!0);try{let s=await e.getObsidianSkills();c(s),h(e=>({vault:"skills"===t?e.vault:s.obsidian.vault,selection:"vault"===t?e.selection:s.skills.activeSet,dirs:"vault"===t?e.dirs:s.skills.dirs.join("\n")})),y("")}catch(e){y(d(e))}finally{b(!1)}}},[e]);(0,i.useEffect)(()=>{t&&e&&C()},[t,e,C]);let O=async()=>{if(e){v(!0),w("");try{var t;let s=await e.setObsidian({vault:p.trim()});await C("vault"),w(null!=(t=s.warning)?t:"Vault saved.")}catch(e){w(d(e))}finally{v(!1)}}},F=async()=>{if(e){v(!0),S("");try{await e.setSkills("custom"===f?{dirs:m.split("\n").map(e=>e.trim()).filter(Boolean)}:{activeSet:f}),await C("skills"),S("Skills saved.")}catch(e){S(d(e))}finally{v(!1)}}};return t&&e?(0,r.jsxs)("section",{className:"space-y-4 rounded border border-border bg-card p-4","data-testid":"obsidian-skills-card",children:[(0,r.jsxs)("header",{className:"flex items-center justify-between gap-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h2",{className:"text-sm font-semibold",children:"Obsidian & Skills"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Choose directories on the machine running NEXUS."})]}),(0,r.jsx)(a.$,{size:"sm",variant:"outline",onClick:()=>void C("all"),disabled:x||g,children:"Refresh"})]}),x&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Loading paths…"}),j&&(0,r.jsx)("p",{role:"alert",className:"text-xs text-destructive",children:j}),o&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)("label",{htmlFor:"obsidian-vault",className:"text-sm font-medium",children:"Obsidian vault path"}),(0,r.jsx)(n.p,{id:"obsidian-vault",value:p,onChange:e=>{h(t=>({...t,vault:e.target.value})),w("")},placeholder:"/absolute/path/to/vault"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground","data-testid":"vault-validation",children:p===o.obsidian.vault?o.obsidian.looksLikeVault?"Vault found (.obsidian detected)":o.obsidian.exists?"Directory found; .obsidian not detected":"Directory not found":"Save to validate this path on the NEXUS host."}),(0,r.jsx)(a.$,{size:"sm",onClick:()=>void O(),disabled:g||!p.trim(),children:"Save vault"}),k&&(0,r.jsx)("p",{role:"status",className:"text-xs","data-testid":"vault-feedback",children:k})]}),(0,r.jsxs)("div",{className:"space-y-2 border-t border-border pt-3",children:[(0,r.jsx)("label",{htmlFor:"skills-preset",className:"text-sm font-medium",children:"Skills source"}),(0,r.jsxs)("select",{id:"skills-preset",value:f,onChange:e=>{h(t=>({...t,selection:e.target.value})),S("")},className:"flex h-9 w-full rounded-md border border-input bg-background px-3 text-sm",children:[o.skills.presets.map(e=>{var t;return(0,r.jsxs)("option",{value:e.key,children:[e.label," — ",null!=(t=e.dir)?t:"(no path)"," ",e.exists?"✓":"(missing)"]},e.key)}),(0,r.jsx)("option",{value:"custom",children:"Custom directories"})]}),"custom"===f&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("label",{htmlFor:"skills-dirs",className:"block text-xs text-muted-foreground",children:"One absolute directory per line"}),(0,r.jsx)("textarea",{id:"skills-dirs",value:m,onChange:e=>{h(t=>({...t,dirs:e.target.value})),S("")},rows:3,className:"w-full rounded-md border border-input bg-background px-3 py-2 font-mono text-xs",placeholder:"/absolute/path/to/skills"})]}),(0,r.jsx)(a.$,{size:"sm",onClick:()=>void F(),disabled:g,children:"Save skills"}),N&&(0,r.jsx)("p",{role:"status",className:"text-xs","data-testid":"skills-feedback",children:N})]})]})]}):null}},10080:(e,t,s)=>{"use strict";s.d(t,{$:()=>o});var r=s(54456),i=s(80247),a=s(13680),n=s(74591);let l=(0,a.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function o(e){let{className:t,variant:s="default",size:a="default",...o}=e;return(0,r.jsx)(i.$,{"data-slot":"button",className:(0,n.cn)(l({variant:s,size:a,className:t})),...o})}},13496:(e,t,s)=>{"use strict";s.d(t,{W:()=>d});var r=s(54456),i=s(60500),a=s(10080),n=s(95564),l=s(43468);let o=["telegram","discord"];function d(){let{client:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,l.Qj)(),s=null!=e?e:t,[d,c]=(0,i.useState)([]),[u,h]=(0,i.useState)({}),[p,f]=(0,i.useState)({}),[m,x]=(0,i.useState)({}),[b,g]=(0,i.useState)(null),[v,j]=(0,i.useState)({}),[y,k]=(0,i.useState)("");(0,i.useEffect)(()=>{if(!s)return;let e=!1;return s.getChannelBots().then(t=>{let{platforms:s}=t;e||(c(s),f(e=>{let t={...e};for(let e of s)Object.hasOwn(t,e.platform)||(t[e.platform]=e.allowedUsers.join(", "));return t}))}).catch(()=>{e||k("봇 상태를 불러오지 못했습니다.")}),()=>{e=!0}},[s]);let w=async e=>{var t;if(!s)return;g(e),k("");let r=null==(t=u[e])?void 0:t.trim(),i=Object.hasOwn(p,e)?p[e].split(",").map(e=>e.trim()).filter(Boolean):void 0;h(t=>({...t,[e]:""}));try{let t=await s.setChannelBot({platform:e,...r?{token:r}:{},...void 0!==i?{allowedUsers:i}:{}});t.botName&&x(s=>({...s,[e]:t.botName})),j(s=>({...s,[e]:t.restartNeeded}));try{let e=await s.getChannelBots();c(e.platforms)}catch(e){k("저장됐지만 봇 상태를 다시 불러오지 못했습니다.")}}catch(t){k("".concat(e," 저장에 실패했습니다. 토큰과 허용 사용자 ID를 확인하세요."))}finally{g(null)}};return s?(0,r.jsxs)("section",{className:"space-y-4 rounded border border-border bg-card p-4","data-testid":"channel-bot-setup-card",children:[(0,r.jsx)("h2",{className:"text-sm font-semibold",children:"봇 연결"}),o.map(e=>{var t,s;let i=d.find(t=>t.platform===e);return(0,r.jsxs)("div",{className:"space-y-2 border-t border-border pt-3",children:[(0,r.jsx)("h3",{className:"text-sm font-medium capitalize",children:e}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:(null==i?void 0:i.configured)?"연결됨 (".concat(i.source,")"):"미연결"}),m[e]&&(0,r.jsxs)("p",{className:"text-xs",children:["봇 이름: ",m[e]]}),(0,r.jsx)("label",{htmlFor:"".concat(e,"-bot-token"),className:"block text-xs",children:"봇 토큰"}),(0,r.jsx)(n.p,{id:"".concat(e,"-bot-token"),type:"password",autoComplete:"off",value:null!=(t=u[e])?t:"",onChange:t=>h(s=>({...s,[e]:t.target.value}))}),(0,r.jsx)("label",{htmlFor:"".concat(e,"-allowed-users"),className:"block text-xs",children:"허용 사용자 ID (쉼표로 구분)"}),(0,r.jsx)(n.p,{id:"".concat(e,"-allowed-users"),value:null!=(s=p[e])?s:"",onChange:t=>f(s=>({...s,[e]:t.target.value}))}),(0,r.jsx)(a.$,{type:"button",size:"sm",disabled:null!==b,onClick:()=>void w(e),children:"확인하고 저장"}),v[e]&&(0,r.jsx)("p",{role:"status",className:"text-xs",children:"봇을 재시작해야 반영됩니다"})]},e)}),y&&(0,r.jsx)("p",{role:"alert",className:"text-xs text-destructive",children:y})]}):null}},28042:(e,t,s)=>{"use strict";s.d(t,{Qb:()=>n,SI:()=>o,dJ:()=>l});let r="elanous:auth-required",i=null,a=!1;function n(e){null===i&&(i=e,window.dispatchEvent(new CustomEvent(r,{detail:{path:e}})))}function l(e){let t=window,s=t=>e(t.detail);return t.addEventListener(r,s),null===i||a||e({path:i}),()=>t.removeEventListener(r,s)}function o(){a=!0}},43468:(e,t,s)=>{"use strict";s.d(t,{M1:()=>d,Qj:()=>c,tI:()=>o});var r=s(54456),i=s(60500),a=s(40324),n=s(59405);let l=(0,i.createContext)(null);function o(e){let{client:t,queryClient:s,defaultStaleTimeMs:o,children:d}=e,c=(0,i.useMemo)(()=>null!=s?s:new a.E({defaultOptions:{queries:{staleTime:null!=o?o:2e3,refetchOnWindowFocus:!1}}}),[s,o]);return(0,r.jsx)(l.Provider,{value:t,children:(0,r.jsx)(n.Ht,{client:c,children:d})})}function d(){let e=(0,i.useContext)(l);if(!e)throw Error("useNexusClient must be used within <NexusProvider>");return e}function c(){return(0,i.useContext)(l)}},50733:(e,t,s)=>{"use strict";let r;s.d(t,{cY:()=>c,x8:()=>l});let i={debug:0,info:1,warn:2,error:3},a="/v1/debug-logs/batch",n=null;function l(e){n=e}class o{health(){return{pending:this.queue.length,consecutiveFailures:this.consecutiveFailures,lastOkAt:this.lastOkAt,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches}}push(e){if(!(i[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)]<i[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)}if(this.queue.length>=100&&!this.inFlight){null!==this.timer&&(clearTimeout(this.timer),this.timer=null),this.flush();return}null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},this.flushMs))}}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,s=JSON.stringify({records:e});try{var r,i;t=await (r=this.fetchFn(s),i=this.postTimeoutMs,new Promise((e,t)=>{let s=setTimeout(()=>t(Error("debug-forward timeout after ".concat(i,"ms"))),i);r.then(t=>{clearTimeout(s),e(t)},e=>{clearTimeout(s),t(e)})}))}catch(e){t=!1}finally{this.inFlight=!1}if(!t){if(this.consecutiveFailures+=1,this.consecutiveFailures>=2&&n)try{await n(JSON.stringify({records:[...e,this.blockedNotice()]}))&&(this.fallbackBatches+=1)}catch(e){}this.wasFailing=!0,this.scheduleRetry();return}let a=this.lastOkAt;this.lastOkAt=Date.now();let l=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:l,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches,pending:this.queue.length,previousOkAt:a},source:{platform:"pwa"}})),this.queue.length>0&&null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},this.flushMs))}scheduleRetry(){if(null!==this.timer||0===this.queue.length)return;let e=Math.min(this.flushMs*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(a,t)&&this.queue.splice(0,e.length)}}catch(e){}}get pending(){return this.queue.length}constructor(e=d,t="debug",s=1e4,r=100){this.fetchFn=e,this.minLevel=t,this.postTimeoutMs=s,this.flushMs=r,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 d(e){return(await fetch(a,{method:"POST",headers:{"content-type":"application/json"},body:e,keepalive:!0,..."undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout?{signal:AbortSignal.timeout(1e4)}:{}})).ok}function c(e,t){if("undefined"==typeof console)return;let s=new Date().toISOString();if(void 0!==t){let r="";try{let e=new WeakSet;r=JSON.stringify(t,(t,s)=>{if("bigint"==typeof s)return"".concat(s.toString(),"n");if("function"==typeof s)return"[fn ".concat(s.name||"anon","]");if(s&&"object"==typeof s){if(e.has(s))return"[circular]";e.add(s)}return s})}catch(e){r="[unserializable: ".concat(String(e),"]")}r&&r.length>800&&(r=r.slice(0,797)+"..."),console.debug("[".concat(s,"] ").concat(e," ").concat(r),t),u(s,e,r)}else console.debug("[".concat(s,"] ").concat(e)),u(s,e,void 0)}function u(e,t,s){let i,a=function(){if(void 0!==r)return r;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 r=null,null;let t=new o(d,e.level,1e4,1500);try{window.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&t.beaconFlush()})}catch(e){}return r=t,t}();if(!a)return;let n=t.slice(t.lastIndexOf(".")+1)||t;if(void 0!==s&&""!==s)try{i=JSON.parse(s)}catch(e){i=s}a.push({ts:e,category:t,event:n,...void 0!==i?{data:i}:{},source:{platform:"pwa"}})}},74591:(e,t,s)=>{"use strict";s.d(t,{cn:()=>a});var r=s(49454),i=s(79946);function a(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return(0,i.QP)((0,r.$)(t))}},93412:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>f});var r=s(54456),i=s(86048),a=s.n(i),n=s(60500),l=s(10080),o=s(43468);let d=[{anchor:"channels",label:"Channels",description:"Telegram / Discord 봇 연결",primary:!0},{anchor:"voice",label:"Voice",description:"TTS \xb7 STT 모델 + voice 환경설정",primary:!0},{anchor:"ios",label:"iOS / mobile",description:"PWA install \xb7 iOS companion 페어링",primary:!0},{anchor:"personas",label:"Personas",description:"4 인격 (default \xb7 contrarian \xb7 pragmatist \xb7 sage) 편집",primary:!1},{anchor:"tools",label:"Tool surface",description:"chat 이 사용할 tool 셋 (readonly / chat / webterm / all)",primary:!1},{anchor:"advanced",label:"Advanced",description:"Model tier \xb7 budget guard \xb7 OCR \xb7 기타 카드 17 종",primary:!1}];var c=s(13496),u=s(4112);function h(){let e=(0,o.Qj)(),[t,s]=(0,n.useState)(null),[i,a]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{if(!e)return;let t=!0;return s(null),a(!1),e.getChatFastPath().then(e=>{let{enabled:r}=e;if("boolean"!=typeof r)throw Error("chat.fastPath is unavailable");t&&s(r)}).catch(()=>{t&&a(!0)}),()=>{t=!1}},[e]),(0,r.jsx)("section",{"aria-label":"셋업 추천","data-testid":"setup-recommendations",className:"flex flex-col gap-2 rounded border border-border bg-card p-3 text-sm",children:null===t?(0,r.jsx)("p",{role:"status",children:i?"chat.fastPath 값을 읽을 수 없습니다. 다시 접속해 확인하세요.":"추천 설정 확인 중…"}):["고칠 것 고치기 — 권한\xb7PATH\xb7서비스 파일\xb7파이썬 환경 등 고칠 수 있는 항목을 고칩니다(로그인\xb7서비스 재시작은 별도): `elanous doctor --fix --yes`",{fastPath:t}.fastPath?"짧은 물음은 빠르게 — 켜져 있음(chat.fastPath=true): 짧은 물음에 도구 없이 먼저 답합니다. 끄기: `elanous config set chat.fastPath false`":"짧은 물음은 빠르게 — 꺼져 있음(chat.fastPath=false): 켜면 짧은 물음에 도구 없이 먼저 답합니다. 켜기: `elanous config set chat.fastPath true`"].map(e=>(0,r.jsx)("p",{children:e},e))})}function p(){let[e,t]=(0,n.useState)(!1),[s,i]=(0,n.useState)(!1);return(0,r.jsxs)("section",{className:"flex flex-col gap-3","aria-labelledby":"setup-next-steps-title","data-testid":"setup-next-steps",children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("h2",{id:"setup-next-steps-title",className:"text-sm font-semibold",children:"다음 셋업(선택)"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"필요한 것만 지금 연결하세요. 나중에 해도 됩니다."})]}),(0,r.jsxs)("div",{className:"rounded border border-border bg-card p-3",children:[(0,r.jsx)(l.$,{type:"button",variant:"outline","aria-expanded":e,"aria-controls":"setup-next-bots",onClick:()=>t(e=>!e),children:"텔레그램\xb7디스코드 봇 연결"}),e&&(0,r.jsxs)("div",{id:"setup-next-bots",className:"mt-3 flex flex-col gap-3",children:[(0,r.jsx)(c.W,{}),(0,r.jsx)(l.$,{type:"button",variant:"ghost",className:"self-start",onClick:()=>t(!1),children:"나중에"})]})]}),(0,r.jsxs)("div",{className:"rounded border border-border bg-card p-3",children:[(0,r.jsx)(l.$,{type:"button",variant:"outline","aria-expanded":s,"aria-controls":"setup-next-vault",onClick:()=>i(e=>!e),children:"Obsidian 볼트\xb7스킬 폴더"}),s&&(0,r.jsxs)("div",{id:"setup-next-vault",className:"mt-3 flex flex-col gap-3",children:[(0,r.jsx)(u.Q,{}),(0,r.jsx)(l.$,{type:"button",variant:"ghost",className:"self-start",onClick:()=>i(!1),children:"나중에"})]})]})]})}function f(){let e=(0,o.Qj)(),[t,s]=(0,n.useState)(!1),[i,d]=(0,n.useState)({status:"idle"});return((0,n.useEffect)(()=>{s(!0)},[]),(0,n.useEffect)(()=>{t&&e&&(d({status:"loading"}),e.getLlmProviders().then(e=>{d({status:"ok",active:{provider:e.activeProvider||"(unset)"}})}).catch(e=>{d({status:"error",message:e.message})}))},[t,e]),t&&e)?(0,r.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,r.jsx)(h,{}),(0,r.jsx)(m,{load:i}),(0,r.jsxs)("section",{className:"flex flex-col gap-3",children:[(0,r.jsx)("h2",{className:"text-sm font-semibold",children:"곧장 chat 으로"}),(0,r.jsxs)("p",{className:"text-xs text-muted-foreground",children:["LLM 만 셋업해도 chat 은 바로 사용 가능합니다. 나머지는 필요할 때",(0,r.jsx)("span",{className:"font-mono",children:" /settings"})," 에서 추가하세요."]}),(0,r.jsx)("div",{children:(0,r.jsx)(a(),{href:"/chat","data-testid":"setup-done-chat-link",children:(0,r.jsx)(l.$,{size:"lg",children:"Chat 시작 →"})})})]}),(0,r.jsx)(p,{}),(0,r.jsx)(x,{})]}):null}function m(e){let{load:t}=e;if("loading"===t.status||"idle"===t.status)return(0,r.jsx)("section",{className:"rounded border border-border bg-card p-4",children:(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"상태 확인 중…"})});if("error"===t.status)return(0,r.jsx)("section",{className:"rounded border border-destructive/40 bg-destructive/5 p-4",children:(0,r.jsxs)("p",{className:"text-sm text-destructive",children:["LLM 상태 로드 실패: ",t.message]})});let s=t.active.provider,i="(unset)"===s;return(0,r.jsx)("section",{className:"rounded border border-primary/40 bg-primary/5 p-4","data-testid":"setup-done-active-llm",children:(0,r.jsxs)("header",{className:"flex items-center justify-between gap-3",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:"현재 LLM provider"}),(0,r.jsx)("p",{className:"mt-1 font-mono text-base font-semibold",children:s})]}),i?(0,r.jsx)(a(),{href:"/setup",children:(0,r.jsx)(l.$,{variant:"outline",size:"sm",children:"셋업"})}):(0,r.jsx)("span",{className:"rounded bg-primary/10 px-2 py-1 text-xs font-medium text-primary",children:"✓ 준비됨"})]})})}function x(){let e=d.filter(e=>e.primary),t=d.filter(e=>!e.primary);return(0,r.jsxs)("section",{className:"flex flex-col gap-3",children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("h2",{className:"text-sm font-semibold",children:"필요하면 더 셋업하기"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"모두 선택. 안 만져도 chat 은 잘 됩니다."})]}),(0,r.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-3",children:e.map(e=>(0,r.jsx)(b,{link:e},e.anchor))}),(0,r.jsxs)("details",{className:"rounded border border-border bg-card",children:[(0,r.jsxs)("summary",{className:"cursor-pointer px-3 py-2 text-xs font-medium uppercase tracking-wider text-muted-foreground",children:["기타 (",t.length,")"]}),(0,r.jsx)("div",{className:"grid grid-cols-1 gap-2 border-t border-border p-2 sm:grid-cols-3",children:t.map(e=>(0,r.jsx)(b,{link:e},e.anchor))})]})]})}function b(e){let{link:t}=e,s="/settings#".concat(t.anchor);return(0,r.jsxs)(a(),{href:s,"data-testid":"setup-done-link-".concat(t.anchor),className:"flex flex-col gap-1 rounded border border-border bg-card p-3 transition-colors hover:border-primary/40",children:[(0,r.jsx)("span",{className:"text-sm font-medium",children:t.label}),(0,r.jsx)("span",{className:"text-xs text-muted-foreground",children:t.description})]})}},95321:(e,t,s)=>{Promise.resolve().then(s.bind(s,93412))},95564:(e,t,s)=>{"use strict";s.d(t,{p:()=>n});var r=s(54456);s(60500);var i=s(27551),a=s(74591);function n(e){let{className:t,type:s,...n}=e;return(0,r.jsx)(i.p,{type:s,"data-slot":"input",className:(0,a.cn)("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",t),...n})}}},e=>{e.O(0,[7777,9538,3278,6048,7551,3869,6390,3170,7358],()=>e(e.s=95321)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9038],{1355:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>l,f6:()=>n,oD:()=>s});let a="elanous.daemon.sessionId";function n(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(a,e),e):localStorage.getItem(a)}();if(e)return e;let t=n();return localStorage.setItem(a,t),t}function l(){let e=n();return localStorage.setItem(a,e),e}},9258:(e,t,r)=>{Promise.resolve().then(r.bind(r,79851))},36581:(e,t,r)=>{"use strict";r.d(t,{C:()=>u,DaemonProvider:()=>c,Q:()=>d});var a=r(54456),n=r(60500),s=r(86704),l=r(1355),o=r(39906),i=r(50733);let u=(0,n.createContext)(null);function c(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[c,d]=(0,n.useState)(r),[h,m]=(0,n.useState)(""),[f]=(0,n.useState)(()=>new o.ki(r));(0,n.useEffect)(()=>{let e=(0,s.Fp)();d(e),f.updateConfig(e),m((0,l.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,n.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,s.Fp)();f.updateConfig(t),d(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&m(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let p=e=>{d(t=>{let r={...t,...e};return(0,s.Qc)(e),f.updateConfig(r),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},x=e=>{m(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},w=(0,n.useMemo)(()=>({config:c,setConfig:p,client:f,sessionId:h,setSessionId:x}),[c,f,h]);return(0,a.jsx)(u.Provider,{value:w,children:t})}function d(){let e=(0,n.useContext)(u);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},55499:(e,t,r)=>{"use strict";r.d(t,{K:()=>s,v:()=>n});var a=r(50733);async function n(e){var t;let r=e.baseUrl.replace(/\/$/,"");if(!r)return{ok:!1,status:0,reason:"baseUrl not configured"};let n=null!=(t=e.filename)?t:e.file instanceof File?e.file.name:"upload.bin";(0,a.cY)("webterm.attach.upload.begin",{filename:n,size:e.file.size,type:e.file.type});let s=new FormData;s.append("file",e.file,n),s.append("filename",n);try{let t=await fetch("".concat(r,"/v1/attachments"),{method:"POST",body:s,...e.token?{headers:{authorization:"Bearer ".concat(e.token)}}:{}});if(!t.ok){let e=await t.text().catch(()=>"");return(0,a.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 n=await t.json();return(0,a.cY)("webterm.attach.upload.ok",{id:n.id,size:n.size}),{ok:!0,meta:n}}catch(t){let e=String(t instanceof Error?t.message:t);return(0,a.cY)("webterm.attach.upload.exception",{reason:e}),{ok:!1,status:0,reason:e}}}async function s(e,t){return Promise.all(e.map(e=>n({baseUrl:t.baseUrl,...void 0!==t.token?{token:t.token}:{},file:e.file,...void 0!==e.filename?{filename:e.filename}:{}})))}},79624:(e,t,r)=>{"use strict";r.d(t,{ht:()=>s,vn:()=>n});let a="elanous.pwa.sharePrefill";function n(e){try{window.sessionStorage.setItem(a,e)}catch(e){}}function s(){try{var e;let t=null!=(e=window.sessionStorage.getItem(a))?e:"";return window.sessionStorage.removeItem(a),t}catch(e){return""}}},79851:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>m});var a=r(54456),n=r(60500),s=r(80581),l=r(50733),o=r(36581);async function i(){if("undefined"==typeof caches)return null;let e=(await caches.keys()).filter(e=>e.startsWith("elanous-pwa-share-target-")).sort().reverse();return 0===e.length?null:caches.open(e[0])}async function u(e){if(!e)return null;let t=await i();if(!t)return(0,l.cY)("pwa.share.l2.cache-missing",{id:e}),null;let r="/__share/".concat(e,"/manifest.json"),a=await t.match(r);if(!a)return(0,l.cY)("pwa.share.l2.no-manifest",{id:e}),null;let n=await a.json(),s=[];for(let r of n.files){let a=await t.match(r.cacheUrl);if(!a){(0,l.cY)("pwa.share.l2.file-missing",{id:e,cacheUrl:r.cacheUrl});continue}let n=await a.blob();s.push(new File([n],r.filename,{type:r.type||n.type}))}for(let e of(await t.delete(r),n.files))await t.delete(e.cacheUrl);return(0,l.cY)("pwa.share.l2.delivered",{id:e,fileCount:s.length,titleLen:n.title.length,textLen:n.text.length}),{id:n.id,title:n.title,text:n.text,url:n.url,files:s,combinedText:function(e){let t=[];return e.title.trim()&&t.push(e.title.trim()),e.text.trim()&&t.push(e.text.trim()),e.url.trim()&&t.push(e.url.trim()),t.join("\n\n")}(n)}}var c=r(79624),d=r(55499);function h(){var e,t,r;let i=(0,s.useRouter)(),h=(0,s.useSearchParams)(),{config:m}=(0,o.Q)(),[f,p]=(0,n.useState)({phase:"idle"});return(0,n.useEffect)(()=>{var e,t,r;let a=null==h?void 0:h.get("shared");if(a){let e=!1;return(async()=>{p({phase:"level2-loading"});let t=await u(a);if(e)return;if(!t||0===t.files.length){t&&t.combinedText&&(0,c.vn)(t.combinedText),(0,l.cY)("pwa.share.l2.empty",{sharedId:a,hasPayload:!!t}),p({phase:"level2-empty"});let e=setTimeout(()=>i.replace("/chat"),600);return()=>clearTimeout(e)}if(!m.baseUrl)return p({phase:"level2-error",error:"daemon baseUrl not configured"});p({phase:"level2-uploading",total:t.files.length,done:0});let r=[];for(let a=0;a<t.files.length;a+=1){let n=t.files[a],s=await (0,d.v)({baseUrl:m.baseUrl,...m.token?{token:m.token}:{},file:n,filename:n.name});if(e)return;s.ok?r.push(s.meta):(0,l.cY)("pwa.share.l2.upload-failed",{i:a,reason:s.reason}),p(e=>({...e,done:a+1}))}if(0===r.length)return p({phase:"level2-error",error:"all uploads failed"});try{window.sessionStorage.setItem("elanous.pwa.shareAttachments",JSON.stringify(r))}catch(e){}t.combinedText&&(0,c.vn)(t.combinedText),p({phase:"level2-handing-off",total:t.files.length,done:t.files.length});let n=setTimeout(()=>i.replace("/chat?shared=1"),400);return()=>clearTimeout(n)})(),()=>{e=!0}}let n=null!=(e=null==h?void 0:h.get("title"))?e:null,s=null!=(t=null==h?void 0:h.get("text"))?t:null,o=null!=(r=null==h?void 0:h.get("url"))?r:null,f=function(e,t,r){let a=[];return e&&e.trim()&&a.push(e.trim()),t&&t.trim()&&a.push(t.trim()),r&&r.trim()&&a.push(r.trim()),a.join("\n\n")}(n,s,o);(0,l.cY)("pwa.share.l1.received",{hasTitle:!!n,hasText:!!s,hasUrl:!!o,len:f.length}),f.length>0&&(0,c.vn)(f),p({phase:"level1-handing-off",preview:f});let x=setTimeout(()=>i.replace("/chat"),400);return()=>clearTimeout(x)},[h,i,m.baseUrl,m.token]),(0,a.jsxs)("main",{className:"flex h-full flex-col items-center justify-center gap-3 px-6 py-10 text-center",children:[(0,a.jsx)("h1",{className:"text-base font-semibold",children:"\uD83D\uDCE5 공유 받음"}),"level1-handing-off"===f.phase&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"곧 /chat 으로 이동합니다…"}),f.preview&&(0,a.jsxs)("pre",{className:"max-h-[60vh] max-w-full overflow-auto rounded-md border border-border bg-card p-3 text-left text-[11px] whitespace-pre-wrap break-words",children:[f.preview.slice(0,800),f.preview.length>800?"…":""]})]}),"level2-loading"===f.phase&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"파일 읽는 중…"}),"level2-uploading"===f.phase&&(0,a.jsxs)("p",{className:"text-xs text-muted-foreground",children:["업로드 중… ",null!=(e=f.done)?e:0," / ",null!=(t=f.total)?t:0]}),"level2-handing-off"===f.phase&&(0,a.jsxs)("p",{className:"text-xs text-muted-foreground",children:[null!=(r=f.done)?r:0," 개 첨부 완료 \xb7 /chat 이동…"]}),"level2-empty"===f.phase&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"파일이 없어요. /chat 으로 이동합니다…"}),"level2-error"===f.phase&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("p",{className:"text-xs text-rose-500",children:["업로드 실패: ",f.error]}),(0,a.jsx)("a",{href:"/app/chat",className:"text-xs text-primary underline",children:"/chat 으로 이동"})]})]})}function m(){return(0,a.jsx)(n.Suspense,{fallback:(0,a.jsx)("div",{className:"p-6 text-sm text-muted-foreground",children:"loading…"}),children:(0,a.jsx)(h,{})})}},80581:(e,t,r)=>{"use strict";var a=r(35793);r.o(a,"useParams")&&r.d(t,{useParams:function(){return a.useParams}}),r.o(a,"usePathname")&&r.d(t,{usePathname:function(){return a.usePathname}}),r.o(a,"useRouter")&&r.d(t,{useRouter:function(){return a.useRouter}}),r.o(a,"useSearchParams")&&r.d(t,{useSearchParams:function(){return a.useSearchParams}})}},e=>{e.O(0,[9906,6390,3170,7358],()=>e(e.s=9258)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9549],{10455:(e,t,a)=>{Promise.resolve().then(a.bind(a,12854))},12854:(e,t,a)=>{"use strict";a.d(t,{ShowroomLayout:()=>eZ});var r=a(54456),n=a(60500),o=a(86766),l=a(75361),i=a(91321),s=a(57818),d=a(4198),c=a(60302),u=a(8286),m=a(37163),p=a(93684),h=a(67276),b=a(9064),x=a(19978),g=a(61856),f=a(80581),v=a(36581),w=a(53391),k=a(5883);function y(e,t){let a=j(e),r=t.filter(e=>j(e)===a);if(r.length<=1)return a;let n=r.findIndex(t=>t.id===e.id);return"".concat(a,"-").concat(n+1)}function j(e){return"agent"===e.kind&&e.agentBrand?"".concat(e.agentBrand,"-cli"):e.provider||"default"}let z=0;function N(){return(z=(z+1)%4096).toString(36).padStart(2,"0")}function S(){return"p-".concat(Date.now().toString(36),"-").concat(N())}let C=["","claude","gemini","grok","codex"],I=["codex","claude","gemini"],A=/@([a-zA-Z][a-zA-Z0-9-]{0,31})/g;function T(e,t){let a=[],r=new Set,n=[],o=[],l=!1;for(let i of e.matchAll(A)){let e=i[1];if(!e)continue;let s=e.toLowerCase();if("all"===s){l=!0,n.push("@all");continue}let d=t.find(e=>y(e,t).toLowerCase()===s);d?(r.has(d.id)||(r.add(d.id),a.push(d)),n.push("@".concat(e))):o.push(e)}return{targets:a,broadcastAll:l,mentions:n,unknown:o}}function E(e,t){var a;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{targets:n,broadcastAll:o}=T(e,t);if(o)return{targets:t.filter(e=>"live"===e.state),mode:"broadcast"};if(n.length>0)return{targets:n,mode:"targeted",routedBy:"mention"};let l=null!=(a=r.roleHint)?a:function(e){let t=e.toLowerCase();for(let a of M)if(P[a].some(a=>(function(e,t,a){if(L.test(a))return e.includes(a);let r=D.get(a);return r||(r=new RegExp("\\b".concat(a.toLowerCase(),"\\b")),D.set(a,r)),r.test(t)})(e,t,a)))return a;return null}(e);if(l){let e=t.filter(e=>e.roleHint===l);if(1===e.length)return{targets:e,mode:"targeted",routedBy:"role-classify",classifiedRole:l}}return{targets:t.filter(e=>"live"===e.state),mode:"broadcast"}}let M=["review","reflect","plan","exec"],P={plan:["계획","기획","설계","구상","아키텍처","디자인","plan","design","architect","spec","roadmap"],exec:["구현","코드","작성","만들어","수정","구축","코딩","implement","code","write","build","create","fix"],review:["리뷰","검토","평가","점검","검사","비판","review","critique","evaluate","check","audit"],reflect:["회고","반성","돌아보","성찰","교훈","되짚","reflect","retrospective","lesson","postmortem"]},L=/[ㄱ-ㆎ가-힣]/,D=new Map,R="elanous.showroom.roleJudgeBackend";async function Y(e,t,a){let r=E(e,t);if("broadcast"!==r.mode||r.classifiedRole||!a)return r;try{let n=await a(e);if(null===n.role)return r;return E(e,t,{roleHint:n.role})}catch(e){return r}}let _=/(^|\s)@([a-zA-Z0-9-]*)$/;function U(e){let t=Number.isFinite(e)&&e>=0?Math.floor(e):0,a=Math.floor(t/60);return"".concat(a,":").concat(String(t%60).padStart(2,"0"))}function F(e,t){return e.filter(e=>e.fromPanelId===t)}let K="elanous.showroom.dmMode";function O(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=e.filter(e=>"live"===e.state&&("chat"===e.kind||t.includeAgent&&"agent"===e.kind)).map(e=>{let a={id:e.id,provider:e.provider};if("agent"===e.kind&&e.agentBrand&&(a.kind="agent",a.backend=function(e){switch(e){case"codex":return"codex-app-server";case"claude":return"claude";case"gemini":return"gemini"}}(e.agentBrand)),e.personaId&&(a.personaId=e.personaId),t.lastAssistantByPanelId){let r=t.lastAssistantByPanelId[e.id];"string"==typeof r&&r.length>0&&(a.lastAssistant=r)}return a});if(0===a.length)return null;let r={targets:a};return t.historyMode&&(r.historyMode=t.historyMode),r}function B(e){if(e)for(let t=e.length-1;t>=0;t--){let a=e[t];if((null==a?void 0:a.role)==="assistant"&&"string"==typeof a.text&&a.text.length>0)return a.text}}let q="elanous.showroom.historyMode";function H(e){return{elanous:{multiLlm:e}}}function J(e,t){return e.length<=t?e:"".concat(e.slice(0,t-1),"…")}var W=a(50733),V=a(12502),$=a(37998),Q=a(60796),Z=a(91285),X=a(22280),G=a(75702),ee=a(16307),et=a(16882);let ea=["plan","exec","review","reflect"],er={plan:"plan",exec:"exec",review:"review",reflect:"reflect"};function en(e){var t,a,o,i,d;let{panel:c,allPanels:u,client:m,onClose:p,onState:h,onProvider:g,onPromoteAssistant:f,outgoingEdges:v,onAddChainEdge:w,onRemoveChainEdge:k,onToggleChainEdgeHitl:j,onRoleHint:z,onPersona:N,dmState:S,dmSessionId:I}=e,[A,T]=(0,n.useState)(!1),[E,M]=(0,n.useState)(null),[P,L]=(0,n.useState)(!1),[D,R]=(0,n.useState)(!1),Y=(0,et.v)(m),_=Y.personas,U=(0,ee.X)(m),F=(0,n.useMemo)(()=>{if(0===U.providerIds.length)return C;let e=["",...U.providerIds];return c.provider&&!e.includes(c.provider)&&e.push(c.provider),e},[U.providerIds,c.provider]),K=(0,n.useMemo)(()=>{if(c.personaId)return _.find(e=>e.personaId===c.personaId)},[c.personaId,_]),O=!!(null==K?void 0:K.brand),B=null!=v?v:[],q=(0,n.useMemo)(()=>u.filter(e=>e.id!==c.id&&!B.some(t=>t.toPanelId===e.id)),[u,c.id,B]),H=(0,n.useCallback)(e=>{if(!w)return;let t=w(c.id,e);if(!t.ok)return void M("route rejected \xb7 ".concat(t.reason));M(null),T(!1)},[w,c.id]),W=null!=(t=null==S?void 0:S.messages)?t:[],V=null!=(a=null==S?void 0:S.partial)?a:"",$=null!=(o=null==S?void 0:S.streaming)&&o,en=null!=(i=null==S?void 0:S.error)?i:null,eo=(0,n.useMemo)(()=>{let e=null==S?void 0:S.toolCalls;return e?Object.values(e).sort((e,t)=>e.startedAt-t.startedAt):[]},[null==S?void 0:S.toolCalls]),el=(0,n.useMemo)(()=>eo.filter(e=>"pending"===e.status||"in_progress"===e.status).length,[eo]),[ei,es]=(0,n.useState)(!1),ed=(0,n.useCallback)(()=>{h("live"===c.state?"mute":"live")},[c.state,h]),ec=(0,n.useMemo)(()=>y(c,u),[c,u]),eu="live"===c.state?"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-300":"mute"===c.state?"bg-zinc-200 text-zinc-600 dark:bg-zinc-700 dark:text-zinc-300":"bg-amber-100 text-amber-700 dark:bg-amber-900/40 dark:text-amber-300";return(0,r.jsxs)("article",{className:"flex h-full min-h-0 min-w-0 flex-1 flex-col rounded-lg border border-zinc-200 bg-white shadow-sm dark:border-zinc-700 dark:bg-zinc-900 ".concat("mute"===c.state?"opacity-60":""),"data-testid":"showroom-panel-".concat(c.id),"aria-label":"Showroom panel ".concat(ec),children:[(0,r.jsxs)("header",{className:"flex flex-wrap items-center justify-between gap-2 border-b border-zinc-200/50 px-3 py-2 dark:border-zinc-700/50",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:["agent"===c.kind&&(0,r.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded bg-amber-100 px-1.5 py-0.5 text-[10px] uppercase text-amber-700 dark:bg-amber-900/40 dark:text-amber-300","data-testid":"showroom-panel-agent-badge-".concat(c.id),title:"agent CLI \xb7 brand=".concat(c.agentBrand),children:[(0,r.jsx)(s.A,{className:"size-3","aria-hidden":!0}),"agent"]}),(0,r.jsxs)("span",{className:"font-medium text-zinc-900 dark:text-zinc-100",children:["@",ec]}),(0,r.jsx)("span",{className:"rounded px-1.5 py-0.5 text-[10px] uppercase ".concat(eu),children:c.state}),N&&(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>R(e=>!e),className:"inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[10px] uppercase ".concat(K?"bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-900/40 dark:text-fuchsia-300":"bg-zinc-100 text-zinc-500 hover:bg-zinc-200 dark:bg-zinc-800 dark:text-zinc-400 dark:hover:bg-zinc-700"),"aria-label":K?"Persona: ".concat(K.displayName):"Bind persona",title:K?"Persona: ".concat(K.displayName," — click to change"):"Bind a persona (system prompt + brand lock)","data-testid":"showroom-panel-persona-toggle-".concat(c.id),style:(null==K?void 0:K.brandColor)?{borderLeft:"3px solid ".concat(K.brandColor)}:void 0,children:[(0,r.jsx)(Q.A,{className:"size-3","aria-hidden":!0}),K?K.displayName.slice(0,12):"persona"]}),D&&(0,r.jsxs)("div",{className:"absolute left-0 top-full z-20 mt-1 w-64 max-h-72 overflow-y-auto rounded-md border border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-700 dark:bg-zinc-900","data-testid":"showroom-panel-persona-menu-".concat(c.id),children:[Y.loading&&(0,r.jsx)("p",{className:"px-1.5 py-1 text-[10px] text-zinc-500",children:"loading…"}),Y.error&&(0,r.jsxs)("p",{className:"px-1.5 py-1 text-[10px] text-rose-600",children:["error: ",Y.error]}),!Y.loading&&0===_.length&&(0,r.jsxs)("p",{className:"px-1.5 py-1 text-[10px] text-zinc-500",children:["no personas (yaml in ",(0,r.jsx)("code",{children:"~/.elanous/personas/"}),")"]}),_.map(e=>{let t=e.personaId===c.personaId;return(0,r.jsxs)("button",{type:"button",onClick:()=>{N(e.brand?{personaId:e.personaId,brand:e.brand}:{personaId:e.personaId}),R(!1)},className:"block w-full rounded px-1.5 py-1 text-left text-[11px] hover:bg-fuchsia-50 dark:hover:bg-fuchsia-900/20 ".concat(t?"font-bold text-fuchsia-700 dark:text-fuchsia-300":""),"data-testid":"showroom-panel-persona-set-".concat(c.id,"-").concat(e.personaId),children:[(0,r.jsx)("span",{className:"mr-1 inline-block size-2 rounded-full",style:e.brandColor?{backgroundColor:e.brandColor}:{backgroundColor:"#a1a1aa"},"aria-hidden":!0}),e.displayName,e.brand&&(0,r.jsx)("span",{className:"ml-1 text-[9px] uppercase text-zinc-500",children:e.brand})]},e.personaId)}),K&&(0,r.jsx)("button",{type:"button",onClick:()=>{N(null),R(!1)},className:"mt-1 block w-full rounded border-t border-zinc-100 px-1.5 py-1 text-left text-[11px] text-rose-600 hover:bg-rose-50 dark:border-zinc-800 dark:text-rose-400 dark:hover:bg-rose-900/20","data-testid":"showroom-panel-persona-clear-".concat(c.id),children:"clear"})]})]}),z&&(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>L(e=>!e),className:"inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[10px] uppercase ".concat(c.roleHint?"bg-violet-100 text-violet-700 dark:bg-violet-900/40 dark:text-violet-300":"bg-zinc-100 text-zinc-500 hover:bg-zinc-200 dark:bg-zinc-800 dark:text-zinc-400 dark:hover:bg-zinc-700"),"aria-label":c.roleHint?"Role: ".concat(c.roleHint):"Set role hint",title:c.roleHint?"Role: ".concat(c.roleHint," — click to change"):"Assign role hint (auto @target)","data-testid":"showroom-panel-role-toggle-".concat(c.id),children:[(0,r.jsx)(Z.A,{className:"size-3","aria-hidden":!0}),null!=(d=c.roleHint)?d:"role"]}),P&&(0,r.jsxs)("div",{className:"absolute left-0 top-full z-20 mt-1 w-32 rounded-md border border-zinc-200 bg-white p-1 shadow-lg dark:border-zinc-700 dark:bg-zinc-900","data-testid":"showroom-panel-role-menu-".concat(c.id),children:[ea.map(e=>(0,r.jsx)("button",{type:"button",onClick:()=>{z(e),L(!1)},className:"block w-full rounded px-1.5 py-1 text-left text-[11px] hover:bg-violet-50 dark:hover:bg-violet-900/20 ".concat(c.roleHint===e?"font-bold text-violet-700 dark:text-violet-300":""),"data-testid":"showroom-panel-role-set-".concat(c.id,"-").concat(e),children:er[e]},e)),c.roleHint&&(0,r.jsx)("button",{type:"button",onClick:()=>{z(null),L(!1)},className:"mt-1 block w-full rounded border-t border-zinc-100 px-1.5 py-1 text-left text-[11px] text-rose-600 hover:bg-rose-50 dark:border-zinc-800 dark:text-rose-400 dark:hover:bg-rose-900/20","data-testid":"showroom-panel-role-clear-".concat(c.id),children:"clear"})]})]}),$&&(0,r.jsx)("span",{className:"text-[10px] text-zinc-500","aria-live":"polite",children:"streaming…"}),eo.length>0&&(0,r.jsxs)("button",{type:"button",onClick:()=>es(e=>!e),"aria-expanded":ei,"aria-controls":"showroom-panel-tools-".concat(c.id),"data-testid":"showroom-panel-tools-pill-".concat(c.id),title:el>0?"".concat(eo.length," tool calls \xb7 ").concat(el," running"):"".concat(eo.length," tool calls"),className:"inline-flex items-center gap-1 rounded-full border px-1.5 py-0.5 text-[10px] font-medium ".concat(el>0?"border-amber-300 bg-amber-50 text-amber-700 dark:border-amber-700 dark:bg-amber-900/30 dark:text-amber-300":"border-zinc-300 bg-zinc-50 text-zinc-600 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-300"),children:[(0,r.jsx)("span",{"aria-hidden":!0,children:"⚙"}),(0,r.jsxs)("span",{children:[eo.length," tool",1===eo.length?"":"s",el>0?" \xb7 ".concat(el," running"):""]})]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1",children:["agent"===c.kind?(0,r.jsxs)("span",{className:"rounded-md border border-amber-300 bg-amber-50 px-1.5 py-0.5 text-[11px] font-medium text-amber-700 dark:border-amber-700 dark:bg-amber-900/30 dark:text-amber-300","data-testid":"showroom-panel-brand-".concat(c.id),title:"Agent CLI brand is locked at create time (P5 D6)",children:[c.agentBrand,"-cli"]}):(0,r.jsx)("select",{value:c.provider,onChange:e=>g(e.target.value),disabled:$||O,className:"rounded-md border border-zinc-300 bg-white px-1.5 py-0.5 text-xs disabled:cursor-not-allowed disabled:opacity-60 dark:border-zinc-700 dark:bg-zinc-800","aria-label":"Provider",title:O?'Provider locked by persona "'.concat(null==K?void 0:K.displayName,'" (brand=').concat(null==K?void 0:K.brand,")"):"Provider","data-testid":"showroom-panel-provider-".concat(c.id),children:F.map(e=>(0,r.jsx)("option",{value:e,children:e||"(default)"},e))}),!!w&&!!k&&!!v&&(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>{T(e=>!e),M(null)},className:"relative rounded p-1 hover:bg-zinc-100 dark:hover:bg-zinc-800","aria-label":"Forward chain \xb7 agent-to-agent direct routing",title:B.length>0?"Chain: forwards to ".concat(B.length," panel(s)"):"Set up auto-forward to another panel","data-testid":"showroom-panel-chain-toggle-".concat(c.id),children:[(0,r.jsx)(X.A,{className:"size-3.5","aria-hidden":!0}),B.length>0&&(0,r.jsx)("span",{className:"absolute -right-0.5 -top-0.5 flex size-3.5 items-center justify-center rounded-full bg-indigo-500 text-[8px] font-bold text-white","aria-hidden":!0,children:B.length})]}),A&&(0,r.jsxs)("div",{className:"absolute right-0 top-full z-20 mt-1 w-56 rounded-md border border-zinc-200 bg-white p-2 shadow-lg dark:border-zinc-700 dark:bg-zinc-900","data-testid":"showroom-panel-chain-menu-".concat(c.id),children:[(0,r.jsx)("p",{className:"mb-1 text-[10px] uppercase text-zinc-500",children:"Auto-forward to"}),B.length>0&&(0,r.jsx)("ul",{className:"mb-2 space-y-0.5 border-b border-zinc-100 pb-2 dark:border-zinc-800",children:B.map(e=>{let t=u.find(t=>t.id===e.toPanelId),a=t?y(t,u):e.toPanelId;return(0,r.jsxs)("li",{className:"flex items-center justify-between gap-1 rounded bg-indigo-50 px-1.5 py-1 text-[11px] dark:bg-indigo-900/30","data-testid":"showroom-panel-chain-edge-".concat(e.id),children:[(0,r.jsxs)("span",{className:"truncate text-indigo-700 dark:text-indigo-300",children:["→ @",a]}),(0,r.jsxs)("div",{className:"flex shrink-0 items-center gap-0.5",children:[j&&(0,r.jsx)("button",{type:"button",onClick:()=>j(e.id),className:"rounded p-0.5 text-[11px] leading-none ".concat(e.hitl?"bg-amber-100 text-amber-700 hover:bg-amber-200 dark:bg-amber-900/40 dark:text-amber-300 dark:hover:bg-amber-900/60":"text-indigo-500/60 hover:bg-indigo-100 dark:hover:bg-indigo-800/40"),"aria-pressed":!!e.hitl,"aria-label":e.hitl?"Disable confirm gate for forward to @".concat(a):"Enable confirm gate for forward to @".concat(a),title:e.hitl?"Confirm before forward (click to auto-forward)":"Auto-forward (click to require confirm)","data-testid":"showroom-panel-chain-hitl-".concat(e.id),children:e.hitl?"\uD83D\uDD12":"⚡"}),k&&(0,r.jsx)("button",{type:"button",onClick:()=>k(e.id),className:"rounded p-0.5 hover:bg-indigo-100 dark:hover:bg-indigo-800/40","aria-label":"Remove forward to @".concat(a),"data-testid":"showroom-panel-chain-remove-".concat(e.id),children:(0,r.jsx)(l.A,{className:"size-3","aria-hidden":!0})})]})]},e.id)})}),q.length>0?(0,r.jsx)("ul",{className:"space-y-0.5",children:q.map(e=>{let t=y(e,u);return(0,r.jsx)("li",{children:(0,r.jsxs)("button",{type:"button",onClick:()=>H(e.id),className:"block w-full rounded px-1.5 py-1 text-left text-[11px] hover:bg-indigo-50 dark:hover:bg-indigo-900/20","data-testid":"showroom-panel-chain-add-".concat(c.id,"-").concat(e.id),children:["+ @",t]})},e.id)})}):(0,r.jsx)("p",{className:"text-[11px] text-zinc-500",children:"no candidates"}),E&&(0,r.jsx)("p",{className:"mt-1 text-[10px] text-rose-600 dark:text-rose-400","data-testid":"showroom-panel-chain-error-".concat(c.id),children:E})]})]}),(0,r.jsx)("button",{type:"button",onClick:ed,className:"rounded p-1 hover:bg-zinc-100 dark:hover:bg-zinc-800","aria-label":"live"===c.state?"Mute panel":"Unmute panel",title:"live"===c.state?"Mute":"Unmute",children:"live"===c.state?(0,r.jsx)(x.A,{className:"size-3.5","aria-hidden":!0}):(0,r.jsx)(b.A,{className:"size-3.5","aria-hidden":!0})}),(0,r.jsx)("button",{type:"button",onClick:p,className:"rounded p-1 hover:bg-zinc-100 dark:hover:bg-zinc-800","aria-label":"Close panel",title:"Close",children:(0,r.jsx)(l.A,{className:"size-3.5","aria-hidden":!0})})]})]}),(0,r.jsxs)("div",{className:"flex-1 overflow-y-auto p-3 text-sm",children:[ei&&eo.length>0&&(0,r.jsx)("ul",{id:"showroom-panel-tools-".concat(c.id),"data-testid":"showroom-panel-tools-list-".concat(c.id),className:"mb-3 rounded-md border border-zinc-200 bg-zinc-50/60 p-2 text-[11px] dark:border-zinc-700 dark:bg-zinc-800/40",children:eo.map(e=>{let t="completed"===e.status?"✅":"failed"===e.status?"❌":"⏳",a=function(e){let t=e.name&&e.name.length>0?e.name:"(unnamed)",a=J(t,56),r=null;if(e.input){let t=Object.entries(e.input);if(t.length>0){let[e,a]=t[0],n="string"==typeof a?a:null===a?"null":void 0===a?"undefined":JSON.stringify(a);r="".concat(e,"=").concat(n)}}else e.output&&e.output.length>0&&(r=e.output);if(null===r)return{name:a,meta:null};let n=J(r,96);return!function(e,t){let a=e=>e.replace(/…$/,"").replace(/^command=/,"").trim().toLowerCase(),r=a(e),n=a(t);if(!r||!n)return!1;if(r===n)return!0;let o=n.indexOf("="),l=o>=0?n.slice(o+1).trim():n;return!!(l&&(r.startsWith(l)||l.startsWith(r)))}(t,r)?{name:a,meta:n}:{name:a,meta:null}}(e);return(0,r.jsxs)("li",{"data-testid":"showroom-panel-tool-".concat(c.id,"-").concat(e.id),className:"flex items-baseline gap-2 py-0.5",children:[(0,r.jsx)("span",{"aria-hidden":!0,children:t}),(0,r.jsx)("span",{className:"truncate font-medium text-zinc-800 dark:text-zinc-200",title:e.name||"(unnamed)",children:a.name}),a.meta&&(0,r.jsxs)("span",{className:"truncate text-zinc-500 dark:text-zinc-400",title:a.meta,children:["\xb7 ",a.meta]}),("pending"===e.status||"in_progress"===e.status)&&(0,r.jsx)("span",{className:"text-[10px] text-amber-600 dark:text-amber-300",children:"pending"===e.status?"pending":"running"})]},e.id)})}),0===W.length&&!$&&(0,r.jsx)("p",{className:"text-xs text-zinc-500",children:I?"대기 중 \xb7 broadcast 또는 mention 으로 시작":"DM session 준비 중…"}),W.map(e=>(0,r.jsxs)("div",{className:"mb-3 ".concat("user"===e.role?"text-zinc-900 dark:text-zinc-100":"text-zinc-700 dark:text-zinc-300"),children:[(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsx)("span",{className:"text-[10px] uppercase text-zinc-500",children:e.role}),"assistant"===e.role&&f&&e.text.length>0&&(0,r.jsxs)("button",{type:"button",onClick:()=>f({messageId:e.id,text:e.text}),className:"inline-flex items-center gap-0.5 rounded px-1 py-0.5 text-[10px] text-indigo-600 hover:bg-indigo-50 dark:text-indigo-300 dark:hover:bg-indigo-900/30","aria-label":"Promote answer to prior context",title:"Promote → next broadcast 에 context 로 첨부","data-testid":"showroom-panel-promote-".concat(c.id,"-").concat(e.id),children:[(0,r.jsx)(G.A,{className:"size-3","aria-hidden":!0}),"promote"]})]}),(0,r.jsx)("p",{className:"whitespace-pre-wrap",children:e.text})]},e.id)),$&&(0,r.jsxs)("div",{className:"mb-3 text-zinc-700 dark:text-zinc-300",children:[(0,r.jsx)("span",{className:"text-[10px] uppercase text-zinc-500",children:"assistant…"}),(0,r.jsx)("p",{className:"whitespace-pre-wrap",children:V||"..."})]}),en&&(0,r.jsx)("div",{className:"mt-2 rounded bg-rose-50 p-2 text-xs text-rose-700 dark:bg-rose-900/30 dark:text-rose-300",children:en})]}),(0,r.jsx)("footer",{className:"border-t border-zinc-200/50 px-3 py-1.5 text-[10px] text-zinc-500 dark:border-zinc-700/50","data-testid":"showroom-panel-footer-".concat(c.id),children:(0,r.jsxs)("span",{"data-testid":"showroom-panel-dm-footer-".concat(c.id),children:["DM \xb7"," ",I?"layout sess: ".concat(I.slice(0,8),"…"):"no layout session"]})})]})}var eo=a(39999),el=a(96810),ei=a(2263),es=a(39681),ed=a(60685),ec=a(64234),eu=a(16460),em=a(65489),ep=a(56747),eh=a(21259),eb=a(75591),ex=a(22720),eg=a(71829),ef=a(21569),ev=a(55499);async function ew(e){var t,a,r,n;let o=null!=(a=null!=(t=e.filename)?t:e.file instanceof File?e.file.name:void 0)?a:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Date,t=e.toISOString().replace(/[:.]/g,"-").toLowerCase();return"camera-".concat(t,".jpg")}(),l=await (0,ev.v)({baseUrl:e.baseUrl,...void 0!==e.token?{token:e.token}:{},file:e.file,filename:o});if(!l.ok)return{ok:!1,stage:"upload",status:l.status,reason:l.reason};if("session"===e.route.kind)return{ok:!0,route:"session",meta:l.meta};let i=e.baseUrl.replace(/\/$/,""),s=null!=(r=e.fetchImpl)?r:"undefined"!=typeof fetch?fetch:null;if(!s)return{ok:!1,stage:"intake",status:0,reason:"fetch unavailable"};try{let t=function(e){var t,a;let r=e.meta,n=null!=(a=null==(t=e.caption)?void 0:t.trim())?a:"",o="[image: ".concat(r.filename).concat(r.path?" \xb7 ".concat(r.path):"","]"),l={text:n?"".concat(o," ").concat(n):o,actor:"pwa-camera",channelContext:{kind:"pwa-camera",attachmentId:r.id,attachmentFilename:r.filename,attachmentMediaType:r.mediaType,...r.path?{attachmentPath:r.path}:{},...r.downloadUrl?{attachmentUrl:r.downloadUrl}:{}}};return e.receivedAt&&(l.receivedAt=e.receivedAt),e.intakeId&&(l.intakeId=e.intakeId),l}({meta:l.meta,...void 0!==e.caption?{caption:e.caption}:{}}),a=await s("".concat(i,"/v1/intake"),{method:"POST",headers:{"content-type":"application/json",...e.token?{authorization:"Bearer ".concat(e.token)}:{}},body:JSON.stringify(t)});if(!a.ok){let e=await a.text().catch(()=>"");return{ok:!1,stage:"intake",status:a.status,reason:e||"HTTP ".concat(a.status)}}let r=await a.json().catch(()=>({}));return{ok:!0,route:"intake",meta:l.meta,intakeId:null!=(n=r.intakeId)?n:""}}catch(e){return{ok:!1,stage:"intake",status:0,reason:String(e instanceof Error?e.message:e)}}}function ek(e){let{pendingFile:t,pendingPreviewUrl:a,caption:n,busy:o,error:l,onPickFile:i,onCaptionChange:s,onRouteSession:d,onRouteIntake:c,onCancel:u}=e;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{type:"button",onClick:i,disabled:o,"aria-label":"attach photo",title:"attach photo (camera or file)","data-testid":"showroom-camera-button",className:"rounded p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-50",children:o?(0,r.jsx)(eb.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,r.jsx)(ex.A,{className:"h-3.5 w-3.5"})}),t&&(0,r.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":"Camera intake","data-testid":"showroom-camera-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:u,disabled:o,"aria-label":"cancel","data-testid":"showroom-camera-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:"✕"})]}),a&&(0,r.jsx)("img",{src:a,alt:"camera capture preview","data-testid":"showroom-camera-preview",className:"max-h-72 w-full rounded-md border border-zinc-200 object-contain dark:border-zinc-800"}),(0,r.jsx)("textarea",{value:n,onChange:e=>s(e.target.value),disabled:o,placeholder:"사진 설명 (선택 \xb7 intake 저장 시 KGS 검색 키워드)",rows:2,"data-testid":"showroom-camera-caption",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:d,disabled:o,"data-testid":"showroom-camera-route-session",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:cursor-not-allowed disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700",children:o?"...":"Session 첨부"}),(0,r.jsx)("button",{type:"button",onClick:c,disabled:o,"data-testid":"showroom-camera-route-intake",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:o?"...":"Intake 저장"})]}),l&&(0,r.jsx)("div",{role:"alert","data-testid":"showroom-camera-error",className:"text-xs text-red-600 dark:text-red-400",children:l})]})})]})}function ey(e){let{onAttachToSession:t}=e,{config:a}=(0,v.Q)(),o=(0,n.useRef)(null),[l,i]=(0,n.useState)(null),[s,d]=(0,n.useState)(null),[c,u]=(0,n.useState)(""),[m,p]=(0,n.useState)(!1),[h,b]=(0,n.useState)(null),x=()=>{if(s)try{URL.revokeObjectURL(s)}catch(e){}i(null),d(null),u(""),p(!1),b(null)},g=async e=>{if(!l)return;if(!a.baseUrl)return void b("Daemon URL 미설정 — Settings 에서 입력");p(!0),b(null),(0,W.cY)("showroom.camera.submit",{route:e,hasCaption:c.trim().length>0});let r=await ew({baseUrl:a.baseUrl,...a.token?{token:a.token}:{},file:l,...c.trim()?{caption:c}:{},route:{kind:e}});if(!r.ok){b("".concat(r.stage," 실패: ").concat(r.reason)),p(!1),(0,W.cY)("showroom.camera.error",{stage:r.stage,status:r.status});return}"session"===r.route?(null==t||t(r.meta),eg.oR.success("\uD83D\uDCCE ".concat(r.meta.filename," (").concat((r.meta.size/1024).toFixed(1)," kB) \xb7 session 첨부됨"))):eg.oR.success("\uD83D\uDCE5 사진 저장됨 \xb7 intake ".concat(r.intakeId||"(id 없음)")),(0,W.cY)("showroom.camera.ok",{route:r.route,id:r.meta.id}),ef.K.emit({surface:"pwa",intent:{layer:"gesture",kind:"session"===r.route?"pwa.gesture.camera_attach_session":"pwa.gesture.camera_intake_save",target:{kind:"attachment",id:r.meta.id,label:r.meta.filename},value:{route:r.route,hasCaption:c.trim().length>0,sizeKb:Math.round(r.meta.size/1024)}},..."intake"===r.route&&r.intakeId?{context:{active_workflow_run_id:r.intakeId}}:{}}),x()};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(ek,{pendingFile:l,pendingPreviewUrl:s,caption:c,busy:m,error:h,onPickFile:()=>{var e;null==(e=o.current)||e.click()},onCaptionChange:u,onRouteSession:()=>{g("session")},onRouteIntake:()=>{g("intake")},onCancel:x}),(0,r.jsx)("input",{ref:o,type:"file",accept:"image/*",capture:"environment",className:"hidden",onChange:e=>{var t;let a=null==(t=e.target.files)?void 0:t[0];if(e.target.value="",!a)return;(0,W.cY)("showroom.camera.pick",{filename:a.name,size:a.size,type:a.type});let r=null;try{r=URL.createObjectURL(a)}catch(e){}i(a),d(r),u(""),b(null)},"data-testid":"showroom-camera-input"})]})}var ej=a(12127);function ez(e){var t,a,o,i,d,c,u;let{onSend:m,panels:p,liveCount:h,attachments:b,onAttach:x,onRemoveAttachment:g,terminalContexts:f,onPinTerminalContext:v,onRemoveTerminalContext:w,priorAnswers:k,onRemovePriorAnswer:j,onTogglePriorAnswer:z,urlContexts:S,onAddUrlContext:C,onRemoveUrlContext:I,clipboardContexts:A,onAddClipboardContext:M,onRemoveClipboardContext:P,videoContexts:L,onAddVideoContext:D,onRemoveVideoContext:R,audioContexts:Y,onAddAudioContext:U,onRemoveAudioContext:F,onUpdateAudioTranscript:K,listTerminals:O,fetchTerminalScrollback:B,disabled:q=!1}=e,[H,J]=(0,n.useState)(""),[W,V]=(0,n.useState)(!1),$=(0,n.useRef)(null),[Q,Z]=(0,n.useState)(""),[X,ee]=(0,n.useState)(!1),[et,ea]=(0,n.useState)([]),[er,en]=(0,n.useState)(!1),[eb,ex]=(0,n.useState)(null),[eg,ef]=(0,n.useState)(null),ev=!!O&&!!B,ew=(0,n.useCallback)(async()=>{if(O){en(!0),ex(null);try{let{terminals:e}=await O();ea(e)}catch(e){ex(String(e))}finally{en(!1)}}},[O]);(0,n.useEffect)(()=>{X&&ev&&ew()},[X,ev,ew]);let ek=(0,n.useCallback)(async e=>{if(B){ef(e);try{let{scrollback:t}=await B(e,50);Z(t)}catch(e){ex("scrollback: ".concat(String(e)))}finally{ef(null)}}},[B]),[ez,eN]=(0,n.useState)(null),eS=(0,n.useCallback)(()=>{var e;let t=$.current;if(!t)return void eN(null);let a=null!=(e=t.selectionStart)?e:H.length;eN(function(e,t,a){var r;let n=e.slice(0,t),o=_.exec(n);if(!o)return null;let l=null!=(r=o[2])?r:"",i=n.length-l.length-1,s=l.toLowerCase();return{tokenStart:i,tokenEnd:t,partial:l,matches:a.filter(e=>y(e,a).toLowerCase().startsWith(s)),allMatches:"all".startsWith(s)}}(H,a,p))},[H,p]),eC=(0,n.useCallback)(e=>{let t=$.current;t&&ez&&(J(H.slice(0,ez.tokenStart)+"@".concat(e," ")+H.slice(ez.tokenEnd)),eN(null),requestAnimationFrame(()=>{let a=ez.tokenStart+e.length+2;t.setSelectionRange(a,a),t.focus()}))},[H,ez]),eI=(0,n.useCallback)(()=>{let e=Q.trim();e&&v&&(v({id:"tc-".concat(Date.now().toString(36),"-").concat(N()),label:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now(),a=e.split("\n").length,r=new Date(t),n=String(r.getHours()).padStart(2,"0"),o=String(r.getMinutes()).padStart(2,"0");return"terminal \xb7 ".concat(a," lines \xb7 ").concat(n,":").concat(o)}(e),text:e,pinnedAt:Date.now()}),Z(""),ee(!1))},[Q,v]),eA=(0,n.useCallback)(async()=>{let e=H.trim();if(e&&!W&&!q){V(!0);try{await m(e),J("")}finally{V(!1)}}},[H,W,q,m]),eT=(0,n.useCallback)(e=>{if(ez&&"Enter"===e.key&&!e.shiftKey&&!e.metaKey&&!e.ctrlKey){let t=ez.matches[0];if(t){e.preventDefault(),eC(y(t,p));return}if(ez.allMatches){e.preventDefault(),eC("all");return}}if(ez&&"Escape"===e.key){e.preventDefault(),eN(null);return}"Enter"!==e.key||e.shiftKey||e.metaKey||e.ctrlKey||(e.preventDefault(),eA())},[eA,ez,eC,p]),eE=(0,n.useCallback)(e=>{var t,a;let r=$.current,n="@".concat(e," ");if(!r)return void J(e=>"".concat(e).concat(n));let o=null!=(t=r.selectionStart)?t:H.length,l=null!=(a=r.selectionEnd)?a:H.length;J(H.slice(0,o)+n+H.slice(l)),requestAnimationFrame(()=>{let e=o+n.length;r.setSelectionRange(e,e),r.focus()})},[H]),eM=(0,n.useMemo)(()=>T(H,p),[H,p]),eP=E(H,p),eL=0===h&&"broadcast"===eP.mode?"No live panel":"broadcast"===eP.mode?"Send \xb7 ".concat(eP.targets.length):1===eP.targets.length?"Send \xb7 @".concat(y(eP.targets[0],p)):"Send \xb7 @".concat(eP.targets.length),eD=!q&&!W&&H.trim().length>0&&eP.targets.length>0,eR=(null!=(t=null==b?void 0:b.length)?t:0)>0,eY=(null!=(a=null==f?void 0:f.length)?a:0)>0,e_=(null!=(o=null==k?void 0:k.length)?o:0)>0,eU=(null!=(i=null==S?void 0:S.length)?i:0)>0,eF=(null!=(d=null==A?void 0:A.length)?d:0)>0,eK=(null!=(c=null==L?void 0:L.length)?c:0)>0,eO=(null!=(u=null==Y?void 0:Y.length)?u:0)>0,eB=(0,n.useRef)(null),eq=(0,n.useRef)(null),[eH,eJ]=(0,n.useState)(!1),[eW,eV]=(0,n.useState)(null),[e$,eQ]=(0,n.useState)(!1),[eZ,eX]=(0,n.useState)(null),eG=(0,n.useCallback)(async e=>{if(D){eJ(!0),eV(null);try{var t;let a=await D(e);a.ok||eV(null!=(t=a.reason)?t:"video extract failed")}finally{eJ(!1)}}},[D]),e0=(0,n.useCallback)(async e=>{if(U){eQ(!0),eX(null);try{var t;let a=await U(e);a.ok||eX(null!=(t=a.reason)?t:"audio extract failed")}finally{eQ(!1)}}},[U]),e1=(0,n.useCallback)((e,t)=>{if(!K)return;let a=window.prompt("Audio transcript:",t);null!==a&&K(e,a)},[K]),[e5,e3]=(0,n.useState)(""),[e2,e7]=(0,n.useState)(!1),[e9,e6]=(0,n.useState)(null),[e4,e8]=(0,n.useState)(!1),te=(0,n.useCallback)(async()=>{if(!C)return;let e=e5.trim();if(!e)return void e6("url required");e7(!0),e6(null);try{let a=await C(e);if(a.ok)e3(""),e8(!1);else{var t;e6(null!=(t=a.reason)?t:"fetch failed")}}finally{e7(!1)}},[e5,C]),[tt,ta]=(0,n.useState)(!1),[tr,tn]=(0,n.useState)(null),to=(0,n.useCallback)(async()=>{if(M){ta(!0),tn(null);try{var e;let t=await M();t.ok||tn(null!=(e=t.reason)?e:"paste failed")}finally{ta(!1)}}},[M]);return(0,r.jsxs)("div",{className:"border-t border-zinc-200/50 bg-zinc-50 px-3 py-2 dark:border-zinc-700/50 dark:bg-zinc-900/40",children:[eU&&(0,r.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-1.5 text-[10px] text-zinc-500","data-testid":"showroom-url-context-list",children:[(0,r.jsx)("span",{children:"url:"}),null==S?void 0:S.map(e=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full border border-sky-300 bg-white px-2 py-0.5 text-[11px] font-medium text-sky-700 dark:border-sky-700 dark:bg-zinc-800 dark:text-sky-300","data-testid":"showroom-url-chip-".concat(e.id),title:"".concat(e.url,"\n\n").concat(e.text.slice(0,200)).concat(e.text.length>200?"…":""),children:[(0,r.jsx)("span",{className:"max-w-[220px] truncate",children:e.label}),I&&(0,r.jsx)("button",{type:"button",onClick:()=>I(e.id),disabled:q||W,className:"rounded-full p-0.5 hover:bg-sky-100 disabled:cursor-not-allowed disabled:opacity-50 dark:hover:bg-sky-900/50","aria-label":"Remove url context ".concat(e.label),"data-testid":"showroom-url-remove-".concat(e.id),children:(0,r.jsx)(l.A,{className:"size-2.5","aria-hidden":!0})})]},e.id))]}),eK&&(0,r.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-1.5 text-[10px] text-zinc-500","data-testid":"showroom-video-context-list",children:[(0,r.jsx)("span",{children:"video:"}),null==L?void 0:L.map(e=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full border border-purple-300 bg-white px-2 py-0.5 text-[11px] font-medium text-purple-700 dark:border-purple-700 dark:bg-zinc-800 dark:text-purple-300","data-testid":"showroom-video-chip-".concat(e.id),title:"".concat(e.filename," \xb7 ").concat(e.widthPx,"x").concat(e.heightPx," \xb7 ").concat(e.durationSec,"s"),children:[(0,r.jsx)(eo.A,{className:"size-3","aria-hidden":!0}),(0,r.jsx)("span",{className:"max-w-[220px] truncate",children:e.label}),R&&(0,r.jsx)("button",{type:"button",onClick:()=>R(e.id),disabled:q||W,className:"rounded-full p-0.5 hover:bg-purple-100 disabled:cursor-not-allowed disabled:opacity-50 dark:hover:bg-purple-900/50","aria-label":"Remove video context ".concat(e.label),"data-testid":"showroom-video-remove-".concat(e.id),children:(0,r.jsx)(l.A,{className:"size-2.5","aria-hidden":!0})})]},e.id))]}),eO&&(0,r.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-1.5 text-[10px] text-zinc-500","data-testid":"showroom-audio-context-list",children:[(0,r.jsx)("span",{children:"audio:"}),null==Y?void 0:Y.map(e=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full border border-cyan-300 bg-white px-2 py-0.5 text-[11px] font-medium text-cyan-700 dark:border-cyan-700 dark:bg-zinc-800 dark:text-cyan-300","data-testid":"showroom-audio-chip-".concat(e.id),title:"".concat(e.filename," \xb7 ").concat(e.durationSec,"s \xb7 ").concat(e.transcript?"transcript present":"click to add transcript"),children:[(0,r.jsx)(el.A,{className:"size-3","aria-hidden":!0}),(0,r.jsxs)("button",{type:"button",onClick:()=>e1(e.id,e.transcript),disabled:q||W||!K,className:"max-w-[220px] truncate hover:underline disabled:cursor-default disabled:no-underline","data-testid":"showroom-audio-edit-".concat(e.id),children:[e.label,e.transcript?" \xb7 \uD83D\uDCDD":""]}),F&&(0,r.jsx)("button",{type:"button",onClick:()=>F(e.id),disabled:q||W,className:"rounded-full p-0.5 hover:bg-cyan-100 disabled:cursor-not-allowed disabled:opacity-50 dark:hover:bg-cyan-900/50","aria-label":"Remove audio context ".concat(e.label),"data-testid":"showroom-audio-remove-".concat(e.id),children:(0,r.jsx)(l.A,{className:"size-2.5","aria-hidden":!0})})]},e.id))]}),eW&&(0,r.jsx)("div",{className:"mb-2 px-2 py-1 text-[11px] text-purple-700 dark:text-purple-300","data-testid":"showroom-video-error",children:eW}),eZ&&(0,r.jsx)("div",{className:"mb-2 px-2 py-1 text-[11px] text-cyan-700 dark:text-cyan-300","data-testid":"showroom-audio-error",children:eZ}),eF&&(0,r.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-1.5 text-[10px] text-zinc-500","data-testid":"showroom-clipboard-context-list",children:[(0,r.jsx)("span",{children:"clip:"}),null==A?void 0:A.map(e=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full border border-emerald-300 bg-white px-2 py-0.5 text-[11px] font-medium text-emerald-700 dark:border-emerald-700 dark:bg-zinc-800 dark:text-emerald-300","data-testid":"showroom-clipboard-chip-".concat(e.id),title:e.text.slice(0,200),children:[(0,r.jsx)("span",{className:"max-w-[220px] truncate",children:e.label}),P&&(0,r.jsx)("button",{type:"button",onClick:()=>P(e.id),disabled:q||W,className:"rounded-full p-0.5 hover:bg-emerald-100 disabled:cursor-not-allowed disabled:opacity-50 dark:hover:bg-emerald-900/50","aria-label":"Remove clipboard context ".concat(e.label),"data-testid":"showroom-clipboard-remove-".concat(e.id),children:(0,r.jsx)(l.A,{className:"size-2.5","aria-hidden":!0})})]},e.id))]}),e4&&C&&(0,r.jsxs)("div",{className:"mb-2 rounded border border-sky-200 bg-sky-50 p-2 dark:border-sky-800 dark:bg-sky-900/20",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)("input",{type:"url",value:e5,onChange:e=>e3(e.target.value),placeholder:"https://...",disabled:e2,className:"flex-1 rounded border border-sky-300 bg-white px-2 py-1 text-xs disabled:opacity-60 dark:border-sky-700 dark:bg-zinc-900","data-testid":"showroom-url-input"}),(0,r.jsx)("button",{type:"button",onClick:te,disabled:e2||!e5.trim(),className:"rounded bg-sky-600 px-2 py-1 text-xs text-white hover:bg-sky-700 disabled:cursor-not-allowed disabled:opacity-50","data-testid":"showroom-url-fetch",children:e2?"…":"fetch"}),(0,r.jsx)("button",{type:"button",onClick:()=>{e8(!1),e3(""),e6(null)},className:"rounded p-1 text-zinc-500 hover:bg-zinc-100 dark:hover:bg-zinc-800","aria-label":"Close url input",children:(0,r.jsx)(l.A,{className:"size-3","aria-hidden":!0})})]}),e9&&(0,r.jsx)("p",{className:"mt-1 text-[10px] text-rose-600","data-testid":"showroom-url-error",children:e9})]}),tr&&(0,r.jsxs)("p",{className:"mb-2 text-[10px] text-rose-600","data-testid":"showroom-clipboard-error",children:["clipboard: ",tr]}),e_&&(0,r.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-1.5 text-[10px] text-zinc-500","data-testid":"showroom-prior-answer-list",children:[(0,r.jsx)(G.A,{className:"size-3","aria-hidden":!0}),(0,r.jsx)("span",{children:"prior:"}),null==k?void 0:k.map(e=>{let t=!1!==e.enabled;return(0,r.jsxs)("span",{className:"".concat("inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium transition-opacity"," ").concat(t?"border border-indigo-300 bg-white text-indigo-700 dark:border-indigo-700 dark:bg-zinc-800 dark:text-indigo-300":"border border-dashed border-zinc-300 bg-zinc-50 text-zinc-400 line-through opacity-60 dark:border-zinc-600 dark:bg-zinc-900 dark:text-zinc-500"),"data-testid":"showroom-prior-chip-".concat(e.id),"data-enabled":t?"true":"false",title:e.text.slice(0,200),children:[z?(0,r.jsx)("button",{type:"button",onClick:()=>z(e.id),disabled:q||W,className:"max-w-[200px] truncate text-left hover:underline disabled:cursor-not-allowed disabled:opacity-50","aria-label":"".concat(t?"Disable":"Enable"," prior answer ").concat(e.label),"aria-pressed":t,"data-testid":"showroom-prior-toggle-".concat(e.id),children:e.label}):(0,r.jsx)("span",{className:"max-w-[200px] truncate",children:e.label}),j&&(0,r.jsx)("button",{type:"button",onClick:()=>j(e.id),disabled:q||W,className:"rounded-full p-0.5 hover:bg-indigo-100 disabled:cursor-not-allowed disabled:opacity-50 dark:hover:bg-indigo-900/50","aria-label":"Remove prior answer ".concat(e.label),"data-testid":"showroom-prior-remove-".concat(e.id),children:(0,r.jsx)(l.A,{className:"size-2.5","aria-hidden":!0})})]},e.id)})]}),eY&&(0,r.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-1.5 text-[10px] text-zinc-500","data-testid":"showroom-terminal-context-list",children:[(0,r.jsx)(ei.A,{className:"size-3","aria-hidden":!0}),(0,r.jsx)("span",{children:"terminal:"}),null==f?void 0:f.map(e=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full border border-violet-300 bg-white px-2 py-0.5 text-[11px] font-medium text-violet-700 dark:border-violet-700 dark:bg-zinc-800 dark:text-violet-300","data-testid":"showroom-terminal-chip-".concat(e.id),title:e.text.slice(0,200),children:[(0,r.jsx)("span",{className:"max-w-[200px] truncate",children:e.label}),w&&(0,r.jsx)("button",{type:"button",onClick:()=>w(e.id),disabled:q||W,className:"rounded-full p-0.5 hover:bg-violet-100 disabled:cursor-not-allowed disabled:opacity-50 dark:hover:bg-violet-900/50","aria-label":"Remove terminal context ".concat(e.label),"data-testid":"showroom-terminal-remove-".concat(e.id),children:(0,r.jsx)(l.A,{className:"size-2.5","aria-hidden":!0})})]},e.id))]}),X&&v&&(0,r.jsxs)("div",{className:"mb-2 rounded-md border border-violet-300 bg-violet-50/40 p-2 dark:border-violet-700 dark:bg-violet-900/20","data-testid":"showroom-terminal-pin-draft",children:[(0,r.jsxs)("div",{className:"mb-1 flex items-center justify-between text-[10px] text-violet-700 dark:text-violet-300",children:[(0,r.jsx)("span",{children:ev?"active terminal 선택 또는 paste \xb7 Pin 으로 broadcast prefix 추가":"terminal output 을 paste \xb7 Pin 으로 broadcast prefix 추가"}),(0,r.jsx)("button",{type:"button",onClick:()=>{ee(!1),Z("")},className:"rounded p-0.5 hover:bg-violet-100 dark:hover:bg-violet-900/40","aria-label":"Cancel pin",children:(0,r.jsx)(l.A,{className:"size-3","aria-hidden":!0})})]}),ev&&(0,r.jsxs)("div",{className:"mb-2 rounded border border-violet-200 bg-white/80 p-1.5 dark:border-violet-700 dark:bg-zinc-900/60","data-testid":"showroom-terminal-picker",children:[(0,r.jsxs)("div",{className:"mb-1 flex items-center justify-between text-[10px] text-violet-600 dark:text-violet-300",children:[(0,r.jsxs)("span",{children:["active terminals",er&&" \xb7 loading…",!er&&0===et.length&&" \xb7 없음"]}),(0,r.jsx)("button",{type:"button",onClick:()=>void ew(),disabled:er,className:"inline-flex items-center gap-0.5 rounded p-0.5 hover:bg-violet-100 disabled:opacity-50 dark:hover:bg-violet-900/40","aria-label":"Refresh terminals list","data-testid":"showroom-terminal-picker-refresh",children:(0,r.jsx)(es.A,{className:"size-3 ".concat(er?"animate-spin":""),"aria-hidden":!0})})]}),eb&&(0,r.jsx)("div",{className:"mb-1 text-[10px] text-rose-600 dark:text-rose-300",children:eb}),et.length>0&&(0,r.jsx)("div",{className:"flex flex-wrap gap-1",children:et.map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>void ek(e.id),disabled:eg===e.id,className:"inline-flex max-w-[220px] items-center gap-1 truncate rounded-full border border-violet-300 bg-white px-2 py-0.5 text-[10px] text-violet-700 hover:bg-violet-100 disabled:cursor-not-allowed disabled:opacity-50 dark:border-violet-700 dark:bg-zinc-800 dark:text-violet-300 dark:hover:bg-violet-900/40",title:"".concat(e.name||e.id).concat(e.status?" \xb7 ".concat(e.status):""),"data-testid":"showroom-terminal-picker-".concat(e.id),children:[(0,r.jsx)(ei.A,{className:"size-3","aria-hidden":!0}),(0,r.jsxs)("span",{className:"truncate",children:[e.name||e.id,!e.alive&&" (exited)"]})]},e.id))})]}),(0,r.jsx)("textarea",{value:Q,onChange:e=>Z(e.target.value),rows:4,placeholder:"paste terminal output here…",className:"w-full resize-y rounded-md border border-violet-200 bg-white px-2 py-1.5 font-mono text-[11px] focus:outline-none focus:ring-2 focus:ring-violet-400 dark:border-violet-700 dark:bg-zinc-900","data-testid":"showroom-terminal-draft-textarea"}),(0,r.jsx)("div",{className:"mt-1 flex justify-end",children:(0,r.jsxs)("button",{type:"button",onClick:eI,disabled:!Q.trim(),className:"inline-flex items-center gap-1 rounded-md bg-violet-700 px-2 py-1 text-[11px] font-medium text-white hover:bg-violet-600 disabled:cursor-not-allowed disabled:opacity-50","data-testid":"showroom-terminal-pin-confirm",children:[(0,r.jsx)(ei.A,{className:"size-3","aria-hidden":!0}),"Pin"]})})]}),eR&&(0,r.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-1.5 text-[10px] text-zinc-500","data-testid":"showroom-attachment-list",children:[(0,r.jsx)(ed.A,{className:"size-3","aria-hidden":!0}),(0,r.jsx)("span",{children:"attached:"}),null==b?void 0:b.map(e=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full border border-sky-300 bg-white px-2 py-0.5 text-[11px] font-medium text-sky-700 dark:border-sky-700 dark:bg-zinc-800 dark:text-sky-300","data-testid":"showroom-attachment-chip-".concat(e.id),children:[(0,r.jsx)("span",{className:"max-w-[160px] truncate",children:e.filename}),g&&(0,r.jsx)("button",{type:"button",onClick:()=>g(e.id),disabled:q||W,className:"rounded-full p-0.5 hover:bg-sky-100 disabled:cursor-not-allowed disabled:opacity-50 dark:hover:bg-sky-900/50","aria-label":"Remove attachment ".concat(e.filename),"data-testid":"showroom-attachment-remove-".concat(e.id),children:(0,r.jsx)(l.A,{className:"size-2.5","aria-hidden":!0})})]},e.id))]}),p.length>0&&(0,r.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-1.5 text-[10px] text-zinc-500","data-testid":"showroom-mention-picker",children:[(0,r.jsx)(ec.A,{className:"size-3","aria-hidden":!0}),(0,r.jsx)("span",{children:"mention:"}),p.map(e=>{let t=y(e,p);return(0,r.jsxs)("button",{type:"button",onClick:()=>eE(t),disabled:q||W,className:"inline-flex items-center rounded-full border border-zinc-300 bg-white px-2 py-0.5 text-[11px] font-medium text-zinc-700 hover:bg-zinc-100 disabled:cursor-not-allowed disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-200 dark:hover:bg-zinc-700","data-testid":"showroom-mention-chip-".concat(t),"aria-label":"Mention ".concat(t," in input"),children:["@",t]},e.id)}),(0,r.jsx)("button",{type:"button",onClick:()=>eE("all"),disabled:q||W,className:"inline-flex items-center rounded-full border border-emerald-300 bg-white px-2 py-0.5 text-[11px] font-medium text-emerald-700 hover:bg-emerald-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-emerald-700 dark:bg-zinc-800 dark:text-emerald-300 dark:hover:bg-emerald-900/30","data-testid":"showroom-mention-chip-all","aria-label":"Mention all (explicit broadcast)",children:"@all"})]}),(eM.targets.length>0||eM.broadcastAll||eM.unknown.length>0)&&(0,r.jsxs)("div",{className:"mb-1 flex flex-wrap items-center gap-1 text-[10px]","data-testid":"showroom-mention-detected-strip","aria-label":"Detected mentions in input",children:[(0,r.jsx)("span",{className:"text-zinc-500",children:"detected:"}),eM.broadcastAll&&(0,r.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded-full border border-emerald-400 bg-emerald-50 px-1.5 py-0.5 text-emerald-700 dark:border-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-300","data-testid":"showroom-mention-detected-all",title:"explicit broadcast (mute/freeze 무시)",children:[(0,r.jsx)(ec.A,{className:"size-2.5","aria-hidden":!0}),"all"]}),eM.targets.map(e=>{let t=y(e,p),a="agent"===e.kind;return(0,r.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 ".concat(a?"border border-amber-400 bg-amber-50 text-amber-700 dark:border-amber-700 dark:bg-amber-900/40 dark:text-amber-300":"border border-indigo-400 bg-indigo-50 text-indigo-700 dark:border-indigo-700 dark:bg-indigo-900/40 dark:text-indigo-300"),"data-testid":"showroom-mention-detected-".concat(t),title:"".concat(a?"agent CLI":"chat"," panel \xb7 ").concat(e.state),children:[a?(0,r.jsx)(s.A,{className:"size-2.5","aria-hidden":!0}):(0,r.jsx)(ec.A,{className:"size-2.5","aria-hidden":!0}),t]},e.id)}),eM.unknown.map(e=>(0,r.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded-full border border-rose-300 bg-rose-50 px-1.5 py-0.5 text-rose-700 line-through dark:border-rose-700 dark:bg-rose-900/40 dark:text-rose-300","data-testid":"showroom-mention-detected-unknown-".concat(e),title:"Unknown mention — panel 없음",children:[(0,r.jsx)(ec.A,{className:"size-2.5","aria-hidden":!0}),e]},"unknown-".concat(e)))]}),ez&&(ez.matches.length>0||ez.allMatches)&&(0,r.jsxs)("div",{className:"mb-1 max-h-32 overflow-y-auto rounded-md border border-zinc-300 bg-white text-xs shadow-sm dark:border-zinc-700 dark:bg-zinc-800","data-testid":"showroom-mention-typeahead",children:[ez.allMatches&&(0,r.jsxs)("button",{type:"button",onClick:()=>eC("all"),className:"block w-full px-3 py-1.5 text-left text-emerald-700 hover:bg-emerald-50 dark:text-emerald-300 dark:hover:bg-emerald-900/30","data-testid":"showroom-mention-typeahead-all",children:[(0,r.jsx)("span",{className:"font-medium",children:"@all"}),(0,r.jsx)("span",{className:"ml-2 text-[10px] text-zinc-500",children:"explicit broadcast"})]}),ez.matches.map((e,t)=>{let a=y(e,p);return(0,r.jsxs)("button",{type:"button",onClick:()=>eC(a),className:"block w-full px-3 py-1.5 text-left hover:bg-zinc-100 dark:hover:bg-zinc-700 ".concat(0!==t||ez.allMatches?"":"bg-zinc-50 font-medium dark:bg-zinc-700/40"),"data-testid":"showroom-mention-typeahead-".concat(a),children:["@",a,(0,r.jsx)("span",{className:"ml-2 text-[10px] text-zinc-500",children:e.state})]},e.id)})]}),(0,r.jsxs)("div",{className:"flex items-end gap-2",children:[v&&(0,r.jsx)("button",{type:"button",onClick:()=>ee(e=>!e),disabled:q||W,className:"rounded p-1.5 text-violet-600 hover:bg-violet-100 disabled:cursor-not-allowed disabled:opacity-50 dark:text-violet-300 dark:hover:bg-violet-900/40","aria-label":"Pin terminal context",title:"Pin terminal output as context","aria-pressed":X,"data-testid":"showroom-terminal-pin-toggle",children:(0,r.jsx)(ei.A,{className:"size-3.5","aria-hidden":!0})}),C&&(0,r.jsx)("button",{type:"button",onClick:()=>e8(e=>!e),disabled:q||W,className:"rounded p-1.5 text-sky-600 hover:bg-sky-100 disabled:cursor-not-allowed disabled:opacity-50 dark:text-sky-300 dark:hover:bg-sky-900/40","aria-label":"Add URL context",title:"Fetch URL as context","aria-pressed":e4,"data-testid":"showroom-url-pin-toggle",children:(0,r.jsx)(eu.A,{className:"size-3.5","aria-hidden":!0})}),M&&(0,r.jsx)("button",{type:"button",onClick:to,disabled:q||W||tt,className:"rounded p-1.5 text-emerald-600 hover:bg-emerald-100 disabled:cursor-not-allowed disabled:opacity-50 dark:text-emerald-300 dark:hover:bg-emerald-900/40","aria-label":"Pin clipboard text",title:"Read clipboard text as context","data-testid":"showroom-clipboard-pin",children:(0,r.jsx)(em.A,{className:"size-3.5","aria-hidden":!0})}),D&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("input",{ref:eB,type:"file",accept:"video/*",className:"hidden","data-testid":"showroom-video-input",onChange:e=>{var t;let a=null==(t=e.target.files)?void 0:t[0];a&&eG(a),e.target.value=""}}),(0,r.jsx)("button",{type:"button",onClick:()=>{var e;return null==(e=eB.current)?void 0:e.click()},disabled:q||W||eH,className:"rounded p-1.5 text-purple-600 hover:bg-purple-100 disabled:cursor-not-allowed disabled:opacity-50 dark:text-purple-300 dark:hover:bg-purple-900/40","aria-label":"Pin video file as context",title:"Pick video file (keyframe extracted via canvas)","data-testid":"showroom-video-pin",children:(0,r.jsx)(eo.A,{className:"size-3.5","aria-hidden":!0})})]}),U&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("input",{ref:eq,type:"file",accept:"audio/*",className:"hidden","data-testid":"showroom-audio-input",onChange:e=>{var t;let a=null==(t=e.target.files)?void 0:t[0];a&&e0(a),e.target.value=""}}),(0,r.jsx)("button",{type:"button",onClick:()=>{var e;return null==(e=eq.current)?void 0:e.click()},disabled:q||W||e$,className:"rounded p-1.5 text-cyan-600 hover:bg-cyan-100 disabled:cursor-not-allowed disabled:opacity-50 dark:text-cyan-300 dark:hover:bg-cyan-900/40","aria-label":"Pin audio file as context",title:"Pick audio file (metadata + optional transcript)","data-testid":"showroom-audio-pin",children:(0,r.jsx)(el.A,{className:"size-3.5","aria-hidden":!0})})]}),x&&(0,r.jsx)(eh.u,{onAttached:x}),x&&(0,r.jsx)(ey,{onAttachToSession:e=>x([e])}),x&&(0,r.jsx)(ej.z,{}),(0,r.jsx)("textarea",{ref:$,id:"showroom-broadcast-input",value:H,onChange:e=>{J(e.target.value),requestAnimationFrame(eS)},onSelect:()=>eS(),onKeyDown:eT,onBlur:()=>{setTimeout(()=>eN(null),100)},rows:2,disabled:q||W,placeholder:h>0?"".concat(h," live panel 에 broadcast — 또는 @name 으로 targeted (Enter)…"):"모든 panel 이 mute \xb7 live 로 전환하거나 panel 추가",className:"flex-1 resize-none rounded-md border border-zinc-300 bg-white px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-zinc-400 disabled:cursor-not-allowed disabled:opacity-60 dark:border-zinc-700 dark:bg-zinc-800","aria-label":"Showroom broadcast input","data-testid":"showroom-input"}),(0,r.jsxs)("button",{type:"button",onClick:()=>void eA(),disabled:!eD,className:"inline-flex h-9 items-center gap-1.5 rounded-md bg-zinc-900 px-3 text-xs font-medium text-white hover:bg-zinc-700 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-zinc-300","aria-label":"broadcast"===eP.mode?"Broadcast to all live panels":"Targeted send to ".concat(eP.targets.length," panel(s)"),"data-testid":"showroom-send",children:[(0,r.jsx)(ep.A,{className:"size-3.5","aria-hidden":!0}),eL]})]})]})}var eN=a(43468);function eS(e){return e&&"object"==typeof e?"string"!=typeof e.requestId||"string"!=typeof e.prompt?null:{requestId:e.requestId,prompt:e.prompt,..."string"==typeof e.detail?{detail:e.detail}:{},yesLabel:"string"==typeof e.yesLabel?e.yesLabel:"Yes",noLabel:"string"==typeof e.noLabel?e.noLabel:"No"}:null}function eC(e){return e&&"object"==typeof e&&"string"==typeof e.requestId?e.requestId:null}function eI(e){let{pending:t,submitting:a,error:n,onAnswer:o}=e;return t?(0,r.jsxs)("div",{role:"alertdialog","aria-label":"Approval request","data-testid":"hitl-banner","data-request-id":t.requestId,className:"fixed left-1/2 top-4 z-50 flex w-[min(calc(100vw-2rem),36rem)] -translate-x-1/2 flex-col gap-3 rounded-2xl border border-amber-300/70 bg-amber-50/95 p-4 shadow-2xl ring-1 ring-amber-400/30 backdrop-blur-sm dark:border-amber-700/60 dark:bg-amber-950/90 dark:ring-amber-700/50",children:[(0,r.jsxs)("div",{className:"flex items-start gap-3",children:[(0,r.jsx)("div",{className:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-amber-200 text-amber-900 dark:bg-amber-800/80 dark:text-amber-100",children:(0,r.jsx)("span",{"aria-hidden":!0,className:"text-base",children:"⚠"})}),(0,r.jsxs)("div",{className:"flex-1",children:[(0,r.jsx)("div",{className:"text-sm font-semibold text-amber-900 dark:text-amber-100",children:t.prompt}),t.detail&&(0,r.jsx)("div",{className:"mt-1 break-words text-xs text-amber-800/80 dark:text-amber-200/80",children:t.detail})]})]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:()=>o(!1),disabled:a,"data-testid":"hitl-banner-deny",className:"flex-1 rounded-lg border border-amber-300 bg-white px-3 py-1.5 text-sm font-medium text-amber-900 transition hover:bg-amber-100 disabled:cursor-not-allowed disabled:opacity-50 dark:border-amber-700 dark:bg-amber-900/40 dark:text-amber-100 dark:hover:bg-amber-800/60",children:t.noLabel}),(0,r.jsx)("button",{type:"button",onClick:()=>o(!0),disabled:a,"data-testid":"hitl-banner-approve",className:"flex-1 rounded-lg border border-amber-500 bg-amber-500 px-3 py-1.5 text-sm font-semibold text-white transition hover:bg-amber-600 disabled:cursor-not-allowed disabled:opacity-50",children:t.yesLabel})]}),n&&(0,r.jsx)("div",{role:"alert","data-testid":"hitl-banner-error",className:"text-xs text-red-700 dark:text-red-300",children:n})]}):null}function eA(){let e=(0,eN.Qj)(),{config:t}=(0,v.Q)(),{pending:a,submitting:o,error:l,submit:i}=function(e){let{client:t,baseUrl:a,fetchImpl:r,onDebug:o}=e,[l,i]=(0,n.useState)(null),[s,d]=(0,n.useState)(!1),[c,u]=(0,n.useState)(null),m=(0,n.useRef)(null!=r?r:"undefined"!=typeof fetch?fetch:null);(0,n.useEffect)(()=>{m.current=null!=r?r:"undefined"!=typeof fetch?fetch:null},[r]),(0,n.useEffect)(()=>{if(t)return t.subscribeEvents({topics:["hitl.banner."],onEvent:e=>{if("hitl.banner.show"===e.kind||"hitl.banner.cancel"===e.kind){if("hitl.banner.show"===e.kind){let t=eS(e.detail);t&&(null==o||o("hitl.banner.show",{requestId:t.requestId}))}else{let t=eC(e.detail);null==o||o("hitl.banner.cancel",{requestId:null!=t?t:"(missing)"})}i(t=>(function(e,t,a){if("hitl.banner.show"===t){var r;return null!=(r=eS(a))?r:e}if("hitl.banner.cancel"===t){if(!e)return e;let t=eC(a);return null!==t&&t!==e.requestId?e:null}return e})(t,e.kind,e.detail)),"hitl.banner.show"===e.kind&&u(null)}},onError:e=>null==o?void 0:o("hitl.banner.sse-error",{msg:e.message})})},[t,o]);let p=(0,n.useCallback)(async e=>{var t,r,n;if(!l||s)return;if(!a)return void u("daemon baseUrl not configured");if(!m.current)return void u("fetch unavailable");d(!0),u(null);let c=(t=l.requestId,"".concat(a.replace(/\/$/,""),"/v1/hitl/callback/").concat(encodeURIComponent(t)));null==o||o("hitl.banner.submit",{requestId:l.requestId,answer:e});try{let t=(r=(await m.current(c,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({answer:e})})).status)>=200&&r<300||404===r?{kind:"cleared"}:{kind:"error",message:"HTTP ".concat(r)};"cleared"===t.kind?i(null):u(t.message)}catch(e){u(null!=(n=e.message)?n:"submit failed")}finally{d(!1)}},[a,o,l,s]);return{pending:l,submitting:s,error:c,submit:p}}({client:e,baseUrl:t.baseUrl,onDebug:(e,t)=>(0,W.cY)(e,t)});return(0,r.jsx)(eI,{pending:a,submitting:o,error:l,onAnswer:e=>{i(e)}})}function eT(e){if(!e||"object"!=typeof e||"string"!=typeof e.sessionId||!Array.isArray(e.candidates)||6!==e.candidates.length||"number"!=typeof e.version||"number"!=typeof e.generatedAt)return null;for(let t of e.candidates)if(!t||"object"!=typeof t||"string"!=typeof t.label||"number"!=typeof t.confidence)return null;return e}function eE(e){let{label:t,confidence:a,reason:n,disabled:o,onTap:l}=e,i=Number.isNaN(a)||!Number.isFinite(a)||a<=0?100:a>=.9?600:a>=.7?500:a>=.5?400:a>=.3?300:a>=.15?200:100,s=function(e){switch(e){case 600:return"bg-emerald-600 hover:bg-emerald-700 text-white border-emerald-600";case 500:return"bg-emerald-500 hover:bg-emerald-600 text-white border-emerald-500";case 400:return"bg-emerald-400 hover:bg-emerald-500 text-emerald-950 border-emerald-400";case 300:return"bg-emerald-300 hover:bg-emerald-400 text-emerald-950 border-emerald-300";case 200:return"bg-emerald-200 hover:bg-emerald-300 text-emerald-950 border-emerald-200";default:return"bg-zinc-100 hover:bg-zinc-200 text-zinc-700 border-zinc-200 dark:bg-zinc-800 dark:hover:bg-zinc-700 dark:text-zinc-300 dark:border-zinc-700"}}(i),d="".concat(Math.round(100*a),"%");return(0,r.jsxs)("button",{type:"button",onClick:l,disabled:o,"data-testid":"intent-button-".concat(t),"data-confidence":a.toFixed(3),"data-intensity":i,title:n?"".concat(t," \xb7 ").concat(d," \xb7 ").concat(n):"".concat(t," \xb7 ").concat(d),"aria-label":"".concat(t," \xb7 신뢰도 ").concat(d).concat(n?" \xb7 ".concat(n):""),className:"flex flex-col items-center justify-center rounded-lg border px-3 py-2 text-xs font-medium shadow-sm transition disabled:cursor-not-allowed disabled:opacity-50 ".concat(s),children:[(0,r.jsx)("span",{className:"leading-tight",children:t}),(0,r.jsx)("span",{className:"mt-0.5 text-[10px] opacity-70",children:d})]})}var eM=a(20866);function eP(e){var t;let{ranking:a,submitting:n,error:o,onTap:l,collapsed:i=!1,onToggleCollapsed:s}=e,d=a?[...a.candidates].sort((e,t)=>t.confidence-e.confidence):[{label:"계속 진행",confidence:0,reason:"pending"},{label:"오토파일럿",confidence:0,reason:"pending"},{label:"추가 보완",confidence:0,reason:"pending"},{label:"diff 보여줘",confidence:0,reason:"pending"},{label:"승인",confidence:0,reason:"pending"},{label:"잠시 멈춤",confidence:0,reason:"pending"}];return(0,r.jsxs)("div",{"data-testid":"intent-panel","data-version":null!=(t=null==a?void 0:a.version)?t:0,"data-collapsed":i?"true":"false",className:"flex flex-col gap-2 border-y border-zinc-200 bg-white/70 px-3 py-2 backdrop-blur-sm dark:border-zinc-800 dark:bg-zinc-900/70",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-[11px] font-medium text-zinc-500 dark:text-zinc-400",children:"intent \xb7 다음 행동"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[a&&(0,r.jsxs)("span",{className:"text-[10px] text-zinc-400 dark:text-zinc-500","data-testid":"intent-panel-version",children:["v",a.version]}),s&&(0,r.jsx)("button",{type:"button",onClick:s,"aria-label":i?"Expand intent panel":"Collapse intent panel","data-testid":"intent-panel-toggle",className:"rounded p-0.5 text-[11px] text-zinc-400 hover:bg-zinc-100 hover:text-zinc-700 dark:text-zinc-500 dark:hover:bg-zinc-800 dark:hover:text-zinc-200",children:i?"▼":"▲"})]})]}),!i&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{role:"group","aria-label":"Intent suggestions",className:"grid grid-cols-3 gap-1.5 sm:grid-cols-6",children:d.map(e=>(0,r.jsx)(eE,{label:e.label,confidence:e.confidence,reason:e.reason,disabled:n||!a,onTap:()=>l(e.label)},e.label))}),o&&(0,r.jsx)("div",{role:"alert","data-testid":"intent-panel-error",className:"text-[11px] text-red-600 dark:text-red-400",children:o})]})]})}function eL(e){let{sessionId:t,onTap:a}=e,o=(0,eN.Qj)(),{config:l}=(0,v.Q)(),{ranking:i,submitting:s,error:d,submitTap:c}=function(e){let{client:t,sessionId:a,baseUrl:r,buildContext:o,fetchImpl:l,onDebug:i}=e,[s,d]=(0,n.useState)(null),[c,u]=(0,n.useState)(!1),[m,p]=(0,n.useState)(null),h=(0,n.useRef)(null!=l?l:"undefined"!=typeof fetch?fetch:null);(0,n.useEffect)(()=>{h.current=null!=l?l:"undefined"!=typeof fetch?fetch:null},[l]),(0,n.useEffect)(()=>{a||d(null)},[a]),(0,n.useEffect)(()=>{var e,n;if(!t||!a)return;let o="".concat(r.replace(/\/$/,""),"/v1/intent-prediction/").concat(encodeURIComponent(a));return null==i||i("intent.snapshot.attempt",{url:o}),null==(n=h.current)||null==(e=n.call(h,o,{method:"GET"}))||e.then(async e=>{if(e.ok)try{let t=await e.json(),r=eT(t);r&&r.sessionId===a&&(null==i||i("intent.sse.ranking",{version:r.version}),d(r))}catch(e){}}).catch(()=>{}),t.subscribeEvents({topics:["intent-prediction."],kinds:["intent-prediction.ranking"],onEvent:e=>{if("intent-prediction.ranking"===e.kind){let t=eT(e.detail);t&&t.sessionId===a&&(null==i||i("intent.sse.ranking",{version:t.version}),d(t))}else{let t=eT(e);t&&t.sessionId===a&&(null==i||i("intent.sse.ranking",{version:t.version}),d(t))}},onError:e=>null==i?void 0:i("intent.sse.error",{msg:e.message})})},[t,a,r,i]);let b=(0,n.useCallback)(async e=>{var t,n;if(!a||c)return;if(!r)return void p("daemon baseUrl not configured");if(!h.current)return void p("fetch unavailable");let l=null!=(t=null==o?void 0:o())?t:{sessionId:a,lastTurnSummary:"",lastErr:null,progressPct:0,fileEditCount:0,idleMs:0};l.sessionId!==a&&(l.sessionId=a),u(!0),p(null),null==i||i("intent.feedback.submit",{label:e,sessionId:a});try{let t=await h.current("".concat(r.replace(/\/$/,""),"/v1/intent-prediction/").concat(encodeURIComponent(a),"/feedback"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({chosen:e,context:l})});t.ok||(p("HTTP ".concat(t.status)),null==i||i("intent.feedback.error",{status:t.status}))}catch(t){let e=null!=(n=t.message)?n:"submit failed";p(e),null==i||i("intent.feedback.error",{msg:e})}finally{u(!1)}},[r,o,i,a,c]);return{ranking:s,submitting:c,error:m,submitTap:b}}({client:o,sessionId:t,baseUrl:l.baseUrl,onDebug:(e,t)=>(0,W.cY)(e,t)}),[u,m]=(0,n.useState)(!1);(0,n.useEffect)(()=>(m((0,eM.GZ)()),(0,eM.gu)(m)),[]);let[p,h]=(0,n.useState)("fixed");(0,n.useEffect)(()=>(h((0,eM.sY)()),(0,eM.u9)(h)),[]);let[b,x]=(0,n.useState)(!1),g=(0,n.useRef)(-1);return((0,n.useEffect)(()=>{var e;if("popup"!==p)return;let t=null!=(e=null==i?void 0:i.version)?e:-1;if(t<0||t===g.current)return;g.current=t,x(!0);let a=setTimeout(()=>x(!1),6e3);return()=>clearTimeout(a)},[null==i?void 0:i.version,p]),"off"!==p&&("popup"!==p||b))?(0,r.jsx)(eP,{ranking:i,submitting:s,error:d,collapsed:u,onToggleCollapsed:()=>{let e=!u;(0,eM.mB)(e),m(e),(0,W.cY)("intent.panel.toggle-collapsed",{collapsed:e})},onTap:e=>{"popup"===p&&x(!1),c(e),null==a||a(e)}}):null}let eD="showroom.hitl.disabled";function eR(){if(!window.localStorage)return!1;try{return"true"===window.localStorage.getItem(eD)}catch(e){return!1}}function eY(){let[e,t]=(0,n.useState)(!1),[a,o]=(0,n.useState)(!1);(0,n.useEffect)(()=>{o(!0),t(eR());let e=function(e){let t=t=>{t.key===eD&&e(eR())};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}(t);return()=>{e()}},[]);let l=(0,n.useCallback)(()=>{t(e=>{let t=!e;return!function(e){if(window.localStorage)try{e?window.localStorage.setItem(eD,"true"):window.localStorage.removeItem(eD)}catch(e){return!1}}(t),t})},[]);return a?(0,r.jsxs)("button",{type:"button",onClick:l,"data-testid":"showroom-hitl-toggle","data-state":e?"off":"on",title:e?"HITL prompts disabled for new agent sessions — click to re-enable":"HITL prompts active — click to disable for demo","aria-pressed":!e,className:"inline-flex items-center gap-1 rounded-md border px-2 py-1 text-xs font-mono "+(e?"border-zinc-300 bg-zinc-100 text-zinc-500 hover:bg-zinc-200 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-400 dark:hover:bg-zinc-700":"border-emerald-300 bg-emerald-50 text-emerald-700 hover:bg-emerald-100 dark:border-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-300 dark:hover:bg-emerald-900/50"),children:[(0,r.jsx)("span",{"aria-hidden":!0,children:e?"○":"●"}),(0,r.jsxs)("span",{children:["HITL ",e?"OFF":"ON"]})]}):null}var e_=a(48030);function eU(e){return Array.from(e.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter(e=>{var t;if(e.hasAttribute("disabled")||"true"===e.getAttribute("aria-hidden"))return!1;let a=null==(t=e.ownerDocument.defaultView)?void 0:t.getComputedStyle(e);return!a||"none"!==a.display&&"hidden"!==a.visibility})}function eF(e){let t=(0,n.useRef)(null);return(0,n.useEffect)(()=>{if(!e.active)return;let a=t.current;if(!a)return;let r=document.activeElement;if(!e.skipInitialFocus){let e=eU(a);if(e.length>0){var n;null==(n=e[0])||n.focus()}else a.tabIndex=-1,a.focus()}function o(e){if("Tab"!==e.key)return;let t=eU(a);if(0===t.length)return void e.preventDefault();let r=t[0],n=t[t.length-1],o=document.activeElement;if(e.shiftKey&&o===r){e.preventDefault(),n.focus();return}e.shiftKey||o!==n||(e.preventDefault(),r.focus())}return a.addEventListener("keydown",o),()=>{if(a.removeEventListener("keydown",o),r&&document.body.contains(r))try{r.focus()}catch(e){}}},[e.active,e.skipInitialFocus]),t}var eK=a(89604);function eO(e){let{open:t,onClose:a}=e,n=eF({active:t,skipInitialFocus:!1});return t?(0,r.jsx)("div",{ref:n,className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4",role:"dialog","aria-modal":"true","aria-labelledby":"showroom-shortcut-help-title","data-testid":"showroom-shortcut-help",onKeyDown:e=>{"Escape"===e.key&&(e.stopPropagation(),a())},onClick:e=>{e.target===e.currentTarget&&a()},children:(0,r.jsxs)("div",{className:"w-full max-w-md rounded-lg border border-zinc-300 bg-white p-4 shadow-xl dark:border-zinc-700 dark:bg-zinc-900",onClick:e=>e.stopPropagation(),children:[(0,r.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,r.jsxs)("h2",{id:"showroom-shortcut-help-title",className:"flex items-center gap-2 text-sm font-medium text-zinc-900 dark:text-zinc-100",children:[(0,r.jsx)(e_.A,{className:"size-4","aria-hidden":!0}),"Keyboard shortcuts"]}),(0,r.jsx)("button",{type:"button",onClick:a,className:"rounded p-1 text-zinc-500 hover:bg-zinc-100 dark:hover:bg-zinc-800","aria-label":"Close shortcut help","data-testid":"showroom-shortcut-help-close",children:(0,r.jsx)(l.A,{className:"size-4","aria-hidden":!0})})]}),(0,r.jsx)("ul",{className:"space-y-1.5","data-testid":"showroom-shortcut-help-list",children:eK.nm.map(e=>(0,r.jsxs)("li",{className:"flex items-center justify-between gap-3 rounded px-2 py-1 text-xs text-zinc-700 dark:text-zinc-300","data-testid":"showroom-shortcut-help-row-".concat(e.id),children:[(0,r.jsx)("span",{children:e.effect}),(0,r.jsx)("kbd",{className:"rounded border border-zinc-300 bg-zinc-50 px-1.5 py-0.5 font-mono text-[10px] text-zinc-600 dark:border-zinc-600 dark:bg-zinc-800 dark:text-zinc-300",children:e.combo})]},e.id))}),(0,r.jsxs)("p",{className:"mt-3 text-[10px] text-zinc-500",children:["Editable surfaces (input \xb7 textarea \xb7 contenteditable) suppress ⌘⇧{J,M,Y} and ",(0,r.jsx)("kbd",{className:"font-mono",children:"?"})," so typing isn't intercepted. ",(0,r.jsx)("kbd",{className:"font-mono",children:"⌘K"})," is the intentional exception."]})]})}):null}var eB=a(10080);function eq(e){return e>=1e3?"".concat((e/1e3).toFixed(1),"k"):String(e)}function eH(e){let{estimate:t,onConfirm:a,onCancel:o}=e,l=(0,n.useRef)(null),i=(0,n.useRef)(null);(0,n.useEffect)(()=>{var e;null==(e=i.current)||e.focus()},[]);let s=eq(t.totalTokens),d=eq(t.warnThreshold),c=Math.round((t.totalTokens-t.warnThreshold)/t.warnThreshold*100);return(0,r.jsx)("div",{ref:l,className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4",role:"dialog","aria-modal":"true","aria-labelledby":"showroom-cost-gate-title","aria-describedby":"showroom-cost-gate-summary","data-testid":"showroom-cost-gate-modal",onKeyDown:e=>{"Escape"===e.key&&(e.stopPropagation(),o())},children:(0,r.jsxs)("div",{className:"w-full max-w-lg rounded-lg border border-amber-300 bg-white p-4 shadow-xl dark:border-amber-700 dark:bg-zinc-900",children:[(0,r.jsx)("h2",{id:"showroom-cost-gate-title",className:"mb-2 text-sm font-medium text-amber-700 dark:text-amber-300",children:"⚠️ Broadcast cost warning"}),(0,r.jsxs)("p",{id:"showroom-cost-gate-summary",className:"mb-3 text-xs text-zinc-700 dark:text-zinc-300",children:["예상 token ",(0,r.jsx)("strong",{"data-testid":"showroom-cost-gate-total",children:s})," \xb7 임계값 ",(0,r.jsx)("strong",{children:d})," 을 ",(0,r.jsxs)("strong",{children:[c,"%"]})," 초과합니다. multi-LLM broadcast 는 모든 panel 의 input 을 합산."]}),(0,r.jsxs)("div",{className:"mb-3 max-h-56 overflow-y-auto rounded-md border border-zinc-200 bg-zinc-50 p-2 text-[11px] dark:border-zinc-700 dark:bg-zinc-800","data-testid":"showroom-cost-gate-breakdown",children:[(0,r.jsxs)("div",{className:"grid grid-cols-[1fr_auto_auto_auto] gap-x-2 font-medium text-zinc-600 dark:text-zinc-400",children:[(0,r.jsx)("span",{children:"panel"}),(0,r.jsx)("span",{className:"text-right",children:"input"}),(0,r.jsx)("span",{className:"text-right",children:"prior"}),(0,r.jsx)("span",{className:"text-right",children:"total"})]}),t.perPanel.map(e=>(0,r.jsxs)("div",{className:"grid grid-cols-[1fr_auto_auto_auto] gap-x-2 py-0.5 font-mono text-zinc-700 dark:text-zinc-300","data-testid":"showroom-cost-gate-row-".concat(e.panelId),children:[(0,r.jsx)("span",{className:"truncate",children:e.displayName}),(0,r.jsx)("span",{className:"text-right",children:eq(e.inputTokens)}),(0,r.jsx)("span",{className:"text-right",children:e.priorTokens>0?eq(e.priorTokens):"—"}),(0,r.jsx)("span",{className:"text-right font-semibold",children:eq(e.totalTokens)})]},e.panelId))]}),(0,r.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,r.jsx)(eB.$,{type:"button",variant:"ghost",size:"sm",onClick:o,"data-testid":"showroom-cost-gate-cancel",children:"Cancel"}),(0,r.jsx)(eB.$,{ref:i,type:"button",size:"sm",onClick:a,"data-testid":"showroom-cost-gate-confirm",className:"bg-amber-600 text-white hover:bg-amber-700",children:"Send anyway"})]}),(0,r.jsxs)("span",{className:"sr-only","aria-live":"assertive","data-testid":"showroom-cost-gate-announcer",children:["Broadcast cost ",t.totalTokens," tokens, confirming"]})]})})}var eJ=a(87263);function eW(e){let{pending:t,queueLength:a,onConfirm:o,onCancel:i}=e;if(!t)return null;let s=t.forwardText.length>600,d=s?"".concat(t.forwardText.slice(0,600),"…"):t.forwardText,c=Math.max(0,a-1);return(0,r.jsxs)(n.Fragment,{children:[(0,r.jsx)("div",{className:"fixed inset-0 z-50 bg-black/40 backdrop-blur-sm","aria-hidden":!0}),(0,r.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":"Chain forward confirmation",className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:(0,r.jsxs)("div",{className:"w-full max-w-lg rounded-lg border border-zinc-300 bg-white p-5 shadow-2xl dark:border-zinc-700 dark:bg-zinc-900",children:[(0,r.jsx)("p",{className:"sr-only","aria-live":"polite",children:function(e){let t=e.forwardText.length;return"Chain forward gate: ".concat(e.from.label," to ").concat(e.to.label,", ").concat(t," characters pending confirm")}(t)}),(0,r.jsxs)("header",{className:"mb-3 flex items-center gap-2",children:[(0,r.jsx)("h2",{className:"text-base font-semibold text-zinc-900 dark:text-zinc-50",children:"Confirm chain forward"}),(0,r.jsx)("span",{className:"ml-auto text-[10px] text-zinc-500",children:"\xa76.7 HITL gate"})]}),(0,r.jsxs)("div",{className:"mb-3 flex items-center gap-2 rounded border border-zinc-200 bg-zinc-50 px-3 py-2 text-sm dark:border-zinc-700 dark:bg-zinc-800",children:[(0,r.jsx)("span",{className:"truncate font-medium text-zinc-900 dark:text-zinc-100","data-testid":"chain-forward-gate-from",children:t.from.label}),(0,r.jsx)(eJ.A,{className:"size-3.5 shrink-0 text-zinc-500","aria-hidden":!0}),(0,r.jsx)("span",{className:"truncate font-medium text-zinc-900 dark:text-zinc-100","data-testid":"chain-forward-gate-to",children:t.to.label}),(0,r.jsxs)("span",{className:"ml-auto text-[10px] text-zinc-500",children:[t.forwardText.length," chars"]})]}),(0,r.jsxs)("div",{className:"mb-4",children:[(0,r.jsx)("p",{className:"mb-1 text-[11px] uppercase tracking-wide text-zinc-500",children:"Forward text"}),(0,r.jsx)("pre",{className:"max-h-48 overflow-y-auto whitespace-pre-wrap break-words rounded border border-zinc-200 bg-zinc-50 p-3 text-xs text-zinc-700 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-300","data-testid":"chain-forward-gate-preview",children:d}),s&&(0,r.jsx)("p",{className:"mt-1 text-[10px] text-zinc-500",children:"Truncated for preview \xb7 the full text will be forwarded."})]}),(0,r.jsxs)("footer",{className:"flex items-center gap-2",children:[(0,r.jsxs)("button",{type:"button",onClick:i,"data-testid":"chain-forward-gate-cancel",className:"inline-flex items-center gap-1 rounded border border-zinc-300 bg-white px-3 py-1.5 text-sm text-zinc-700 hover:bg-zinc-50 dark:border-zinc-600 dark:bg-zinc-800 dark:text-zinc-300 dark:hover:bg-zinc-700",children:[(0,r.jsx)(l.A,{className:"size-3.5","aria-hidden":!0}),"Cancel"]}),(0,r.jsxs)("button",{type:"button",onClick:o,"data-testid":"chain-forward-gate-confirm",className:"ml-auto inline-flex items-center gap-1 rounded bg-indigo-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-indigo-500",autoFocus:!0,children:[(0,r.jsx)(ep.A,{className:"size-3.5","aria-hidden":!0}),"Forward"]}),c>0&&(0,r.jsxs)("span",{className:"text-[10px] text-zinc-500","data-testid":"chain-forward-gate-queue-hint",children:["+",c," queued"]})]})]})})]})}var eV=a(41347);function e$(e){return e?Math.ceil(e.length/4):0}let eQ={layoutSaved:e=>e?'Layout "'.concat(e,'" saved'):"Layout saved",layoutLoaded:e=>e?'Layout "'.concat(e,'" loaded'):"Layout loaded",layoutDeleted:e=>e?'Layout "'.concat(e,'" deleted'):"Layout deleted",judgeToggled:e=>"local-llm"===e?"Role judge: LLM":"Role judge: keyword",voiceToggled:e=>e?"Voice mode on \xb7 listening":"Voice mode off",voicePhase:e=>"Voice ".concat(e),ttsMuted:e=>e?"TTS muted":"TTS unmuted",modelChanged:e=>e?"Model: ".concat(e):"Model: daemon default"};function eZ(){let{client:e,config:t}=(0,v.Q)(),[j]=(0,n.useState)(()=>"sr-".concat(Date.now().toString(36),"-").concat(N())),[z,C]=(0,n.useState)(null),A=(0,f.useSearchParams)(),[T,M]=(0,n.useState)(()=>[{id:S(),kind:"chat",provider:"",sessionId:null,state:"live"},{id:S(),kind:"chat",provider:"",sessionId:null,state:"live"}]),[P,L]=(0,n.useState)([]),[D,_]=(0,n.useState)([]),[J,Q]=(0,n.useState)([]),[Z,X]=(0,n.useState)(0),[G,ee]=(0,n.useState)(null),[et,ea]=(0,n.useState)([]),[er,eo]=(0,n.useState)([]),[el,ei]=(0,n.useState)([]),[es,ed]=(0,n.useState)([]),[ec,eu]=(0,n.useState)([]),em=(0,n.useRef)(new Set),[ep,eh]=(0,n.useState)([]),[eb,ex]=(0,n.useState)([]),[eg,ev]=(0,n.useState)(!1),[ew,ek]=(0,n.useState)(!1),[ey,ej]=(0,n.useState)(!1),[eN,eS]=(0,n.useState)(""),[eC,eI]=(0,n.useState)(null),[eT,eE]=(0,n.useState)(!1),[eM,eP]=(0,n.useState)(()=>(function(){if(!window.localStorage)return!0;try{return"false"!==window.localStorage.getItem(K)}catch(e){return!0}})()),[eD,eR]=(0,n.useState)(()=>(function(){try{let e=window.localStorage.getItem(R);return"local-llm"===e?"local-llm":"keyword"}catch(e){return"keyword"}})()),[e_,eU]=(0,n.useState)(()=>(function(){try{var e;return null!=(e=window.localStorage.getItem("elanous.showroom.roleJudgeModel"))?e:""}catch(e){return""}})()),[eB,eq]=(0,n.useState)([]),[eJ,eZ]=(0,n.useState)(null),eX=function(){let[e,t]=(0,n.useState)(""),a=(0,n.useRef)("");return{message:e,announce:(0,n.useCallback)(e=>{let r=e.trim();if(!r)return;let n=r===a.current?r+"​":r;a.current=n,t(n)},[])}}(),eG=(0,n.useCallback)(e=>{eR(e);try{window.localStorage.setItem(R,e)}catch(e){}eX.announce(eQ.judgeToggled(e)),(0,W.cY)("showroom.role-judge.toggle",{backend:e})},[eX]),e0=(0,n.useCallback)(e=>{eU(e);try{e.length>0?window.localStorage.setItem("elanous.showroom.roleJudgeModel",e):window.localStorage.removeItem("elanous.showroom.roleJudgeModel")}catch(e){}eX.announce(eQ.modelChanged(e)),(0,W.cY)("showroom.role-judge.model",{model:e||"(default)"})},[eX]);(0,n.useEffect)(()=>{if("local-llm"!==eD||eB.length>0)return;let t=!1;return(async()=>{try{var a;let r=await e.listLlmModels();if(t)return;eq(r.models),eZ(null!=(a=r.error)?a:null),(0,W.cY)("showroom.role-judge.models",{count:r.models.length,error:r.error})}catch(e){if(t)return;eZ(e instanceof Error?e.message:String(e))}})(),()=>{t=!0}},[eD,eB.length,e]);let[e1,e5]=(0,n.useState)(()=>(function(){try{let e=window.localStorage.getItem(q);return"isolated"===e?"isolated":"mixed"}catch(e){return"mixed"}})()),[e3,e2]=(0,n.useState)(null),[e7,e9]=(0,n.useState)({}),e6=(0,n.useRef)(null),e4=(0,n.useRef)(null),e8=(0,n.useCallback)(e=>{eP(e);if(window.localStorage)try{e?window.localStorage.removeItem(K):window.localStorage.setItem(K,"false")}catch(e){}(0,W.cY)("showroom.dm.toggle",{next:e})},[]),te=(0,n.useCallback)(e=>{e5(e);try{"isolated"===e?window.localStorage.setItem(q,"isolated"):window.localStorage.removeItem(q)}catch(e){}eX.announce("mixed"===e?"Mixed history on \xb7 siblings’ last replies forwarded":"Mixed history off \xb7 per-panel isolated"),(0,W.cY)("showroom.dm.history-mode.toggle",{next:e})},[eX]);(0,n.useEffect)(()=>{if(!t.baseUrl)return;let a=!1,r=null;try{r=e.connectAcp({onSession:e=>{a||(e4.current=e,e2(e),(0,W.cY)("showroom.dm.session",{sessionId:e}))}})}catch(e){(0,W.cY)("showroom.dm.acp.connect.error",{error:String(e)});return}e6.current=r;let n=r.on("sessionUpdate",e=>{var t,a,r;let n=null==(t=e.params)?void 0:t.update,o=function(e){if(!e||"object"!=typeof e)return null;let t=e._meta;if(!t||"object"!=typeof t)return null;let a=t.elanous;if(!a||"object"!=typeof a||"string"!=typeof a.modelId||0===a.modelId.length)return null;let r={modelId:a.modelId};return"string"==typeof a.provider&&(r.provider=a.provider),("end_turn"===a.stopReason||"cancelled"===a.stopReason||"error"===a.stopReason)&&(r.stopReason=a.stopReason),"string"==typeof a.error&&(r.error=a.error),r}(n);if(!o)return;let l=function(e){var t;if(!e||"object"!=typeof e)return null;let a="tool_call"===e.sessionUpdate,r="tool_call_update"===e.sessionUpdate;if(!a&&!r||"string"!=typeof e.toolCallId||0===e.toolCallId.length)return null;let n=a?"call":"update",o={kind:n,id:e.toolCallId,name:"string"==typeof e.title?e.title:"",status:(t=e.status,"pending"===t||"in_progress"===t||"completed"===t||"failed"===t?t:"call"===n?"pending":"failed")};e.rawInput&&"object"==typeof e.rawInput&&(o.input=e.rawInput);let l=function(e){if(null!=e){if("string"==typeof e)return e.length>240?"".concat(e.slice(0,240),"…"):e;try{let t=JSON.stringify(e);if(!t)return;return t.length>240?"".concat(t.slice(0,240),"…"):t}catch(e){return}}}(e.rawOutput);return void 0!==l&&(o.output=l),o}(n);if(l)return void e9(e=>{var t;let a=null!=(t=e[o.modelId])?t:{messages:[],partial:"",streaming:!0,error:null,toolCalls:{}};return{...e,[o.modelId]:{...a,toolCalls:function(e,t,a){let r={...e},n=r[t.id];if("call"===t.kind||!n){var o;let e={id:t.id,name:t.name||(null==n?void 0:n.name)||"",status:t.status,startedAt:null!=(o=null==n?void 0:n.startedAt)?o:a,updatedAt:a};return t.input?e.input=t.input:(null==n?void 0:n.input)&&(e.input=n.input),void 0!==t.output?e.output=t.output:(null==n?void 0:n.output)!==void 0&&(e.output=n.output),r[t.id]=e,r}let l={...n,status:t.status,updatedAt:a};return t.name&&(l.name=t.name),t.input&&(l.input=t.input),void 0!==t.output&&(l.output=t.output),r[t.id]=l,r}(a.toolCalls,l,Date.now())}}});let i=(null==n||null==(a=n.content)?void 0:a.type)==="text"&&null!=(r=n.content.text)?r:"",s=o.stopReason;e9(e=>{var t,a,r;let n=null!=(t=e[o.modelId])?t:{messages:[],partial:"",streaming:!0,error:null,toolCalls:{}};if(s){let t=(n.partial+i).trim(),l={...e};return t.length>0||o.error?l[o.modelId]={messages:[...n.messages,{id:"a-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"assistant",text:o.error?"(error) ".concat(o.error):t,timestamp:Date.now(),meta:{provider:null!=(a=o.provider)?a:"",stopReason:s,...o.error?{systemLevel:"error"}:{}}}],partial:"",streaming:!1,error:null!=(r=o.error)?r:null,toolCalls:n.toolCalls}:l[o.modelId]={...n,partial:"",streaming:!1},l}return{...e,[o.modelId]:{...n,partial:n.partial+i,streaming:!0,error:null}}})});return()=>{a=!0;try{n()}catch(e){}try{null==r||r.close()}catch(e){}e6.current=null,e4.current=null}},[e,t.baseUrl]);let tt=(0,n.useCallback)(async()=>{let{layouts:t,source:a}=await (0,$.i$)(e);ex(t),(0,W.cY)("showroom.layouts.refresh",{count:t.length,source:a})},[e]);(0,n.useEffect)(()=>{tt()},[tt]);let ta=(0,n.useCallback)(()=>{eS(""),eI(null),ej(!0)},[]),tr=(0,n.useCallback)(async()=>{let t=eN.trim();if(!t)return void eI("name required");let a=eb.some(e=>e.name===t),r=await (0,$.sF)(t,T,e);if((0,W.cY)("showroom.save",{name:t,ok:r.ok,panels:T.length,overwrites:a,source:r.ok?r.source:void 0,migrated:r.ok?r.migrated:0}),!r.ok)return void eI(r.reason);ej(!1),eS(""),eI(null),C(t);{let e=new URL(window.location.href);e.searchParams.set("show",t),window.history.replaceState({},"",e.toString())}eX.announce(eQ.layoutSaved(t)),await tt()},[eN,T,tt,eb,e,eX]),tn=(0,n.useCallback)(()=>{ej(!1),eS(""),eI(null)},[]),to=(0,n.useCallback)(async()=>{if(G){ee(null),(0,W.cY)("showroom.cost-gate.confirm",{totalTokens:G.estimate.totalTokens});try{await G.resume()}catch(e){(0,W.cY)("showroom.cost-gate.resume-error",{err:e instanceof Error?e.message:String(e)})}}},[G]),tl=(0,n.useCallback)(()=>{G&&((0,W.cY)("showroom.cost-gate.cancel",{totalTokens:G.estimate.totalTokens}),ee(null))},[G]),ti=(0,n.useCallback)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(ev(!1),!t.skipConfirm&&T.length>0&&!window.confirm('Load "'.concat(e.name,'"? 현재 ').concat(T.length," panel state 가 교체됩니다 (저장은 별개).")))return;let a=(0,$.nZ)(e);M(a),L([]),_([]),Q([]),ea([]),eo([]),ei([]),ed([]),eu([]),em.current.clear(),C(e.name);{let t=new URL(window.location.href);t.searchParams.set("show",e.name),window.history.replaceState({},"",t.toString())}eX.announce(eQ.layoutLoaded(e.name)),(0,W.cY)("showroom.load",{name:e.name,panels:a.length})},[T,eX]),ts=(0,n.useCallback)(()=>{C(null);{let e=new URL(window.location.href);e.searchParams.delete("show"),window.history.replaceState({},"",e.toString())}(0,W.cY)("showroom.clear-active",{})},[]),td=(0,n.useRef)(!1);(0,n.useEffect)(()=>{if(td.current||0===eb.length&&null===z)return;let e=null==A?void 0:A.get("show");if(!e){td.current=!0;return}let t=eb.find(t=>t.name===e);t&&(td.current=!0,ti(t,{skipConfirm:!0}))},[eb,A,z,ti]),(0,n.useEffect)(()=>{let e=setTimeout(()=>{td.current=!0},1500);return()=>clearTimeout(e)},[]);let tc=(0,n.useCallback)(async t=>{if(!window.confirm('Delete saved layout "'.concat(t.name,'"?')))return;let a=await (0,$.oM)(t.name,e);(0,W.cY)("showroom.layout.delete",{name:t.name,ok:a.ok,source:a.source}),z===t.name&&ts(),a.ok&&eX.announce(eQ.layoutDeleted(t.name)),await tt()},[tt,e,z,ts,eX]),tu=(0,n.useCallback)(e=>{L(t=>[...t,...e]),(0,W.cY)("showroom.attach.add",{added:e.length,filenames:e.map(e=>e.filename)})},[]),tm=(0,n.useCallback)(e=>{L(t=>t.filter(t=>t.id!==e)),(0,W.cY)("showroom.attach.remove",{id:e})},[]),tp=(0,n.useCallback)(e=>{_(t=>[...t,e]),(0,W.cY)("showroom.terminal.pin",{id:e.id,label:e.label,bytes:e.text.length})},[]),th=(0,n.useCallback)(e=>{_(t=>t.filter(t=>t.id!==e)),(0,W.cY)("showroom.terminal.remove",{id:e})},[]),tb=(0,n.useCallback)(e=>t=>{let{messageId:a,text:r}=t,n=r.trim();if(!n)return;let o=Math.max(1,Z),l={id:"pa-".concat(Date.now().toString(36),"-").concat(N()),label:function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now(),r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=y(e,t),o=new Date(a),l=String(o.getHours()).padStart(2,"0"),i=String(o.getMinutes()).padStart(2,"0");return"".concat(r>0?"T".concat(r," "):"","@").concat(n," \xb7 ").concat(l,":").concat(i)}(e,T,Date.now(),o),text:n,sourcePanelId:e.id,sourceProvider:e.provider||"default",promotedAt:Date.now(),turnNumber:o,enabled:!0};Q(e=>[...e,l]),(0,W.cY)("showroom.prior.promote",{panelId:e.id,messageId:a,provider:e.provider,bytes:n.length,turn:o})},[T,Z]),tx=(0,n.useCallback)(e=>{Q(t=>t.filter(t=>t.id!==e)),(0,W.cY)("showroom.prior.remove",{id:e})},[]),tg=(0,n.useCallback)(e=>{Q(t=>t.map(t=>t.id===e?{...t,enabled:!t.enabled}:t)),(0,W.cY)("showroom.prior.toggle",{id:e})},[]),tf=(0,n.useCallback)(async t=>{let a=t.trim();if(!a)return{ok:!1,reason:"url required"};try{let t=await e.fetchUrlContext(a),r={id:"uc-".concat(Date.now().toString(36),"-").concat(N()),label:function(e,t){if(t&&t.trim().length>0)return t.trim();try{return new URL(e).hostname||e}catch(t){return e}}(t.url,t.title),url:t.url,text:t.text,fetchedAt:Date.now()};return ea(e=>[...e,r]),(0,W.cY)("showroom.url.add",{url:t.url,bytes:t.text.length,hasTitle:!!t.title}),{ok:!0}}catch(t){let e=t instanceof Error?t.message:String(t);return(0,W.cY)("showroom.url.error",{error:e}),{ok:!1,reason:e}}},[e]),tv=(0,n.useCallback)(e=>{ea(t=>t.filter(t=>t.id!==e)),(0,W.cY)("showroom.url.remove",{id:e})},[]),tw=(0,n.useCallback)(async()=>{if("undefined"==typeof navigator||!navigator.clipboard)return{ok:!1,reason:"clipboard API unavailable"};try{let e=await navigator.clipboard.readText();if(!e||0===e.trim().length)return{ok:!1,reason:"clipboard is empty"};let t={id:"cc-".concat(Date.now().toString(36),"-").concat(N()),label:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now(),a=new Date(t),r=String(a.getHours()).padStart(2,"0"),n=String(a.getMinutes()).padStart(2,"0");return"clipboard \xb7 ".concat(e.length," chars \xb7 ").concat(r,":").concat(n)}(e),text:e,pastedAt:Date.now()};return eo(e=>[...e,t]),(0,W.cY)("showroom.clipboard.add",{bytes:e.length}),{ok:!0}}catch(t){let e=t instanceof Error?t.message:String(t);return(0,W.cY)("showroom.clipboard.error",{error:e}),{ok:!1,reason:e}}},[]),tk=(0,n.useCallback)(e=>{eo(t=>t.filter(t=>t.id!==e)),(0,W.cY)("showroom.clipboard.remove",{id:e})},[]),ty=(0,n.useCallback)(async e=>{try{let{extractKeyFrame:t}=await a.e(8725).then(a.bind(a,88725)),r=await t(e),n={id:"vc-".concat(Date.now().toString(36),"-").concat(N()),label:function(e,t,a){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Date.now(),n=U(e),o="".concat(t,"x").concat(a),l=new Date(r),i=l.getFullYear(),s=String(l.getMonth()+1).padStart(2,"0"),d=String(l.getDate()).padStart(2,"0");return"video \xb7 ".concat(n," \xb7 ").concat(o," \xb7 ").concat(i,"-").concat(s,"-").concat(d)}(r.durationSec,r.widthPx,r.heightPx),filename:e.name,mimeType:r.mimeType,durationSec:Math.round(r.durationSec),widthPx:r.widthPx,heightPx:r.heightPx,frameDataUrl:r.frameDataUrl,capturedAt:Date.now()};return ei(e=>[...e,n]),(0,W.cY)("showroom.video.add",{duration:n.durationSec,dimensions:"".concat(n.widthPx,"x").concat(n.heightPx)}),{ok:!0}}catch(t){let e=t instanceof Error?t.message:String(t);return(0,W.cY)("showroom.video.error",{error:e}),{ok:!1,reason:e}}},[]),tj=(0,n.useCallback)(e=>{ei(t=>t.filter(t=>t.id!==e)),(0,W.cY)("showroom.video.remove",{id:e})},[]),tz=(0,n.useCallback)(async t=>{try{let{extractAudioMeta:r}=await a.e(5532).then(a.bind(a,55532)),n=await r(t),o={id:"ac-".concat(Date.now().toString(36),"-").concat(N()),label:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now(),a=U(e),r=new Date(t),n=r.getFullYear(),o=String(r.getMonth()+1).padStart(2,"0"),l=String(r.getDate()).padStart(2,"0");return"audio \xb7 ".concat(a," \xb7 ").concat(n,"-").concat(o,"-").concat(l)}(n.durationSec),filename:t.name,mimeType:n.mimeType,durationSec:Math.round(n.durationSec),sizeBytes:n.sizeBytes,transcript:"",loadedAt:Date.now()};return ed(e=>[...e,o]),(0,W.cY)("showroom.audio.add",{duration:o.durationSec,size:o.sizeBytes}),(async()=>{try{let a=await e.transcribeAudio(t);"string"==typeof a.text&&a.text.trim().length>0&&(ed(e=>e.map(e=>e.id===o.id?{...e,transcript:a.text}:e)),(0,W.cY)("showroom.audio.stt-ok",{id:o.id,chars:a.text.length,language:a.language,durationMs:a.durationMs}))}catch(e){(0,W.cY)("showroom.audio.stt-fail",{id:o.id,error:e instanceof Error?e.message:String(e)})}})(),{ok:!0}}catch(t){let e=t instanceof Error?t.message:String(t);return(0,W.cY)("showroom.audio.error",{error:e}),{ok:!1,reason:e}}},[e]),tN=(0,n.useCallback)(e=>{ed(t=>t.filter(t=>t.id!==e)),(0,W.cY)("showroom.audio.remove",{id:e})},[]),tS=(0,n.useCallback)((e,t)=>{ed(a=>a.map(a=>a.id===e?{...a,transcript:t}:a))},[]),tC=(0,n.useCallback)((e,t,a)=>{let r=function(e,t,a){var r,n,o;let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(t===a)return{ok:!1,reason:"self-route"};if(e.some(e=>e.fromPanelId===t&&e.toPanelId===a))return{ok:!1,reason:"duplicate"};if(function(e,t,a){if(t===a)return!0;let r=new Map;for(let t of e){var n;let e=null!=(n=r.get(t.fromPanelId))?n:[];e.push(t.toPanelId),r.set(t.fromPanelId,e)}let o=new Set,l=[a];for(;l.length>0;){let e=l.shift();if(e===t)return!0;if(o.has(e))continue;o.add(e);let a=r.get(e);a&&l.push(...a)}return!1}(e,t,a))return{ok:!1,reason:"cycle"};let i=null==(r=l.routePrompt)?void 0:r.trim(),s={id:"ce-".concat(Date.now().toString(36),"-").concat(N()),fromPanelId:t,toPanelId:a,wrapMode:null!=(n=l.wrapMode)?n:"prior",...i?{routePrompt:i}:{},enabled:null==(o=l.enabled)||o,...l.hitl?{hitl:!0}:{},createdAt:Date.now()};return{ok:!0,edge:s,edges:[...e,s]}}(ec,e,t,a);return r.ok?(eu(r.edges),(0,W.cY)("showroom.chain.add",{from:e,to:t,wrapMode:r.edge.wrapMode,edges:r.edges.length})):(0,W.cY)("showroom.chain.add.reject",{from:e,to:t,reason:r.reason}),r},[ec]),tI=(0,n.useCallback)(e=>{eu(t=>t.filter(t=>t.id!==e)),(0,W.cY)("showroom.chain.remove",{edgeId:e})},[]),tA=(0,n.useCallback)(e=>{eu(t=>t.map(t=>{if(t.id!==e)return t;let a={...t};return t.hitl?delete a.hitl:a.hitl=!0,(0,W.cY)("showroom.chain.hitl.toggle",{edgeId:e,next:!t.hitl}),a}))},[]),tT=(0,n.useCallback)(async(e,t)=>{let a=e6.current,r=e4.current;if(!a||!r)return void(0,W.cY)("showroom.chain.forward.skip",{reason:"no-layout-session"});let n=O([e],{includeAgent:!0});if(!n)return void(0,W.cY)("showroom.chain.forward.skip",{reason:"empty-hint"});let o=(0,w.tw)(t);e9(t=>{var a;let r=null!=(a=t[e.id])?a:{messages:[],partial:"",streaming:!1,error:null,toolCalls:{}};return{...t,[e.id]:{messages:[...r.messages,o],partial:"",streaming:!0,error:null,toolCalls:{}}}});try{await a.send("session/prompt",{sessionId:r,prompt:[{type:"text",text:t}],_meta:H(n)})}catch(a){let t=String(a);(0,W.cY)("showroom.chain.forward.error",{error:t}),e9(a=>{let r=a[e.id];return r?{...a,[e.id]:{...r,streaming:!1,error:t}}:a})}},[]);(0,n.useEffect)(()=>{if(0!==ec.length)for(let[t,a]of Object.entries(e7)){if(a.streaming)continue;let r=a.messages[a.messages.length-1];if(!r||"assistant"!==r.role||!r.text||0===r.text.length)continue;let n="".concat(t,":").concat(r.id);if(em.current.has(n))continue;em.current.add(n);let o=T.find(e=>e.id===t);if(!o)continue;let l=y(o,T),i=o.provider||"default";for(let a of F(ec,t).filter(e=>e.enabled)){var e;let o=T.find(e=>e.id===a.toPanelId);if(!o)continue;if(null==(e=e7[a.toPanelId])?void 0:e.streaming){(0,W.cY)("showroom.chain.forward.skip",{from:t,to:a.toPanelId,reason:"target-streaming"});continue}let s=function(e,t,a,r){var n;if("plain"===e.wrapMode)return t;let o=r.replace(/[<>"]/g,"_"),l=a.replace(/[<>"]/g,"_"),i='<prior_answer source="'.concat(o,'" provider="').concat(l,'">\n').concat(t,"\n</prior_answer>"),s=(null==(n=e.routePrompt)?void 0:n.trim())||"위의 답변을 검토해주세요.";return"".concat(i,"\n\n").concat(s)}(a,r.text,i,"@".concat(l));if(a.hitl){let e=y(o,T);(0,W.cY)("showroom.chain.forward.hitl.enqueue",{edgeId:a.id,from:t,to:a.toPanelId,bytes:s.length}),eh(r=>r.some(e=>e.key===n)?r:[...r,{key:n,edgeId:a.id,from:{id:t,label:l},to:{id:a.toPanelId,label:e},forwardText:s,targetPanel:o,enqueuedAt:Date.now()}]);continue}(0,W.cY)("showroom.chain.forward",{edgeId:a.id,from:t,to:a.toPanelId,wrapMode:a.wrapMode,bytes:s.length}),tT(o,s)}}},[e7,ec,T,tT]);let tE=(0,n.useCallback)(()=>{eh(e=>{let t=e[0];return t?((0,W.cY)("showroom.chain.forward.hitl.confirm",{edgeId:t.edgeId,from:t.from.id,to:t.to.id,bytes:t.forwardText.length,latencyMs:Date.now()-t.enqueuedAt}),tT(t.targetPanel,t.forwardText),e.slice(1)):e})},[tT]),tM=(0,n.useCallback)(()=>{eh(e=>{let t=e[0];return t?((0,W.cY)("showroom.chain.forward.hitl.cancel",{edgeId:t.edgeId,from:t.from.id,to:t.to.id,bytes:t.forwardText.length,latencyMs:Date.now()-t.enqueuedAt}),e.slice(1)):e})},[]),tP=(0,n.useRef)(null),tL=(0,n.useCallback)(async t=>{let a=t.trim();if(!a)return;let r=function(e){if(0===e.length)return"";let t=e.map(e=>{let t=e.label.replace(/[<>"]/g,"_");return'<terminal_context label="'.concat(t,'">\n').concat(e.text,"\n</terminal_context>")});return"".concat(t.join("\n\n"),"\n\n")}(D),n=function(e){if(0===e.length)return"";let t=e.map(e=>{let t=e.url.replace(/[<>"]/g,"_"),a=e.label.replace(/[<>"]/g,"_");return'<url_context url="'.concat(t,'" title="').concat(a,'">\n').concat(e.text,"\n</url_context>")});return"".concat(t.join("\n\n"),"\n\n")}(et),o=function(e){if(0===e.length)return"";let t=e.map(e=>{let t=e.label.replace(/[<>"]/g,"_");return'<clipboard_context label="'.concat(t,'">\n').concat(e.text,"\n</clipboard_context>")});return"".concat(t.join("\n\n"),"\n\n")}(er),l=function(e){if(0===e.length)return"";let t=e.map(e=>{let t=e.label.replace(/[<>"]/g,"_"),a=e.filename.replace(/[<>"]/g,"_"),r=e.mimeType.replace(/[<>"]/g,"_"),n=U(e.durationSec),o="".concat(e.widthPx,"x").concat(e.heightPx);return'<video_context label="'.concat(t,'" filename="').concat(a,'" mime="').concat(r,'" duration="').concat(n,'" dimensions="').concat(o,'">\n<frame data="').concat(e.frameDataUrl,'" />\n</video_context>')});return"".concat(t.join("\n\n"),"\n\n")}(el),i=function(e){if(0===e.length)return"";let t=e.map(e=>{let t=e.label.replace(/[<>"]/g,"_"),a=e.filename.replace(/[<>"]/g,"_"),r=e.mimeType.replace(/[<>"]/g,"_"),n=U(e.durationSec),o='<audio_context label="'.concat(t,'" filename="').concat(a,'" mime="').concat(r,'" duration="').concat(n,'" size="').concat(e.sizeBytes,' bytes">'),l=e.transcript.trim().length>0?"\n<transcript>".concat(e.transcript,"</transcript>\n"):"\n";return"".concat(o).concat(l,"</audio_context>")});return"".concat(t.join("\n\n"),"\n\n")}(es),s=function(e){let t=e.filter(e=>!1!==e.enabled);if(0===t.length)return"";let a=t.map(e=>{let t=e.label.replace(/[<>"]/g,"_"),a=e.sourceProvider.replace(/[<>"]/g,"_");return'<prior_answer source="'.concat(t,'" provider="').concat(a,'">\n').concat(e.text,"\n</prior_answer>")});return"".concat(a.join("\n\n"),"\n\n")}(J),d="".concat(r).concat(n).concat(o).concat(l).concat(i).concat(s).concat(a),c="local-llm"===eD?async t=>{let a={backend:"local-llm"};e_.length>0&&(a.model=e_);let r=await e.judgeRole(t,a);return{role:r.role,source:r.source}}:null,u=c?await Y(a,T,c):E(a,T);if(0===u.targets.length)return;let m="mixed"===e1?Object.fromEntries(u.targets.map(e=>{var t;return[e.id,B(null==(t=e7[e.id])?void 0:t.messages)]}).filter(e=>{let[,t]=e;return"string"==typeof t&&t.length>0})):void 0,p=function(e){var t;let a=e$(e.dispatchText),r=e.dmTargets.map(t=>{var r,n;let o=e$(null!=(n=null==(r=e.lastAssistantByPanelId)?void 0:r[t.id])?n:"");return{panelId:t.id,displayName:y(t,e.allPanels),provider:t.provider||"default",inputTokens:a,priorTokens:o,totalTokens:a+o}}),n=r.reduce((e,t)=>e+t.totalTokens,0),o=null!=(t=e.warnThreshold)?t:function(){var e;let t=void 0!==eV?null==(e=eV.env)?void 0:e.NEXT_PUBLIC_ELANOUS_SHOWROOM_BROADCAST_COST_WARN_TOKENS:void 0,a=t?Number(t):NaN;return Number.isFinite(a)&&a>0?a:5e4}();return{totalTokens:n,perPanel:r,warnThreshold:o,exceedsWarnThreshold:n>o}}({dispatchText:d,dmTargets:u.targets,allPanels:T,...m?{lastAssistantByPanelId:m}:{}}),h=async()=>{var e,t;X(e=>e+1);let a=null!=(t=null==(e=tP.current)?void 0:e.call(tP))?t:0;if(a>0&&(0,W.cY)("showroom.voice.barge-in.dispatch",{cancelled:a}),"targeted"===u.mode){let e=function(e,t){if(0===t.length)return e.slice();let a=new Set(t),r=!1,n=e.map(e=>a.has(e.id)&&"mute"===e.state?(r=!0,{...e,state:"live"}):e);return r?n:e.slice()}(T,u.targets.map(e=>e.id));e.some((e,t)=>{var a;return e.state!==(null==(a=T[t])?void 0:a.state)})&&M(e)}(0,W.cY)("showroom.dispatch",{showroomId:j,mode:u.mode,routedBy:u.routedBy,classifiedRole:u.classifiedRole,panels:T.length,targets:u.targets.length,len:d.length,attachments:P.length,terminalContexts:D.length,estTokens:p.totalTokens}),await b()};if(p.exceedsWarnThreshold){(0,W.cY)("showroom.cost-gate.fire",{totalTokens:p.totalTokens,warnThreshold:p.warnThreshold,targets:u.targets.length,mixed:!!m}),ee({estimate:p,resume:h});return}async function b(){let e=e6.current,t=e4.current;if(!e||!t)return void(0,W.cY)("showroom.dm.dispatch.skip",{reason:"no-layout-session"});let a=u.targets,r="mixed"===e1?Object.fromEntries(a.map(e=>{var t;return[e.id,B(null==(t=e7[e.id])?void 0:t.messages)]}).filter(e=>{let[,t]=e;return"string"==typeof t&&t.length>0})):void 0,n=O(a,{includeAgent:!0,..."mixed"===e1?{historyMode:"mixed"}:{},...r?{lastAssistantByPanelId:r}:{}});if(!n)return void(0,W.cY)("showroom.dm.dispatch.skip",{reason:"empty-hint"});"mixed"===e1&&r&&(0,W.cY)("showroom.dm.dispatch.mixed",{siblingsWithPrior:Object.keys(r).length,totalTargets:a.length}),P.length>0&&(0,W.cY)("showroom.dm.dispatch.attachments-dropped",{count:P.length});let o=(0,w.tw)(d);e9(e=>{let t={...e};for(let e of a){var r;let a=null!=(r=t[e.id])?r:{messages:[],partial:"",streaming:!1,error:null,toolCalls:{}};t[e.id]={messages:[...a.messages,o],partial:"",streaming:!0,error:null,toolCalls:{}}}return t});try{await e.send("session/prompt",{sessionId:t,prompt:[{type:"text",text:d}],_meta:H(n)})}catch(t){(0,W.cY)("showroom.dm.dispatch.error",{error:String(t)});let e=String(t);e9(t=>{let r={...t};for(let t of a){let a=r[t.id];a&&(r[t.id]={...a,streaming:!1,error:e})}return r})}L([]),_([]),Q([]),ea([]),eo([]),ei([]),ed([])}await h()},[T,j,P,D,J,et,er,eD,e_,el,es,e]),tD=(0,n.useCallback)(()=>{(0,W.cY)("showroom.stop-all",{showroomId:j,mode:"dm-noop"})},[j]),tR=(0,n.useCallback)(()=>{M(e=>[...e,function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return{id:S(),kind:"chat",provider:e,sessionId:null,state:"live"}}()])},[]),tY=(0,n.useCallback)(e=>{M(t=>{var a;return[...t,(a=e,{id:S(),kind:"agent",provider:a,agentBrand:a,sessionId:null,state:"live"})]}),ek(!1)},[]),t_=(0,n.useCallback)(e=>{M(t=>t.filter(t=>t.id!==e)),eu(t=>(function(e,t){let a=e.filter(e=>e.fromPanelId!==t&&e.toPanelId!==t);return a.length===e.length?e.slice():a})(t,e)),(0,W.cY)("showroom.panel.remove",{panelId:e})},[]),tU=(0,n.useCallback)((e,t)=>{M(a=>a.map(a=>a.id===e?{...a,state:t}:a))},[]),tF=(0,n.useCallback)((e,t)=>{M(a=>a.map(a=>a.id===e?{...a,provider:t}:a))},[]),tK=(0,n.useCallback)((e,t)=>{M(a=>a.map(a=>{if(a.id!==e)return a;if(null===t){let{roleHint:e,...t}=a;return t}return{...a,roleHint:t}})),(0,W.cY)("showroom.panel.roleHint",{panelId:e,roleHint:t})},[]),tO=(0,n.useCallback)((e,t)=>{var a;M(a=>a.map(a=>{if(a.id!==e)return a;if(null===t){let{personaId:e,...t}=a;return t}let r={...a,personaId:t.personaId};return t.brand&&t.brand.length>0&&(r.provider=t.brand),r})),(0,W.cY)("showroom.panel.persona",{panelId:e,personaId:null!=(a=null==t?void 0:t.personaId)?a:null,brand:null==t?void 0:t.brand})},[]),tB=(0,n.useMemo)(()=>T.filter(e=>"live"===e.state).length,[T]),tq=(0,n.useRef)(tL);tq.current=tL;let tH=(0,n.useCallback)(e=>{let t=e.trim();t&&((0,W.cY)("showroom.voice.auto-send",{len:t.length}),tq.current(t))},[]),tJ=e.voiceWsUrl(),tW=(0,n.useRef)(null),tV=(0,n.useCallback)(()=>{let e=tW.current;if(!e||!e.speaking)return;let t=e.cancelInFlight();(0,W.cY)("showroom.voice.barge-in.fire",{cancelled:t})},[]),t$=(0,k.sS)({wsUrl:tJ,...t.token?{token:t.token}:{},onTranscript:tH,onSpeechActivity:tV}),[tQ,tZ]=(0,n.useState)(!1),tX=function(e){var t;let a=void 0!==window.speechSynthesis,r=null!=(t=e.language)?t:"ko-KR",o=(0,n.useRef)(e.enabled);o.current=e.enabled;let l=(0,n.useRef)(0),[i,s]=(0,n.useState)(!1),d=(0,n.useCallback)(()=>{s(l.current>0)},[]),c=(0,n.useCallback)(()=>{if(!a)return 0;let e=l.current;if(0===e)return 0;(0,W.cY)("voice.tts.cancel-in-flight",{cancelled:e});try{window.speechSynthesis.cancel()}catch(e){}return l.current=0,d(),e},[a,d]);(0,n.useEffect)(()=>{a&&(e.enabled||c())},[e.enabled,a,c]);let u=(0,n.useRef)({}),m=(0,n.useRef)([]);return(0,n.useEffect)(()=>{var e,t;if(!a)return;let r=()=>{m.current=window.speechSynthesis.getVoices()};return r(),null==(e=(t=window.speechSynthesis).addEventListener)||e.call(t,"voiceschanged",r),()=>{var e,t;null==(e=(t=window.speechSynthesis).removeEventListener)||e.call(t,"voiceschanged",r)}},[a]),(0,n.useEffect)(()=>{if(!a||!o.current){u.current=e.panelStates;return}let t=function(e,t){let a=[];for(let[l,i]of Object.entries(t)){var r,n,o;let t=e[l],s=null!=(r=null==t?void 0:t.streaming)&&r&&!i.streaming,d=(null!=(n=i.messages.length)?n:0)>(null!=(o=null==t?void 0:t.messages.length)?o:0);if(!s||!d)continue;let c=i.messages[i.messages.length-1];if(!c||"assistant"!==c.role)continue;let u=c.text.trim();u&&a.push({panelId:l,text:u})}return a}(u.current,e.panelStates);if(u.current=e.panelStates,0===t.length)return;let n=m.current;for(let{panelId:a,text:o}of t){var i;let t=e.panels.find(e=>e.id===a);if(!t)continue;let s=new SpeechSynthesisUtterance((i=y(t,e.panels),"@".concat(i," \xb7 ")+o)),c=function(e){var t;let a=function(e,t){if(0===e.length)return[];let a=t.toLowerCase(),r=e.filter(e=>e.lang.toLowerCase()===a);if(r.length>0)return r;let n=a.split("-")[0];return e.filter(e=>e.lang.toLowerCase().startsWith(n))}(e.voices,e.language);if(0===a.length)return null;let r=function(e){let t=5381;for(let a=0;a<e.length;a+=1)t=(t<<5)+t+e.charCodeAt(a)|0;return t>>>0}(e.panelId)%a.length;return null!=(t=a[r])?t:null}({panelId:a,language:r,voices:n});c&&(s.voice=c),s.lang=r;let u=()=>{l.current>0&&(l.current-=1),d()};s.onend=u,s.onerror=u;try{window.speechSynthesis.speak(s),l.current+=1,d()}catch(e){}}},[e.panelStates,e.panels,a,r,d]),{supported:a,speaking:i,cancelInFlight:c}}({panelStates:e7,panels:T,enabled:t$.active&&!tQ,language:"ko-KR"});tW.current={cancelInFlight:tX.cancelInFlight,speaking:tX.speaking},tP.current=tX.cancelInFlight,(0,V.Si)({enabled:tX.speaking,onActivate:()=>{let e=tX.cancelInFlight();(0,W.cY)("showroom.voice.barge-in.spacebar",{cancelled:e}),t$.forceListen()}});let tG=(0,n.useRef)(null);(0,n.useEffect)(()=>{let e=t$.active?t$.phase:"off";null!==tG.current&&tG.current!==e&&("off"===e?eX.announce(eQ.voiceToggled(!1)):eX.announce(eQ.voicePhase(e))),tG.current=e},[t$.active,t$.phase,eX]);let t0=(0,n.useRef)(null);(0,n.useEffect)(()=>{null!==t0.current&&t0.current!==tQ&&eX.announce(eQ.ttsMuted(tQ)),t0.current=tQ},[tQ,eX]),(0,n.useEffect)(()=>{function e(e){let t=(0,eK.ZQ)({key:e.key,metaKey:e.metaKey,ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,altKey:e.altKey,fromEditable:(0,eK._i)(e.target)});if(t)switch(t){case"focus-broadcast-input":{e.preventDefault();let a=document.getElementById("showroom-broadcast-input");a&&(a.focus(),a.setSelectionRange(a.value.length,a.value.length)),(0,W.cY)("showroom.shortcut",{id:t,focused:!!a});break}case"toggle-role-judge":e.preventDefault(),eG("local-llm"===eD?"keyword":"local-llm"),(0,W.cY)("showroom.shortcut",{id:t});break;case"toggle-voice":if(e.preventDefault(),!tJ)return void(0,W.cY)("showroom.shortcut.suppressed",{id:t,reason:"no-ws-url"});t$.toggle(),(0,W.cY)("showroom.shortcut",{id:t});break;case"toggle-tts":if(e.preventDefault(),!tX.supported||!t$.active)return void(0,W.cY)("showroom.shortcut.suppressed",{id:t,reason:"tts-unavailable"});tZ(e=>!e),(0,W.cY)("showroom.shortcut",{id:t});break;case"open-help":e.preventDefault(),eE(!0),(0,W.cY)("showroom.shortcut",{id:t})}}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[eD,eG,t$,tJ,tX.supported]);let t1=eF({active:ey,skipInitialFocus:!0});return(0,r.jsxs)("div",{className:"flex h-full flex-col bg-zinc-50 dark:bg-zinc-950","data-testid":"showroom-layout",children:[(0,r.jsx)("div",{"aria-live":"polite","aria-atomic":"true",className:"sr-only","data-testid":"showroom-live-announcer",children:eX.message}),(0,r.jsx)(eA,{}),(0,r.jsxs)("header",{className:"flex flex-wrap items-center justify-between gap-1 border-b border-zinc-200 bg-white px-2 py-2 dark:border-zinc-800 dark:bg-zinc-900 sm:gap-2 sm:px-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(o.A,{className:"size-5 text-zinc-600 dark:text-zinc-300","aria-hidden":!0}),(0,r.jsx)("span",{className:"text-sm font-medium text-zinc-900 dark:text-zinc-100",children:"Showroom"}),z&&(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full border border-amber-300 bg-amber-50 px-2 py-0.5 text-[11px] font-medium text-amber-700 dark:border-amber-700 dark:bg-amber-900/30 dark:text-amber-300","data-testid":"showroom-active-name",title:"Active showroom: ".concat(z),children:[(0,r.jsx)(o.A,{className:"size-3","aria-hidden":!0}),z,(0,r.jsx)("button",{type:"button",onClick:ts,className:"rounded-full p-0.5 hover:bg-amber-100 dark:hover:bg-amber-900/50","aria-label":"Clear active showroom (return to ephemeral)","data-testid":"showroom-active-clear",children:(0,r.jsx)(l.A,{className:"size-2.5","aria-hidden":!0})})]}),(0,r.jsxs)("span",{className:"text-xs text-zinc-500","data-testid":"showroom-counts",children:[T.length," panel \xb7 ",tB," live"]}),(0,r.jsx)(eY,{})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsxs)("button",{type:"button",onClick:tR,className:"inline-flex items-center gap-1 rounded-md border border-zinc-300 bg-white px-2 py-1 text-xs hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-800 dark:hover:bg-zinc-700","aria-label":"Add chat panel",title:"Add chat panel","data-testid":"showroom-add-panel",children:[(0,r.jsx)(i.A,{className:"size-3.5","aria-hidden":!0}),"Chat"]}),(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>ek(e=>!e),className:"inline-flex items-center gap-1 rounded-md border border-amber-300 bg-white px-2 py-1 text-xs text-amber-700 hover:bg-amber-50 dark:border-amber-700 dark:bg-zinc-800 dark:text-amber-300 dark:hover:bg-amber-900/30","aria-label":"Add agent CLI panel","aria-expanded":ew,title:"Add agent CLI panel (codex \xb7 claude \xb7 gemini)","data-testid":"showroom-add-agent-toggle",children:[(0,r.jsx)(s.A,{className:"size-3.5","aria-hidden":!0}),"Agent"]}),ew&&(0,r.jsx)("div",{className:"absolute right-0 top-full z-10 mt-1 w-44 rounded-md border border-zinc-300 bg-white text-xs shadow-lg dark:border-zinc-700 dark:bg-zinc-800","data-testid":"showroom-agent-menu",children:I.map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>tY(e),className:"block w-full border-b border-zinc-200/50 px-2 py-1.5 text-left hover:bg-zinc-50 last:border-b-0 dark:border-zinc-700/50 dark:hover:bg-zinc-700","data-testid":"showroom-add-agent-".concat(e),children:[(0,r.jsxs)("span",{className:"font-medium",children:[e,"-cli"]}),(0,r.jsx)("span",{className:"ml-1 text-[10px] text-zinc-500",children:"CLI agent"})]},e))})]}),(0,r.jsxs)("button",{type:"button",onClick:ta,disabled:0===T.length,className:"inline-flex items-center gap-1 rounded-md border border-zinc-300 bg-white px-2 py-1 text-xs hover:bg-zinc-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-800 dark:hover:bg-zinc-700","aria-label":"Save layout",title:"Save current panel layout","data-testid":"showroom-save-layout",children:[(0,r.jsx)(d.A,{className:"size-3.5","aria-hidden":!0}),"Save"]}),(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>ev(e=>!e),disabled:0===eb.length,className:"inline-flex items-center gap-1 rounded-md border border-zinc-300 bg-white px-2 py-1 text-xs hover:bg-zinc-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-800 dark:hover:bg-zinc-700","aria-label":"Load saved layout",title:0===eb.length?"저장된 layout 없음":"".concat(eb.length," saved layout"),"aria-expanded":eg,"data-testid":"showroom-load-toggle",children:[(0,r.jsx)(c.A,{className:"size-3.5","aria-hidden":!0}),"Load",eb.length>0&&(0,r.jsx)("span",{className:"ml-1 text-[10px] text-zinc-500",children:eb.length})]}),eg&&eb.length>0&&(0,r.jsx)("div",{className:"absolute right-0 top-full z-10 mt-1 max-h-64 w-64 overflow-y-auto rounded-md border border-zinc-300 bg-white text-xs shadow-lg dark:border-zinc-700 dark:bg-zinc-800","data-testid":"showroom-load-menu",children:eb.map(e=>(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-zinc-200/50 px-2 py-1 last:border-b-0 dark:border-zinc-700/50",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>ti(e),className:"flex flex-1 flex-col text-left hover:text-zinc-900 dark:hover:text-zinc-100","data-testid":"showroom-load-".concat(e.name),children:[(0,r.jsx)("span",{className:"font-medium",children:e.name}),(0,r.jsxs)("span",{className:"text-[10px] text-zinc-500",children:[e.panels.length," panel \xb7 ",new Date(e.savedAt).toLocaleString()]})]}),(0,r.jsx)("button",{type:"button",onClick:()=>tc(e),className:"rounded p-1 text-rose-600 hover:bg-rose-50 dark:hover:bg-rose-900/30","aria-label":"Delete layout ".concat(e.name),"data-testid":"showroom-delete-".concat(e.name),children:(0,r.jsx)(u.A,{className:"size-3","aria-hidden":!0})})]},e.name))})]}),(0,r.jsxs)("button",{type:"button",onClick:()=>e8(!eM),className:"inline-flex items-center gap-1 rounded-md border px-2 py-1 text-xs ".concat(eM?"border-indigo-400 bg-indigo-50 text-indigo-700 dark:border-indigo-600 dark:bg-indigo-900/30 dark:text-indigo-300":"border-amber-300 bg-amber-50 text-amber-700 dark:border-amber-700 dark:bg-amber-900/30 dark:text-amber-300"),"aria-label":"Toggle daemon multi-LLM dispatch preference (DM stage 3 \xb7 always engaged)","aria-pressed":eM,title:eM?"DM stage 3 \xb7 always engaged \xb7 single ACP \xb7 multiLlm hint \xb7 namespaced sub-stream":"DM preference OFF \xb7 panel-local fallback was removed in DM stage 3 \xb7 DM dispatch still active","data-testid":"showroom-dm-toggle",children:[(0,r.jsx)(m.A,{className:"size-3.5","aria-hidden":!0}),"DM",eM&&(0,r.jsx)("span",{className:"ml-0.5 rounded bg-indigo-600 px-1 text-[9px] uppercase text-white","data-testid":"showroom-dm-toggle-on",children:"on"})]}),(0,r.jsxs)("button",{type:"button",onClick:()=>te("mixed"===e1?"isolated":"mixed"),className:"inline-flex items-center gap-1 rounded-md border px-2 py-1 text-xs ".concat("mixed"===e1?"border-fuchsia-400 bg-fuchsia-50 text-fuchsia-700 dark:border-fuchsia-600 dark:bg-fuchsia-900/30 dark:text-fuchsia-300":"border-zinc-300 bg-white text-zinc-700 hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-300 dark:hover:bg-zinc-700"),"aria-label":"Toggle DM stage 4 mixed history mode","aria-pressed":"mixed"===e1,title:"mixed"===e1?"Mixed history ON \xb7 siblings’ last replies auto-prepended as <prior_answer> blocks (cross-model deliberation automation \xb7 token cost increases)":"Mixed history OFF \xb7 each panel sees only its own thread (default \xb7 token-frugal)","data-testid":"showroom-history-mode-toggle",children:[(0,r.jsx)(m.A,{className:"size-3.5","aria-hidden":!0}),"mix","mixed"===e1&&(0,r.jsx)("span",{className:"ml-0.5 rounded bg-fuchsia-600 px-1 text-[9px] uppercase text-white","data-testid":"showroom-history-mode-toggle-on",children:"on"})]}),(0,r.jsxs)("button",{type:"button",onClick:()=>eG("local-llm"===eD?"keyword":"local-llm"),className:"inline-flex items-center gap-1 rounded-md border px-2 py-1 text-xs ".concat("local-llm"===eD?"border-violet-400 bg-violet-50 text-violet-700 dark:border-violet-600 dark:bg-violet-900/30 dark:text-violet-300":"border-zinc-300 bg-white text-zinc-600 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-400"),"aria-label":"Toggle role-judge backend (keyword vs local-llm)","aria-pressed":"local-llm"===eD,title:"local-llm"===eD?"Local LLM judge \xb7 ambiguous prompts call daemon → LM Studio (model: ".concat(e_||"default","). Click to switch to keyword-only."):"Keyword-only \xb7 ambiguous prompts broadcast (default). Click to engage local LLM.","data-testid":"showroom-role-judge-toggle",children:[(0,r.jsx)(s.A,{className:"size-3.5","aria-hidden":!0}),"judge","local-llm"===eD&&(0,r.jsx)("span",{className:"ml-0.5 rounded bg-violet-600 px-1 text-[9px] uppercase text-white","data-testid":"showroom-role-judge-toggle-on",children:"LLM"})]}),"local-llm"===eD&&(0,r.jsxs)("select",{value:e_,onChange:e=>e0(e.target.value),className:"rounded-md border border-violet-300 bg-white px-2 py-1 text-xs text-violet-700 dark:border-violet-700 dark:bg-zinc-800 dark:text-violet-300","aria-label":"Select LLM judge model",title:eJ?"Model list unavailable: ".concat(eJ,". Type the model id directly via DevTools localStorage."):"Pick a deployed model \xb7 ".concat(eB.length," loaded \xb7 empty = daemon default (mlx-community/gemma-4-26b-a4b-it)"),"data-testid":"showroom-role-judge-model-select",children:[(0,r.jsx)("option",{value:"",children:"(daemon default)"}),(()=>{let e=eB.filter(e=>!/embed/i.test(e.id)),t=new Map;for(let r of e){var a,n;let e=null!=(a=r.host)?a:"",o=null!=(n=t.get(e))?n:[];o.push(r),t.set(e,o)}return t.size<=1?e.map(e=>{var t;return(0,r.jsx)("option",{value:e.id,children:e.id},"".concat(null!=(t=e.host)?t:"h","::").concat(e.id))}):Array.from(t.entries()).map(e=>{let[t,a]=e;return(0,r.jsx)("optgroup",{label:t||"(unknown host)",children:a.map(e=>(0,r.jsx)("option",{value:e.id,children:e.id},"".concat(t,"::").concat(e.id)))},t||"unknown")})})()]}),(0,r.jsxs)("button",{type:"button",onClick:()=>{t$.toggle()},disabled:!tJ,className:"inline-flex items-center gap-1 rounded-md border px-2 py-1 text-xs ".concat(t$.active?"border-emerald-400 bg-emerald-50 text-emerald-700 dark:border-emerald-600 dark:bg-emerald-900/30 dark:text-emerald-300":"border-zinc-300 bg-white text-zinc-700 hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-300 dark:hover:bg-zinc-700"," disabled:cursor-not-allowed disabled:opacity-50"),"aria-label":t$.active?"Stop voice mode":"Start voice mode","aria-pressed":t$.active,title:tJ?t$.active?"Voice ".concat(t$.phase," \xb7 click to stop"):"Voice mode OFF \xb7 click to start mic + STT":"Voice WebSocket URL is unavailable — daemon `/voice/ws` not configured","data-testid":"showroom-voice-toggle",children:[t$.active?(0,r.jsx)(p.A,{className:"size-3.5","aria-hidden":!0}):(0,r.jsx)(h.A,{className:"size-3.5","aria-hidden":!0}),t$.active&&(0,r.jsx)("span",{className:"ml-0.5 rounded bg-emerald-600 px-1 text-[9px] uppercase text-white","data-testid":"showroom-voice-toggle-on",children:"listening"===t$.phase?"listen":t$.phase})]}),(0,r.jsxs)("button",{type:"button",onClick:()=>tZ(e=>!e),disabled:!tX.supported||!t$.active,className:"inline-flex items-center gap-1 rounded-md border px-2 py-1 text-xs ".concat(tQ?"border-zinc-300 bg-zinc-50 text-zinc-500 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-400":"border-sky-300 bg-sky-50 text-sky-700 dark:border-sky-700 dark:bg-sky-900/30 dark:text-sky-300"," disabled:cursor-not-allowed disabled:opacity-50"),"aria-label":tQ?"Unmute panel TTS":"Mute panel TTS","aria-pressed":tQ,title:tX.supported?t$.active?tQ?"Panel TTS muted \xb7 click to unmute":"Panel TTS active \xb7 click to mute":"Start voice mode to enable per-panel TTS":"Web Speech API is unavailable in this browser","data-testid":"showroom-tts-toggle",children:[tQ?(0,r.jsx)(b.A,{className:"size-3.5","aria-hidden":!0}):(0,r.jsx)(x.A,{className:"size-3.5","aria-hidden":!0}),"TTS"]}),(0,r.jsxs)("button",{type:"button",onClick:tD,className:"inline-flex items-center gap-1 rounded-md border border-rose-300 bg-white px-2 py-1 text-xs text-rose-700 hover:bg-rose-50 dark:border-rose-700 dark:bg-zinc-800 dark:text-rose-300 dark:hover:bg-rose-900/30","aria-label":"Stop all panels",title:"Stop all (placeholder \xb7 P2 wire)",children:[(0,r.jsx)(g.A,{className:"size-3.5","aria-hidden":!0}),"Stop all"]})]})]}),(0,r.jsxs)("div",{className:"flex flex-1 flex-col gap-2 overflow-hidden p-2 ".concat((null==A?void 0:A.get("layout"))==="horizontal"?"flex-row":"xl:flex-row"),"data-testid":"showroom-grid",children:[0===T.length&&(0,r.jsx)("div",{className:"flex flex-1 items-center justify-center text-sm text-zinc-500",children:"모든 panel 이 닫혔습니다 \xb7 위의 + Panel 으로 추가"}),T.map(t=>(0,r.jsx)(en,{panel:t,allPanels:T,client:e,onClose:()=>t_(t.id),onState:e=>tU(t.id,e),onProvider:e=>tF(t.id,e),onPromoteAssistant:tb(t),outgoingEdges:F(ec,t.id),onAddChainEdge:tC,onRemoveChainEdge:tI,onToggleChainEdgeHitl:tA,onRoleHint:e=>tK(t.id,e),onPersona:e=>tO(t.id,e),dmState:e7[t.id],dmSessionId:e3},t.id))]}),(0,r.jsx)(eO,{open:eT,onClose:()=>eE(!1)}),G&&(0,r.jsx)(eH,{estimate:G.estimate,onConfirm:to,onCancel:tl}),(0,r.jsx)(eW,{pending:ep[0]?{from:ep[0].from,to:ep[0].to,forwardText:ep[0].forwardText}:void 0,queueLength:ep.length,onConfirm:tE,onCancel:tM}),ey&&(0,r.jsx)("div",{ref:t1,className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4",role:"dialog","aria-modal":"true","aria-labelledby":"showroom-save-modal-title","data-testid":"showroom-save-modal",onKeyDown:e=>{"Escape"===e.key&&(e.stopPropagation(),tn())},children:(0,r.jsxs)("div",{className:"w-full max-w-md rounded-lg border border-zinc-300 bg-white p-4 shadow-xl dark:border-zinc-700 dark:bg-zinc-900",children:[(0,r.jsx)("h2",{id:"showroom-save-modal-title",className:"mb-2 text-sm font-medium text-zinc-900 dark:text-zinc-100",children:"Save Showroom layout"}),(0,r.jsxs)("p",{className:"mb-3 text-xs text-zinc-500",children:[T.length," panel \xb7 sessionId 는 fresh handshake 으로 load 시 재발급"]}),(0,r.jsx)("input",{type:"text",value:eN,onChange:e=>{eS(e.target.value),eI(null)},onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),tr())},placeholder:"layout name (e.g., morning \xb7 debug-X \xb7 pair-A)",className:"mb-2 w-full rounded-md border border-zinc-300 bg-white px-2 py-1.5 text-sm focus:outline-none focus:ring-2 focus:ring-indigo-400 dark:border-zinc-700 dark:bg-zinc-800","data-testid":"showroom-save-modal-input",autoFocus:!0}),eN.trim()&&eb.some(e=>e.name===eN.trim())&&(0,r.jsx)("p",{className:"mb-2 text-[11px] text-amber-700 dark:text-amber-300","data-testid":"showroom-save-modal-overwrite-warn",children:"같은 이름의 layout 이 이미 있어요 \xb7 save 시 overwrite"}),eC&&(0,r.jsx)("p",{className:"mb-2 text-[11px] text-rose-700 dark:text-rose-300","data-testid":"showroom-save-modal-error",children:eC}),(0,r.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:tn,className:"rounded-md border border-zinc-300 bg-white px-3 py-1 text-xs hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-800 dark:hover:bg-zinc-700","data-testid":"showroom-save-modal-cancel",children:"Cancel"}),(0,r.jsxs)("button",{type:"button",onClick:tr,disabled:!eN.trim(),className:"inline-flex items-center gap-1 rounded-md bg-indigo-600 px-3 py-1 text-xs font-medium text-white hover:bg-indigo-500 disabled:cursor-not-allowed disabled:opacity-50","data-testid":"showroom-save-modal-confirm",children:[(0,r.jsx)(d.A,{className:"size-3","aria-hidden":!0}),"Save"]})]})]})}),(0,r.jsx)(eL,{sessionId:e3,onTap:e=>{ef.K.emit({surface:"pwa",intent:{layer:"selection",kind:"pwa.selection.intent_button_tap",target:{kind:"intent_button",id:e,label:e}},...e3?{context:{active_showroom_session_id:e3}}:{}}),tL(e)}}),(0,r.jsx)(ez,{onSend:tL,panels:T,liveCount:tB,attachments:P,onAttach:tu,onRemoveAttachment:tm,terminalContexts:D,onPinTerminalContext:tp,onRemoveTerminalContext:th,priorAnswers:J,onRemovePriorAnswer:tx,onTogglePriorAnswer:tg,urlContexts:et,onAddUrlContext:tf,onRemoveUrlContext:tv,clipboardContexts:er,onAddClipboardContext:tw,onRemoveClipboardContext:tk,videoContexts:el,onAddVideoContext:ty,onRemoveVideoContext:tj,audioContexts:es,onAddAudioContext:tz,onRemoveAudioContext:tN,onUpdateAudioTranscript:tS,listTerminals:()=>e.listTerminals(),fetchTerminalScrollback:(t,a)=>e.fetchTerminalScrollback(t,a)})]})}},16307:(e,t,a)=>{"use strict";a.d(t,{X:()=>i});var r=a(60500);let n=null,o=[],l=[];function i(e){let[t,a]=(0,r.useState)(()=>n&&Date.now()-n.at<3e5?n.providers:o),[i,s]=(0,r.useState)(()=>n&&Date.now()-n.at<3e5?n.models:l),[d,c]=(0,r.useState)(!1),[u,m]=(0,r.useState)(null),p=(0,r.useCallback)(async()=>{c(!0),m(null);try{let t=await e.getRegistryCatalog(),r=t.providers.map(e=>({id:e.id,displayName:e.displayName,aliases:e.aliases,modelPrefixes:e.modelPrefixes,apiKeyEnv:e.apiKeyEnv,endpointPattern:e.endpointPattern,capabilities:e.capabilities,builtIn:e.builtIn})),o=t.models.map(e=>({id:e.id,provider:e.provider,displayName:e.displayName,...void 0!==e.family?{family:e.family}:{},...void 0!==e.familyShortcut?{familyShortcut:e.familyShortcut}:{},...void 0!==e.contextSize?{contextSize:e.contextSize}:{},...void 0!==e.outputMaxTokens?{outputMaxTokens:e.outputMaxTokens}:{},...void 0!==e.vision?{vision:e.vision}:{},...void 0!==e.reasoning?{reasoning:e.reasoning}:{},...void 0!==e.toolCalling?{toolCalling:e.toolCalling}:{},...void 0!==e.pricing?{pricing:e.pricing}:{},...void 0!==e.deprecated?{deprecated:e.deprecated}:{},...void 0!==e.releaseDate?{releaseDate:e.releaseDate}:{},...void 0!==e.kind?{kind:e.kind}:{}}));n={at:Date.now(),providers:r,models:o},a(r),s(o)}catch(e){m(e instanceof Error?e.message:String(e))}finally{c(!1)}},[e]);(0,r.useEffect)(()=>{if(n&&Date.now()-n.at<3e5){a(n.providers),s(n.models);return}p()},[p]);let h=(0,r.useCallback)(async()=>{n=null,await p()},[p]),b=(0,r.useMemo)(()=>t.map(e=>e.id),[t]),x=(0,r.useMemo)(()=>{let e=new Map;for(let t of i){let a=e.get(t.provider);a?a.push(t):e.set(t.provider,[t])}return t=>{var a;return t?null!=(a=e.get(t))?a:[]:i}},[i]);return{providers:t,providerIds:b,models:i,modelsByProvider:x,loading:d,error:u,reload:h}}},16882:(e,t,a)=>{"use strict";a.d(t,{v:()=>l});var r=a(60500),n=a(50733);let o=null;function l(e){let[t,a]=(0,r.useState)(()=>o&&Date.now()-o.at<6e4?o.data:[]),[l,i]=(0,r.useState)(!1),[s,d]=(0,r.useState)(null),c=(0,r.useCallback)(async()=>{i(!0),d(null);try{let t=await e.listPersonas();o={at:Date.now(),data:t.personas},a(t.personas)}catch(e){d(e instanceof Error?e.message:String(e))}finally{i(!1)}},[e]);(0,r.useEffect)(()=>{if(o&&Date.now()-o.at<6e4)return void a(o.data);c()},[c]);let u=(0,r.useCallback)(async()=>{o=null,await c()},[c]);return(0,r.useEffect)(()=>{let t=e.personasEventsUrl();if(!t)return;let a=null;try{a=new EventSource(t)}catch(e){(0,n.cY)("showroom.personas.sse.construct-error",{error:String(e)});return}let r=e=>()=>{"hello"!==e&&((0,n.cY)("showroom.personas.sse.event",{kind:e}),o=null,c())};return a.addEventListener("hello",r("hello")),a.addEventListener("load-dir",r("load-dir")),a.addEventListener("reload-all",r("reload-all")),a.addEventListener("upsert",r("upsert")),a.addEventListener("remove",r("remove")),a.onerror=e=>{(0,n.cY)("showroom.personas.sse.error",{type:e.type})},()=>{try{null==a||a.close()}catch(e){}}},[e,c]),{personas:t,loading:l,error:s,reload:u}}},20866:(e,t,a)=>{"use strict";a.d(t,{GZ:()=>i,_n:()=>u,gu:()=>d,mB:()=>s,sY:()=>c,u9:()=>m});let r="elanous.showroom.intentPanel.collapsed",n="elanous.showroom.intentPanel.displayMode",o="fixed",l=new Set(["fixed","popup","off"]);function i(){try{return"true"===window.localStorage.getItem(r)}catch(e){return!1}}function s(e){try{e?window.localStorage.setItem(r,"true"):window.localStorage.removeItem(r),window.dispatchEvent(new StorageEvent("storage",{key:r,newValue:e?"true":null}))}catch(e){}}function d(e){let t=t=>{(t.key===r||null===t.key)&&e(i())};return window.addEventListener("storage",t),()=>{window.removeEventListener("storage",t)}}function c(){try{let e=window.localStorage.getItem(n);if(e&&l.has(e))return e;return o}catch(e){return o}}function u(e){try{e===o?window.localStorage.removeItem(n):window.localStorage.setItem(n,e),window.dispatchEvent(new StorageEvent("storage",{key:n,newValue:e===o?null:e}))}catch(e){}}function m(e){let t=t=>{(t.key===n||null===t.key)&&e(c())};return window.addEventListener("storage",t),()=>{window.removeEventListener("storage",t)}}},37998:(e,t,a)=>{"use strict";a.d(t,{i$:()=>i,nZ:()=>c,oM:()=>d,sF:()=>s});let r="elanous.showroom.layouts";function n(){return window.localStorage?window.localStorage:{getItem:()=>null,setItem:()=>{},removeItem:()=>{}}}function o(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:n(),t=e.getItem(r);if(!t)return{};try{let e=JSON.parse(t);if(!e||"object"!=typeof e)return{};return e}catch(e){return{}}}function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n(),a=JSON.stringify(e);if(a.length>102400)return{ok:!1,reason:"storage quota exceeded (".concat(a.length," > ").concat(102400,")")};try{return t.setItem(r,a),{ok:!0}}catch(e){return{ok:!1,reason:String(e)}}}async function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n();try{let{layouts:a}=await e.listShowroomLayouts(),r={};for(let e of a)r[e.name]=e;return l(r,t),{layouts:a.slice().sort((e,t)=>t.savedAt-e.savedAt),source:"daemon"}}catch(e){return{layouts:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:n();return Object.values(o(e)).sort((e,t)=>t.savedAt-e.savedAt)}(t),source:"local"}}}async function s(e,t,a){var r;let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=e.trim();if(!s)return{ok:!1,reason:"name required"};let d=null!=(r=i.backend)?r:n(),c=function(e,t){var a;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=e.trim();if(!i)return{ok:!1,reason:"name required"};let s=null!=(a=r.backend)?a:n(),d=o(s),c={name:i,savedAt:Date.now(),panels:t.map(e=>({id:e.id,kind:e.kind,provider:e.provider,...e.agentBrand?{agentBrand:e.agentBrand}:{},...e.roleHint?{roleHint:e.roleHint}:{},...e.personaId?{personaId:e.personaId}:{},state:e.state})),...r.layoutMode?{layoutMode:r.layoutMode}:{}};d[i]=c;let u=l(d,s);return u.ok?{ok:!0,saved:c}:u}(s,t,i);if(!c.ok)return c;let u=0;try{let e=await a.listShowroomLayouts();if(0===e.layouts.length){let e=o(d);for(let t of Object.values(e))try{await a.saveShowroomLayout(t.name,{savedAt:t.savedAt,panels:t.panels,...t.layoutMode?{layoutMode:t.layoutMode}:{}}),u+=1}catch(e){}return{ok:!0,saved:c.saved,source:"daemon",migrated:u}}return await a.saveShowroomLayout(s,{savedAt:c.saved.savedAt,panels:c.saved.panels,...c.saved.layoutMode?{layoutMode:c.saved.layoutMode}:{}}),{ok:!0,saved:c.saved,source:"daemon",migrated:0}}catch(e){return{ok:!0,saved:c.saved,source:"local",migrated:0}}}async function d(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:n(),r=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n(),a=o(t);return e.trim()in a&&(delete a[e.trim()],l(a,t),!0)}(e,a);try{return await t.deleteShowroomLayout(e),{ok:!0,source:"daemon"}}catch(e){return{ok:r,source:"local"}}}function c(e){return e.panels.map(e=>({id:e.id,kind:e.kind,provider:e.provider,...e.agentBrand?{agentBrand:e.agentBrand}:{},...e.roleHint?{roleHint:e.roleHint}:{},...e.personaId?{personaId:e.personaId}:{},sessionId:null,state:e.state}))}},43468:(e,t,a)=>{"use strict";a.d(t,{M1:()=>d,Qj:()=>c,tI:()=>s});var r=a(54456),n=a(60500),o=a(40324),l=a(59405);let i=(0,n.createContext)(null);function s(e){let{client:t,queryClient:a,defaultStaleTimeMs:s,children:d}=e,c=(0,n.useMemo)(()=>null!=a?a:new o.E({defaultOptions:{queries:{staleTime:null!=s?s:2e3,refetchOnWindowFocus:!1}}}),[a,s]);return(0,r.jsx)(i.Provider,{value:t,children:(0,r.jsx)(l.Ht,{client:c,children:d})})}function d(){let e=(0,n.useContext)(i);if(!e)throw Error("useNexusClient must be used within <NexusProvider>");return e}function c(){return(0,n.useContext)(i)}},89604:(e,t,a)=>{"use strict";function r(e){return e.metaKey||e.ctrlKey}function n(e){let t=e.key.toLowerCase();return!r(e)||e.shiftKey||e.altKey||"k"!==t?r(e)&&e.shiftKey&&!e.altKey&&"j"===t?e.fromEditable?null:"toggle-role-judge":r(e)&&e.shiftKey&&!e.altKey&&"m"===t?e.fromEditable?null:"toggle-voice":r(e)&&e.shiftKey&&!e.altKey&&"y"===t?e.fromEditable?null:"toggle-tts":"?"!==e.key||r(e)||e.altKey?null:e.fromEditable?null:"open-help":"focus-broadcast-input"}function o(e){var t;if(!e)return!1;let a=e.tagName;if(!a)return!1;if("INPUT"===a||"TEXTAREA"===a||"SELECT"===a)return!0;let r=null==(t=e.getAttribute)?void 0:t.call(e,"contenteditable");return""===r||"true"===r}a.d(t,{ZQ:()=>n,_i:()=>o,nm:()=>l});let l=[{id:"focus-broadcast-input",combo:"⌘K / Ctrl+K",effect:"Focus broadcast input"},{id:"toggle-role-judge",combo:"⌘⇧J / Ctrl+⇧J",effect:"Toggle role-judge backend"},{id:"toggle-voice",combo:"⌘⇧M / Ctrl+⇧M",effect:"Toggle voice mode (mic)"},{id:"toggle-tts",combo:"⌘⇧Y / Ctrl+⇧Y",effect:"Toggle TTS mute"},{id:"open-help",combo:"?",effect:"Open this help overlay"}]}},e=>{e.O(0,[7777,9538,3278,1829,8206,9906,4215,7277,6390,3170,7358],()=>e(e.s=10455)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8677],{23:(e,t,r)=>{Promise.resolve().then(r.bind(r,19785))},1355:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>l,f6:()=>a,oD:()=>s});let n="elanous.daemon.sessionId";function a(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=a();return localStorage.setItem(n,t),t}function l(){let e=a();return localStorage.setItem(n,e),e}},10080:(e,t,r)=>{"use strict";r.d(t,{$:()=>i});var n=r(54456),a=r(80247),s=r(13680),l=r(74591);let o=(0,s.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function i(e){let{className:t,variant:r="default",size:s="default",...i}=e;return(0,n.jsx)(a.$,{"data-slot":"button",className:(0,l.cn)(o({variant:r,size:s,className:t})),...i})}},19785:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>k});var n=r(54456),a=r(60500),s=r(36581),l=r(10080),o=r(31395),i=r(52468),d=r(81573),c=r(15375);let u="wikilink:",m={aliasDivider:"|",pageResolver:e=>[e],hrefTemplate:e=>"".concat(u).concat(encodeURIComponent(e))};function x(e){let{markdown:t,onWikilink:r}=e;return(0,n.jsx)("div",{className:"text-sm text-foreground/90",children:(0,n.jsx)(o.oz,{remarkPlugins:[i.A,c.A,[d.A,m]],components:{h1:e=>{let{children:t}=e;return(0,n.jsx)("h1",{className:"mb-3 mt-5 border-b border-border pb-1 text-2xl font-bold",children:t})},h2:e=>{let{children:t}=e;return(0,n.jsx)("h2",{className:"mb-2 mt-5 text-xl font-bold",children:t})},h3:e=>{let{children:t}=e;return(0,n.jsx)("h3",{className:"mb-2 mt-4 text-lg font-semibold",children:t})},h4:e=>{let{children:t}=e;return(0,n.jsx)("h4",{className:"mb-1 mt-3 text-base font-semibold",children:t})},h5:e=>{let{children:t}=e;return(0,n.jsx)("h5",{className:"mb-1 mt-2 text-sm font-semibold text-muted-foreground",children:t})},h6:e=>{let{children:t}=e;return(0,n.jsx)("h6",{className:"mb-1 mt-2 text-xs font-semibold uppercase text-muted-foreground",children:t})},p:e=>{let{children:t}=e;return(0,n.jsx)("p",{className:"my-2 leading-relaxed",children:t})},ul:e=>{let{children:t}=e;return(0,n.jsx)("ul",{className:"my-2 list-disc space-y-1 pl-6",children:t})},ol:e=>{let{children:t}=e;return(0,n.jsx)("ol",{className:"my-2 list-decimal space-y-1 pl-6",children:t})},li:e=>{let{children:t}=e;return(0,n.jsx)("li",{className:"leading-relaxed",children:t})},blockquote:e=>{let{children:t}=e;return(0,n.jsx)("blockquote",{className:"my-3 border-l-4 border-primary/40 bg-muted/40 py-1 pl-3 text-muted-foreground",children:t})},hr:()=>(0,n.jsx)("hr",{className:"my-4 border-border"}),table:e=>{let{children:t}=e;return(0,n.jsx)("div",{className:"my-3 overflow-x-auto",children:(0,n.jsx)("table",{className:"w-full border-collapse text-sm",children:t})})},thead:e=>{let{children:t}=e;return(0,n.jsx)("thead",{className:"bg-muted/60",children:t})},th:e=>{let{children:t}=e;return(0,n.jsx)("th",{className:"border border-border px-3 py-1.5 text-left font-semibold",children:t})},td:e=>{let{children:t}=e;return(0,n.jsx)("td",{className:"border border-border px-3 py-1.5",children:t})},code:e=>{let{className:t,children:r}=e;return t?(0,n.jsx)("code",{className:"".concat(t," font-mono"),children:r}):(0,n.jsx)("code",{className:"rounded bg-muted px-1 py-0.5 font-mono text-[0.85em]",children:r})},pre:e=>{let{children:t}=e;return(0,n.jsx)("pre",{className:"my-3 overflow-x-auto rounded-lg border border-border bg-muted/40 p-3 text-xs",children:t})},img:e=>{let{src:t,alt:r}=e;return(0,n.jsx)("img",{src:"string"==typeof t?t:"",alt:null!=r?r:"",className:"my-2 max-w-full rounded"})},a:e=>{let{href:t,children:a}=e,s=null!=t?t:"";if(s.startsWith(u)){let e=decodeURIComponent(s.slice(u.length));return(0,n.jsx)("button",{type:"button",onClick:()=>null==r?void 0:r(e),className:"text-primary underline decoration-dotted underline-offset-2 hover:decoration-solid",children:a})}return(0,n.jsx)("a",{href:s,target:"_blank",rel:"noreferrer",className:"text-primary underline underline-offset-2",children:a})}},children:t})})}class h{get(e){return this.client.fetchJson(e)}info(){return this.get("/v1/vault/info")}list(e){return this.get("/v1/vault/list".concat(e?"?cwd=".concat(encodeURIComponent(e)):""))}read(e,t){let r=new URLSearchParams({path:e,...t?{maxBytes:String(t)}:{}});return this.get("/v1/vault/read?".concat(r.toString()))}search(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50;return this.get("/v1/vault/search?q=".concat(encodeURIComponent(e),"&limit=").concat(t))}notes(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500;return this.get("/v1/vault/notes?".concat(e?"query=".concat(encodeURIComponent(e),"&"):"","limit=").concat(t))}backlinks(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100;return this.get("/v1/vault/backlinks?target=".concat(encodeURIComponent(e),"&limit=").concat(t))}tags(){return this.get("/v1/vault/tags")}templates(){return this.get("/v1/vault/templates")}graph(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:500,n=new URLSearchParams({limit:String(r),...e?{focus:e,hops:String(t)}:{}});return this.get("/v1/vault/graph?".concat(n.toString()))}pollChanges(e){return this.get("/v1/vault/poll-changes?sinceMs=".concat(e))}orphans(){return this.get("/v1/vault/orphans")}templateExpand(e,t){return this.client.fetchJson("/v1/vault/template-expand",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({templatePath:e,...t?{title:t}:{}})})}async writeNote(e){var t,r,n,a;let s=await this.client.fetchResponse("/v1/vault/file",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(e)}),l=(null!=(t=s.headers.get("content-type"))?t:"").includes("application/json")?await s.json():await s.text();if(!s.ok&&409!==s.status)throw Error(String("string"==typeof l?l:null!=(a=null!=(n=null!=(r=null==l?void 0:l.message)?r:null==l?void 0:l.reason)?n:null==l?void 0:l.error)?a:"".concat(s.status)));return l}async saveNote(e){var t,r,n;let a=await this.client.fetchResponse("/v1/notes/save",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)}),s=(null!=(t=a.headers.get("content-type"))?t:"").includes("application/json")?await a.json():await a.text();if(!a.ok&&409!==a.status)throw Error(String("string"==typeof s?s:null!=(n=null!=(r=null==s?void 0:s.reason)?r:null==s?void 0:s.error)?n:"".concat(a.status)));return s}constructor(e){this.client=e}}function p(e){let t=/^---\n([\s\S]*?)\n---\n?/.exec(e);return t?{frontmatter:t[1],body:e.slice(t[0].length)}:{frontmatter:null,body:e}}function g(e){let t=e.toLowerCase();return t.endsWith(".md")||t.endsWith(".markdown")?"markdown":/\.(png|jpe?g|gif|webp|svg)$/.test(t)?"image":t.endsWith(".pdf")?"pdf":/\.(txt|json|ya?ml|csv|log)$/.test(t)?"text":"other"}function f(e){let{onPickTag:t}=e,{client:r}=(0,s.Q)(),l=(0,a.useMemo)(()=>new h(r),[r]),[o,i]=(0,a.useState)([]),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)(!0),x=(0,a.useCallback)(async()=>{m(!0);try{var e;let t=await l.tags();i((null!=(e=t.tags)?e:[]).sort((e,t)=>t.count-e.count))}catch(e){}finally{m(!1)}},[l]);(0,a.useEffect)(()=>{x()},[x]);let p=d?o.filter(e=>e.tag.toLowerCase().includes(d.toLowerCase())):o;return(0,n.jsxs)("div",{className:"flex h-full flex-col",children:[(0,n.jsx)("div",{className:"border-b border-border p-2",children:(0,n.jsx)("input",{value:d,onChange:e=>c(e.target.value),placeholder:"태그 필터…",className:"w-full rounded border border-border bg-background px-2 py-1 text-xs"})}),(0,n.jsx)("div",{className:"flex-1 overflow-auto p-1",children:u?(0,n.jsx)("p",{className:"p-2 text-xs text-muted-foreground",children:"불러오는 중…"}):0===p.length?(0,n.jsx)("p",{className:"p-2 text-xs text-muted-foreground",children:"태그 없음"}):(0,n.jsx)("ul",{className:"space-y-0.5",children:p.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{onClick:()=>t(e.tag),className:"flex w-full items-center justify-between rounded px-2 py-1 text-left text-xs hover:bg-muted",children:[(0,n.jsxs)("span",{className:"truncate",children:["#",e.tag]}),(0,n.jsx)("span",{className:"ml-2 shrink-0 rounded bg-muted px-1.5 text-[10px] text-muted-foreground",children:e.count})]})},e.tag))})})]})}function v(e){var t,r;let{onOpen:o}=e,{client:i}=(0,s.Q)(),d=(0,a.useMemo)(()=>new h(i),[i]),[c,u]=(0,a.useState)(null),[m,x]=(0,a.useState)(null),[p,g]=(0,a.useState)(!0),f=(0,a.useCallback)(async e=>{g(!0);try{u(await d.graph(null!=e?e:void 0,1,e?60:400))}catch(e){}finally{g(!1)}},[d]);(0,a.useEffect)(()=>{f(m)},[f,m]);let v=(0,a.useMemo)(()=>{if(!c)return{nodes:[],edges:[]};let e=c.nodes.map(e=>e.id),t=c.edges.map(e=>({source:e.from,target:e.to}));return{nodes:function(e,t){var r,n,a;let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{width:800,height:600},{width:l,height:o}=s,i=null!=(r=s.iterations)?r:120,d=e.length,c=new Map;for(let e of t)c.set(e.source,(null!=(n=c.get(e.source))?n:0)+1),c.set(e.target,(null!=(a=c.get(e.target))?a:0)+1);let u=l/2,m=o/2,x=.4*Math.min(l,o),h=e.map((e,t)=>{var r;return{id:e,deg:null!=(r=c.get(e))?r:0,x:u+x*Math.cos(2*Math.PI*t/Math.max(1,d)),y:m+x*Math.sin(2*Math.PI*t/Math.max(1,d))}}),p=new Map(h.map((e,t)=>[e.id,t])),g=Math.sqrt(l*o/Math.max(1,d));for(let e=0;e<i;e++){let r=h.map(()=>({x:0,y:0}));for(let e=0;e<d;e++)for(let t=e+1;t<d;t++){let n=h[e].x-h[t].x,a=h[e].y-h[t].y,s=Math.hypot(n,a)||.01,l=g*g/s;n/=s,a/=s,r[e].x+=n*l,r[e].y+=a*l,r[t].x-=n*l,r[t].y-=a*l}for(let e of t){let t=p.get(e.source),n=p.get(e.target);if(null==t||null==n)continue;let a=h[t].x-h[n].x,s=h[t].y-h[n].y,l=Math.hypot(a,s)||.01,o=l*l/g;a/=l,s/=l,r[t].x-=a*o,r[t].y-=s*o,r[n].x+=a*o,r[n].y+=s*o}let n=1-e/i;for(let e=0;e<d;e++){let t=Math.hypot(r[e].x,r[e].y)||.01,a=Math.min(t,30*n);h[e].x=Math.max(20,Math.min(l-20,h[e].x+r[e].x/t*a)),h[e].y=Math.max(20,Math.min(o-20,h[e].y+r[e].y/t*a))}}return h}(e,t,{width:900,height:640,iterations:140}),edges:t}},[c]),b=(0,a.useMemo)(()=>new Map(v.nodes.map(e=>[e.id,e])),[v]),y=Math.max(1,...v.nodes.map(e=>e.deg));return(0,n.jsxs)("div",{className:"flex h-full flex-col",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 border-b border-border px-3 py-2 text-sm",children:[(0,n.jsx)("span",{className:"font-medium",children:"노트 그래프"}),m?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("span",{className:"text-xs text-muted-foreground",children:["focus: ",m," (1-hop)"]}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",className:"ml-auto h-6 px-2 text-xs",onClick:()=>x(null),children:"전체 그래프"})]}):(0,n.jsxs)("span",{className:"ml-auto text-xs text-muted-foreground",children:[null!=(t=null==c?void 0:c.nodes.length)?t:0," 노드 \xb7 ",null!=(r=null==c?void 0:c.edges.length)?r:0," 링크",(null==c?void 0:c.truncated)?" (일부)":""]})]}),(0,n.jsx)("div",{className:"flex-1 overflow-auto p-2",children:p?(0,n.jsx)("p",{className:"p-4 text-sm text-muted-foreground",children:"그래프 계산 중…"}):c&&0!==c.nodes.length?(0,n.jsxs)("svg",{viewBox:"0 0 ".concat(900," ").concat(640),className:"h-auto w-full",style:{maxHeight:"78vh"},children:[v.edges.map((e,t)=>{let r=b.get(e.source),a=b.get(e.target);return r&&a?(0,n.jsx)("line",{x1:r.x,y1:r.y,x2:a.x,y2:a.y,stroke:"currentColor",className:"text-border",strokeWidth:.6,opacity:.5},t):null}),v.nodes.map(e=>{let t=3+e.deg/y*9;return(0,n.jsxs)("g",{className:"cursor-pointer",onClick:()=>null==o?void 0:o(e.id),onDoubleClick:()=>x(e.id),children:[(0,n.jsx)("circle",{cx:e.x,cy:e.y,r:t,className:"fill-primary/70 hover:fill-primary"}),(e.deg>=.3*y||m)&&(0,n.jsx)("text",{x:e.x+t+2,y:e.y+3,className:"fill-foreground/70 text-[9px]",children:e.id.split("/").pop()})]},e.id)})]}):(0,n.jsx)("p",{className:"p-4 text-sm text-muted-foreground",children:"그래프가 비어있습니다."})}),(0,n.jsx)("p",{className:"border-t border-border px-3 py-1 text-[11px] text-muted-foreground",children:"클릭=노트 열기 \xb7 더블클릭=로컬 그래프(focus)"})]})}function b(e){let{onClose:t,onCreated:r}=e,{client:o}=(0,s.Q)(),i=(0,a.useMemo)(()=>new h(o),[o]),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)([]),[x,p]=(0,a.useState)(""),[g,f]=(0,a.useState)(!1),[v,b]=(0,a.useState)(null);(0,a.useEffect)(()=>{i.templates().then(e=>{var t;return m(null!=(t=e.templates)?t:[])}).catch(()=>{})},[i]);let y=(0,a.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};f(!0),b(null);try{let t=e.daily?function(){let e=new Date;return"".concat(e.getFullYear(),"-").concat(String(e.getMonth()+1).padStart(2,"0"),"-").concat(String(e.getDate()).padStart(2,"0"))}():d.trim();if(!t){b("제목을 입력하세요"),f(!1);return}let n="# ".concat(t,"\n\n");if(x){let e=await i.templateExpand(x,t);e.content&&(n=e.content)}else e.daily&&(n="# ".concat(t,"\n\n## 오늘\n\n- \n"));let a=e.daily?"Daily/".concat(t,".md"):"".concat(t,".md"),s=await i.writeNote({path:a,content:n,createOnly:!0});if(s.error){b("file_exists"===s.error?"이미 존재하는 노트입니다":s.error),f(!1);return}r(a)}catch(e){b(e instanceof Error?e.message:String(e)),f(!1)}},[i,d,x,r]);return(0,n.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:t,children:(0,n.jsxs)("div",{className:"w-[420px] rounded-lg border border-border bg-card p-4 shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,n.jsx)("h2",{className:"mb-3 text-sm font-semibold",children:"새 노트"}),(0,n.jsx)("input",{value:d,onChange:e=>c(e.target.value),onKeyDown:e=>{"Enter"===e.key&&y()},placeholder:"노트 제목…",autoFocus:!0,className:"mb-2 w-full rounded border border-border bg-background px-3 py-2 text-sm"}),u.length>0&&(0,n.jsxs)("select",{value:x,onChange:e=>p(e.target.value),className:"mb-2 w-full rounded border border-border bg-background px-2 py-1.5 text-sm",children:[(0,n.jsx)("option",{value:"",children:"템플릿 없음"}),u.map(e=>(0,n.jsx)("option",{value:e.relPath,children:e.name},e.relPath))]}),v&&(0,n.jsx)("p",{className:"mb-2 text-xs text-rose-400",children:v}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(l.$,{size:"sm",onClick:()=>void y(),disabled:g||!d.trim(),children:"생성"}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>void y({daily:!0}),disabled:g,children:"오늘 데일리노트"}),(0,n.jsx)(l.$,{size:"sm",variant:"ghost",className:"ml-auto",onClick:t,children:"취소"})]})]})})}let y="elanous.pwa.vaultTreeOpen";function j(e){let{onEdit:t}=e,{client:r}=(0,s.Q)(),o=(0,a.useMemo)(()=>new h(r),[r]),[i,d]=(0,a.useState)(null),[c,u]=(0,a.useState)(""),[m,x]=(0,a.useState)([]),[p,j]=(0,a.useState)(null),[N,k]=(0,a.useState)(null),[C,S]=(0,a.useState)(""),[M,z]=(0,a.useState)(null),[D,E]=(0,a.useState)(!1),[I,P]=(0,a.useState)("view"),[U,R]=(0,a.useState)("files"),[$,_]=(0,a.useState)(!1),[O,T]=(0,a.useState)(0),[q,F]=(0,a.useState)(!0);(0,a.useEffect)(()=>{F(function(e){try{return(null==e?void 0:e.getItem(y))!=="0"}catch(e){return!0}}(window.localStorage))},[]);let L=(0,a.useCallback)(()=>{F(e=>{let t=!e;var r=window.localStorage;try{null==r||r.setItem(y,t?"1":"0")}catch(e){}return t})},[]);(0,a.useEffect)(()=>{let e=Date.now(),t=setInterval(()=>{o.pollChanges(e).then(e=>{var t;return T(null!=(t=e.count)?t:0)}).catch(()=>{})},3e4);return()=>clearInterval(t)},[o]);let K=(0,a.useCallback)(e=>{S("#".concat(e)),R("files"),(async()=>{E(!0);try{var t;let r=await o.search("#".concat(e),50);z(null!=(t=r.matches)?t:[])}catch(e){z([])}finally{E(!1)}})()},[o]),Q=(0,a.useCallback)(async e=>{E(!0),z(null);try{let t=await o.list(e||void 0);t.error||(x(t.entries),u(t.cwd))}catch(e){}finally{E(!1)}},[o]);(0,a.useEffect)(()=>{let e=!0;return o.info().then(t=>{e&&(d(t),t.available&&Q(""))}).catch(()=>{}),()=>{e=!1}},[o,Q]);let W=(0,a.useCallback)(async e=>{j(e),k(null),window.innerWidth<=767&&F(!1);try{k(await o.read(e))}catch(e){}},[o]),A=(0,a.useCallback)(async()=>{let e=C.trim();if(!e)return void z(null);E(!0);try{var t;let r=await o.search(e,50);z(null!=(t=r.matches)?t:[])}catch(e){z([])}finally{E(!1)}},[o,C]),V=c&&(null==i?void 0:i.root)?c.replace(i.root,"").split("/").filter(Boolean):[],Y=(null==i?void 0:i.root)?c.replace(i.root,"").replace(/^\//,""):"";return i&&!i.available?(0,n.jsxs)("div",{className:"p-6 text-sm text-muted-foreground",children:["Obsidian vault를 찾을 수 없습니다 (source: ",i.source,"). ~/.elanous/config.json 의 obsidian.vault 를 확인하세요."]}):(0,n.jsxs)("div",{className:"mx-auto flex h-[calc(100vh-3rem)] max-w-[1920px] gap-3 px-3 py-3",children:[$&&(0,n.jsx)(b,{onClose:()=>_(!1),onCreated:e=>{_(!1),Q(""),null==t||t(e)}}),(0,n.jsxs)("div",{"data-testid":"vault-tree",className:[q?"flex":"hidden","w-full shrink-0 flex-col rounded-lg border border-border bg-card/40 md:w-64 lg:w-72"].join(" "),children:[(0,n.jsxs)("div",{className:"flex items-center gap-1 border-b border-border px-2 py-1.5",children:[["files","tags","graph"].map(e=>(0,n.jsx)("button",{onClick:()=>R(e),className:["rounded px-2 py-0.5 text-xs",U===e?"bg-primary/20 text-foreground":"text-muted-foreground"].join(" "),children:{files:"파일",tags:"태그",graph:"그래프"}[e]},e)),O>0&&(0,n.jsxs)("span",{className:"rounded bg-amber-500/15 px-1.5 py-0.5 text-[10px] text-amber-300",title:"외부 변경 감지",children:["↻ ",O]}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",className:"ml-auto h-6 px-2 text-xs",onClick:()=>_(!0),children:"+ 새 노트"})]}),"graph"===U?(0,n.jsx)(v,{onOpen:e=>{R("files"),W("".concat(e,".md"))}}):"tags"===U?(0,n.jsx)(f,{onPickTag:K}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"border-b border-border p-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("input",{value:C,onChange:e=>S(e.target.value),onKeyDown:e=>{"Enter"===e.key&&A()},placeholder:"vault 전문검색…",className:"min-w-0 flex-1 rounded border border-border bg-background px-2 py-1 text-sm"}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>void A(),children:"검색"})]}),!M&&(0,n.jsxs)("div",{className:"mt-1.5 flex flex-wrap items-center gap-1 text-xs text-muted-foreground",children:[(0,n.jsx)("button",{className:"hover:text-foreground",onClick:()=>void Q(""),children:"vault"}),V.map((e,t)=>(0,n.jsxs)("span",{children:["/ ",(0,n.jsx)("button",{className:"hover:text-foreground",onClick:()=>void Q("".concat(i.root,"/").concat(V.slice(0,t+1).join("/"))),children:e})]},t))]})]}),(0,n.jsxs)("div",{className:"flex-1 overflow-auto p-1",children:[D&&(0,n.jsx)("p",{className:"p-2 text-xs text-muted-foreground",children:"불러오는 중…"}),M?0===M.length?(0,n.jsx)("p",{className:"p-2 text-xs text-muted-foreground",children:"검색 결과 없음"}):(0,n.jsx)("ul",{className:"space-y-1",children:M.map((e,t)=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{className:"w-full rounded px-2 py-1.5 text-left text-xs hover:bg-muted",onClick:()=>void W(e.path),children:[(0,n.jsx)("span",{className:"font-medium",children:e.path.split("/").pop()})," ",(0,n.jsxs)("span",{className:"text-muted-foreground",children:[":",e.lineNumber]}),(0,n.jsx)("div",{className:"truncate text-muted-foreground",children:e.snippet})]})},t))}):(0,n.jsxs)("ul",{children:[Y&&(0,n.jsx)("li",{children:(0,n.jsx)("button",{className:"w-full rounded px-2 py-1.5 text-left text-sm text-muted-foreground hover:bg-muted",onClick:()=>void Q("".concat(i.root,"/").concat(function(e){let t=e.split("/").filter(Boolean);return t.pop(),t.join("/")}(Y))),children:"\uD83D\uDCC1 .."})}),m.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{className:["flex w-full items-center gap-1.5 rounded px-2 py-1.5 text-left text-sm hover:bg-muted",p==="".concat(Y?Y+"/":"").concat(e.name)?"bg-muted":""].join(" "),onClick:()=>e.isDir?void Q("".concat(c,"/").concat(e.name)):void W("".concat(Y?Y+"/":"").concat(e.name)),children:[(0,n.jsx)("span",{children:e.isDir?"\uD83D\uDCC1":"markdown"===g(e.name)?"\uD83D\uDCDD":"image"===g(e.name)?"\uD83D\uDDBC️":"\uD83D\uDCC4"}),(0,n.jsx)("span",{className:"truncate",children:e.name})]})},e.relPath))]})]})]})]}),(0,n.jsxs)("div",{className:[q?"hidden md:flex":"flex","min-w-0 flex-1 flex-col rounded-lg border border-border bg-card/40"].join(" "),children:[(0,n.jsxs)("div",{className:"flex items-center justify-between border-b border-border px-3 py-2",children:[(0,n.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,n.jsx)("button",{type:"button",onClick:L,"aria-expanded":q,"aria-label":q?"폴더 접기":"폴더 펴기",title:q?"폴더 접기":"폴더 펴기",className:"shrink-0 rounded px-1.5 py-0.5 text-xs text-muted-foreground ring-1 ring-border hover:text-foreground",children:q?"◀ 폴더":"▶ 폴더"}),(0,n.jsx)("span",{className:"truncate text-sm font-medium",children:null!=p?p:"파일을 선택하세요"})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[p&&"markdown"===g(p)&&(0,n.jsx)("div",{className:"flex items-center gap-0.5 rounded ring-1 ring-border",children:["view","raw"].map(e=>(0,n.jsx)("button",{onClick:()=>P(e),className:["px-2 py-0.5 text-xs",I===e?"bg-primary/20 text-foreground":"text-muted-foreground"].join(" "),children:"view"===e?"View":"Raw"},e))}),p&&"markdown"===g(p)&&t&&(0,n.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>t(p),children:"편집"})]})]}),(0,n.jsx)("div",{className:"flex-1 overflow-auto p-4",children:N?(0,n.jsx)(w,{preview:N,selected:p,mode:I,onWikilink:e=>{W("".concat(Y?Y+"/":"").concat(e,".md"))}}):(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:p?"로딩…":"좌측에서 노트를 선택하면 여기에 표시됩니다."})})]})]})}function w(e){let{preview:t,selected:r,mode:a,onWikilink:s}=e;if(t.error)return(0,n.jsx)("p",{className:"text-sm text-rose-400",children:t.error});let l=g(r);if("image"===l&&t.bytes)return(0,n.jsx)("img",{src:"data:".concat(t.mime,";base64,").concat(t.bytes),alt:r,className:"max-w-full rounded"});if("markdown"===l&&null!=t.content){let{frontmatter:e,body:r}=p(t.content);return"raw"===a?(0,n.jsx)("pre",{className:"whitespace-pre-wrap font-mono text-xs leading-relaxed",children:t.content}):(0,n.jsxs)("div",{children:[e&&(0,n.jsx)("pre",{className:"mb-3 rounded bg-muted/40 p-2 text-[11px] text-muted-foreground",children:e}),(0,n.jsx)(x,{markdown:r,onWikilink:s}),t.truncated&&(0,n.jsxs)("p",{className:"mt-2 text-xs text-amber-400",children:["⚠ 일부만 표시됨(",(t.size/1024).toFixed(0),"KB)"]})]})}return null!=t.content?(0,n.jsx)("pre",{className:"whitespace-pre-wrap text-sm",children:t.content}):(0,n.jsxs)("p",{className:"text-sm text-muted-foreground",children:["미리보기 불가(",t.mime,")"]})}function N(e){let{path:t,onClose:r}=e,{client:o}=(0,s.Q)(),i=(0,a.useMemo)(()=>new h(o),[o]),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)(!1),[g,f]=(0,a.useState)("split"),[v,b]=(0,a.useState)("clean"),[y,j]=(0,a.useState)(null),w=(0,a.useRef)(void 0),N=(0,a.useRef)(null),k=(0,a.useRef)(null),[C,S]=(0,a.useState)("outline"),[M,z]=(0,a.useState)([]),[D,E]=(0,a.useState)(null),I=(0,a.useMemo)(()=>(function(e){let t=[],r=!1;return e.split("\n").forEach((e,n)=>{let a=e.trimEnd();if(/^```/.test(a.trim())){r=!r;return}if(r)return;let s=/^(#{1,6})\s+(.+)$/.exec(a);s&&t.push({level:s[1].length,text:s[2].trim(),line:n})}),t})(p(d).body),[d]);(0,a.useEffect)(()=>{let e=!0;return i.read(t,8388608).then(t=>{var r;e&&(c(null!=(r=t.content)?r:""),w.current=t.mtimeMs,m(!0),b("clean"))}).catch(()=>{e&&(j("노트를 불러오지 못했습니다"),m(!0))}),()=>{e=!1,N.current&&clearTimeout(N.current)}},[i,t]);let P=(0,a.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d;b("saving"),j(null);try{let n=await i.writeNote({path:t,content:r,...e?{}:null!=w.current?{lastKnownMtime:w.current}:{}});if("mtime_conflict"===n.error||n.error&&null!=n.currentMtime)return void b("conflict");if(n.error){b("error"),j(n.error);return}null!=n.mtimeMs&&(w.current=n.mtimeMs),b("saved")}catch(e){b("error"),j(e instanceof Error?e.message:String(e))}},[i,t,d]);(0,a.useEffect)(()=>{var e;let r=!0;return i.backlinks((null!=(e=t.split("/").pop())?e:t).replace(/\.md$/i,""),100).then(e=>{var t;r&&z(null!=(t=e.matches)?t:[])}).catch(()=>{}),()=>{r=!1}},[i,t]);let U=(0,a.useCallback)((e,t)=>{let r=function(e,t){let r=e.slice(0,t),n=r.lastIndexOf("[[");if(n<0)return null;let a=r.slice(n+2);return a.includes("]]")||a.includes("\n")?null:{query:a,start:n+2}}(e,t);if(!r)return void E(null);i.notes(r.query||void 0,8).then(e=>{var n;E({query:r.query,start:r.start,caret:t,items:(null!=(n=e.notes)?n:[]).slice(0,8)})}).catch(()=>E(null))},[i]),R=(0,a.useCallback)((e,t)=>{c(e),b("dirty"),U(e,t),N.current&&clearTimeout(N.current),N.current=setTimeout(()=>{P(!1,e)},2500)},[P,U]),$=(0,a.useCallback)(e=>{if(!D)return;let t=function(e,t,r,n){let a=e.slice(0,t),s=e.slice(r),l="".concat(n,"]]");return{text:a+l+s,caret:a.length+l.length}}(d,D.start,D.caret,e.name);c(t.text),b("dirty"),E(null),requestAnimationFrame(()=>{k.current&&(k.current.focus(),k.current.setSelectionRange(t.caret,t.caret))})},[D,d]),_=(0,a.useCallback)(e=>{let t=k.current;if(!t)return;let r=d.split("\n").slice(0,e).join("\n").length;t.focus(),t.setSelectionRange(r,r),t.scrollTop=Math.max(0,20*e-100)},[d]),O=p(d).body;return u?(0,n.jsxs)("div",{className:"mx-auto flex h-[calc(100vh-3rem)] max-w-[1500px] flex-col px-3 py-3",children:[(0,n.jsxs)("div",{className:"mb-2 flex items-center gap-2",children:[(0,n.jsx)(l.$,{size:"sm",variant:"ghost",onClick:r,children:"← 목록"}),(0,n.jsx)("span",{className:"truncate text-sm font-medium",children:t}),(0,n.jsx)("span",{className:["ml-2 rounded px-2 py-0.5 text-xs",{clean:"text-muted-foreground",dirty:"text-amber-400",saving:"text-sky-400",saved:"text-emerald-400",conflict:"text-rose-400",error:"text-rose-400"}[v]].join(" "),children:{clean:"저장됨",dirty:"● 편집 중",saving:"저장 중…",saved:"✓ 저장됨",conflict:"⚠ 충돌",error:"✗ 오류"}[v]}),(0,n.jsxs)("div",{className:"ml-auto flex items-center gap-1",children:[["edit","split","preview"].map(e=>(0,n.jsx)("button",{onClick:()=>f(e),className:["rounded px-2 py-1 text-xs ring-1",g===e?"bg-primary/20 ring-primary/40":"bg-muted text-muted-foreground ring-border"].join(" "),children:{edit:"편집",split:"분할",preview:"미리보기"}[e]},e)),(0,n.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>void P(!1),children:"저장"})]})]}),"conflict"===v&&(0,n.jsxs)("div",{className:"mb-2 flex items-center gap-2 rounded border border-rose-500/40 bg-rose-500/10 px-3 py-2 text-xs text-rose-200",children:[(0,n.jsx)("span",{children:"디스크의 노트가 외부에서 변경됐습니다."}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>void P(!0),children:"강제 덮어쓰기"}),(0,n.jsx)(l.$,{size:"sm",variant:"ghost",onClick:()=>void i.read(t,8388608).then(e=>{var t;c(null!=(t=e.content)?t:""),w.current=e.mtimeMs,b("clean")}),children:"디스크 버전 로드"})]}),y&&(0,n.jsx)("div",{className:"mb-2 text-xs text-rose-400",children:y}),(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 gap-3",children:["preview"!==g&&(0,n.jsxs)("div",{className:"relative min-h-0 flex-1",children:[(0,n.jsx)("textarea",{ref:k,value:d,onChange:e=>R(e.target.value,e.target.selectionStart),onKeyUp:e=>U(d,e.target.selectionStart),onClick:e=>U(d,e.target.selectionStart),onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&"s"===e.key&&(e.preventDefault(),P(!1)),"Escape"===e.key&&D&&(e.preventDefault(),E(null)),"Enter"===e.key&&D&&D.items.length&&(e.preventDefault(),$(D.items[0]))},className:"h-full min-h-0 w-full resize-none rounded-lg border border-border bg-background p-3 font-mono text-sm leading-relaxed focus:outline-none focus:ring-1 focus:ring-ring",spellCheck:!1}),D&&D.items.length>0&&(0,n.jsxs)("div",{className:"absolute left-3 top-3 z-20 max-h-56 w-72 overflow-auto rounded-md border border-border bg-popover shadow-lg",children:[(0,n.jsxs)("div",{className:"border-b border-border px-2 py-1 text-[11px] text-muted-foreground",children:["[[wikilink: ",D.query||"…"]}),D.items.map(e=>(0,n.jsxs)("button",{className:"block w-full truncate px-2 py-1.5 text-left text-xs hover:bg-muted",onMouseDown:t=>{t.preventDefault(),$(e)},children:[(0,n.jsx)("span",{className:"font-medium",children:e.name})," ",(0,n.jsx)("span",{className:"text-muted-foreground",children:e.relPath})]},e.relPath))]})]}),"edit"!==g&&(0,n.jsx)("div",{className:"min-h-0 flex-1 overflow-auto rounded-lg border border-border bg-card/40 p-4",children:(0,n.jsx)(x,{markdown:O})}),(0,n.jsxs)("div",{className:"flex w-[220px] min-w-[180px] flex-col rounded-lg border border-border bg-card/40",children:[(0,n.jsx)("div",{className:"flex border-b border-border text-xs",children:["outline","backlinks"].map(e=>(0,n.jsx)("button",{onClick:()=>S(e),className:["flex-1 px-2 py-1.5",C===e?"border-b-2 border-primary text-foreground":"text-muted-foreground"].join(" "),children:"outline"===e?"개요":"역참조 ".concat(M.length?"(".concat(M.length,")"):"")},e))}),(0,n.jsx)("div",{className:"flex-1 overflow-auto p-1 text-xs",children:"outline"===C?0===I.length?(0,n.jsx)("p",{className:"p-2 text-muted-foreground",children:"heading 없음"}):I.map((e,t)=>(0,n.jsx)("button",{onClick:()=>_(e.line),className:"block w-full truncate rounded px-2 py-1 text-left hover:bg-muted",style:{paddingLeft:"".concat(8*e.level,"px")},children:e.text},t)):0===M.length?(0,n.jsx)("p",{className:"p-2 text-muted-foreground",children:"역참조 없음"}):M.map((e,t)=>(0,n.jsxs)("div",{className:"truncate rounded px-2 py-1",title:e.snippet,children:["\uD83D\uDCCE ",e.path.split("/").pop(),e.headingAnchor?" #".concat(e.headingAnchor):""]},t))})]})]})]}):(0,n.jsx)("div",{className:"p-6 text-sm text-muted-foreground",children:"노트 로딩…"})}function k(){let[e,t]=(0,a.useState)(null);return e?(0,n.jsx)(N,{path:e,onClose:()=>t(null)}):(0,n.jsx)(j,{onEdit:e=>t(e)})}},36581:(e,t,r)=>{"use strict";r.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var n=r(54456),a=r(60500),s=r(86704),l=r(1355),o=r(39906),i=r(50733);let d=(0,a.createContext)(null);function c(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[c,u]=(0,a.useState)(r),[m,x]=(0,a.useState)(""),[h]=(0,a.useState)(()=>new o.ki(r));(0,a.useEffect)(()=>{let e=(0,s.Fp)();u(e),h.updateConfig(e),x((0,l.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[h]),(0,a.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,s.Fp)();h.updateConfig(t),u(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&x(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[h]);let p=e=>{u(t=>{let r={...t,...e};return(0,s.Qc)(e),h.updateConfig(r),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},g=e=>{x(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},f=(0,a.useMemo)(()=>({config:c,setConfig:p,client:h,sessionId:m,setSessionId:g}),[c,h,m]);return(0,n.jsx)(d.Provider,{value:f,children:t})}function u(){let e=(0,a.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},74591:(e,t,r)=>{"use strict";r.d(t,{cn:()=>s});var n=r(49454),a=r(79946);function s(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,a.QP)((0,n.$)(t))}}},e=>{e.O(0,[7777,3278,5978,8039,9906,6390,3170,7358],()=>e(e.s=23)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4191],{1891:(e,t,s)=>{Promise.resolve().then(s.bind(s,97951))},60287:(e,t,s)=>{"use strict";async function n(e){var t,s;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=null!=(t=n.fetchImpl)?t:fetch,r="".concat(null!=(s=n.origin)?s:"","/v1/workflows/").concat(encodeURIComponent(e),"/chat-config"),o=await a(r);if(404===o.status)return null;if(!o.ok)throw Error("chat-config ".concat(o.status));return await o.json()}async function a(e){var t,s,n,a,o;let i=null!=(t=e.fetchImpl)?t:fetch,l="".concat(null!=(s=e.origin)?s:"","/v1/workflows/chat").concat(e.chatPath),c={"content-type":"application/json"};e.bearer&&e.bearer.length>0&&(c.authorization="Bearer ".concat(e.bearer));let d={message:e.message};e.sessionId&&(d.sessionId=e.sessionId);let u=await i(l,{method:"POST",headers:c,body:JSON.stringify(d),...e.signal?{signal:e.signal}:{}});if(!u.ok){let e=await u.text().catch(()=>"");throw Error("chat ".concat(u.status).concat(e?": "+e:""))}if((null!=(n=u.headers.get("content-type"))?n:"").includes("text/event-stream")&&u.body)return{kind:"streaming",frames:r(u.body)};let h=await u.json();return{kind:"buffered",response:null!=(a=h.response)?a:"",runId:null!=(o=h.runId)?o:""}}async function*r(e){let t=e.getReader(),s=new TextDecoder,n="";try{for(;;){let{value:e,done:a}=await t.read();if(a)break;let r=(n+=s.decode(e,{stream:!0})).indexOf("\n\n");for(;-1!==r;){let e=n.slice(0,r);n=n.slice(r+2);let t=o(e);t&&(yield t),r=n.indexOf("\n\n")}}if(n.trim().length>0){let e=o(n);e&&(yield e)}}finally{t.releaseLock()}}function o(e){let t="message",s=[];for(let n of e.split("\n")){let e=n.endsWith("\r")?n.slice(0,-1):n;if(e.startsWith(":"))continue;let a=e.indexOf(":");if(-1===a)continue;let r=e.slice(0,a),o=e.slice(a+1).replace(/^ /,"");"event"===r?t=o:"data"===r&&s.push(o)}return 0===s.length?null:{event:t,data:s.join("\n")}}s.d(t,{XQ:()=>n,gJ:()=>a})},80581:(e,t,s)=>{"use strict";var n=s(35793);s.o(n,"useParams")&&s.d(t,{useParams:function(){return n.useParams}}),s.o(n,"usePathname")&&s.d(t,{usePathname:function(){return n.usePathname}}),s.o(n,"useRouter")&&s.d(t,{useRouter:function(){return n.useRouter}}),s.o(n,"useSearchParams")&&s.d(t,{useSearchParams:function(){return n.useSearchParams}})},97951:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>l});var n=s(54456),a=s(60500),r=s(80581),o=s(60287);function i(){var e,t;let s=(0,r.useSearchParams)(),i=null!=(e=s.get("workflow"))?e:"",l=null!=(t=s.get("token"))?t:"",[c,d]=(0,a.useState)({kind:"loading"}),[u,h]=(0,a.useState)([]),[f,m]=(0,a.useState)(""),[x,g]=(0,a.useState)(!1),[p]=(0,a.useState)(()=>"hosted-".concat(Date.now().toString(36),"-").concat(Math.random().toString(16).slice(2,6))),w=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=!1;return 0===i.length?void d({kind:"error",reason:"missing ?workflow= query param"}):((0,o.XQ)(i).then(t=>{e||(t?d({kind:"ready",config:t}):d({kind:"not-found"}))}).catch(t=>{e||d({kind:"error",reason:t instanceof Error?t.message:String(t)})}),()=>{e=!0})},[i]),(0,a.useEffect)(()=>{w.current&&(w.current.scrollTop=w.current.scrollHeight)},[u]);let b=async()=>{if("ready"!==c.kind||x)return;let e=f.trim();if(0===e.length)return;let t={id:"u-".concat(Date.now()),role:"user",text:e},s="a-".concat(Date.now());h(e=>[...e,t,{id:s,role:"assistant",text:"",pending:!0}]),m(""),g(!0);try{let t=await (0,o.gJ)({chatPath:c.config.path,message:e,sessionId:"per-session"===c.config.sessionMode?p:void 0,bearer:l.length>0?l:void 0,streaming:c.config.streaming});if("buffered"===t.kind)h(e=>e.map(e=>e.id===s?{...e,text:t.response,pending:!1}:e));else for await(let e of t.frames)if("token"===e.event)h(t=>t.map(t=>t.id===s?{...t,text:t.text+e.data}:t));else if("done"===e.event){let t;try{t=JSON.parse(e.data).response}catch(e){}h(e=>e.map(e=>e.id===s?{...e,text:null!=t?t:e.text,pending:!1}:e))}else"error"===e.event&&h(t=>t.map(t=>t.id===s?{...t,text:t.text+"\n[error: ".concat(e.data,"]"),pending:!1,role:"system"}:t))}catch(t){let e=t instanceof Error?t.message:String(t);h(t=>t.map(t=>t.id===s?{...t,text:"[error: ".concat(e,"]"),pending:!1,role:"system"}:t))}finally{g(!1)}};return"loading"===c.kind?(0,n.jsx)("div",{className:"p-6 text-sm text-slate-500",children:"Loading workflow chat…"}):"not-found"===c.kind?(0,n.jsxs)("div",{className:"p-6 text-sm",children:[(0,n.jsx)("h1",{className:"text-lg font-medium mb-2",children:"Workflow not found"}),(0,n.jsxs)("p",{className:"text-slate-600",children:["The workflow ",(0,n.jsx)("code",{className:"px-1 bg-slate-100 rounded",children:i})," is not available for hosted chat. The workflow author needs to add",(0,n.jsxs)("code",{className:"px-1 bg-slate-100 rounded ml-1",children:["hostedUi: ","{"," enabled: true ","}"]}),"to the chat trigger node."]})]}):"error"===c.kind?(0,n.jsxs)("div",{className:"p-6 text-sm",children:[(0,n.jsx)("h1",{className:"text-lg font-medium mb-2 text-red-600",children:"Connection error"}),(0,n.jsx)("p",{className:"text-slate-600",children:c.reason})]}):(0,n.jsxs)("div",{className:"flex flex-col h-screen max-w-2xl mx-auto px-4",children:[(0,n.jsxs)("header",{className:"py-3 border-b",children:[(0,n.jsx)("h1",{className:"text-base font-medium",children:c.config.workflowName}),(0,n.jsxs)("p",{className:"text-xs text-slate-500",children:[c.config.streaming?"streaming":"buffered"," \xb7 ",c.config.sessionMode,c.config.hostedUi.requiresBearer?" \xb7 bearer required":""]})]}),c.config.hostedUi.requiresBearer&&l.length>0?(0,n.jsx)("div",{className:"text-xs px-3 py-2 bg-amber-50 border-b border-amber-200 text-amber-800",children:"⚠ The bearer token is embedded in this URL. Treat this link as a secret — sharing the URL gives anyone full access to the workflow."}):null,(0,n.jsxs)("div",{ref:w,className:"flex-1 overflow-y-auto py-4 space-y-3",children:[0===u.length?(0,n.jsx)("p",{className:"text-sm text-slate-400 italic",children:"Type a message to start the conversation."}):null,u.map(e=>(0,n.jsxs)("div",{className:"text-sm",children:[(0,n.jsxs)("div",{className:"font-medium text-xs uppercase text-slate-500",children:[e.role,e.pending?" \xb7 typing…":null]}),(0,n.jsx)("pre",{className:"whitespace-pre-wrap font-sans text-slate-800",children:e.text})]},e.id))]}),(0,n.jsxs)("div",{className:"py-3 border-t flex gap-2",children:[(0,n.jsx)("input",{className:"flex-1 px-3 py-2 border rounded text-sm",value:f,onChange:e=>m(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),b())},placeholder:"Message…",disabled:x}),(0,n.jsx)("button",{type:"button",onClick:()=>void b(),disabled:x||0===f.trim().length,className:"px-4 py-2 bg-slate-900 text-white rounded text-sm disabled:opacity-50",children:"Send"})]})]})}function l(){return(0,n.jsx)(a.Suspense,{fallback:(0,n.jsx)("div",{className:"p-6 text-sm text-slate-500",children:"Loading workflow chat…"}),children:(0,n.jsx)(i,{})})}}},e=>{e.O(0,[6390,3170,7358],()=>e(e.s=1891)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7143],{3321:(e,o,r)=>{Promise.resolve().then(r.bind(r,93772))},93772:(e,o,r)=>{"use strict";r.r(o),r.d(o,{default:()=>t});var n=r(54456),s=r(60500);function t(){return(0,s.useEffect)(()=>{window.location.replace("/app/editor/?mode=workflow")},[]),(0,n.jsx)("a",{href:"/app/editor/?mode=workflow",children:"편집기로 이동"})}}},e=>{e.O(0,[6390,3170,7358],()=>e(e.s=3321)),_N_E=e.O()}]);