elanous 0.2.21 → 0.2.22

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 (315) 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/1307-08b716476f1d50af.js +1 -0
  4. package/apps/pwa/out/_next/static/chunks/{2489-ff55a35b202c0f94.js → 2489-d238d3e2eb5b2bf5.js} +1 -1
  5. package/apps/pwa/out/_next/static/chunks/3857-5985236d9307f676.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/5633-d6852385000738ef.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/5977-5b9e8a45a5b0c823.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/8857-aa1cc4ac90af4d40.js +1 -0
  9. package/apps/pwa/out/_next/static/chunks/9247-55bcfbb0e8057f59.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/app/approvals/page-88459e0903da2803.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-d781be3e3a9cfd74.js → page-d85c43f46f58716b.js} +1 -1
  12. package/apps/pwa/out/_next/static/chunks/app/board/{page-b0a80997903852d8.js → page-4e645600579ae952.js} +1 -1
  13. package/apps/pwa/out/_next/static/chunks/app/botlab/{page-2b1263165630d9c8.js → page-87edbfd19117823b.js} +1 -1
  14. package/apps/pwa/out/_next/static/chunks/app/bots/page-7f0c2b7801ac6a54.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/app/ceo/page-bf1f030a9d1adffd.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/app/chat/{page-e2d6bed48ac20120.js → page-cbaf66b1e1804adf.js} +1 -1
  17. package/apps/pwa/out/_next/static/chunks/app/consult/{page-111cabe4d1fd69ae.js → page-80ed511e02c81412.js} +1 -1
  18. package/apps/pwa/out/_next/static/chunks/app/control/{page-544dd4bd4847eeb7.js → page-9f5610caaa06178c.js} +1 -1
  19. package/apps/pwa/out/_next/static/chunks/app/decisions/{page-3ee191319bf97d87.js → page-ec8f3575e339de74.js} +1 -1
  20. package/apps/pwa/out/_next/static/chunks/app/design-check/page-86d753e460f1a989.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/app/editor/page-4166a7d51cf0a57d.js +1 -0
  22. package/apps/pwa/out/_next/static/chunks/app/exec/{page-a449f1ed472b81c2.js → page-2a19c5cd3b562580.js} +1 -1
  23. package/apps/pwa/out/_next/static/chunks/app/field/{page-9045094d6d3b5cd0.js → page-b6a09cde2e07521a.js} +1 -1
  24. package/apps/pwa/out/_next/static/chunks/app/inside/{page-c06673596849ef45.js → page-f7eae1518ca0c353.js} +1 -1
  25. package/apps/pwa/out/_next/static/chunks/app/intake/page-456a8573ad811381.js +1 -0
  26. package/apps/pwa/out/_next/static/chunks/app/{layout-9f81233f29dcd409.js → layout-8462d6a543cbb2d9.js} +1 -1
  27. package/apps/pwa/out/_next/static/chunks/app/live/page-2974cdfb87c0f9c9.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/app/live-run/page-f927ffa25f3c86d1.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/app/loops/page-abd86cd832aaa011.js +1 -0
  30. package/apps/pwa/out/_next/static/chunks/app/market/page-79daf68f6256adaa.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-8c3f168fc3f91939.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/app/morning/{page-7a12f61be4a579d1.js → page-786fb4504d0f2fa9.js} +1 -1
  33. package/apps/pwa/out/_next/static/chunks/app/{not-found-c85b0589591a99c9.js → not-found-75209f14597dcb8f.js} +1 -1
  34. package/apps/pwa/out/_next/static/chunks/app/observatory/{page-725a4da02dd129eb.js → page-bf30affe3a85af7e.js} +1 -1
  35. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-1187a44b7515434b.js +1 -0
  36. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-3d0910185a66ed54.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-f401ee1dd5a26e25.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/app/outputs/page-5dfe7604fd842784.js +1 -0
  39. package/apps/pwa/out/_next/static/chunks/app/{page-21bec4afeb2f0917.js → page-76cf838050a8d681.js} +1 -1
  40. package/apps/pwa/out/_next/static/chunks/app/reflection/{page-dc39ee7a36d26385.js → page-7ec8e289b4c14df6.js} +1 -1
  41. package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-84ae759f76053672.js → page-8c8ac17d52be2a79.js} +1 -1
  42. package/apps/pwa/out/_next/static/chunks/app/sessions/{page-3db58ddb61fe2be9.js → page-d359ab048d63a9d9.js} +1 -1
  43. package/apps/pwa/out/_next/static/chunks/app/settings/devices/{page-c5315e30f3528dc4.js → page-b8b345c880bf78d1.js} +1 -1
  44. package/apps/pwa/out/_next/static/chunks/app/settings/{page-2fe368efb6de3b6a.js → page-f151cc10ad026940.js} +1 -1
  45. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-9875f103057da433.js +1 -0
  46. package/apps/pwa/out/_next/static/chunks/app/setup/page-9789328af9a9aa62.js +1 -0
  47. package/apps/pwa/out/_next/static/chunks/app/share/{page-c69762987b751174.js → page-bf495a1e284f4e00.js} +1 -1
  48. package/apps/pwa/out/_next/static/chunks/app/showroom/page-a263d94bca4be22a.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/app/tasks/page-3962eab8ec58d16e.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/app/term/page-9abcfac07e02a542.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/app/today/page-bee49f927c333abb.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/app/trace/page-bac2d56dcb02d955.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/app/vault/page-937cbcc13176295c.js +1 -0
  54. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-d09495594f7f480d.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/app/workflows/{page-7f8d7fcdf058a845.js → page-69cb93d1a2e57e0e.js} +1 -1
  56. package/apps/pwa/out/_next/static/chunks/app/workspace/{page-22163556cd38bc88.js → page-72ec543928d67c3e.js} +1 -1
  57. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-82906eeda0186a7b.js +1 -0
  58. package/apps/pwa/out/_next/static/css/f2bd5257e6af88d8.css +1 -0
  59. package/apps/pwa/out/approvals/index.html +1 -1
  60. package/apps/pwa/out/approvals/index.txt +14 -14
  61. package/apps/pwa/out/autopilot/index.html +1 -1
  62. package/apps/pwa/out/autopilot/index.txt +14 -14
  63. package/apps/pwa/out/board/index.html +1 -1
  64. package/apps/pwa/out/board/index.txt +14 -14
  65. package/apps/pwa/out/botlab/index.html +1 -1
  66. package/apps/pwa/out/botlab/index.txt +14 -14
  67. package/apps/pwa/out/bots/index.html +1 -1
  68. package/apps/pwa/out/bots/index.txt +14 -14
  69. package/apps/pwa/out/ceo/index.html +1 -1
  70. package/apps/pwa/out/ceo/index.txt +14 -14
  71. package/apps/pwa/out/chat/index.html +1 -1
  72. package/apps/pwa/out/chat/index.txt +14 -14
  73. package/apps/pwa/out/consult/index.html +1 -1
  74. package/apps/pwa/out/consult/index.txt +14 -14
  75. package/apps/pwa/out/control/index.html +1 -1
  76. package/apps/pwa/out/control/index.txt +14 -14
  77. package/apps/pwa/out/decisions/index.html +1 -1
  78. package/apps/pwa/out/decisions/index.txt +14 -14
  79. package/apps/pwa/out/design-check/index.html +1 -1
  80. package/apps/pwa/out/design-check/index.txt +14 -14
  81. package/apps/pwa/out/editor/index.html +1 -1
  82. package/apps/pwa/out/editor/index.txt +14 -14
  83. package/apps/pwa/out/exec/index.html +1 -1
  84. package/apps/pwa/out/exec/index.txt +14 -14
  85. package/apps/pwa/out/field/index.html +1 -1
  86. package/apps/pwa/out/field/index.txt +14 -14
  87. package/apps/pwa/out/healthz +1 -1
  88. package/apps/pwa/out/index.html +1 -1
  89. package/apps/pwa/out/index.txt +14 -14
  90. package/apps/pwa/out/inside/index.html +1 -1
  91. package/apps/pwa/out/inside/index.txt +14 -14
  92. package/apps/pwa/out/intake/index.html +1 -1
  93. package/apps/pwa/out/intake/index.txt +14 -14
  94. package/apps/pwa/out/live/index.html +1 -1
  95. package/apps/pwa/out/live/index.txt +14 -14
  96. package/apps/pwa/out/live-run/index.html +1 -1
  97. package/apps/pwa/out/live-run/index.txt +14 -14
  98. package/apps/pwa/out/loops/index.html +1 -1
  99. package/apps/pwa/out/loops/index.txt +14 -14
  100. package/apps/pwa/out/market/index.html +1 -1
  101. package/apps/pwa/out/market/index.txt +14 -14
  102. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  103. package/apps/pwa/out/missions/placeholder/index.txt +14 -14
  104. package/apps/pwa/out/morning/index.html +1 -1
  105. package/apps/pwa/out/morning/index.txt +14 -14
  106. package/apps/pwa/out/observatory/index.html +1 -1
  107. package/apps/pwa/out/observatory/index.txt +14 -14
  108. package/apps/pwa/out/ops/checklist/index.html +1 -1
  109. package/apps/pwa/out/ops/checklist/index.txt +14 -14
  110. package/apps/pwa/out/ops/release/index.html +1 -1
  111. package/apps/pwa/out/ops/release/index.txt +14 -14
  112. package/apps/pwa/out/ops/seats/index.html +1 -1
  113. package/apps/pwa/out/ops/seats/index.txt +14 -14
  114. package/apps/pwa/out/outputs/index.html +1 -1
  115. package/apps/pwa/out/outputs/index.txt +14 -14
  116. package/apps/pwa/out/reflection/index.html +1 -1
  117. package/apps/pwa/out/reflection/index.txt +15 -15
  118. package/apps/pwa/out/scheduler/index.html +1 -1
  119. package/apps/pwa/out/scheduler/index.txt +14 -14
  120. package/apps/pwa/out/sessions/index.html +1 -1
  121. package/apps/pwa/out/sessions/index.txt +14 -14
  122. package/apps/pwa/out/settings/devices/index.html +1 -1
  123. package/apps/pwa/out/settings/devices/index.txt +14 -14
  124. package/apps/pwa/out/settings/index.html +1 -1
  125. package/apps/pwa/out/settings/index.txt +14 -14
  126. package/apps/pwa/out/setup/done/index.html +1 -1
  127. package/apps/pwa/out/setup/done/index.txt +14 -14
  128. package/apps/pwa/out/setup/index.html +1 -1
  129. package/apps/pwa/out/setup/index.txt +14 -14
  130. package/apps/pwa/out/share/index.html +1 -1
  131. package/apps/pwa/out/share/index.txt +14 -14
  132. package/apps/pwa/out/showroom/index.html +1 -1
  133. package/apps/pwa/out/showroom/index.txt +14 -14
  134. package/apps/pwa/out/tasks/index.html +1 -1
  135. package/apps/pwa/out/tasks/index.txt +14 -14
  136. package/apps/pwa/out/term/index.html +1 -1
  137. package/apps/pwa/out/term/index.txt +14 -14
  138. package/apps/pwa/out/today/index.html +1 -1
  139. package/apps/pwa/out/today/index.txt +14 -14
  140. package/apps/pwa/out/trace/index.html +1 -1
  141. package/apps/pwa/out/trace/index.txt +14 -14
  142. package/apps/pwa/out/vault/index.html +1 -1
  143. package/apps/pwa/out/vault/index.txt +14 -14
  144. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  145. package/apps/pwa/out/workflows/chat-ui/index.txt +14 -14
  146. package/apps/pwa/out/workflows/index.html +1 -1
  147. package/apps/pwa/out/workflows/index.txt +14 -14
  148. package/apps/pwa/out/workspace/index.html +1 -1
  149. package/apps/pwa/out/workspace/index.txt +14 -14
  150. package/apps/pwa/out/worktrees/index.html +1 -1
  151. package/apps/pwa/out/worktrees/index.txt +14 -14
  152. package/graphs/catalog/catalog.yaml +1 -1
  153. package/graphs/drafts/recipes.yaml +2 -2
  154. package/graphs/test-diet/recipes.yaml +3 -0
  155. package/graphs/test-diet/test-diet.yaml +3 -1
  156. package/package.json +1 -1
  157. package/scripts/f-session-monitor.ts +69 -0
  158. package/scripts/hq/standby-snapshot.ts +7 -3
  159. package/scripts/knowledge-compress.ts +11 -0
  160. package/scripts/nightly-docops.ts +90 -3
  161. package/scripts/research-coo-admin-dates.ts +39 -0
  162. package/scripts/skills/public-check.ts +7 -2
  163. package/scripts/smart-merge/resync-shadow.ts +5 -3
  164. package/scripts/test-diet/lib.ts +81 -1
  165. package/scripts/test-diet/node.ts +48 -2
  166. package/scripts/verify-coo-admin-evidence.ts +83 -0
  167. package/src/acp/client.ts +4 -2
  168. package/src/agent/run-context.ts +4 -0
  169. package/src/agent-env/profile.ts +25 -5
  170. package/src/agent-mission/driver.ts +26 -12
  171. package/src/agent-mission/supervisor-metrics.ts +17 -2
  172. package/src/agent-substrate/acp-reviewer.ts +12 -5
  173. package/src/agent-substrate/pr-reviewer.ts +11 -4
  174. package/src/agent-substrate/review-intent.ts +102 -3
  175. package/src/autopilot/build/llm-conflict-merge.ts +22 -8
  176. package/src/autopilot/pr-manager.ts +18 -8
  177. package/src/away/release-watch.ts +47 -8
  178. package/src/briefing/brief-items.ts +104 -11
  179. package/src/chat/index.ts +1 -0
  180. package/src/cli/brief-cli.ts +20 -2
  181. package/src/cli/config-classify.ts +83 -0
  182. package/src/cli/control-cli.ts +14 -0
  183. package/src/cli/decisions-cli.ts +26 -16
  184. package/src/cli/logs-model-input.ts +1 -1
  185. package/src/cli/pr-cli.ts +65 -8
  186. package/src/cli/release-cli.ts +21 -4
  187. package/src/cli/tasks-cli.ts +108 -1
  188. package/src/connectors/types.ts +6 -6
  189. package/src/context-bus/context-now-surfaces.ts +18 -0
  190. package/src/context-bus/coord-events.ts +32 -4
  191. package/src/context-bus/long-term-memory.ts +23 -6
  192. package/src/context-bus/nightly-condense.ts +169 -21
  193. package/src/control/control-status.ts +87 -0
  194. package/src/control-plane/light-member.ts +5 -3
  195. package/src/control-plane/member.ts +172 -7
  196. package/src/core-turn/run-goal-loop.ts +22 -1
  197. package/src/dashboard/slash-runtime/dashboard-handlers.ts +9 -0
  198. package/src/decisions/decision-cards.ts +20 -1
  199. package/src/decisions/decision-ledger.ts +11 -8
  200. package/src/decisions/web-push-decision-cards.ts +19 -3
  201. package/src/discord-self-message.ts +2 -2
  202. package/src/domains/coo-admin-dates.evidence.json +876 -0
  203. package/src/domains/coo-admin-tool.ts +48 -14
  204. package/src/domains/ops-status.ts +53 -0
  205. package/src/domains/outbound-alert.ts +24 -1
  206. package/src/exec-requests/planner.ts +6 -0
  207. package/src/graph-kinds/registry.ts +6 -6
  208. package/src/graph-runner/graph-cli.ts +34 -2
  209. package/src/graph-runner/graph-run-api.ts +7 -0
  210. package/src/graph-runner/graph-tick.ts +73 -12
  211. package/src/graph-runner/runner.ts +43 -11
  212. package/src/graph-unify/wf-to-graph.ts +79 -0
  213. package/src/graph-wizard/generate.ts +34 -2
  214. package/src/graph-wizard/steps.ts +13 -0
  215. package/src/harness/harness-cli-command.ts +121 -23
  216. package/src/harness/harness-queue.ts +58 -14
  217. package/src/harness/launch-advice.ts +23 -0
  218. package/src/index.ts +36 -7
  219. package/src/knowledge/conclusion-compress.ts +93 -0
  220. package/src/knowledge/know-find.ts +9 -2
  221. package/src/knowledge/query.ts +20 -0
  222. package/src/llm.ts +26 -16
  223. package/src/loops/neighbor-runtime.ts +88 -0
  224. package/src/loops/orchestrator/author-depth.ts +29 -11
  225. package/src/loops/orchestrator/overlap.ts +7 -1
  226. package/src/loops/orchestrator/resync-shadow.ts +1 -1
  227. package/src/loops/orchestrator/tick.ts +35 -2
  228. package/src/loops/orchestrator/traffic.ts +2 -0
  229. package/src/loops/registry.ts +5 -0
  230. package/src/market/publish.ts +17 -1
  231. package/src/maturity/feature-maturity.ts +2 -1
  232. package/src/mss/logging/redaction.ts +17 -0
  233. package/src/nexus/api/draft-metrics.ts +22 -8
  234. package/src/nexus/api/graph-peer-edit.ts +77 -0
  235. package/src/nexus/api/graph-wizard-api.ts +9 -1
  236. package/src/nexus/api/graphs-api.ts +145 -7
  237. package/src/nexus/api/http-server.ts +93 -8
  238. package/src/nexus/api/plugins-market.ts +24 -0
  239. package/src/nexus/index.ts +3 -2
  240. package/src/oauth/claude-pty-maturity.ts +24 -0
  241. package/src/oauth/fallback-chain.ts +27 -14
  242. package/src/plugins/maker/market-bundle.ts +9 -0
  243. package/src/plugins/maker/plugin-maker.ts +9 -3
  244. package/src/plugins/maker/wizard-generate.ts +73 -9
  245. package/src/policy/llm-policy.ts +11 -6
  246. package/src/release-loop/checklist-board.ts +27 -0
  247. package/src/release-loop/checklist.ts +38 -0
  248. package/src/seat-address/seat-address.ts +1 -0
  249. package/src/seat-loop/seat-loop.ts +174 -20
  250. package/src/seat-loop/seat-report.ts +29 -1
  251. package/src/self-dev/dev-cli.ts +90 -8
  252. package/src/self-dev/dev-pipeline.ts +20 -1
  253. package/src/self-dev/draft-sweep.ts +45 -8
  254. package/src/self-dev/orchestrate.ts +3 -0
  255. package/src/self-dev/review-provider-fallback.ts +83 -0
  256. package/src/self-dev/run-supervisor.ts +5 -1
  257. package/src/self-implement/harness-policy-gates.ts +7 -5
  258. package/src/self-implement/host-regate.ts +28 -14
  259. package/src/self-implement/l8-merge-queue.ts +80 -8
  260. package/src/self-implement/orchestrator.ts +68 -27
  261. package/src/self-implement/seams.ts +5 -3
  262. package/src/self-implement/self-implement-cli.ts +4 -0
  263. package/src/shell-env-bootstrap.ts +19 -4
  264. package/src/steward/triage.ts +25 -8
  265. package/src/storage/file-lock.ts +33 -4
  266. package/src/task-agent/completion-evidence.ts +31 -3
  267. package/src/task-agent/cover.ts +61 -0
  268. package/src/task-agent/live-moves.ts +126 -3
  269. package/src/task-agent/shadow.ts +19 -4
  270. package/src/task-agent/task-hand.ts +2 -0
  271. package/src/task-orchestrator/surfaces/pod-pool.ts +138 -15
  272. package/src/task-orchestrator/surfaces/self-implement.ts +7 -0
  273. package/src/telegram-commands.ts +8 -0
  274. package/src/telegram-project-command.ts +6 -0
  275. package/src/telegram.ts +2 -2
  276. package/src/typecheck-ratchet.ts +2 -1
  277. package/src/user-config.ts +35 -4
  278. package/src/version/packed-revision.json +1 -1
  279. package/src/workflow-runtime/executor.ts +24 -2
  280. package/src/workflow-runtime/triggers/registry.ts +27 -0
  281. package/src/workflow-runtime/triggers/schedule-source.ts +30 -3
  282. package/apps/pwa/out/_next/static/chunks/1307-c97eba9fb72a9a5e.js +0 -1
  283. package/apps/pwa/out/_next/static/chunks/3857-995ea9f5ef33d71e.js +0 -1
  284. package/apps/pwa/out/_next/static/chunks/5977-59fedea50d13c762.js +0 -1
  285. package/apps/pwa/out/_next/static/chunks/8857-f1762140ef9a96b1.js +0 -1
  286. package/apps/pwa/out/_next/static/chunks/9247-7581825d511a64c0.js +0 -1
  287. package/apps/pwa/out/_next/static/chunks/9497-b0e758d1cd4ae8d7.js +0 -1
  288. package/apps/pwa/out/_next/static/chunks/app/approvals/page-937c92292a4ab4f0.js +0 -1
  289. package/apps/pwa/out/_next/static/chunks/app/bots/page-ea998f7f5d156bea.js +0 -1
  290. package/apps/pwa/out/_next/static/chunks/app/ceo/page-33c328b64ca508f8.js +0 -1
  291. package/apps/pwa/out/_next/static/chunks/app/design-check/page-e4bcb2c503dab04b.js +0 -1
  292. package/apps/pwa/out/_next/static/chunks/app/editor/page-300897dcbbd5ed76.js +0 -1
  293. package/apps/pwa/out/_next/static/chunks/app/intake/page-103fa3191c1b2e08.js +0 -1
  294. package/apps/pwa/out/_next/static/chunks/app/live/page-be8b4615c919e36c.js +0 -1
  295. package/apps/pwa/out/_next/static/chunks/app/live-run/page-c685b104e0dfa609.js +0 -1
  296. package/apps/pwa/out/_next/static/chunks/app/loops/page-8d693331cfbb6add.js +0 -1
  297. package/apps/pwa/out/_next/static/chunks/app/market/page-cef4f30a4c22fae1.js +0 -1
  298. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-66ea1b54fc83fa15.js +0 -1
  299. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-8cc707bd09a497d9.js +0 -1
  300. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-90b55be1f15ce0e8.js +0 -1
  301. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-cb16606e08be65db.js +0 -1
  302. package/apps/pwa/out/_next/static/chunks/app/outputs/page-16dc64b74ed6a40a.js +0 -1
  303. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-8d04132dd0ac5e10.js +0 -1
  304. package/apps/pwa/out/_next/static/chunks/app/setup/page-f23484de467c9ea3.js +0 -1
  305. package/apps/pwa/out/_next/static/chunks/app/showroom/page-5456692bda39aafb.js +0 -1
  306. package/apps/pwa/out/_next/static/chunks/app/tasks/page-d75f7cd65845ce98.js +0 -1
  307. package/apps/pwa/out/_next/static/chunks/app/term/page-5603f5e568b25ce3.js +0 -1
  308. package/apps/pwa/out/_next/static/chunks/app/today/page-d2cc0f4e89f42028.js +0 -1
  309. package/apps/pwa/out/_next/static/chunks/app/trace/page-a6eb73b8a4840f1c.js +0 -1
  310. package/apps/pwa/out/_next/static/chunks/app/vault/page-c0a3f4d10edb83fa.js +0 -1
  311. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-6c0b88068c143f15.js +0 -1
  312. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-141436fd26dd56fc.js +0 -1
  313. package/apps/pwa/out/_next/static/css/e81df11490b4413b.css +0 -1
  314. /package/apps/pwa/out/_next/static/{MObU8ujkMciAKr6ljAV05 → aBi6EyMtLsrl7J8eH4kF7}/_buildManifest.js +0 -0
  315. /package/apps/pwa/out/_next/static/{MObU8ujkMciAKr6ljAV05 → aBi6EyMtLsrl7J8eH4kF7}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2489],{29325:(e,t,l)=>{l.d(t,{u:()=>n});function n(e,t){if(!e.enabled||"off"===e.scheduleState)return"off";if("failed"===e.lastStatus||"error"===e.lastStatus||"failure"===e.lastStatus||"abandoned"===e.lastStatus||"expired"===e.lastStatus)return"failed";if("stale"===e.scheduleState)return"late";let l=null===e.lastRunAt?NaN:Date.parse(e.lastRunAt);if(void 0!==e.secondDueAt){let n=null===e.secondDueAt?NaN:Date.parse(e.secondDueAt);return Number.isFinite(l)&&Number.isFinite(t)&&Number.isFinite(n)&&n>l&&t>n?"late":"alive"}return Number.isFinite(t)&&Number.isFinite(l)&&null!==e.intervalMs&&Number.isFinite(e.intervalMs)&&e.intervalMs>0&&t-l>2*e.intervalMs?"late":"alive"}},40385:(e,t,l)=>{l.d(t,{g:()=>i,q:()=>s});var n=l(81969);let a=[{id:"OP",seat:"COO"},{id:"MK",seat:"CMO"},{id:"TC",seat:"CTO"},{id:"UX",seat:"CXO"}];function r(e){return(0,n.t)(e.replace(/\s+/g," ")).trim()}function s(e){var t;let l=e.split("\n"),n=(e,t)=>{let l=e.trim();return t&&(l=(l=l.replace(/^\*\*\[[^\]]+\]\*\*\s*/,"")).replace(/^(?:📌\S*\s*)?\d{4}-\d{2}-\d{2}\s+\d{1,2}:\d{2}\s*KST\s*/,"")),r(l=(l=(l=(l=(l=(l=l.replace(/^→\s*(?:[A-Z]{1,4}|전원|전체)(?=\s|·|$)(?:\s*·\s*(?:[A-Z]{1,4}|전원|전체)(?=\s|·|$))*\s*(?:·)?\s*/u,"")).replace(/^—\s*/,"")).replace(/^[-*]\s+/,"").replace(/\*\*|`|__/g,"").replace(/^#+\s*/,"").trim()).replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,"")).replace(RegExp("^(?:\\p{Extended_Pictographic}\\uFE0F?)+\\s*","u"),"")).replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,""))},a=n(null!=(t=l[0])?t:"",!0);if(a)return a;let s=l.slice(1).find(e=>e.trim());return s?n(s,!1):""}function i(e,t){var l;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now();return{seats:a.map(t=>{var l;let{id:n,seat:a}=t,r=null==e?void 0:e.seats.find(e=>e.seat===n);return{seat:a,now:(null==r?void 0:r.now)&&Array.from(s(r.now.text)).slice(0,40).join("")||"못 읽음",landedToday:(null==r?void 0:r.landed)==null?"못 읽음":r.landed.length,blocked:(null==r?void 0:r.blocked)==null?"못 읽음":r.blocked.length,decisionsWaiting:null!=(l=null==r?void 0:r.pendingDecisions)?l:"못 읽음"}}),runs:(null!=(l=null==t?void 0:t.entries)?l:[]).filter(e=>"running"===e.status).sort((e,t)=>{var l,n;return(Date.parse(null!=(l=t.lastActivityTimestamp)?l:"")||0)-(Date.parse(null!=(n=e.lastActivityTimestamp)?n:"")||0)}).slice(0,6).map(e=>{var t;let l=Date.parse(null!=(t=e.lastActivityTimestamp)?t:"");return{id6:function(e){let t=e.replace(/^run-/i,"");return/^[a-z0-9]{6}/i.test(t)&&r(t.slice(0,6))||"못 읽음"}(e.runId),stage:r(e.lastPhase||e.status)||"못 읽음",elapsedSec:Number.isFinite(l)?Math.max(0,Math.floor((n-l)/1e3)):"못 읽음"}})}}},42006:(e,t,l)=>{l.d(t,{QK:()=>s,i6:()=>r,Pz:()=>o,Em:()=>i,Yy:()=>d});var n=l(29325);let a={alive:"살아 있음",late:"늦음",failed:"실패",off:"꺼짐"},r="/v1/schedules?includeOff=1",s="/v1/dashboard/loops";async function i(e,t){var l,i,o,c,u,m,p,f;let[h,b]=await Promise.allSettled([e(r),e(s)]),v="fulfilled"===h.status?null==(l=h.value)?void 0:l.schedules:null,g="fulfilled"===b.status?null==(o=b.value)||null==(i=o.loops)?void 0:i.loops:null;if(!Array.isArray(v)&&!Array.isArray(g))throw Error("loop registries unavailable");if(!Array.isArray(v))throw Error("스케줄 레지스트리 조회 실패");if(!Array.isArray(g))throw Error("루프 레지스트리 조회 실패");let x=d(v,t).map(e=>({...e,id:"schedule:".concat(e.id)}));for(let e of g){let l=e.last?Date.parse(e.last.at):NaN,r=(0,n.u)({enabled:!1!==e.armed,lastRunAt:null!=(m=null==(c=e.last)?void 0:c.at)?m:null,lastStatus:null!=(p=null==(u=e.last)?void 0:u.status.toLowerCase())?p:null,intervalMs:null},t);x.push({id:"loop:".concat(e.name),name:e.label,layer:null!=(f=e.category)?f:"루프",owner:"미지정",mode:null===e.armed?"관측":e.armed?"armed":"off",lastRun:Number.isFinite(l)?e.last.at:null,verdict:"alive"===r?"판정 불가":a[r]})}return x}function o(e,t){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now,n=0,a=!0;return{async refresh(){let r=++n;try{let s=await i(e,l());a&&r===n&&t({rows:s,state:"ready"})}catch(e){a&&r===n&&t({rows:[],state:"error"})}},dispose(){a=!1}}}function d(e,t){return e.map(e=>{var l,r,s,i,o,d,c;let u=e.lastRun?Date.parse(e.lastRun.at):NaN,m=(0,n.u)({enabled:"off"!==e.state,lastRunAt:null!=(d=null==(l=e.lastRun)?void 0:l.at)?d:null,lastStatus:(null==(r=e.lastRun)?void 0:r.exit)!=null&&0!==e.lastRun.exit?"failed":(null==(s=e.lastRun)?void 0:s.status)==null||["ok","success","completed"].includes(e.lastRun.status.toLowerCase())?null!=(c=null==(o=e.lastRun)||null==(i=o.status)?void 0:i.toLowerCase())?c:null:"failed",intervalMs:e.cron?null:e.intervalMs,...e.cron?{scheduleState:e.state}:{}},t),p=!e.cron&&!(e.intervalMs&&e.intervalMs>0),f="alive"===m&&(!Number.isFinite(u)||p)?"판정 불가":a[m];return{id:e.id,name:e.name,layer:e.domain||e.category||e.source,owner:"미지정",mode:e.runVia||e.source,lastRun:Number.isFinite(u)?e.lastRun.at:null,verdict:f}})}},42489:(e,t,l)=>{l.d(t,{p1:()=>B});var n=l(55539),a=l(46124),r=l(58603),s=l(15151),i=l(43537),o=l(79247),d=l(40385),c=l(42006),u=l(88928),m=l(69280);l(71588);var p=l(29325),f=l(81969);let h={alive:"살아 있음",late:"늦음",failed:"실패",off:"꺼짐"};function b(e,t,l){if("launch"!==e.kind||"string"==typeof e.run&&""!==e.run)return!1;let n=Date.parse(e.at);return Number.isFinite(n)&&l-n>=6e5&&!t.some(t=>"run"===t.kind&&t.ref===e.ref)}let v={OP:"COO",MK:"CMO",TC:"CTO",UX:"CXO"},g=["OP","MK","TC","UX"],x=new Set(["request","decision","report","card","run","hand","launch","move"]),y=/^[a-zA-Z0-9_-]{1,128}$/,w="agent:task-agent",k="hub:runs",j=[{id:"loop:orchestrator",label:"조율"},{id:w,label:"TASK-AGENT"},{id:k,label:"런 묶음"},{id:"loop:release-loop",label:"발행 루프"},{id:"loop:guardian",label:"수호자"}];function N(e){return"string"==typeof e&&y.test(e)}function S(e){var t,l;let n=null!=(t=null==e?void 0:e.get("journey"))?t:null;if(N(n))return n;let a=null!=(l=null==e?void 0:e.get("demo"))?l:null;return N(a)&&"0"!==a&&"1"!==a?a:null}function A(e,t,l){let n=e&&"object"==typeof e&&"edges"in e?e.edges:null;if(!Array.isArray(n))throw Error("간선 조회 실패");return n.filter(e=>{if(!e||"object"!=typeof e||!x.has(e.kind)||"string"!=typeof e.at||"string"!=typeof e.from||"string"!=typeof e.to||"string"!=typeof e.ref)return!1;let n=Date.parse(e.at);return Number.isFinite(n)&&n<=t&&(!l||n>=t-36e5)})}function M(e,t){if(t&&("hand"===t.kind||"launch"===t.kind||"move"===t.kind)&&y.test(t.ref))return"/trace?q=".concat(encodeURIComponent(t.ref));if(e.startsWith("pr:")&&/^\d{1,9}$/.test(e.slice(3))&&!t)return"/trace?q=".concat(encodeURIComponent(e.slice(3)));let l=(null==t?void 0:t.kind)==="run"?t.ref:e;if((null==t?void 0:t.kind)==="card"&&y.test(t.ref))return"/trace?q=".concat(encodeURIComponent(t.ref));if(l.startsWith("loop:")&&y.test(l.slice(5))){let e=l.slice(5);return e.startsWith("run-")?"/trace?level=L2&run=".concat(encodeURIComponent(e)):"/trace?q=".concat(encodeURIComponent(e))}return l.startsWith("schedule:")&&y.test(l.slice(9))?"/trace?q=".concat(encodeURIComponent(l.slice(9))):l.startsWith("card:")&&y.test(l.slice(5))?"/trace?q=".concat(encodeURIComponent(l.slice(5))):(null==t?void 0:t.kind)==="run"&&y.test(l)?"/trace?level=L2&run=".concat(encodeURIComponent(l)):"/trace"}function C(e,t){let l=e=>e.startsWith("surface:")?0:e.startsWith("card:")?1:e.startsWith("loop:")?2:3;return e.filter(e=>"card"===e.kind&&e.ref===t).sort((e,t)=>e.at.localeCompare(t.at)||l(e.from)-l(t.from))}function T(e){return JSON.stringify([e.at,e.kind,e.from,e.to,e.ref])}let R=[{key:"tick",label:"틱 \xb7 넘김"},{key:"agent",label:"TASK-AGENT \xb7 발사"},{key:"run",label:"런"},{key:"pr",label:"PR"},{key:"land",label:"착지 \xb7 green 제안"}];function E(e,t){let l=new Set([t]);for(let n of e)"hand"===n.kind&&void 0!==n.cell&&(n.cell===t||n.cell.startsWith("".concat(t,"-")))&&l.add(n.ref);return l}function O(e,t){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Set([t]),n=e.ref===t||l.has(e.ref);return"hand"===e.kind?n&&"shadow"!==e.mode?"tick":null:"launch"===e.kind?n?"agent":null:"move"===e.kind?n&&"green-proposal"===e.move?"land":null:"run"===e.kind?e.to.startsWith("pr:")?"pr":e.to.startsWith("loop:")?"run":null:"card"===e.kind&&e.to.startsWith("landed:")?"land":null}function I(e,t){let l=E(e,t),n=e=>R.findIndex(n=>n.key===O(e,t,l));return[...C(e,t),...e.filter(e=>"card"!==e.kind||e.ref!==t).filter(e=>null!==O(e,t,l))].sort((e,t)=>e.at.localeCompare(t.at)||n(e)-n(t))}let D={request:"요청",decision:"결정",report:"보고",card:"카드",run:"런",hand:"넘김",launch:"발사",move:"판단"},U={request:"●",decision:"◆",report:"■",hand:"▲",launch:"★",move:"⬟",card:"◇",run:"▶"};var W=l(18993);let F={"살아 있음":"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30",늦음:"bg-red-500/15 text-red-300 ring-red-500/30",실패:"bg-red-500/15 text-red-300 ring-red-500/30",꺼짐:"bg-slate-700 text-slate-300 ring-slate-500","판정 불가":"bg-slate-700 text-slate-300 ring-slate-500"};function P(e){let{detail:t}=e;return(0,n.jsxs)("div",{"data-near-detail":"",className:"w-[180px] space-y-1 rounded-lg border border-slate-600 bg-[#10243b]/95 p-2 text-left text-[10px] font-normal text-slate-200",children:[null!==t.now&&(0,n.jsxs)("p",{className:"break-words",children:[(0,n.jsx)("span",{className:"text-slate-400",children:"지금 "}),t.now]}),(null!==t.running||null!==t.waiting)&&(0,n.jsxs)("p",{className:"flex gap-2",children:[null!==t.running&&(0,n.jsxs)("span",{children:["도는 런 ",t.running]}),null!==t.waiting&&(0,n.jsxs)("span",{children:["대기 ",t.waiting]})]}),t.recent.length>0?(0,n.jsx)("ol",{"aria-label":"최근 행동",className:"space-y-0.5",children:t.recent.map((e,t)=>(0,n.jsx)("li",{className:"break-words",children:e},t))}):(0,n.jsx)("p",{className:"text-slate-400",children:"최근 행동 없음"})]})}let Z={activity:function(e){let{data:t}=e,l="seat"===t.type||"hub"===t.type;return(0,n.jsxs)("div",{className:"relative flex flex-col items-center gap-1 text-center text-white",children:[(0,n.jsx)(u.h7,{type:"target",position:m.yX.Left,className:"!border-sky-400 !bg-sky-400"}),(0,n.jsx)("div",{className:"flex items-center justify-center rounded-full border-2 border-sky-400 bg-[#173556] px-2 font-bold ".concat(l?"h-[90px] w-[90px] text-lg":"h-[64px] w-[64px] text-xs"),children:(0,n.jsx)("span",{className:"line-clamp-2 break-all",children:(0,f.t)(t.label)})}),t.verdict&&(0,n.jsx)("span",{"data-loop-verdict":t.verdict,className:"rounded-full px-2 py-0.5 text-xs font-semibold ring-1 ".concat(F[t.verdict]),children:t.verdict}),t.detail&&(0,n.jsx)(P,{detail:t.detail}),(0,n.jsx)(u.h7,{type:"source",position:m.yX.Right,className:"!border-sky-400 !bg-sky-400"})]})}},L={packet:function(e){var t,l;let{id:r,sourceX:s,sourceY:i,targetX:o,targetY:d,sourcePosition:c,targetPosition:p,style:f,markerEnd:h,label:b,labelStyle:v,interactionWidth:g,data:x}=e,[y,w,k]=(0,m.Fp)({sourceX:s,sourceY:i,targetX:o,targetY:d,sourcePosition:c,targetPosition:p}),j=(0,a.useRef)(null),N=(0,a.useRef)(null),S=null!=(t=null==x?void 0:x.packet)?t:null,A=null!=(l=null==S?void 0:S.key)?l:null;return(0,a.useEffect)(()=>{if(null!==A)try{var e,t,l,n;null==(t=j.current)||null==(e=t.beginElement)||e.call(t),null==(n=N.current)||null==(l=n.beginElement)||l.call(n)}catch(e){}},[A]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(u.tE,{id:r,path:y,style:f,markerEnd:h,label:b,labelX:w,labelY:k,labelStyle:v,interactionWidth:g}),S&&(0,n.jsxs)("g",{"data-packet":S.word,"aria-hidden":"true",opacity:0,children:[(0,n.jsx)("text",{textAnchor:"middle",dominantBaseline:"central",fontSize:16,fill:"#e0f2fe",stroke:"#10243b",strokeWidth:.6,children:S.shape}),(0,n.jsx)("animateMotion",{ref:j,begin:"indefinite",dur:"".concat(S.roundTrip?2400:1200,"ms"),path:y,fill:"freeze",...S.roundTrip?{keyPoints:"0;1;0",keyTimes:"0;0.5;1",calcMode:"linear"}:{}}),(0,n.jsx)("animate",{ref:N,attributeName:"opacity",begin:"indefinite",dur:"".concat(S.roundTrip?2400:1200,"ms"),values:"1;1;0",keyTimes:"0;0.85;1",fill:"freeze"})]})]})}},K={done:"border-emerald-500/60 bg-emerald-500/15",failed:"border-red-500/60 bg-red-500/15",current:"border-sky-300 bg-sky-500/20",pending:"border-dashed border-slate-500 bg-slate-800/40"};function X(e){return"hand"===e.kind?e.broken?"broken":"shadow"===e.mode?"shadow":"live":null}function q(e,t,l){if(t)return"".concat(D.launch," \xb7 유령 \xb7 런 원장 없음 ").concat(Math.floor((l-Date.parse(e.at))/6e4),"분");let n=X(e);return"broken"===n?"".concat(D.hand," \xb7 끊김 ✕"):"shadow"===n?"".concat(D.hand," \xb7 그림자"):D[e.kind]}function z(e){let{rows:t,edges:l,seenAt:s,now:i,state:o,seatIds:d,details:c}=e,m=(0,r.useSearchParams)(),p=m.get("card"),h=S(m),[x,w]=(0,a.useState)(1),N=x<.8?"far":"near",[A,P]=(0,a.useState)(!1);(0,a.useEffect)(()=>{var e;if(P(function(){try{return"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch(e){return!1}}()),"function"!=typeof window.matchMedia)return;let t=window.matchMedia("(prefers-reduced-motion: reduce)"),l=()=>P(t.matches);return null==(e=t.addEventListener)||e.call(t,"change",l),()=>{var e;return null==(e=t.removeEventListener)?void 0:e.call(t,"change",l)}},[]);let z=(0,a.useMemo)(()=>null===h?[]:function(e,t){let l=I(e,t),n=E(e,t),a=0===l.length,r=R.reduce((e,a,r)=>l.some(e=>O(e,t,n)===a.key&&!e.broken)?r:e,-1);return R.map((e,s)=>{let i=l.filter(l=>O(l,t,n)===e.key),o=i.find(e=>!e.broken);return o?{key:e.key,label:e.label,state:"done",edge:o}:0===i.length&&s<r?{key:e.key,label:e.label,state:"done"}:i.length>0?(a=!0,{key:e.key,label:e.label,state:"failed",edge:i[0]}):a?{key:e.key,label:e.label,state:"pending"}:(a=!0,{key:e.key,label:e.label,state:"current"})})}(l,h),[l,h]),_=(0,a.useMemo)(()=>new Set(null===h?[]:I(l,h).map(T)),[l,h]),[$,J]=(0,a.useState)(p);(0,a.useEffect)(()=>{J(p)},[p]);let G=(0,a.useMemo)(()=>[...new Set(l.filter(e=>"card"===e.kind).map(e=>e.ref))].sort(),[l]),V=(0,a.useMemo)(()=>null===$?[]:C(l,$),[l,$]),B=new Set(V.map(T)),H=null!==$?B:null!==h?_:null,Q=e=>{J(e);let t=new URL(window.location.href);null===e?t.searchParams.delete("card"):t.searchParams.set("card",e),window.history.replaceState(window.history.state,"",t.toString())},Y=(0,a.useMemo)(()=>(function(e,t){var l,n;let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:g,r=new Map;for(let e of a)r.set(e,{id:e,type:"seat",label:null!=(l=v[e])?l:(0,f.t)(e)});for(let e of j)r.set(e.id,{id:e.id,type:"hub",label:e.label});let s=new Set(a),i=new Set;for(let t of e){let e=s.has(t.owner)?t.owner:"미지정",l=t.id,n=(0,f.t)(t.name),a=i.has(n)?"".concat(n," \xb7 ").concat((0,f.t)(t.id)):n;i.add(n);let o=r.get(l);r.set(l,(null==o?void 0:o.type)==="hub"?{...o,owner:e,verdict:t.verdict}:{id:l,type:"loop",label:a,owner:e,verdict:t.verdict})}for(let e of t)for(let t of[e.from,e.to]){if(r.has(t))continue;let[e,l]=t.split(":",2);"loop"===e&&l&&y.test(l)?r.set(t,{id:t,type:"other",label:l.startsWith("run-")?"런 \xb7 ".concat((0,f.t)(l)):"칸 \xb7 ".concat((0,f.t)(l))}):"card"===e||"surface"===e?r.set(t,{id:t,type:"other",label:"card"===e?"카드":"입구 \xb7 ".concat((0,f.t)(null!=l?l:""))}):"agent"===e&&l&&y.test(l)?r.set(t,{id:t,type:"other",label:"에이전트 \xb7 ".concat((0,f.t)(l))}):"pr"===e&&l&&/^\d{1,9}$/.test(l)?r.set(t,{id:t,type:"other",label:"PR #".concat(l)}):("release"===e||"landed"===e)&&l&&y.test(l)?r.set(t,{id:t,type:"other",label:"".concat("release"===e?"발행":"착지"," \xb7 ").concat((0,f.t)(l))}):s.has(t)&&r.set(t,{id:t,type:"seat",label:null!=(n=v[t])?n:(0,f.t)(t)})}return[...r.values()]})(t,l,d),[t,l,d]),ee=(0,a.useMemo)(()=>{let e=Y.filter(e=>"seat"===e.type);return[...e.map(e=>e.id),"미지정"].map((t,l)=>({owner:t,column:l,nodes:[..."미지정"===t?[]:e.filter(e=>e.id===t),...Y.filter(e=>"loop"===e.type&&e.owner===t)]})).filter(e=>e.nodes.length>0)},[Y]),et=new Map(Y.map((e,t)=>[e.id,"node-".concat(t)])),el=e=>{var t,l;return null!=(l=null==(t=Y.find(t=>t.id===e))?void 0:t.label)?l:"알 수 없음"},en=new Set(l.filter(e=>"run"===e.kind&&e.to.startsWith("loop:")).map(e=>e.to)).size,ea=e=>{if("near"!==N)return;let t=function(e,t,l,n,a){var r,s;let i=t.filter(t=>t.from===e||t.to===e).sort((e,t)=>t.at.localeCompare(e.at)).slice(0,5).map(l=>"".concat(void 0!==a&&b(l,t,a)?"발사 \xb7 유령":D[l.kind]," ").concat(l.from===e?"→":"←"," ").concat((0,f.t)(n(l.from===e?l.to:l.from))));return{now:(null==l?void 0:l.now)?(0,f.t)(l.now):null,recent:i,running:null!=(r=null==l?void 0:l.running)?r:null,waiting:null!=(s=null==l?void 0:l.waiting)?s:null}}(e,l,e===k?{running:en,...null==c?void 0:c[e]}:null==c?void 0:c[e],el,i);return null===t.now&&null===t.running&&null===t.waiting&&0===t.recent.length?void 0:t},er=ee.map((e,t)=>ee.slice(0,t).reduce((e,t)=>e+Math.ceil(t.nodes.length/8),0)),es=ee.flatMap((e,t)=>{let{nodes:l}=e;return l.map((e,l)=>({id:et.get(e.id),type:"activity",position:{x:(er[t]+Math.floor(l/8))*220,y:l%8*138},data:{label:e.label,type:e.type,verdict:e.verdict,detail:ea(e.id)}}))});j.forEach((e,t)=>{let l=Y.find(t=>t.id===e.id);l&&es.push({id:et.get(l.id),type:"activity",position:{x:220*t,y:-170},data:{label:l.label,type:l.type,verdict:l.verdict,detail:ea(l.id)}})}),Y.filter(e=>"other"===e.type).forEach((e,t)=>es.push({id:et.get(e.id),type:"activity",position:{x:180*Math.floor(t/8),y:138*Math.max(...ee.map(e=>Math.min(e.nodes.length,8)),1)+40+t%8*138},data:{label:e.label,type:e.type,detail:ea(e.id)}}));let ei=l.filter(e=>et.has(e.from)&&et.has(e.to)).map((e,t)=>{var n;let a=T(e),r=i-(null!=(n=s[a])?n:0),o=r<1500,d=null!==H&&H.has(a),c=null!==H&&!d,u=X(e),m=b(e,l,i),p=q(e,m,i),f=m||A||!(r<2600)?null:{key:a,shape:U[e.kind],word:D[e.kind],roundTrip:function(e,t){let l="request"===e.kind?["report","decision"]:"report"===e.kind||"decision"===e.kind?["request"]:[];return l.length>0&&t.some(t=>l.includes(t.kind)&&t.ref===e.ref&&t.from===e.to&&t.to===e.from)}(e,l)};return{id:"edge-".concat(t),type:"packet",source:et.get(e.from),target:et.get(e.to),label:p,data:{edge:e,packet:f,hand:u},animated:!1,focusable:!0,interactionWidth:24,style:{stroke:m||"broken"===u?"#fca5a5":d||!c&&o?"#7dd3fc":"#7492a8",strokeWidth:d||!c&&o?4:2,opacity:c?.16:d||o?1:"shadow"===u?.35:.55,...m||"broken"===u?{strokeDasharray:"2 7"}:"shadow"===u?{strokeDasharray:"6 5"}:{},transition:"stroke 1.5s ease, stroke-width 1.5s ease, opacity 1.5s ease"},labelStyle:{fill:c?"#7492a8":m||"broken"===u?"#fecaca":d||o?"#e0f2fe":"#a8b7c7",fontSize:12,opacity:c?.4:1}}});return(0,n.jsxs)("section",{"aria-label":"루프 활동 지도",className:"min-w-0 space-y-3",children:[(0,n.jsx)("p",{className:"text-sm text-slate-300",children:"자리(큰 원) \xb7 루프(작은 원) \xb7 최근 60분 실제 사건. 노드나 간선을 누르면 Trace로 이동합니다."}),(0,n.jsx)("p",{className:"text-xs text-slate-400",children:"꾸러미 모양 \xb7 요청 ● 결정 ◆ 보고 ■ 넘김 ▲ 발사 ★ 판단 ⬟ \xb7 넘김 실선 = 실발사 \xb7 점선 = 그림자 \xb7 ✕ = 끊김 \xb7 유령 = 발사 뒤 10분간 같은 ref 런 간선 없음 \xb7 확대하면 노드 안 지금 일이 보입니다."}),null!==h&&(0,n.jsxs)("section",{"aria-label":"데모 여정",className:"rounded-xl border border-sky-500/50 bg-[#173556] p-3",children:[(0,n.jsxs)("h3",{className:"font-semibold",children:["여정 \xb7 ",(0,f.t)(h)]}),"ready"===o&&0===_.size&&(0,n.jsx)("p",{role:"status",className:"mt-1 text-sm text-slate-300",children:"아직 사건 없음 — 틱이 이 카드를 집으면 1단계부터 채워집니다"}),(0,n.jsx)("ol",{className:"mt-2 flex min-w-0 flex-wrap items-stretch gap-2 text-sm",children:z.map((e,t)=>(0,n.jsxs)("li",{"data-journey-state":e.state,className:"flex min-w-0 items-center gap-2 rounded-lg border px-3 py-2 ".concat(K[e.state]),children:[(0,n.jsx)("span",{"aria-hidden":"true",children:W.bq[e.state].mark}),(0,n.jsxs)("span",{className:"min-w-0 break-words",children:[t+1,". ",e.label," \xb7 ",W.bq[e.state].word]}),e.edge&&(0,n.jsx)("time",{className:"text-xs text-slate-300",dateTime:e.edge.at,children:new Date(e.edge.at).toLocaleTimeString("ko-KR",{timeZone:"Asia/Seoul"})})]},e.key))})]}),(0,n.jsxs)("div",{role:"group","aria-label":"데모 카드 선택",className:"flex flex-wrap items-center gap-2 text-sm",children:[(0,n.jsx)("span",{children:"카드 경로"}),G.map(e=>(0,n.jsx)("button",{type:"button","aria-pressed":$===e,onClick:()=>Q(e),className:"min-h-11 rounded-lg border border-slate-500 px-3 py-2 aria-pressed:border-sky-300 aria-pressed:bg-sky-800 focus-visible:outline-2 focus-visible:outline-sky-400",children:(0,f.t)(e)},e)),null!==$&&(0,n.jsx)("button",{type:"button",onClick:()=>Q(null),className:"min-h-11 rounded-lg border border-slate-500 px-3 py-2 focus-visible:outline-2 focus-visible:outline-sky-400",children:"전체 보기"})]}),null!==$&&(0,n.jsxs)("section",{"aria-label":"선택 카드 흐름",className:"rounded-xl border border-sky-500/50 bg-[#173556] p-3",children:[(0,n.jsxs)("h3",{className:"font-semibold",children:["요구 한 줄 → 회신 \xb7 카드 ",(0,f.t)($)]}),"ready"===o&&0===V.length&&(0,n.jsx)("p",{role:"status",children:"이 카드는 아직 흐른 사건이 없음"}),V.length>0&&(0,n.jsx)("ol",{className:"mt-2 space-y-2",children:V.map((e,t)=>{var l,a,r,s;return(0,n.jsxs)("li",{className:"break-words text-sm",children:[t+1,". ",(0,f.t)(null!=(r=null==(l=Y.find(t=>t.id===e.from))?void 0:l.label)?r:"출발")," → ",e.to.startsWith("surface:")?"회신 \xb7 ".concat((0,f.t)(e.to.slice(8))):(0,f.t)(null!=(s=null==(a=Y.find(t=>t.id===e.to))?void 0:a.label)?s:"도착")," \xb7 ",(0,n.jsx)("time",{dateTime:e.at,children:new Date(e.at).toLocaleTimeString("ko-KR",{timeZone:"Asia/Seoul"})})]},"".concat(T(e),"-").concat(t))})})]}),"error"===o&&(0,n.jsx)("p",{role:"alert",className:"text-red-300",children:"지도 원천을 읽지 못했습니다. 이전 지도가 보이면 현재 데이터가 아닙니다. 데몬 연결을 확인하세요."}),"loading"===o&&(0,n.jsx)("p",{role:"status",children:"지도를 읽는 중…"}),(0,n.jsx)("div",{className:"h-[440px] min-w-0 w-full overflow-hidden rounded-2xl border border-slate-600 bg-[#10243b]","aria-label":"자리와 루프 관계도",children:(0,n.jsxs)(u.Gc,{nodes:es,edges:ei,nodeTypes:Z,edgeTypes:L,fitView:!0,minZoom:.25,maxZoom:2.5,onInit:e=>w(e.getZoom()),onMove:(e,t)=>w(t.zoom),nodesDraggable:!1,nodesConnectable:!1,edgesReconnectable:!1,deleteKeyCode:null,onNodeClick:(e,t)=>{let l=Y.find(e=>et.get(e.id)===t.id);l&&window.location.assign(M(l.id))},onEdgeClick:(e,t)=>{var l;let n=null==(l=t.data)?void 0:l.edge;n&&window.location.assign(M(n.to,n))},children:[(0,n.jsx)(u.VS,{color:"#355470"}),(0,n.jsx)(u.H2,{showInteractive:!1})]},"loading"===o?"loading":"loaded")}),(0,n.jsx)("div",{"aria-label":"지도 목록",className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-4",children:ee.map(e=>{var t;return(0,n.jsxs)("section",{className:"min-w-0 rounded-xl border border-slate-600 p-3",children:[(0,n.jsx)("h3",{className:"mb-2 font-semibold",children:null!=(t=v[e.owner])?t:(0,f.t)(e.owner)}),(0,n.jsx)("ul",{className:"space-y-2",children:e.nodes.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>window.location.assign(M(e.id)),className:"flex w-full min-w-0 items-center gap-2 rounded-lg border border-slate-600 px-2 py-2 text-left text-sm focus-visible:outline-2 focus-visible:outline-sky-400",children:[(0,n.jsx)("span",{"aria-hidden":"true",className:"shrink-0 rounded-full border border-sky-400 bg-[#173556] ".concat("seat"===e.type?"h-8 w-8":"h-5 w-5")}),(0,n.jsx)("span",{className:"min-w-0 break-words",children:(0,f.t)(e.label)}),e.verdict&&(0,n.jsx)("span",{"data-loop-verdict":e.verdict,className:"ml-auto shrink-0 rounded-full px-2 py-0.5 text-xs ring-1 ".concat(F[e.verdict]),children:e.verdict})]})},e.id))})]},e.owner)})}),(0,n.jsx)("ul",{"aria-label":"최근 간선 사건",className:"space-y-2",children:l.map((e,t)=>{var a,r,o,d,c;return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>window.location.assign(M(e.to,e)),className:"block w-full min-w-0 break-words rounded-lg border border-slate-600 px-3 py-2 text-left text-sm focus-visible:outline-2 focus-visible:outline-sky-400 ".concat(null!==$?B.has(T(e))?"border-sky-300 bg-sky-500/30 text-sky-100":"bg-slate-800/30 text-slate-400 opacity-40":i-(null!=(o=s[T(e)])?o:0)<1500?"bg-sky-500/20 text-sky-100 transition-colors duration-[1500ms] motion-reduce:transition-none":"bg-slate-800/50 text-slate-300"),children:[(0,f.t)(null!=(d=null==(a=Y.find(t=>t.id===e.from))?void 0:a.label)?d:"출발")," → ",(0,f.t)(null!=(c=null==(r=Y.find(t=>t.id===e.to))?void 0:r.label)?c:"도착")," \xb7 ",q(e,b(e,l,i),i)," \xb7 ",(0,n.jsx)("time",{dateTime:e.at,children:new Date(e.at).toLocaleTimeString("ko-KR",{timeZone:"Asia/Seoul"})})]})},"edge-".concat(t))})}),"ready"===o&&0===l.length&&(0,n.jsx)("p",{role:"status",className:"text-slate-300",children:"최근 사건이 없습니다."})]})}var _=l(69370);let $=["loop.","task-agent","harness.queue","self-implement.pod"],J={setTimeout:(e,t)=>globalThis.setTimeout(e,t),clearTimeout:e=>globalThis.clearTimeout(e),setInterval:(e,t)=>globalThis.setInterval(e,t),clearInterval:e=>globalThis.clearInterval(e)},G=(0,d.g)(null,null);function V(e){let{view:t,runsUnreadable:l,refreshedAt:a}=e;return(0,n.jsxs)("section",{"aria-label":"루프 에이전트 활동",className:"min-w-0 space-y-6 p-4 text-lg min-[1440px]:text-[22px]",children:[(0,n.jsx)("div",{className:"grid grid-cols-2 gap-3 min-[1440px]:grid-cols-4",children:t.seats.map(e=>(0,n.jsxs)("article",{"aria-label":"".concat(e.seat," 자리"),className:"min-w-0 space-y-3 rounded-2xl border border-border bg-card p-3 min-[1440px]:p-6",children:[(0,n.jsx)("h2",{className:"font-bold",children:e.seat}),(0,n.jsx)("p",{className:"break-words","aria-label":"지금 하는 일",children:e.now}),(0,n.jsxs)("dl",{className:"space-y-1 text-base min-[1440px]:text-[22px]",children:[(0,n.jsxs)("div",{className:"flex flex-wrap justify-between gap-x-2",children:[(0,n.jsx)("dt",{children:"오늘 착지"}),(0,n.jsx)("dd",{children:e.landedToday})]}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-between gap-x-2",children:[(0,n.jsx)("dt",{children:"막힘"}),(0,n.jsx)("dd",{children:e.blocked})]}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-between gap-x-2",children:[(0,n.jsx)("dt",{children:"대표 결정 대기"}),(0,n.jsx)("dd",{children:e.decisionsWaiting})]})]})]},e.seat))}),(0,n.jsxs)("section",{"aria-label":"지금 도는 런",className:"min-w-0 rounded-2xl border border-border bg-card p-4",children:[(0,n.jsx)("h2",{className:"font-semibold",children:"지금 도는 런"}),l?(0,n.jsx)("p",{className:"text-muted-foreground",children:"못 읽음"}):0===t.runs.length?(0,n.jsx)("p",{className:"text-muted-foreground",children:"지금 도는 런이 없습니다"}):(0,n.jsx)("ul",{className:"mt-3 flex flex-wrap gap-3",children:t.runs.map((e,t)=>(0,n.jsxs)("li",{className:"min-w-0 break-words rounded-lg border border-border px-3 py-2",children:["런 ",e.id6," \xb7 ",e.stage," \xb7 경과 ","못 읽음"===e.elapsedSec?e.elapsedSec:"".concat(e.elapsedSec,"초")]},"".concat(e.id6,"-").concat(t)))})]}),(0,n.jsxs)("p",{className:"text-sm text-muted-foreground",children:["마지막 갱신 ",(0,n.jsx)("time",{dateTime:null!=a?a:void 0,children:a?new Date(a).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"}):"못 읽음"})]})]})}function B(){var e,t,l,u,m,b,v,g;let{initialMode:x="activity"}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:y,config:j}=(0,s.Q)(),[M,C]=(0,a.useState)(null),R=S((0,r.useSearchParams)()),[E,O]=(0,a.useState)(null!==R?"map":x),[I,D]=(0,a.useState)(null),[U,W]=(0,a.useState)(0),F="".concat(j.baseUrl,"\0").concat(j.token),P="".concat(F,"\0").concat(E,"\0").concat(null!=R?R:""),Z=(null==M?void 0:M.source)===F?M:null,L=null!=(t=null==Z||null==(e=Z.seats)?void 0:e.seats.flatMap(e=>{var t,l;return null!=(l=null==(t=e.subSeats)?void 0:t.map(e=>e.id))?l:[]}))?t:[];(0,a.useEffect)(()=>{let e=!0,t=!1,l=(0,o.xX)({baseUrl:j.baseUrl,token:j.token});C({source:F,seats:null,runs:null,runsUnreadable:!0,refreshedAt:null});let n=async()=>{var n;if(!e||t||document.hidden)return;t=!0;let a=new Intl.DateTimeFormat("sv-SE",{timeZone:"Asia/Seoul"}).format(new Date),[r,s]=await Promise.allSettled([(0,i.Nn)(y,a),l.getHarnessRuns()]);if(t=!1,!e)return;let o="fulfilled"===r.status&&"ready"===r.value.kind?r.value.data:null,d="fulfilled"===s.status&&Array.isArray(null==(n=s.value)?void 0:n.entries)?s.value:null;C({source:F,seats:o,runs:d,runsUnreadable:null===d,refreshedAt:o||d?new Date().toISOString():null})};n();let a=window.setInterval(()=>{n()},1e4),r=()=>{document.hidden||n()};return document.addEventListener("visibilitychange",r),()=>{e=!1,window.clearInterval(a),document.removeEventListener("visibilitychange",r)}},[y,j.baseUrl,j.token,F]),(0,a.useEffect)(()=>{if("map"!==E)return;let e=!0,t=!1,l=!1;D(null),W(Date.now());let n=async()=>{if(!e||document.hidden)return;if(t){l=!0;return}t=!0,l=!1;let a=Date.now();try{let[t,l,n]=await Promise.all([(0,c.Em)(e=>y.fetchJson(e),a),y.fetchJson("/v1/schedules?includeOff=1&includeOwners=1"),y.fetchJson(N(R)?"/v1/loops/edges?ref=".concat(encodeURIComponent(R),"&mode=live&limit=500"):"/v1/loops/edges?since=".concat(encodeURIComponent(new Date(a-36e5).toISOString()),"&limit=200"))]),r=l.owners;if(!Array.isArray(r))throw Error("루프 주인 조회 실패");let s=null===R?A(n,a,!0):A(n,a,!1);e&&D(e=>{var l;return{source:P,rows:function(e,t,l){let n=new Map(t.flatMap(e=>e.jobs.map(t=>[t,e.owner]))),a=new Map(t.map(e=>[e.id,e.owner])),r=e.map(e=>{var t;return{...e,owner:null!=(t=e.id.startsWith("schedule:")?n.get(e.id.slice(9)):a.get(e.id.slice(5)))?t:"미지정"}});for(let e of t){var s,i,o,d,c,u,m;if(r.some(t=>t.id==="loop:".concat(e.id)))continue;let t=(0,p.u)({enabled:e.enabled,lastRunAt:null!=(d=null==(s=e.lastRun)?void 0:s.at)?d:null,lastStatus:null!=(c=null==(i=e.lastRun)?void 0:i.status.toLowerCase())?c:null,intervalMs:null},l);r.push({id:"loop:".concat(e.id),name:(0,f.t)(e.title),layer:"그래프",owner:null!=(u=e.owner)?u:"미지정",mode:"등록",lastRun:null!=(m=null==(o=e.lastRun)?void 0:o.at)?m:null,verdict:"alive"!==t||e.lastRun?h[t]:"판정 불가"})}return r}(t,r,a),edges:s,seenAt:(l=(null==e?void 0:e.source)===P?e.seenAt:null,Object.fromEntries(s.map(e=>{var t;let n=T(e);return[n,null!=(t=null==l?void 0:l[n])?t:null===l?a-1500:a]}))),state:"ready"}})}catch(t){e&&D(e=>({source:P,rows:(null==e?void 0:e.source)===P?e.rows:[],edges:(null==e?void 0:e.source)===P?e.edges:[],seenAt:(null==e?void 0:e.source)===P?e.seenAt:{},state:"error"}))}finally{t=!1,l&&e&&n()}};n();let a=function(e,t){var l,n,a,r,s;let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=null!=(l=i.timers)?l:J,d=null!=(n=i.debounceMs)?n:800,c=null!=(a=i.pollMs)?a:5e3,u=!1,m=null,p=null,f=o.setInterval(()=>{u||null!==p||t()},null!=(r=i.safetyMs)?r:3e4),h=()=>{var e;u||null!==p||(p=o.setInterval(()=>{u||t()},c),null==(e=i.onMode)||e.call(i,"poll"))},b=e.logsStreamUrl({category:$.join(",")}),v=()=>{};if(null===b)h();else{let e=!1;v=(0,_.BX)(b,{events:{log:()=>{if(!u){var e;null!==p&&(o.clearInterval(p),p=null,null==(e=i.onMode)||e.call(i,"stream")),null!==m&&o.clearTimeout(m),m=o.setTimeout(()=>{m=null,u||t()},d)}}},onError:h,onConstructError:()=>{e=!0}}),e?h():null==(s=i.onMode)||s.call(i,"stream")}return()=>{u||(u=!0,null!==m&&o.clearTimeout(m),null!==p&&o.clearInterval(p),o.clearInterval(f),m=null,p=null,v())}}(y,()=>{n()}),r=window.setInterval(()=>{document.hidden||W(Date.now())},250),s=()=>{document.hidden||n()};return document.addEventListener("visibilitychange",s),()=>{e=!1,a(),window.clearInterval(r),document.removeEventListener("visibilitychange",s)}},[y,E,P,R]);let K=(null==I?void 0:I.source)===P?I:null;return(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsxs)("div",{role:"group","aria-label":"루프 에이전트 보기",className:"flex gap-2 px-4 pt-4",children:[(0,n.jsx)("button",{type:"button","aria-pressed":"activity"===E,onClick:()=>O("activity"),className:"min-h-11 rounded-lg border border-slate-500 px-4 py-2 aria-pressed:bg-sky-800",children:"현황"}),(0,n.jsx)("button",{type:"button","aria-pressed":"map"===E,onClick:()=>O("map"),className:"min-h-11 rounded-lg border border-slate-500 px-4 py-2 aria-pressed:bg-sky-800",children:"지도"})]}),"activity"===E?(0,n.jsx)(V,{view:Z?(0,d.g)(Z.seats,Z.runs):G,runsUnreadable:null==(l=null==Z?void 0:Z.runsUnreadable)||l,refreshedAt:null!=(u=null==Z?void 0:Z.refreshedAt)?u:null}):(0,n.jsx)("div",{className:"min-w-0 p-4",children:(0,n.jsx)(z,{rows:null!=(m=null==K?void 0:K.rows)?m:[],edges:null!=(b=null==K?void 0:K.edges)?b:[],seatIds:["OP","MK","TC","UX",...L],details:Z?function(e,t){let l={COO:"OP",CMO:"MK",CTO:"TC",CXO:"UX"},n=t?"못 읽음":e.runs.length,a={[w]:{running:n},[k]:{running:n}};for(let t of e.seats)a[l[t.seat]]={now:t.now,waiting:t.decisionsWaiting};return a}((0,d.g)(Z.seats,Z.runs),Z.runsUnreadable):void 0,seenAt:null!=(v=null==K?void 0:K.seenAt)?v:{},now:U,state:null!=(g=null==K?void 0:K.state)?g:"loading"})})]})}},81969:(e,t,l)=>{l.d(t,{t:()=>u});let n=/\brun-([0-9a-f]{8})-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,a=/(?:\/(?:Users|home|private)\/[\w.%@+~/-]+|\b[A-Za-z]:\\(?:[^\\\s,;<>"']+\\)*[^\\\s,;<>"']+)/g,r=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,s=RegExp("(?<![A-Za-z0-9_-])(?:[A-Za-z0-9_]{40,}|(?:sk|ghp|gho|ghs|github_pat|xox[abpr])[-_][A-Za-z0-9_-]{20,})(?![A-Za-z0-9_-])","g"),i=/\b(?:OP|MK|TC|UX)\b/g,o=/\bmsb(\d+)\b/gi,d=/(?:\u{1F451}|🪑|🅞|🅜|🅣|🅤|🅢|🅕)\uFE0F?/gu,c={OP:"COO",MK:"CMO",TC:"CTO",UX:"CXO"};function u(e){let t,l=e;do t=l,l=l.replace(n,(e,t)=>"run-".concat(t.slice(0,6))).replace(a,"").replace(r,"").replace(d,"").replace(s,"").replace(i,e=>c[e]).replace(o,(e,t)=>"remote-".concat(t));while(l!==t&&function(e){return[n,a,r,s,i,d,o].flatMap(t=>[...e.matchAll(t)].map(e=>e[0]))}(l).length>0);return l}}}]);
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2489],{29325:(e,t,l)=>{l.d(t,{u:()=>n});function n(e,t){if(!e.enabled||"off"===e.scheduleState)return"off";if("failed"===e.lastStatus||"error"===e.lastStatus||"failure"===e.lastStatus||"abandoned"===e.lastStatus||"expired"===e.lastStatus)return"failed";if("stale"===e.scheduleState)return"late";let l=null===e.lastRunAt?NaN:Date.parse(e.lastRunAt);if(void 0!==e.secondDueAt){let n=null===e.secondDueAt?NaN:Date.parse(e.secondDueAt);return Number.isFinite(l)&&Number.isFinite(t)&&Number.isFinite(n)&&n>l&&t>n?"late":"alive"}return Number.isFinite(t)&&Number.isFinite(l)&&null!==e.intervalMs&&Number.isFinite(e.intervalMs)&&e.intervalMs>0&&t-l>2*e.intervalMs?"late":"alive"}},40385:(e,t,l)=>{l.d(t,{g:()=>i,q:()=>s});var n=l(81969);let a=[{id:"OP",seat:"COO"},{id:"MK",seat:"CMO"},{id:"TC",seat:"CTO"},{id:"UX",seat:"CXO"}];function r(e){return(0,n.t)(e.replace(/\s+/g," ")).trim()}function s(e){var t;let l=e.split("\n"),n=(e,t)=>{let l=e.trim();return t&&(l=(l=l.replace(/^\*\*\[[^\]]+\]\*\*\s*/,"")).replace(/^(?:📌\S*\s*)?\d{4}-\d{2}-\d{2}\s+\d{1,2}:\d{2}\s*KST\s*/,"")),r(l=(l=(l=(l=(l=(l=l.replace(/^→\s*(?:[A-Z]{1,4}|전원|전체)(?=\s|·|$)(?:\s*·\s*(?:[A-Z]{1,4}|전원|전체)(?=\s|·|$))*\s*(?:·)?\s*/u,"")).replace(/^—\s*/,"")).replace(/^[-*]\s+/,"").replace(/\*\*|`|__/g,"").replace(/^#+\s*/,"").trim()).replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,"")).replace(RegExp("^(?:\\p{Extended_Pictographic}\\uFE0F?)+\\s*","u"),"")).replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,""))},a=n(null!=(t=l[0])?t:"",!0);if(a)return a;let s=l.slice(1).find(e=>e.trim());return s?n(s,!1):""}function i(e,t){var l;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now();return{seats:a.map(t=>{var l;let{id:n,seat:a}=t,r=null==e?void 0:e.seats.find(e=>e.seat===n);return{seat:a,now:(null==r?void 0:r.now)&&Array.from(s(r.now.text)).slice(0,40).join("")||"못 읽음",landedToday:(null==r?void 0:r.landed)==null?"못 읽음":r.landed.length,blocked:(null==r?void 0:r.blocked)==null?"못 읽음":r.blocked.length,decisionsWaiting:null!=(l=null==r?void 0:r.pendingDecisions)?l:"못 읽음"}}),runs:(null!=(l=null==t?void 0:t.entries)?l:[]).filter(e=>"running"===e.status).sort((e,t)=>{var l,n;return(Date.parse(null!=(l=t.lastActivityTimestamp)?l:"")||0)-(Date.parse(null!=(n=e.lastActivityTimestamp)?n:"")||0)}).slice(0,6).map(e=>{var t;let l=Date.parse(null!=(t=e.lastActivityTimestamp)?t:"");return{id6:function(e){let t=e.replace(/^run-/i,"");return/^[a-z0-9]{6}/i.test(t)&&r(t.slice(0,6))||"못 읽음"}(e.runId),stage:r(e.lastPhase||e.status)||"못 읽음",elapsedSec:Number.isFinite(l)?Math.max(0,Math.floor((n-l)/1e3)):"못 읽음"}})}}},42006:(e,t,l)=>{l.d(t,{QK:()=>s,i6:()=>r,Pz:()=>o,Em:()=>i,Yy:()=>d});var n=l(29325);let a={alive:"살아 있음",late:"늦음",failed:"실패",off:"꺼짐"},r="/v1/schedules?includeOff=1",s="/v1/dashboard/loops";async function i(e,t){var l,i,o,u,c,m,p,f;let[h,b]=await Promise.allSettled([e(r),e(s)]),v="fulfilled"===h.status?null==(l=h.value)?void 0:l.schedules:null,g="fulfilled"===b.status?null==(o=b.value)||null==(i=o.loops)?void 0:i.loops:null;if(!Array.isArray(v)&&!Array.isArray(g))throw Error("loop registries unavailable");if(!Array.isArray(v))throw Error("스케줄 레지스트리 조회 실패");if(!Array.isArray(g))throw Error("루프 레지스트리 조회 실패");let x=d(v,t).map(e=>({...e,id:"schedule:".concat(e.id)}));for(let e of g){let l=e.last?Date.parse(e.last.at):NaN,r=(0,n.u)({enabled:!1!==e.armed,lastRunAt:null!=(m=null==(u=e.last)?void 0:u.at)?m:null,lastStatus:null!=(p=null==(c=e.last)?void 0:c.status.toLowerCase())?p:null,intervalMs:null},t);x.push({id:"loop:".concat(e.name),name:e.label,layer:null!=(f=e.category)?f:"루프",owner:"미지정",mode:null===e.armed?"관측":e.armed?"armed":"off",lastRun:Number.isFinite(l)?e.last.at:null,verdict:"alive"===r?"판정 불가":a[r]})}return x}function o(e,t){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now,n=0,a=!0;return{async refresh(){let r=++n;try{let s=await i(e,l());a&&r===n&&t({rows:s,state:"ready"})}catch(e){a&&r===n&&t({rows:[],state:"error"})}},dispose(){a=!1}}}function d(e,t){return e.map(e=>{var l,r,s,i,o,d,u;let c=e.lastRun?Date.parse(e.lastRun.at):NaN,m=(0,n.u)({enabled:"off"!==e.state,lastRunAt:null!=(d=null==(l=e.lastRun)?void 0:l.at)?d:null,lastStatus:(null==(r=e.lastRun)?void 0:r.exit)!=null&&0!==e.lastRun.exit?"failed":(null==(s=e.lastRun)?void 0:s.status)==null||["ok","success","completed"].includes(e.lastRun.status.toLowerCase())?null!=(u=null==(o=e.lastRun)||null==(i=o.status)?void 0:i.toLowerCase())?u:null:"failed",intervalMs:e.cron?null:e.intervalMs,...e.cron?{scheduleState:e.state}:{}},t),p=!e.cron&&!(e.intervalMs&&e.intervalMs>0),f="alive"===m&&(!Number.isFinite(c)||p)?"판정 불가":a[m];return{id:e.id,name:e.name,layer:e.domain||e.category||e.source,owner:"미지정",mode:e.runVia||e.source,lastRun:Number.isFinite(c)?e.lastRun.at:null,verdict:f}})}},42489:(e,t,l)=>{l.d(t,{p1:()=>B});var n=l(55539),a=l(46124),r=l(58603),s=l(15151),i=l(43537),o=l(79247),d=l(40385),u=l(42006),c=l(88928),m=l(69280);l(71588);var p=l(29325),f=l(81969);let h={alive:"살아 있음",late:"늦음",failed:"실패",off:"꺼짐"};function b(e,t,l){if("launch"!==e.kind||"string"==typeof e.run&&""!==e.run)return!1;let n=Date.parse(e.at);return Number.isFinite(n)&&l-n>=6e5&&!t.some(t=>"run"===t.kind&&t.ref===e.ref)}let v={OP:"COO",MK:"CMO",TC:"CTO",UX:"CXO"},g=["OP","MK","TC","UX"],x=new Set(["request","decision","report","card","run","hand","launch","move"]),y=/^[a-zA-Z0-9_-]{1,128}$/,w="agent:task-agent",k="hub:runs",j=[{id:"loop:orchestrator",label:"조율"},{id:w,label:"TASK-AGENT"},{id:k,label:"런 묶음"},{id:"loop:release-loop",label:"발행 루프"},{id:"loop:guardian",label:"수호자"}];function N(e){return"string"==typeof e&&y.test(e)}function S(e){var t,l;let n=null!=(t=null==e?void 0:e.get("journey"))?t:null;if(N(n))return n;let a=null!=(l=null==e?void 0:e.get("demo"))?l:null;return N(a)&&"0"!==a&&"1"!==a?a:null}function A(e,t,l){let n=e&&"object"==typeof e&&"edges"in e?e.edges:null;if(!Array.isArray(n))throw Error("간선 조회 실패");return n.filter(e=>{if(!e||"object"!=typeof e||!x.has(e.kind)||"string"!=typeof e.at||"string"!=typeof e.from||"string"!=typeof e.to||"string"!=typeof e.ref)return!1;let n=Date.parse(e.at);return Number.isFinite(n)&&n<=t&&(!l||n>=t-36e5)})}function M(e,t){if(t&&("hand"===t.kind||"launch"===t.kind||"move"===t.kind)&&y.test(t.ref))return"/trace?q=".concat(encodeURIComponent(t.ref));if(e.startsWith("pr:")&&/^\d{1,9}$/.test(e.slice(3))&&!t)return"/trace?q=".concat(encodeURIComponent(e.slice(3)));let l=(null==t?void 0:t.kind)==="run"?t.ref:e;if((null==t?void 0:t.kind)==="card"&&y.test(t.ref))return"/trace?q=".concat(encodeURIComponent(t.ref));if(l.startsWith("loop:")&&y.test(l.slice(5))){let e=l.slice(5);return e.startsWith("run-")?"/trace?level=L2&run=".concat(encodeURIComponent(e)):"/trace?q=".concat(encodeURIComponent(e))}return l.startsWith("schedule:")&&y.test(l.slice(9))?"/trace?q=".concat(encodeURIComponent(l.slice(9))):l.startsWith("card:")&&y.test(l.slice(5))?"/trace?q=".concat(encodeURIComponent(l.slice(5))):(null==t?void 0:t.kind)==="run"&&y.test(l)?"/trace?level=L2&run=".concat(encodeURIComponent(l)):"/trace"}function C(e,t){let l=e=>e.startsWith("surface:")?0:e.startsWith("card:")?1:e.startsWith("loop:")?2:3;return e.filter(e=>"card"===e.kind&&e.ref===t).sort((e,t)=>e.at.localeCompare(t.at)||l(e.from)-l(t.from))}function T(e){return JSON.stringify([e.at,e.kind,e.from,e.to,e.ref])}let R=[{key:"tick",label:"틱 \xb7 넘김"},{key:"agent",label:"TASK-AGENT \xb7 발사"},{key:"run",label:"런"},{key:"pr",label:"PR"},{key:"land",label:"착지 \xb7 green 제안"}];function E(e,t){let l=new Set([t]);for(let n of e)"hand"===n.kind&&void 0!==n.cell&&(n.cell===t||n.cell.startsWith("".concat(t,"-")))&&l.add(n.ref);return l}function O(e,t){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Set([t]),n=e.ref===t||l.has(e.ref);return"hand"===e.kind?n&&"shadow"!==e.mode?"tick":null:"launch"===e.kind?n?"agent":null:"move"===e.kind?n&&"green-proposal"===e.move?"land":null:"run"===e.kind?e.to.startsWith("pr:")?"pr":e.to.startsWith("loop:")?"run":null:"card"===e.kind&&e.to.startsWith("landed:")?"land":null}function I(e,t){let l=E(e,t),n=e=>R.findIndex(n=>n.key===O(e,t,l));return[...C(e,t),...e.filter(e=>"card"!==e.kind||e.ref!==t).filter(e=>null!==O(e,t,l))].sort((e,t)=>e.at.localeCompare(t.at)||n(e)-n(t))}let D={request:"요청",decision:"결정",report:"보고",card:"카드",run:"런",hand:"넘김",launch:"발사",move:"판단"},U={request:"●",decision:"◆",report:"■",hand:"▲",launch:"★",move:"⬟",card:"◇",run:"▶"};var W=l(18993);let F={"살아 있음":"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30",늦음:"bg-red-500/15 text-red-300 ring-red-500/30",실패:"bg-red-500/15 text-red-300 ring-red-500/30",꺼짐:"bg-slate-700 text-slate-300 ring-slate-500","판정 불가":"bg-slate-700 text-slate-300 ring-slate-500"};function P(e){let{detail:t}=e;return(0,n.jsxs)("div",{"data-near-detail":"",className:"w-[180px] space-y-1 rounded-lg border border-slate-600 bg-[#10243b]/95 p-2 text-left text-[10px] font-normal text-slate-200",children:[null!==t.now&&(0,n.jsxs)("p",{className:"break-words",children:[(0,n.jsx)("span",{className:"text-slate-400",children:"지금 "}),t.now]}),(null!==t.running||null!==t.waiting)&&(0,n.jsxs)("p",{className:"flex gap-2",children:[null!==t.running&&(0,n.jsxs)("span",{children:["도는 런 ",t.running]}),null!==t.waiting&&(0,n.jsxs)("span",{children:["대기 ",t.waiting]})]}),t.recent.length>0?(0,n.jsx)("ol",{"aria-label":"최근 행동",className:"space-y-0.5",children:t.recent.map((e,t)=>(0,n.jsx)("li",{className:"break-words",children:e},t))}):(0,n.jsx)("p",{className:"text-slate-400",children:"최근 행동 없음"})]})}let Z={activity:function(e){let{data:t}=e,l="seat"===t.type||"hub"===t.type;return(0,n.jsxs)("div",{className:"relative flex flex-col items-center gap-1 text-center text-white",children:[(0,n.jsx)(c.h7,{type:"target",position:m.yX.Left,className:"!border-sky-400 !bg-sky-400"}),(0,n.jsx)("div",{className:"flex items-center justify-center rounded-full border-2 border-sky-400 bg-[#173556] px-2 font-bold ".concat(l?"h-[90px] w-[90px] text-lg":"h-[64px] w-[64px] text-xs"),children:(0,n.jsx)("span",{className:"line-clamp-2 break-all",children:(0,f.t)(t.label)})}),t.verdict&&(0,n.jsx)("span",{"data-loop-verdict":t.verdict,className:"rounded-full px-2 py-0.5 text-xs font-semibold ring-1 ".concat(F[t.verdict]),children:t.verdict}),t.detail&&(0,n.jsx)(P,{detail:t.detail}),(0,n.jsx)(c.h7,{type:"source",position:m.yX.Right,className:"!border-sky-400 !bg-sky-400"})]})}},L={packet:function(e){var t,l;let{id:r,sourceX:s,sourceY:i,targetX:o,targetY:d,sourcePosition:u,targetPosition:p,style:f,markerEnd:h,label:b,labelStyle:v,interactionWidth:g,data:x}=e,[y,w,k]=(0,m.Fp)({sourceX:s,sourceY:i,targetX:o,targetY:d,sourcePosition:u,targetPosition:p}),j=(0,a.useRef)(null),N=(0,a.useRef)(null),S=null!=(t=null==x?void 0:x.packet)?t:null,A=null!=(l=null==S?void 0:S.key)?l:null;return(0,a.useEffect)(()=>{if(null!==A)try{var e,t,l,n;null==(t=j.current)||null==(e=t.beginElement)||e.call(t),null==(n=N.current)||null==(l=n.beginElement)||l.call(n)}catch(e){}},[A]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(c.tE,{id:r,path:y,style:f,markerEnd:h,label:b,labelX:w,labelY:k,labelStyle:v,interactionWidth:g}),S&&(0,n.jsxs)("g",{"data-packet":S.word,"aria-hidden":"true",opacity:0,children:[(0,n.jsx)("text",{textAnchor:"middle",dominantBaseline:"central",fontSize:16,fill:"#e0f2fe",stroke:"#10243b",strokeWidth:.6,children:S.shape}),(0,n.jsx)("animateMotion",{ref:j,begin:"indefinite",dur:"".concat(S.roundTrip?2400:1200,"ms"),path:y,fill:"freeze",...S.roundTrip?{keyPoints:"0;1;0",keyTimes:"0;0.5;1",calcMode:"linear"}:{}}),(0,n.jsx)("animate",{ref:N,attributeName:"opacity",begin:"indefinite",dur:"".concat(S.roundTrip?2400:1200,"ms"),values:"1;1;0",keyTimes:"0;0.85;1",fill:"freeze"})]})]})}},z={done:"border-emerald-500/60 bg-emerald-500/15",failed:"border-red-500/60 bg-red-500/15",current:"border-sky-300 bg-sky-500/20",pending:"border-dashed border-slate-500 bg-slate-800/40"};function K(e){return"hand"===e.kind?e.broken?"broken":"shadow"===e.mode?"shadow":"live":null}function X(e,t,l){if(t)return"".concat(D.launch," \xb7 유령 \xb7 런 원장 없음 ").concat(Math.floor((l-Date.parse(e.at))/6e4),"분");let n=K(e);return"broken"===n?"".concat(D.hand," \xb7 끊김 ✕"):"shadow"===n?"".concat(D.hand," \xb7 그림자"):D[e.kind]}function q(e){let{rows:t,edges:l,seenAt:s,now:i,state:o,seatIds:d,details:u}=e,m=(0,r.useSearchParams)(),p=m.get("card"),h=S(m),[x,w]=(0,a.useState)(1),N=x<.8?"far":"near",[A,P]=(0,a.useState)(!1);(0,a.useEffect)(()=>{var e;if(P(function(){try{return"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}catch(e){return!1}}()),"function"!=typeof window.matchMedia)return;let t=window.matchMedia("(prefers-reduced-motion: reduce)"),l=()=>P(t.matches);return null==(e=t.addEventListener)||e.call(t,"change",l),()=>{var e;return null==(e=t.removeEventListener)?void 0:e.call(t,"change",l)}},[]);let q=(0,a.useMemo)(()=>null===h?[]:function(e,t){let l=I(e,t),n=E(e,t),a=0===l.length,r=R.reduce((e,a,r)=>l.some(e=>O(e,t,n)===a.key&&!e.broken)?r:e,-1);return R.map((e,s)=>{let i=l.filter(l=>O(l,t,n)===e.key),o=i.find(e=>!e.broken);return o?{key:e.key,label:e.label,state:"done",edge:o}:0===i.length&&s<r?{key:e.key,label:e.label,state:"done"}:i.length>0?(a=!0,{key:e.key,label:e.label,state:"failed",edge:i[0]}):a?{key:e.key,label:e.label,state:"pending"}:(a=!0,{key:e.key,label:e.label,state:"current"})})}(l,h),[l,h]),_=(0,a.useMemo)(()=>new Set(null===h?[]:I(l,h).map(T)),[l,h]),[$,J]=(0,a.useState)(p);(0,a.useEffect)(()=>{J(p)},[p]);let G=(0,a.useMemo)(()=>[...new Set(l.filter(e=>"card"===e.kind).map(e=>e.ref))].sort(),[l]),V=(0,a.useMemo)(()=>null===$?[]:C(l,$),[l,$]),B=new Set(V.map(T)),H=null!==$?B:null!==h?_:null,Q=e=>{J(e);let t=new URL(window.location.href);null===e?t.searchParams.delete("card"):t.searchParams.set("card",e),window.history.replaceState(window.history.state,"",t.toString())},Y=(0,a.useMemo)(()=>(function(e,t){var l,n;let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:g,r=new Map;for(let e of a)r.set(e,{id:e,type:"seat",label:null!=(l=v[e])?l:(0,f.t)(e)});for(let e of j)r.set(e.id,{id:e.id,type:"hub",label:e.label});let s=new Set(a),i=new Set;for(let t of e){let e=s.has(t.owner)?t.owner:"미지정",l=t.id,n=(0,f.t)(t.name),a=i.has(n)?"".concat(n," \xb7 ").concat((0,f.t)(t.id)):n;i.add(n);let o=r.get(l);r.set(l,(null==o?void 0:o.type)==="hub"?{...o,owner:e,verdict:t.verdict}:{id:l,type:"loop",label:a,owner:e,verdict:t.verdict})}for(let e of t)for(let t of[e.from,e.to]){if(r.has(t))continue;let[e,l]=t.split(":",2);"loop"===e&&l&&y.test(l)?r.set(t,{id:t,type:"other",label:l.startsWith("run-")?"런 \xb7 ".concat((0,f.t)(l)):"칸 \xb7 ".concat((0,f.t)(l))}):"card"===e||"surface"===e?r.set(t,{id:t,type:"other",label:"card"===e?"카드":"입구 \xb7 ".concat((0,f.t)(null!=l?l:""))}):"agent"===e&&l&&y.test(l)?r.set(t,{id:t,type:"other",label:"에이전트 \xb7 ".concat((0,f.t)(l))}):"pr"===e&&l&&/^\d{1,9}$/.test(l)?r.set(t,{id:t,type:"other",label:"PR #".concat(l)}):("release"===e||"landed"===e)&&l&&y.test(l)?r.set(t,{id:t,type:"other",label:"".concat("release"===e?"발행":"착지"," \xb7 ").concat((0,f.t)(l))}):s.has(t)&&r.set(t,{id:t,type:"seat",label:null!=(n=v[t])?n:(0,f.t)(t)})}return[...r.values()]})(t,l,d),[t,l,d]),ee=(0,a.useMemo)(()=>{let e=Y.filter(e=>"seat"===e.type);return[...e.map(e=>e.id),"미지정"].map((t,l)=>({owner:t,column:l,nodes:[..."미지정"===t?[]:e.filter(e=>e.id===t),...Y.filter(e=>"loop"===e.type&&e.owner===t)]})).filter(e=>e.nodes.length>0)},[Y]),et=new Map(Y.map((e,t)=>[e.id,"node-".concat(t)])),el=e=>{var t,l;return null!=(l=null==(t=Y.find(t=>t.id===e))?void 0:t.label)?l:"알 수 없음"},en=new Set(l.filter(e=>"run"===e.kind&&e.to.startsWith("loop:")).map(e=>e.to)).size,ea=e=>{if("near"!==N)return;let t=function(e,t,l,n,a){var r,s;let i=t.filter(t=>t.from===e||t.to===e).sort((e,t)=>t.at.localeCompare(e.at)).slice(0,5).map(l=>"".concat(void 0!==a&&b(l,t,a)?"발사 \xb7 유령":D[l.kind]," ").concat(l.from===e?"→":"←"," ").concat((0,f.t)(n(l.from===e?l.to:l.from))));return{now:(null==l?void 0:l.now)?(0,f.t)(l.now):null,recent:i,running:null!=(r=null==l?void 0:l.running)?r:null,waiting:null!=(s=null==l?void 0:l.waiting)?s:null}}(e,l,e===k?{running:en,...null==u?void 0:u[e]}:null==u?void 0:u[e],el,i);return null===t.now&&null===t.running&&null===t.waiting&&0===t.recent.length?void 0:t},er=ee.map((e,t)=>ee.slice(0,t).reduce((e,t)=>e+Math.ceil(t.nodes.length/8),0)),es=ee.flatMap((e,t)=>{let{nodes:l}=e;return l.map((e,l)=>({id:et.get(e.id),type:"activity",position:{x:(er[t]+Math.floor(l/8))*220,y:l%8*138},data:{label:e.label,type:e.type,verdict:e.verdict,detail:ea(e.id)}}))});j.forEach((e,t)=>{let l=Y.find(t=>t.id===e.id);l&&es.push({id:et.get(l.id),type:"activity",position:{x:220*t,y:-170},data:{label:l.label,type:l.type,verdict:l.verdict,detail:ea(l.id)}})}),Y.filter(e=>"other"===e.type).forEach((e,t)=>es.push({id:et.get(e.id),type:"activity",position:{x:180*Math.floor(t/8),y:138*Math.max(...ee.map(e=>Math.min(e.nodes.length,8)),1)+40+t%8*138},data:{label:e.label,type:e.type,detail:ea(e.id)}}));let ei=l.filter(e=>et.has(e.from)&&et.has(e.to)).map((e,t)=>{var n;let a=T(e),r=i-(null!=(n=s[a])?n:0),o=r<1500,d=null!==H&&H.has(a),u=null!==H&&!d,c=K(e),m=b(e,l,i),p=X(e,m,i),f=m||A||!(r<2600)?null:{key:a,shape:U[e.kind],word:D[e.kind],roundTrip:function(e,t){let l="request"===e.kind?["report","decision"]:"report"===e.kind||"decision"===e.kind?["request"]:[];return l.length>0&&t.some(t=>l.includes(t.kind)&&t.ref===e.ref&&t.from===e.to&&t.to===e.from)}(e,l)};return{id:"edge-".concat(t),type:"packet",source:et.get(e.from),target:et.get(e.to),label:p,data:{edge:e,packet:f,hand:c},animated:!1,focusable:!0,interactionWidth:24,style:{stroke:m||"broken"===c?"#fca5a5":d||!u&&o?"#7dd3fc":"#7492a8",strokeWidth:d||!u&&o?4:2,opacity:u?.16:d||o?1:"shadow"===c?.35:.55,...m||"broken"===c?{strokeDasharray:"2 7"}:"shadow"===c?{strokeDasharray:"6 5"}:{},transition:"stroke 1.5s ease, stroke-width 1.5s ease, opacity 1.5s ease"},labelStyle:{fill:u?"#7492a8":m||"broken"===c?"#fecaca":d||o?"#e0f2fe":"#a8b7c7",fontSize:12,opacity:u?.4:1}}});return(0,n.jsxs)("section",{"aria-label":"루프 활동 지도",className:"min-w-0 space-y-3",children:[(0,n.jsx)("p",{className:"text-sm text-slate-300",children:"자리(큰 원) \xb7 루프(작은 원) \xb7 최근 60분 실제 사건. 노드나 간선을 누르면 Trace로 이동합니다."}),(0,n.jsx)("p",{className:"text-xs text-slate-400",children:"꾸러미 모양 \xb7 요청 ● 결정 ◆ 보고 ■ 넘김 ▲ 발사 ★ 판단 ⬟ \xb7 넘김 실선 = 실발사 \xb7 점선 = 그림자 \xb7 ✕ = 끊김 \xb7 유령 = 발사 뒤 10분간 같은 ref 런 간선 없음 \xb7 확대하면 노드 안 지금 일이 보입니다."}),null!==h&&(0,n.jsxs)("section",{"aria-label":"데모 여정",className:"rounded-xl border border-sky-500/50 bg-[#173556] p-3",children:[(0,n.jsxs)("h3",{className:"font-semibold",children:["여정 \xb7 ",(0,f.t)(h)]}),"ready"===o&&0===_.size&&(0,n.jsx)("p",{role:"status",className:"mt-1 text-sm text-slate-300",children:"아직 사건 없음 — 틱이 이 카드를 집으면 1단계부터 채워집니다"}),(0,n.jsx)("ol",{className:"mt-2 flex min-w-0 flex-wrap items-stretch gap-2 text-sm",children:q.map((e,t)=>(0,n.jsxs)("li",{"data-journey-state":e.state,className:"flex min-w-0 items-center gap-2 rounded-lg border px-3 py-2 ".concat(z[e.state]),children:[(0,n.jsx)("span",{"aria-hidden":"true",children:W.bq[e.state].mark}),(0,n.jsxs)("span",{className:"min-w-0 break-words",children:[t+1,". ",e.label," \xb7 ",W.bq[e.state].word]}),e.edge&&(0,n.jsx)("time",{className:"text-xs text-slate-300",dateTime:e.edge.at,children:new Date(e.edge.at).toLocaleTimeString("ko-KR",{timeZone:"Asia/Seoul"})})]},e.key))})]}),(0,n.jsxs)("div",{role:"group","aria-label":"데모 카드 선택",className:"flex flex-wrap items-center gap-2 text-sm",children:[(0,n.jsx)("span",{children:"카드 경로"}),G.map(e=>(0,n.jsx)("button",{type:"button","aria-pressed":$===e,onClick:()=>Q(e),className:"min-h-11 rounded-lg border border-slate-500 px-3 py-2 aria-pressed:border-sky-300 aria-pressed:bg-sky-800 focus-visible:outline-2 focus-visible:outline-sky-400",children:(0,f.t)(e)},e)),null!==$&&(0,n.jsx)("button",{type:"button",onClick:()=>Q(null),className:"min-h-11 rounded-lg border border-slate-500 px-3 py-2 focus-visible:outline-2 focus-visible:outline-sky-400",children:"전체 보기"})]}),null!==$&&(0,n.jsxs)("section",{"aria-label":"선택 카드 흐름",className:"rounded-xl border border-sky-500/50 bg-[#173556] p-3",children:[(0,n.jsxs)("h3",{className:"font-semibold",children:["요구 한 줄 → 회신 \xb7 카드 ",(0,f.t)($)]}),"ready"===o&&0===V.length&&(0,n.jsx)("p",{role:"status",children:"이 카드는 아직 흐른 사건이 없음"}),V.length>0&&(0,n.jsx)("ol",{className:"mt-2 space-y-2",children:V.map((e,t)=>{var l,a,r,s;return(0,n.jsxs)("li",{className:"break-words text-sm",children:[t+1,". ",(0,f.t)(null!=(r=null==(l=Y.find(t=>t.id===e.from))?void 0:l.label)?r:"출발")," → ",e.to.startsWith("surface:")?"회신 \xb7 ".concat((0,f.t)(e.to.slice(8))):(0,f.t)(null!=(s=null==(a=Y.find(t=>t.id===e.to))?void 0:a.label)?s:"도착")," \xb7 ",(0,n.jsx)("time",{dateTime:e.at,children:new Date(e.at).toLocaleTimeString("ko-KR",{timeZone:"Asia/Seoul"})})]},"".concat(T(e),"-").concat(t))})})]}),"error"===o&&(0,n.jsx)("p",{role:"alert",className:"text-red-300",children:"지도 원천을 읽지 못했습니다. 이전 지도가 보이면 현재 데이터가 아닙니다. 데몬 연결을 확인하세요."}),"unauthorized"===o&&(0,n.jsx)("p",{role:"alert",className:"text-red-300",children:"지도 원천에 접근 권한이 없습니다 — 토큰으로 다시 붙으세요"}),"loading"===o&&(0,n.jsx)("p",{role:"status",children:"지도를 읽는 중…"}),(0,n.jsx)("div",{className:"h-[440px] min-w-0 w-full overflow-hidden rounded-2xl border border-slate-600 bg-[#10243b]","aria-label":"자리와 루프 관계도",children:(0,n.jsxs)(c.Gc,{nodes:es,edges:ei,nodeTypes:Z,edgeTypes:L,fitView:!0,minZoom:.25,maxZoom:2.5,onInit:e=>w(e.getZoom()),onMove:(e,t)=>w(t.zoom),nodesDraggable:!1,nodesConnectable:!1,edgesReconnectable:!1,deleteKeyCode:null,onNodeClick:(e,t)=>{let l=Y.find(e=>et.get(e.id)===t.id);l&&window.location.assign(M(l.id))},onEdgeClick:(e,t)=>{var l;let n=null==(l=t.data)?void 0:l.edge;n&&window.location.assign(M(n.to,n))},children:[(0,n.jsx)(c.VS,{color:"#355470"}),(0,n.jsx)(c.H2,{showInteractive:!1})]},"loading"===o?"loading":"loaded")}),(0,n.jsx)("div",{"aria-label":"지도 목록",className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-4",children:ee.map(e=>{var t;return(0,n.jsxs)("section",{className:"min-w-0 rounded-xl border border-slate-600 p-3",children:[(0,n.jsx)("h3",{className:"mb-2 font-semibold",children:null!=(t=v[e.owner])?t:(0,f.t)(e.owner)}),(0,n.jsx)("ul",{className:"space-y-2",children:e.nodes.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>window.location.assign(M(e.id)),className:"flex w-full min-w-0 items-center gap-2 rounded-lg border border-slate-600 px-2 py-2 text-left text-sm focus-visible:outline-2 focus-visible:outline-sky-400",children:[(0,n.jsx)("span",{"aria-hidden":"true",className:"shrink-0 rounded-full border border-sky-400 bg-[#173556] ".concat("seat"===e.type?"h-8 w-8":"h-5 w-5")}),(0,n.jsx)("span",{className:"min-w-0 break-words",children:(0,f.t)(e.label)}),e.verdict&&(0,n.jsx)("span",{"data-loop-verdict":e.verdict,className:"ml-auto shrink-0 rounded-full px-2 py-0.5 text-xs ring-1 ".concat(F[e.verdict]),children:e.verdict})]})},e.id))})]},e.owner)})}),(0,n.jsx)("ul",{"aria-label":"최근 간선 사건",className:"space-y-2",children:l.map((e,t)=>{var a,r,o,d,u;return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>window.location.assign(M(e.to,e)),className:"block w-full min-w-0 break-words rounded-lg border border-slate-600 px-3 py-2 text-left text-sm focus-visible:outline-2 focus-visible:outline-sky-400 ".concat(null!==$?B.has(T(e))?"border-sky-300 bg-sky-500/30 text-sky-100":"bg-slate-800/30 text-slate-400 opacity-40":i-(null!=(o=s[T(e)])?o:0)<1500?"bg-sky-500/20 text-sky-100 transition-colors duration-[1500ms] motion-reduce:transition-none":"bg-slate-800/50 text-slate-300"),children:[(0,f.t)(null!=(d=null==(a=Y.find(t=>t.id===e.from))?void 0:a.label)?d:"출발")," → ",(0,f.t)(null!=(u=null==(r=Y.find(t=>t.id===e.to))?void 0:r.label)?u:"도착")," \xb7 ",X(e,b(e,l,i),i)," \xb7 ",(0,n.jsx)("time",{dateTime:e.at,children:new Date(e.at).toLocaleTimeString("ko-KR",{timeZone:"Asia/Seoul"})})]})},"edge-".concat(t))})}),"ready"===o&&0===l.length&&(0,n.jsx)("p",{role:"status",className:"text-slate-300",children:"최근 사건이 없습니다."})]})}var _=l(69370);let $=["loop.","task-agent","harness.queue","self-implement.pod"],J={setTimeout:(e,t)=>globalThis.setTimeout(e,t),clearTimeout:e=>globalThis.clearTimeout(e),setInterval:(e,t)=>globalThis.setInterval(e,t),clearInterval:e=>globalThis.clearInterval(e)},G=(0,d.g)(null,null);function V(e){let{view:t,runsUnreadable:l,refreshedAt:a}=e;return(0,n.jsxs)("section",{"aria-label":"루프 에이전트 활동",className:"min-w-0 space-y-6 p-4 text-lg min-[1440px]:text-[22px]",children:[(0,n.jsx)("div",{className:"grid grid-cols-2 gap-3 min-[1440px]:grid-cols-4",children:t.seats.map(e=>(0,n.jsxs)("article",{"aria-label":"".concat(e.seat," 자리"),className:"min-w-0 space-y-3 rounded-2xl border border-border bg-card p-3 min-[1440px]:p-6",children:[(0,n.jsx)("h2",{className:"font-bold",children:e.seat}),(0,n.jsx)("p",{className:"break-words","aria-label":"지금 하는 일",children:e.now}),(0,n.jsxs)("dl",{className:"space-y-1 text-base min-[1440px]:text-[22px]",children:[(0,n.jsxs)("div",{className:"flex flex-wrap justify-between gap-x-2",children:[(0,n.jsx)("dt",{children:"오늘 착지"}),(0,n.jsx)("dd",{children:e.landedToday})]}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-between gap-x-2",children:[(0,n.jsx)("dt",{children:"막힘"}),(0,n.jsx)("dd",{children:e.blocked})]}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-between gap-x-2",children:[(0,n.jsx)("dt",{children:"대표 결정 대기"}),(0,n.jsx)("dd",{children:e.decisionsWaiting})]})]})]},e.seat))}),(0,n.jsxs)("section",{"aria-label":"지금 도는 런",className:"min-w-0 rounded-2xl border border-border bg-card p-4",children:[(0,n.jsx)("h2",{className:"font-semibold",children:"지금 도는 런"}),l?(0,n.jsx)("p",{className:"text-muted-foreground",children:"못 읽음"}):0===t.runs.length?(0,n.jsx)("p",{className:"text-muted-foreground",children:"지금 도는 런이 없습니다"}):(0,n.jsx)("ul",{className:"mt-3 flex flex-wrap gap-3",children:t.runs.map((e,t)=>(0,n.jsxs)("li",{className:"min-w-0 break-words rounded-lg border border-border px-3 py-2",children:["런 ",e.id6," \xb7 ",e.stage," \xb7 경과 ","못 읽음"===e.elapsedSec?e.elapsedSec:"".concat(e.elapsedSec,"초")]},"".concat(e.id6,"-").concat(t)))})]}),(0,n.jsxs)("p",{className:"text-sm text-muted-foreground",children:["마지막 갱신 ",(0,n.jsx)("time",{dateTime:null!=a?a:void 0,children:a?new Date(a).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"}):"못 읽음"})]})]})}function B(){var e,t,l,c,m,b,v,g;let{initialMode:x="activity"}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:y,config:j}=(0,s.Q)(),[M,C]=(0,a.useState)(null),R=S((0,r.useSearchParams)()),[E,O]=(0,a.useState)(null!==R?"map":x),[I,D]=(0,a.useState)(null),[U,W]=(0,a.useState)(0),F="".concat(j.baseUrl,"\0").concat(j.token),P="".concat(F,"\0").concat(E,"\0").concat(null!=R?R:""),Z=(null==M?void 0:M.source)===F?M:null,L=null!=(t=null==Z||null==(e=Z.seats)?void 0:e.seats.flatMap(e=>{var t,l;return null!=(l=null==(t=e.subSeats)?void 0:t.map(e=>e.id))?l:[]}))?t:[];(0,a.useEffect)(()=>{let e=!0,t=!1,l=(0,o.xX)({baseUrl:j.baseUrl,token:j.token});C({source:F,seats:null,runs:null,runsUnreadable:!0,refreshedAt:null});let n=async()=>{var n;if(!e||t||document.hidden)return;t=!0;let a=new Intl.DateTimeFormat("sv-SE",{timeZone:"Asia/Seoul"}).format(new Date),[r,s]=await Promise.allSettled([(0,i.Nn)(y,a),l.getHarnessRuns()]);if(t=!1,!e)return;let o="fulfilled"===r.status&&"ready"===r.value.kind?r.value.data:null,d="fulfilled"===s.status&&Array.isArray(null==(n=s.value)?void 0:n.entries)?s.value:null;C({source:F,seats:o,runs:d,runsUnreadable:null===d,refreshedAt:o||d?new Date().toISOString():null})};n();let a=window.setInterval(()=>{n()},1e4),r=()=>{document.hidden||n()};return document.addEventListener("visibilitychange",r),()=>{e=!1,window.clearInterval(a),document.removeEventListener("visibilitychange",r)}},[y,j.baseUrl,j.token,F]),(0,a.useEffect)(()=>{if("map"!==E)return;let e=!0,t=!1,l=!1;D(null),W(Date.now());let n=async()=>{if(!e||document.hidden)return;if(t){l=!0;return}t=!0,l=!1;let a=Date.now();try{let[t,l,n]=await Promise.all([(0,u.Em)(e=>y.fetchJson(e),a),y.fetchJson("/v1/schedules?includeOff=1&includeOwners=1"),y.fetchJson(N(R)?"/v1/loops/edges?ref=".concat(encodeURIComponent(R),"&mode=live&limit=500"):"/v1/loops/edges?since=".concat(encodeURIComponent(new Date(a-36e5).toISOString()),"&limit=200"))]),r=l.owners;if(!Array.isArray(r))throw Error("루프 주인 조회 실패");let s=null===R?A(n,a,!0):A(n,a,!1);e&&D(e=>{var l;return{source:P,rows:function(e,t,l){let n=new Map(t.flatMap(e=>e.jobs.map(t=>[t,e.owner]))),a=new Map(t.map(e=>[e.id,e.owner])),r=e.map(e=>{var t;return{...e,owner:null!=(t=e.id.startsWith("schedule:")?n.get(e.id.slice(9)):a.get(e.id.slice(5)))?t:"미지정"}});for(let e of t){var s,i,o,d,u,c,m;if(r.some(t=>t.id==="loop:".concat(e.id)))continue;let t=(0,p.u)({enabled:e.enabled,lastRunAt:null!=(d=null==(s=e.lastRun)?void 0:s.at)?d:null,lastStatus:null!=(u=null==(i=e.lastRun)?void 0:i.status.toLowerCase())?u:null,intervalMs:null},l);r.push({id:"loop:".concat(e.id),name:(0,f.t)(e.title),layer:"그래프",owner:null!=(c=e.owner)?c:"미지정",mode:"등록",lastRun:null!=(m=null==(o=e.lastRun)?void 0:o.at)?m:null,verdict:"alive"!==t||e.lastRun?h[t]:"판정 불가"})}return r}(t,r,a),edges:s,seenAt:(l=(null==e?void 0:e.source)===P?e.seenAt:null,Object.fromEntries(s.map(e=>{var t;let n=T(e);return[n,null!=(t=null==l?void 0:l[n])?t:null===l?a-1500:a]}))),state:"ready"}})}catch(t){if(e){let e=t instanceof o.Iu&&(401===t.status||403===t.status);D(t=>({source:P,rows:e?[]:(null==t?void 0:t.source)===P?t.rows:[],edges:e?[]:(null==t?void 0:t.source)===P?t.edges:[],seenAt:e?{}:(null==t?void 0:t.source)===P?t.seenAt:{},state:e?"unauthorized":"error"}))}}finally{t=!1,l&&e&&n()}};n();let a=function(e,t){var l,n,a,r,s;let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=null!=(l=i.timers)?l:J,d=null!=(n=i.debounceMs)?n:800,u=null!=(a=i.pollMs)?a:5e3,c=!1,m=null,p=null,f=o.setInterval(()=>{c||null!==p||t()},null!=(r=i.safetyMs)?r:3e4),h=()=>{var e;c||null!==p||(p=o.setInterval(()=>{c||t()},u),null==(e=i.onMode)||e.call(i,"poll"))},b=e.logsStreamUrl({category:$.join(",")}),v=()=>{};if(null===b)h();else{let e=!1;v=(0,_.BX)(b,{events:{log:()=>{if(!c){var e;null!==p&&(o.clearInterval(p),p=null,null==(e=i.onMode)||e.call(i,"stream")),null!==m&&o.clearTimeout(m),m=o.setTimeout(()=>{m=null,c||t()},d)}}},onError:h,onConstructError:()=>{e=!0}}),e?h():null==(s=i.onMode)||s.call(i,"stream")}return()=>{c||(c=!0,null!==m&&o.clearTimeout(m),null!==p&&o.clearInterval(p),o.clearInterval(f),m=null,p=null,v())}}(y,()=>{n()}),r=window.setInterval(()=>{document.hidden||W(Date.now())},250),s=()=>{document.hidden||n()};return document.addEventListener("visibilitychange",s),()=>{e=!1,a(),window.clearInterval(r),document.removeEventListener("visibilitychange",s)}},[y,E,P,R]);let z=(null==I?void 0:I.source)===P?I:null;return(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsxs)("div",{role:"group","aria-label":"루프 에이전트 보기",className:"flex gap-2 px-4 pt-4",children:[(0,n.jsx)("button",{type:"button","aria-pressed":"activity"===E,onClick:()=>O("activity"),className:"min-h-11 rounded-lg border border-slate-500 px-4 py-2 aria-pressed:bg-sky-800",children:"현황"}),(0,n.jsx)("button",{type:"button","aria-pressed":"map"===E,onClick:()=>O("map"),className:"min-h-11 rounded-lg border border-slate-500 px-4 py-2 aria-pressed:bg-sky-800",children:"지도"})]}),"activity"===E?(0,n.jsx)(V,{view:Z?(0,d.g)(Z.seats,Z.runs):G,runsUnreadable:null==(l=null==Z?void 0:Z.runsUnreadable)||l,refreshedAt:null!=(c=null==Z?void 0:Z.refreshedAt)?c:null}):(0,n.jsx)("div",{className:"min-w-0 p-4",children:(0,n.jsx)(q,{rows:null!=(m=null==z?void 0:z.rows)?m:[],edges:null!=(b=null==z?void 0:z.edges)?b:[],seatIds:["OP","MK","TC","UX",...L],details:Z?function(e,t){let l={COO:"OP",CMO:"MK",CTO:"TC",CXO:"UX"},n=t?"못 읽음":e.runs.length,a={[w]:{running:n},[k]:{running:n}};for(let t of e.seats)a[l[t.seat]]={now:t.now,waiting:t.decisionsWaiting};return a}((0,d.g)(Z.seats,Z.runs),Z.runsUnreadable):void 0,seenAt:null!=(v=null==z?void 0:z.seenAt)?v:{},now:U,state:null!=(g=null==z?void 0:z.state)?g:"loading"})})]})}},81969:(e,t,l)=>{l.d(t,{t:()=>c});let n=/\brun-([0-9a-f]{8})-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,a=/(?:\/(?:Users|home|private)\/[\w.%@+~/-]+|\b[A-Za-z]:\\(?:[^\\\s,;<>"']+\\)*[^\\\s,;<>"']+)/g,r=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,s=RegExp("(?<![A-Za-z0-9_-])(?:[A-Za-z0-9_]{40,}|(?:sk|ghp|gho|ghs|github_pat|xox[abpr])[-_][A-Za-z0-9_-]{20,})(?![A-Za-z0-9_-])","g"),i=/\b(?:OP|MK|TC|UX)\b/g,o=/\bmsb(\d+)\b/gi,d=/(?:\u{1F451}|🪑|🅞|🅜|🅣|🅤|🅢|🅕)\uFE0F?/gu,u={OP:"COO",MK:"CMO",TC:"CTO",UX:"CXO"};function c(e){let t,l=e;do t=l,l=l.replace(n,(e,t)=>"run-".concat(t.slice(0,6))).replace(a,"").replace(r,"").replace(d,"").replace(s,"").replace(i,e=>u[e]).replace(o,(e,t)=>"remote-".concat(t));while(l!==t&&function(e){return[n,a,r,s,i,d,o].flatMap(t=>[...e.matchAll(t)].map(e=>e[0]))}(l).length>0);return l}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3857],{12958:(e,t,r)=>{r.d(t,{a:()=>o});var n=r(55539),a=r(46124),l=r(74780);let s=e=>JSON.stringify([e.graphId,e.runId]);function o(e){let{client:t,approvals:r,onDecided:o,onPendingChange:i}=e,c=(0,a.useMemo)(()=>(0,l.ll)({client:t}),[t]),[d,u]=(0,a.useState)([]),[m,p]=(0,a.useState)({}),[h,f]=(0,a.useState)(null),[b,g]=(0,a.useState)(""),x=(0,a.useRef)(0),v=r.map(s).join("|");function y(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:m;u(e),i(r.filter(r=>!t[s(r)]&&e.some(e=>s(e)===s(r))).length)}async function w(e,t){let n=s(e);if(h||m[n]||!r.some(e=>s(e)===n)||!d.some(e=>s(e)===n))return;let a=x.current;f(n),g("");try{if(await c.decide(e.graphId,e.runId,t),x.current!==a)return;let r={...m,[n]:t};p(r),y(d,r),o();let l=await c.list();x.current===a&&y(l.items,r)}catch(e){x.current===a&&g((0,l.LP)(e,"decide"))}finally{x.current===a&&f(null)}}return((0,a.useEffect)(()=>{let e=++x.current;return(u([]),g(""),v)?(c.list().then(t=>{x.current===e&&y(t.items)}).catch(t=>{x.current===e&&g((0,l.LP)(t,"list"))}),()=>{x.current+=1}):(i(0),()=>{x.current+=1})},[c,v]),0===r.length)?null:(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("h3",{className:"font-semibold",children:"게시 승인"}),b&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:b}),(0,n.jsx)("ul",{className:"space-y-2",children:r.map(e=>{let t=s(e),r=d.some(e=>s(e)===t);return(0,n.jsxs)("li",{className:"rounded-lg border border-border bg-background px-4 py-3 text-sm",children:[(0,n.jsx)("p",{children:e.message}),m[t]?(0,n.jsx)("p",{className:"mt-2 text-muted-foreground",children:"approved"===m[t]?"승인됨":"보류됨"}):r?(0,n.jsxs)("div",{className:"mt-2 flex gap-2",children:[(0,n.jsx)("button",{type:"button",disabled:null!==h,onClick:()=>void w(e,"approved"),className:"rounded-lg bg-primary px-3 py-1 text-primary-foreground disabled:opacity-50",children:"승인"}),(0,n.jsx)("button",{type:"button",disabled:null!==h,onClick:()=>void w(e,"rejected"),className:"rounded-lg border border-border px-3 py-1 disabled:opacity-50",children:"보류"})]}):(0,n.jsx)("p",{className:"mt-2 text-muted-foreground",children:"대기 중인 승인이 아닙니다."})]},t)})})]})}},43537:(e,t,r)=>{function n(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function a(e){return"string"==typeof e}function l(e){return a(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function s(e){return n(e)&&a(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&a(e.summary)&&(void 0===e.startedAt||null===e.startedAt||a(e.startedAt))&&(void 0===e.endedAt||null===e.endedAt||a(e.endedAt))}r.d(t,{HG:()=>x,Kh:()=>g,Nn:()=>f,oc:()=>b});let o=new Set(["pending","running","done","retry","timeout","failed"]),i=e=>void 0===e||"number"==typeof e&&Number.isFinite(e);function c(e){return!!(n(e)&&a(e.runId)&&a(e.status)&&a(e.startedAt)&&(null===e.version||a(e.version))&&Array.isArray(e.path)&&e.path.every(a)&&Array.isArray(e.nodes)&&e.nodes.every(s))&&(void 0!==e.gateShards&&!function(e){if(!n(e)||!a(e.version)||!a(e.updatedAt)||!Array.isArray(e.shards)||!n(e.summary))return!1;let t=e.summary;return e.shards.every(e=>n(e)&&a(e.id)&&o.has(e.state)&&i(e.plannedMin)&&i(e.installSec)&&i(e.rc)&&(void 0===e.waitReason||a(e.waitReason)))&&Number.isInteger(t.total)&&n(t.counts)&&[...o].every(e=>Number.isInteger(t.counts[e]))&&Array.isArray(t.waitReasons)&&t.waitReasons.every(e=>n(e)&&a(e.reason)&&Number.isInteger(e.count))&&(null===t.etaMin||"number"==typeof t.etaMin)&&(null===t.staleMin||"number"==typeof t.staleMin)&&(void 0===t.overrunMin||"number"==typeof t.overrunMin)}(e.gateShards)&&delete e.gateShards,!0)}function d(e){return n(e)&&a(e.id)&&a(e.title)&&a(e.status)&&(void 0===e.owner||a(e.owner))&&a(e.updatedAt)&&(void 0===e.evidence||a(e.evidence))}let u=e=>Number.isInteger(e)&&e>=0;function m(e){return n(e)&&a(e.id)&&a(e.title)&&(null===e.open||u(e.open))&&(null===e.landed||u(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>n(e)&&a(e.id)&&a(e.title)))}function p(e){return n(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||a(e.role))&&(null===e.now||n(e.now)&&a(e.now.text)&&a(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>n(e)&&u(e.pr)&&a(e.title)&&a(e.at)&&(null===e.checklistId||a(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>n(e)&&a(e.id)&&a(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||u(e.pendingDecisions))&&(null===e.checklist||n(e.checklist)&&["green","yellow","red","done"].every(t=>u(e.checklist[t])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(m))}async function h(e,t,r){try{let n=await e.fetchResponse(t,{method:"GET"});if(403===n.status)return{kind:"forbidden"};if(!n.ok)return{kind:"error",status:n.status};let a=r(await n.json());return null===a?{kind:"error",status:n.status}:{kind:"ready",data:a}}catch(e){return{kind:"error",status:0}}}function f(e,t){return h(e,"/v1/ops/seats".concat(t?"?date=".concat(encodeURIComponent(t)):""),e=>n(e)&&a(e.date)&&Array.isArray(e.seats)&&e.seats.every(p)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function b(e,t){return h(e,"/v1/ops/release/runs".concat(t?"?version=".concat(encodeURIComponent(t)):""),e=>Array.isArray(e)&&e.every(c)?e:null)}function g(e,t,r){return h(e,"/v1/ops/release/runs/".concat(encodeURIComponent(t),"/nodes/").concat(encodeURIComponent(r),"/log"),e=>n(e)&&a(e.log)?{log:e.log}:null)}function x(e,t){return h(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(t)),e=>{var t,r,s,o;if(!(n(e)&&a(e.version)&&(void 0===e.codename||a(e.codename))&&Array.isArray(e.items)&&e.items.every(d)&&["green","yellow","red","done"].every(t=>void 0===e[t]||Number.isInteger(e[t])&&e[t]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(a))&&(void 0===e.byOwner||n(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let i={green:0,yellow:0,red:0,done:0};for(let t of e.items)t.status in i&&i[t.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:n(e.schedule)&&l(e.schedule.cutAt)&&(null===e.schedule.landBy||l(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(t=e.green)?t:i.green,yellow:null!=(r=e.yellow)?r:i.yellow,red:null!=(s=e.red)?s:i.red,done:null!=(o=e.done)?o:i.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}},53857:(e,t,r)=>{r.d(t,{ChatPanel:()=>e4});var n=r(55539),a=r(46124),l=r(92156),s=r(94226),o=r(16190),i=r(46586),c=r(3558),d=r.n(c),u=r(71923),m=r(15151),p=r(43537),h=r(37768);function f(){let{client:e}=(0,m.Q)(),[t,r]=(0,a.useState)([]);if((0,a.useEffect)(()=>{if("undefined"==typeof document)return;let t=!0,n=!1,a=async()=>{if(!t||n||document.hidden)return;n=!0;let a=new Intl.DateTimeFormat("sv-SE",{timeZone:"Asia/Seoul"}).format(new Date),l=await (0,p.Nn)(e,a);n=!1,t&&r((0,h.z)("ready"===l.kind?l.data:null,Date.now()))};r([]),a();let l=globalThis.setInterval(()=>{a()},6e4),s=()=>{document.hidden||a()};return document.addEventListener("visibilitychange",s),()=>{t=!1,globalThis.clearInterval(l),document.removeEventListener("visibilitychange",s)}},[e]),0===t.length)return null;let l=t.map(e=>{let{seat:t,text:r,ago:n}=e;return"".concat(t," ").concat(r," \xb7 ").concat(n)}).join(" | ");return(0,n.jsx)("div",{role:"status","aria-label":"지금 자리들이 하는 일",title:l,className:"h-8 min-h-8 min-w-0 shrink-0 overflow-hidden text-ellipsis whitespace-nowrap border-b border-border bg-background px-3 text-xs leading-8 text-muted-foreground",children:t.map((e,t)=>{let{seat:r,text:a,ago:l}=e;return(0,n.jsxs)("span",{children:[t>0&&" | ",r," ",a," \xb7 ",l]},r)})})}var b=r(3180),g=r(72215);function x(){let{client:e}=(0,m.Q)(),[t,r]=(0,a.useState)(!1),[l,s]=(0,a.useState)(!1),[o,i]=(0,a.useState)(""),c=(0,a.useRef)(!1),d=(0,a.useRef)(0),u=(0,a.useRef)(!1);(0,a.useEffect)(()=>(r("speechSynthesis"in window&&"undefined"!=typeof SpeechSynthesisUtterance),()=>{d.current++,u.current&&"speechSynthesis"in window&&window.speechSynthesis.cancel()}),[]);let p=async()=>{if(c.current||!t)return;c.current=!0;let r=++d.current;s(!0),i(""),u.current&&window.speechSynthesis.cancel(),u.current=!1;try{let t=await e.fetchResponse("/v1/context/now?format=voice",{method:"GET"});if(!t.ok)throw Error("HTTP ".concat(t.status));let n=await t.json();if(!n||"object"!=typeof n||!("text"in n)||"string"!=typeof n.text||!n.text.trim())throw Error("invalid voice summary");if(r!==d.current)return;let a=new SpeechSynthesisUtterance(n.text);a.lang="ko-KR",a.onend=()=>{r===d.current&&(u.current=!1)},a.onerror=()=>{r===d.current&&(u.current=!1)},u.current=!0,window.speechSynthesis.speak(a),(0,g.cY)("chat.now.speak",{outcome:"spoken"})}catch(e){if(r!==d.current)return;u.current=!1,i("지금 상황을 읽지 못했습니다. 다시 시도해 주세요."),(0,g.cY)("chat.now.speak",{outcome:"error",reason:String(e)})}finally{r===d.current&&(c.current=!1,s(!1))}};return(0,n.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:[(0,n.jsxs)("button",{type:"button","data-elanous-action":"chat-now-speak","aria-label":"지금 상황 듣기",title:t?"지금 상황 두 문장 듣기":"이 브라우저는 음성 읽기를 지원하지 않습니다",disabled:!t||l,onClick:()=>void p(),className:"inline-flex min-h-9 items-center gap-1.5 rounded-full border border-border bg-background px-3 text-xs font-medium text-foreground hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",children:[(0,n.jsx)(b.A,{className:"h-4 w-4","aria-hidden":"true"}),(0,n.jsx)("span",{children:"지금 상황 듣기"})]}),o&&(0,n.jsx)("span",{role:"alert",className:"text-xs text-rose-600",children:o})]})}var v=r(12958),y=r(74780);function w(){let{mobileOpen:e,onCount:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:r}=(0,m.Q)(),l=(0,a.useMemo)(()=>(0,y.ll)({client:r}),[r]),[s,o]=(0,a.useState)({client:r,items:[],pending:0,expanded:!1}),i=(0,a.useRef)(r);i.current=r;let c=(0,a.useRef)(!1),d=(0,a.useRef)(0),u=s.client===r?s:null,p=(0,a.useCallback)(async()=>{if(!c.current||i.current!==r||"undefined"!=typeof document&&document.hidden)return;let e=++d.current;try{let t=await l.list();if(!c.current||i.current!==r||d.current!==e)return;o(n=>i.current===r&&d.current===e?{client:r,items:t.items,pending:t.items.length,expanded:t.items.length>0&&n.client===r&&n.expanded}:n)}catch(t){if(!c.current||i.current!==r||d.current!==e)return;o(t=>i.current===r&&d.current===e?{client:r,items:[],pending:0,expanded:!1}:t)}},[l,r]);if((0,a.useEffect)(()=>{c.current=!0,o({client:r,items:[],pending:0,expanded:!1}),p();let e=globalThis.setInterval(()=>{p()},3e4),t=()=>{document.hidden||p()};return"undefined"!=typeof document&&document.addEventListener("visibilitychange",t),()=>{c.current=!1,d.current+=1,globalThis.clearInterval(e),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",t)}},[r,p]),(0,a.useEffect)(()=>{var e,t;(0,g.cY)("chat.approvals",{pending:null!=(e=null==u?void 0:u.pending)?e:0,expanded:null!=(t=null==u?void 0:u.expanded)&&t})},[null==u?void 0:u.pending,null==u?void 0:u.expanded]),(0,a.useEffect)(()=>{var e;null==t||t(null!=(e=null==u?void 0:u.pending)?e:0)},[t,null==u?void 0:u.pending]),!(null==u?void 0:u.pending)||t&&!e)return null;let h=(0,n.jsx)(v.a,{client:r,approvals:u.items,onDecided:()=>{p()},onPendingChange:e=>{i.current===r&&o(t=>t.client===r?{...t,pending:e,...0===e?{items:[],expanded:!1}:{}}:t)}});return t?(0,n.jsx)("div",{id:"chat-approvals-panel",className:"max-h-[min(50vh,24rem)] overflow-y-auto border-b border-border p-3",children:h}):(0,n.jsxs)("div",{className:"shrink-0 border-b border-border bg-background px-3 py-1.5 text-sm",children:[(0,n.jsxs)("button",{type:"button","aria-expanded":u.expanded,"aria-controls":"chat-approvals-panel",onClick:()=>o(e=>e.client===r?{...e,expanded:!e.expanded}:e),className:"rounded-full border border-border bg-muted px-3 py-1 font-medium text-foreground hover:bg-muted/70",children:["승인 대기 ",u.pending]}),u.expanded&&(0,n.jsx)("div",{id:"chat-approvals-panel",className:"mt-2 max-h-[min(50vh,24rem)] overflow-y-auto rounded-lg border border-border p-3",children:h})]})}var j=r(33626);function k(){var e;let{mobileOpen:t,onCount:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:l}=(0,m.Q)(),[s,o]=(0,a.useState)({client:l,items:[],expanded:!1,decided:{},busy:null}),i=(0,a.useRef)(l);i.current=l;let c=(0,a.useRef)(!1),d=(0,a.useRef)(0),u=(0,a.useRef)(null),p=s.client===l?s:null,h=(0,a.useCallback)(async()=>{if(!c.current||i.current!==l||"undefined"!=typeof document&&document.hidden)return;let e=++d.current;try{let t=await (0,j.qK)(l);if(!c.current||i.current!==l||d.current!==e)return;o(e=>e.client===l?{...e,items:[...t,...e.items.filter(r=>e.decided[r.id]&&!t.some(e=>e.id===r.id))],expanded:e.expanded&&(t.length>0||e.items.some(t=>e.decided[t.id]))}:e)}catch(t){if(!c.current||i.current!==l||d.current!==e)return;o(e=>e.client===l?{...e,items:[],expanded:!1}:e)}},[l]);(0,a.useEffect)(()=>{c.current=!0,u.current=null,o({client:l,items:[],expanded:!1,decided:{},busy:null}),h();let e=globalThis.setInterval(()=>{h()},3e4),t=()=>{document.hidden||h()};return"undefined"!=typeof document&&document.addEventListener("visibilitychange",t),()=>{c.current=!1,u.current=null,d.current+=1,globalThis.clearInterval(e),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",t)}},[l,h]);let f=async(e,t)=>{if(!u.current&&!s.busy&&!s.decided[e.id]){u.current=e.id,o(t=>t.client===l?{...t,busy:e.id}:t);try{if(await (0,j.LD)(l,e.id,t.id),!c.current||i.current!==l)return;u.current=null,o(r=>r.client===l?{...r,busy:null,decided:{...r.decided,[e.id]:t.label}}:r),await h()}catch(e){c.current&&i.current===l&&(u.current=null,o(e=>e.client===l?{...e,busy:null}:e))}}},b=null!=(e=null==p?void 0:p.items.filter(e=>!p.decided[e.id]).length)?e:0;if((0,a.useEffect)(()=>{null==r||r(b)},[r,b]),!p||!b&&!(p.expanded&&p.items.some(e=>p.decided[e.id]))||r&&!t)return null;let g=(0,n.jsx)("ul",{id:"chat-decisions-panel",className:"mt-2 max-h-[min(50vh,24rem)] space-y-2 overflow-y-auto rounded-lg border border-border p-3",children:p.items.map(e=>(0,n.jsxs)("li",{className:"rounded-lg border border-border p-3",children:[(0,n.jsx)("h3",{className:"font-semibold",children:e.title}),(0,n.jsx)("p",{className:"truncate text-muted-foreground",title:e.situation,children:e.situation}),p.decided[e.id]?(0,n.jsxs)("p",{role:"status",children:["결정함 — ",p.decided[e.id]]}):(0,n.jsx)("div",{className:"mt-2 flex flex-wrap gap-2",children:e.options.map(t=>(0,n.jsxs)("button",{type:"button",disabled:!!p.busy,onClick:()=>{f(e,t)},className:"rounded-md border border-border px-2 py-1 hover:bg-muted disabled:opacity-50",children:[t.label,"option"in e.recommendation&&e.recommendation.option===t.id&&(0,n.jsx)("span",{className:"ml-1 text-primary",children:"추천"})]},t.id))})]},e.id))});return r?g:(0,n.jsxs)("div",{className:"shrink-0 border-b border-border bg-background px-3 py-1.5 text-sm",children:[(0,n.jsxs)("button",{type:"button","aria-expanded":p.expanded,"aria-controls":"chat-decisions-panel",onClick:()=>o(e=>e.client===l?{...e,expanded:!e.expanded}:e),className:"rounded-full border border-border bg-muted px-3 py-1 font-medium text-foreground hover:bg-muted/70",children:["대표 결정 ",b]}),p.expanded&&g]})}function N(e){let{activity:t,decisions:r,menu:a}=e,l="active"===t.kind?t.run.progressLine||t.run.runId:"quiet"===t.kind?"없음":"loading"===t.kind?"확인 중":"확인 불가";return(0,n.jsxs)("div",{"data-elanous-mobile-chat-status":"",role:"status",className:"flex h-10 min-h-10 min-w-0 items-center gap-3 border-b border-border bg-background px-3 text-xs",children:[(0,n.jsxs)("span",{className:"min-w-0 flex-1 truncate",title:l,children:["지금 도는 일 \xb7 ",l]}),(0,n.jsxs)("span",{className:"shrink-0",children:["대기 결정 \xb7 ",null!=r?r:"—"]}),a]})}var S=r(73426),C=r(9851);function I(e){let{queue:t,onRemove:r,onClear:a}=e;return 0===t.length?null:(0,n.jsxs)("div",{className:"flex shrink-0 flex-wrap items-center gap-1.5 border-t border-border bg-background px-3 py-2","aria-label":"보낼 차례",children:[t.map((e,t)=>(0,n.jsxs)("span",{className:"inline-flex max-w-full items-center gap-1 rounded-full border border-border bg-muted px-2 py-1 text-xs",children:[(0,n.jsxs)("span",{className:"max-w-[160px] truncate",title:e.text,children:[t+1," \xb7 ",Array.from(e.text).slice(0,20).join("")]}),(0,n.jsx)("button",{type:"button",onClick:()=>r(e.id),"aria-label":"".concat(t+1,"번 지우기"),className:"rounded-full px-1 hover:bg-background",children:"\xd7"})]},e.id)),(0,n.jsx)("button",{type:"button",onClick:a,className:"rounded px-2 py-1 text-xs text-muted-foreground hover:bg-muted",children:"모두 지우기"})]})}function A(e){let t={files:[],tooLarge:0,tooMany:0};for(let r of e)r.file.size>0x1400000?t.tooLarge+=1:t.files.length>=10?t.tooMany+=1:t.files.push(r);return t}function E(e){return!!(e&&Array.from(e.types).includes("Files"))}function R(){return(0,n.jsx)("div",{role:"status","aria-label":"여기에 놓으면 첨부","data-elanous-chat-drop-overlay":"",className:"pointer-events-none absolute inset-0 z-30 flex items-center justify-center bg-background/80 backdrop-blur-sm",children:(0,n.jsxs)("div",{className:"mx-4 rounded-2xl border-2 border-dashed border-primary/60 bg-card/90 px-8 py-6 text-center shadow-lg",children:[(0,n.jsx)("p",{className:"text-lg font-semibold text-foreground",children:"여기에 놓으면 첨부"}),(0,n.jsxs)("p",{className:"mt-2 text-sm text-muted-foreground",children:["파일 ",10,"개까지 \xb7 큰 파일은 빠집니다"]})]})})}function D(e,t,r){if("drop"===t||"end"===t||!r)return{visible:!1,depth:0};let n="enter"===t?e.depth+1:Math.max(0,e.depth-1);return{visible:n>0,depth:n}}var q=r(64667),T=r(3155),L=r(25503);class U{list(){return this.client.fetchJson("/v1/projects")}folders(e){return this.client.fetchJson("/v1/projects/folders".concat(void 0===e?"":"?path=".concat(encodeURIComponent(e))))}create(e,t){return this.client.fetchJson("/v1/projects",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:e,...void 0!==t?{primaryFolder:t}:{}})})}assign(e,t){return this.client.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(e)),{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({projectId:t})})}constructor(e){this.client=e}}let O="elanous.chat.projectSelection",M="elanous-chat-pending-projects-changed",F="elanous-chat-projects-changed";function P(){window.dispatchEvent(new Event(F))}let Y="elanous.chat.pendingProjects";function _(){try{var e;let t=JSON.parse(null!=(e=localStorage.getItem(Y))?e:"{}");if(t&&"object"==typeof t&&!Array.isArray(t))return Object.fromEntries(Object.entries(t).filter(e=>{let[t,r]=e;return t&&"string"==typeof r&&r}))}catch(e){}return{}}function J(e){try{localStorage.setItem(Y,JSON.stringify(e))}catch(e){return!1}return window.dispatchEvent(new Event(M)),!0}function z(e){let{projects:t,selection:r,onChange:l,onCreate:s,api:o}=e,[i,c]=(0,a.useState)(!1),[d,u]=(0,a.useState)(""),[m,p]=(0,a.useState)(!1),[h,f]=(0,a.useState)(""),[b,g]=(0,a.useState)(null),[x,v]=(0,a.useState)(!1),[y,w]=(0,a.useState)(!1),[j,k]=(0,a.useState)(!1),N=(0,a.useRef)(0),S=(0,a.useRef)(!1),C=async e=>{if(!o)return;let t=++N.current;w(!0),v(!1),g(null);try{let r=await o.folders(e);t===N.current&&g(r)}catch(e){t===N.current&&v(!0)}finally{t===N.current&&w(!1)}};return(0,n.jsxs)("div",{className:"space-y-2",children:[0===t.length&&!i&&(0,n.jsx)("button",{type:"button",onClick:()=>c(!0),className:"text-sm text-muted-foreground hover:text-foreground",children:"+ 프로젝트 만들기"}),t.length>0&&(0,n.jsxs)("select",{"aria-label":"프로젝트 바꾸기",value:r,onChange:e=>{if("create"===e.target.value)return void c(!0);l(e.target.value)},className:"w-full rounded-lg border border-border bg-background px-3 py-2 text-sm",children:[(0,n.jsx)("option",{value:"all",children:"모든 대화"}),(0,n.jsx)("option",{value:"none",children:"받은 대화(프로젝트 없음)"}),t.map(e=>(0,n.jsx)("option",{value:e.id,children:e.name},e.id)),(0,n.jsx)("option",{value:"create",children:"+ 프로젝트 만들기"})]}),i&&(0,n.jsxs)("form",{onSubmit:e=>{e.preventDefault();let t=d.trim();!t||S.current||y||(S.current=!0,k(!0),s(t,h||void 0).then(()=>{N.current++,c(!1),u(""),f(""),g(null),p(!1)}).catch(()=>p(!0)).finally(()=>{S.current=!1,k(!1)}))},className:"flex flex-wrap gap-2",children:[(0,n.jsx)("input",{"aria-label":"프로젝트 이름",autoFocus:!0,value:d,maxLength:80,onChange:e=>u(e.target.value),className:"min-w-0 flex-1 rounded-lg border border-border bg-background px-2 py-1 text-sm"}),(0,n.jsx)("button",{type:"submit",disabled:y||j,className:"rounded-lg border border-border px-2 text-sm",children:"만들기"}),o&&(0,n.jsx)("button",{type:"button","aria-label":"원격 폴더 고르기",disabled:j||y,onClick:()=>void C(),className:"rounded-lg border border-border px-2 text-sm",children:"폴더"}),m&&(0,n.jsx)("span",{role:"alert",children:"프로젝트를 만들지 못했습니다"})]}),i&&b&&(0,n.jsxs)("div",{role:"group","aria-label":"원격 폴더 목록",className:"max-h-48 overflow-y-auto rounded-lg border border-border p-2 text-sm",children:[(0,n.jsx)("p",{className:"break-all",children:b.path}),b.parent&&(0,n.jsx)("button",{type:"button","aria-label":"상위 폴더",onClick:()=>{var e;C(null!=(e=b.parent)?e:void 0)},className:"block w-full py-1 text-left",children:".."}),b.folders.map(e=>(0,n.jsxs)("button",{type:"button",onClick:()=>void C(e.path),className:"block w-full truncate py-1 text-left",children:[e.name,"/"]},e.path)),(0,n.jsx)("button",{type:"button",disabled:y||j,onClick:()=>{N.current++,w(!1),f(b.path),g(null)},className:"rounded border border-border px-2 py-1",children:"이 폴더 선택"})]}),i&&h&&(0,n.jsxs)("p",{className:"break-all text-xs",children:["선택한 폴더: ",h]}),i&&y&&(0,n.jsx)("p",{role:"status",children:"폴더 불러오는 중…"}),i&&x&&(0,n.jsx)("p",{role:"alert",children:"폴더를 불러오지 못했습니다"})]})}function $(e){var t,r;let{compact:l=!1}=e,{client:s,sessionId:o}=(0,m.Q)(),i=(0,L.t)(),[c,d]=(0,a.useState)([]),[u,p]=(0,a.useState)(!0),[h,f]=(0,a.useState)(!1),[b,g]=(0,a.useState)(0),[x,v]=(0,a.useState)(!1),[y,w]=(0,a.useState)(null),[j,k]=(0,a.useState)(!1),[N,S]=(0,a.useState)(!0),[C,I]=(0,a.useState)([]),[A,E]=(0,a.useState)(0),[R,D]=(0,a.useState)(null),q=(0,a.useRef)(null),O=(0,a.useRef)(null),Y=(0,a.useRef)(null),z=(0,a.useRef)(new Set),$=!!(o&&C.includes(o)),Q=(0,a.useRef)(null),G=(0,a.useRef)(o);G.current=o;let[K,B]=(0,a.useState)(""),[H,W]=(0,a.useState)(!1),[Z,V]=(0,a.useState)(""),[X,ee]=(0,a.useState)(""),[et,er]=(0,a.useState)(null),[en,ea]=(0,a.useState)(!1),[el,es]=(0,a.useState)(!1),eo=(0,a.useRef)(0),ei=(0,a.useRef)(!1),ec=async e=>{let t=++eo.current;ea(!1),es(!0),er(null);try{let r=await new U(s).folders(e);t===eo.current&&er(r)}catch(e){t===eo.current&&ea(!0)}finally{t===eo.current&&es(!1)}};(0,a.useEffect)(()=>{let e=!0,t=0;d([]),f(!1);let r=()=>{let r=++t;p(!0),new U(s).list().then(n=>{let{projects:a}=n;e&&r===t&&(d(null!=a?a:[]),f(!1))}).catch(()=>{e&&r===t&&f(!0)}).finally(()=>{e&&r===t&&p(!1)})};return r(),window.addEventListener(F,r),()=>{e=!1,window.removeEventListener(F,r)}},[s,b]),(0,a.useEffect)(()=>{let e=!0;return(S(!0),D(null),k(!1),Q.current=null,w(null),o)?(s.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(o),"?ifExists=1")).then(t=>{var r,n,a,l;e&&(k(!!t.meta),Q.current=null!=(n=null==(r=t.meta)?void 0:r.projectId)?n:null,z.current.has(o)||w(t.meta?null!=(a=t.meta.projectId)?a:null:null!=(l=_()[o])?l:null),D(o),S(!1))}).catch(()=>{e&&(D(null),B("프로젝트를 확인하지 못했습니다"),S(!1))}),()=>{e=!1}):void S(!1)},[s,o,A]),(0,a.useEffect)(()=>{eo.current++,er(null),ee(""),ea(!1),es(!1),B(""),W(!1),q.current=null,Y.current=null},[o]),(0,a.useEffect)(()=>{if(!o)return;let e=()=>{let e=_()[o];e&&(Y.current=null),z.current.has(o)||(R===o&&j&&e!==Q.current?E(e=>e+1):R===o&&w(null!=e?e:null))};return window.addEventListener(M,e),()=>window.removeEventListener(M,e)},[o,R,j]),(0,a.useEffect)(()=>{o&&R===o&&!j&&!$&&q.current!==o&&i.some(e=>e.id===o)&&(q.current=o,D(null),E(e=>e+1))},[o,R,j,$,i]),(0,a.useEffect)(()=>{if(!o||!j||N||$)return;let e=_()[o];!e||z.current.has(o)||O.current===o||Y.current==="".concat(o,":").concat(e)||(O.current=o,new U(s).assign(o,e).then(()=>{G.current===o&&(Q.current=e);let t=_();t[o]===e&&(delete t[o],J(t),G.current!==o||z.current.has(o)||w(e)),(0,T.hG)(s).forceRefresh()}).catch(()=>{Y.current="".concat(o,":").concat(e);let t=_();t[o]===e&&(delete t[o],J(t)),G.current===o&&(w(Q.current),B("프로젝트를 바꾸지 못했습니다"))}).finally(()=>{O.current=null}))},[s,o,j,N,$,A]);let ed=async function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!o||R!==o||N||h&&!t||z.current.has(o)||O.current===o)return!1;z.current.add(o),I(e=>[...e,o]),B("");try{if(j){await new U(s).assign(o,e),G.current===o&&(Q.current=e),(0,T.hG)(s).forceRefresh();let t=_();t[o]&&(delete t[o],J(t))}else{let t=_();if(e?t[o]=e:delete t[o],!J(t))throw Error("pending project storage unavailable")}return G.current===o&&w(e),!0}catch(e){return G.current===o&&B("프로젝트를 바꾸지 못했습니다"),!1}finally{z.current.delete(o),I(e=>e.filter(e=>e!==o))}},eu=y?null!=(r=null==(t=c.find(e=>e.id===y))?void 0:t.name)?r:"알 수 없는 프로젝트":"프로젝트 없음";return(0,n.jsxs)("div",{className:l?"relative flex min-w-0 items-center gap-1.5 text-xs":"flex min-w-0 flex-wrap items-center gap-1.5 text-xs",children:[(0,n.jsx)("label",{htmlFor:"chat-current-project",className:l?"sr-only":"shrink-0 text-muted-foreground",children:"프로젝트"}),(0,n.jsxs)("select",{id:"chat-current-project","aria-label":"현재 대화 프로젝트",title:o&&R===o&&!N?"현재 프로젝트: ".concat(eu):"프로젝트 확인 중…",value:o&&R===o&&!N?null!=y?y:"":"loading",disabled:!o||R!==o||N||u||$||O.current===o||h,onChange:e=>{if("create"===e.target.value){u||h||W(!0);return}ed(e.target.value||null)},className:"".concat(l?"w-20 max-w-[24vw]":"max-w-36"," min-w-0 truncate rounded-md border border-border bg-background px-2 py-1 text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring"),children:[(!o||R!==o||N)&&(0,n.jsx)("option",{value:"loading",children:"프로젝트 확인 중…"}),(0,n.jsx)("option",{value:"",children:"프로젝트 없음"}),y&&!c.some(e=>e.id===y)&&(0,n.jsx)("option",{value:y,children:"알 수 없는 프로젝트"}),c.map(e=>(0,n.jsx)("option",{value:e.id,children:e.name},e.id)),l&&(0,n.jsx)("option",{value:"create",children:"+ 프로젝트 만들기"})]}),!l&&(0,n.jsx)("button",{type:"button","aria-label":"프로젝트 만들기",title:"프로젝트 만들기",disabled:!o||R!==o||N||u||$||h,onClick:()=>W(e=>!e),className:"shrink-0 rounded px-1 hover:bg-muted",children:"+"}),H&&(0,n.jsxs)("form",{onSubmit:e=>{e.preventDefault();let t=Z.trim();!t||!o||R!==o||N||u||h||$||ei.current||el||(ei.current=!0,v(!0),B(""),new U(s).create(t,X||void 0).then(async e=>{let{project:t}=e;d(e=>[...e,t]);let r=await ed(t.id,!0);P(),r&&(eo.current++,W(!1),V(""),ee(""),er(null))}).catch(()=>B("프로젝트를 만들지 못했습니다")).finally(()=>{ei.current=!1,v(!1)}))},className:l?"absolute right-0 top-full z-50 mt-1 flex flex-wrap items-center gap-1 rounded-lg border border-border bg-popover p-2 shadow-lg":"flex min-w-0 flex-wrap items-center gap-1",children:[(0,n.jsx)("input",{"aria-label":"새 프로젝트 이름",autoFocus:!0,maxLength:80,value:Z,onChange:e=>V(e.target.value),className:"w-24 rounded border border-border bg-background px-1 py-1"}),(0,n.jsx)("button",{type:"submit",disabled:$||x||el||!o||R!==o||u||h,className:"rounded border border-border px-1",children:"만들기"}),(0,n.jsx)("button",{type:"button","aria-label":"원격 폴더 고르기",disabled:x||el,onClick:()=>void ec(),className:"rounded border border-border px-1",children:"폴더"})]}),H&&et&&(0,n.jsxs)("div",{role:"group","aria-label":"원격 폴더 목록",className:l?"absolute right-0 top-full z-50 mt-12 max-h-48 w-64 max-w-[90vw] overflow-y-auto rounded border border-border bg-popover p-2 shadow-lg":"max-h-48 w-64 max-w-[90vw] overflow-y-auto rounded border border-border bg-popover p-2 shadow-lg",children:[(0,n.jsx)("p",{className:"break-all",children:et.path}),et.parent&&(0,n.jsx)("button",{type:"button","aria-label":"상위 폴더",onClick:()=>{var e;ec(null!=(e=et.parent)?e:void 0)},className:"block w-full text-left",children:".."}),et.folders.map(e=>(0,n.jsxs)("button",{type:"button",onClick:()=>void ec(e.path),className:"block w-full truncate text-left",children:[e.name,"/"]},e.path)),(0,n.jsx)("button",{type:"button",disabled:el||x,onClick:()=>{eo.current++,es(!1),ee(et.path),er(null)},className:"rounded border border-border px-1",children:"이 폴더 선택"})]}),H&&X&&(0,n.jsxs)("span",{className:"break-all text-xs",children:["선택한 폴더: ",X]}),H&&el&&(0,n.jsx)("span",{role:"status",children:"폴더 불러오는 중…"}),H&&en&&(0,n.jsx)("span",{role:"alert",children:"폴더를 불러오지 못했습니다"}),(o&&R!==o&&!N||h)&&(0,n.jsx)("button",{type:"button","aria-label":"프로젝트 다시 확인",onClick:()=>{B(""),E(e=>e+1),h&&g(e=>e+1)},className:"rounded border border-border px-1",children:"다시 시도"}),(K||h)&&(0,n.jsx)("span",{role:"alert",className:"text-destructive",children:K||"프로젝트 목록을 불러오지 못했습니다"})]})}var Q=r(44373),G=r(8114);function K(e){let{segmentKey:t,value:r,glyph:a}=e,l=function(e){var t;let r=/(\d{1,3})\s*%/.exec(e);if(!r)return null;let n=Number.parseInt(null!=(t=r[1])?t:"",10);return Number.isFinite(n)?Math.max(0,Math.min(100,n)):null}(r);if(null===l)return(0,n.jsxs)("span",{"data-elanous-hud-key":t,"data-elanous-hud-gauge":"false",className:"inline-flex items-center gap-1 font-mono text-[11px] text-muted-foreground",children:[a?(0,n.jsx)("span",{"aria-hidden":"true",children:a}):null,(0,n.jsx)("span",{children:r})]});let{bar:s,text:o}=l>=80?{bar:"bg-pink-400",text:"text-pink-300"}:l>=60?{bar:"bg-amber-400",text:"text-amber-300"}:{bar:"bg-emerald-500",text:"text-emerald-300"};return(0,n.jsxs)("span",{"data-elanous-hud-key":t,"data-elanous-hud-gauge":"true","data-elanous-hud-percent":String(l),className:"inline-flex items-center gap-1.5 font-mono text-[11px]",children:[a?(0,n.jsx)("span",{"aria-hidden":"true",className:"text-muted-foreground",children:a}):null,(0,n.jsx)("span",{role:"progressbar","aria-valuenow":l,"aria-valuemin":0,"aria-valuemax":100,"aria-label":"".concat(t," ").concat(l,"%"),className:"relative h-2 w-20 overflow-hidden rounded bg-muted/30",children:(0,n.jsx)("span",{"aria-hidden":"true",style:{width:"".concat(l,"%")},className:(0,Q.cn)("block h-full",s)})}),(0,n.jsx)("span",{className:(0,Q.cn)("tabular-nums",o),children:r})]})}let B=new Set(["variant","workspace","model","token-gauge","ctx","agent-activity","agents"]),H=new Set(["token-gauge","ctx"]),W={normal:"text-foreground",warn:"text-amber-300",danger:"text-pink-300",success:"text-emerald-300",info:"text-sky-300",muted:"text-muted-foreground"};function Z(e){var t,r;let{segment:a}=e;if(H.has(a.key))return(0,n.jsx)(K,{segmentKey:a.key,value:a.value,...void 0!==a.glyph?{glyph:a.glyph}:{}});let l=a.tone?W[a.tone]:W.normal;return(0,n.jsxs)("span",{"data-elanous-hud-key":a.key,"data-elanous-hud-tone":null!=(t=a.tone)?t:"normal","data-elanous-hud-priority":String(null!=(r=a.priority)?r:50),className:(0,Q.cn)("inline-flex items-center gap-1 font-mono text-[11px]",l),children:[a.glyph?(0,n.jsx)("span",{"aria-hidden":"true",children:a.glyph}):null,(0,n.jsx)("span",{children:a.value})]})}function V(e){let{segments:t,row:r,className:a}=e;return 0===t.length?null:(0,n.jsx)("div",{"data-elanous-hud-row":r,className:(0,Q.cn)("flex flex-wrap items-center gap-x-3 gap-y-1",a),children:t.map((e,t)=>(0,n.jsxs)("span",{className:"flex items-center gap-x-3",children:[t>0?(0,n.jsx)("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"\xb7"}):null,(0,n.jsx)(Z,{segment:e})]},e.key))})}function X(e){let{segments:t}=e;if(0===t.length)return null;let{top:r,bottom:a}=function(e){let t=[],r=[];for(let n of e)B.has(n.key)?t.push(n):r.push(n);return{top:t,bottom:r}}(t);return(0,n.jsxs)("div",{"data-elanous-hud":"strip",role:"status","aria-label":"HUD status",className:"flex flex-col gap-0.5 border-b border-border/40 bg-muted/10 px-3 py-1.5",children:[(0,n.jsx)(V,{segments:r,row:"top"}),(0,n.jsx)(V,{segments:a,row:"bottom",className:"hidden sm:flex"})]})}let ee=[];function et(){return ee}function er(){let e=(0,a.useSyncExternalStore)(G.er,G.Wl,et);return(0,n.jsx)(X,{segments:e})}function en(e,t){if("string"!=typeof e)return t;let r=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-](\d{2}):(\d{2}))$/.exec(e);if(!r)return t;let[,n,a,l,s,o,i,c,d]=r,u=Number(n),m=Number(a),p=Number(l),h=[31,u%4==0&&(u%100!=0||u%400==0)?29:28,31,30,31,30,31,31,30,31,30,31][m-1];if(p<1||void 0===h||p>h||Number(s)>23||Number(o)>59||Number(i)>59||void 0!==c&&(Number(c)>23||Number(d)>59))return t;let f=Date.parse(e);return Number.isFinite(f)?f:t}var ea=r(5997),el=r(65194),es=r(67903),eo=r(36898),ei=r(56360),ec=r(76573),ed=r(75342),eu=r(14222);let em={idle:"음성 대기",connecting:"데몬 연결 중…",listening:"듣는 중",processing:"생각 중…",speaking:"말하는 중",error:"음성 오류"},ep={idle:"마이크를 켜서 대화를 시작하세요.",connecting:"잠시만 기다려주세요.",listening:"문장이 끝나면 자동으로 전송됩니다.",processing:"서버가 응답을 생성하는 중입니다.",speaking:"음성 응답을 재생하는 중입니다.",error:"아래 메시지를 확인하고 다시 시도하세요."},eh={idle:"bg-slate-400",connecting:"bg-amber-500",listening:"bg-emerald-500",processing:"bg-sky-500",speaking:"bg-fuchsia-500",error:"bg-rose-600"};function ef(e){let{active:t,phase:r,errorMsg:a,onToggle:l,ttsSupported:i=!1,ttsMuted:c=!1,onTtsToggle:d,onInterrupt:u}=e,m="speaking"===r&&"function"==typeof u;return(0,n.jsxs)("div",{"data-elanous-voice-overlay":!0,"aria-hidden":!t,className:(0,Q.cn)("pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300",t?"pointer-events-auto opacity-100":"opacity-0"),children:[(0,n.jsx)("div",{className:"absolute inset-0 bg-background/60 backdrop-blur-md"}),(0,n.jsxs)("div",{className:"relative mx-4 flex w-full max-w-sm flex-col items-center gap-5 rounded-xl border border-border bg-card px-6 py-7 text-center shadow-xl",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 text-sm",children:[(0,n.jsx)("span",{className:(0,Q.cn)("h-2.5 w-2.5 rounded-full",eh[r],("listening"===r||"speaking"===r||"connecting"===r)&&"animate-pulse"),"aria-hidden":!0}),(0,n.jsx)("span",{className:"font-medium tracking-wide",children:em[r]})]}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:ep[r]}),(0,n.jsx)("button",{type:"button",onClick:m?u:l,"data-elanous-action":m?"voice-overlay-interrupt":"voice-overlay-toggle",className:(0,Q.cn)("inline-flex h-16 w-16 items-center justify-center rounded-full text-white transition-colors",m?"bg-amber-500 hover:bg-amber-400 animate-pulse":"connecting"===r||"processing"===r?"bg-sky-500 hover:bg-sky-400":"error"===r?"bg-rose-600 hover:bg-rose-500":"bg-rose-500 hover:bg-rose-400"),"aria-label":m?"끼어들기":"마이크 끄기",children:m?(0,n.jsx)(ei.A,{className:"h-7 w-7"}):"connecting"===r||"processing"===r?(0,n.jsx)(ec.A,{className:"h-7 w-7 animate-spin"}):"error"===r?(0,n.jsx)(ed.A,{className:"h-7 w-7"}):(0,n.jsx)(s.A,{className:"h-7 w-7"})}),a&&(0,n.jsx)("p",{className:"max-w-xs text-xs text-rose-500",children:a}),(0,n.jsxs)("div",{className:"flex items-center gap-4",children:[i&&d&&(0,n.jsxs)("button",{type:"button",onClick:d,"data-elanous-action":"voice-overlay-tts-toggle",className:"inline-flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground","aria-label":c?"음성 응답 켜기":"음성 응답 끄기","aria-pressed":!c,children:[c?(0,n.jsx)(eu.A,{className:"h-3.5 w-3.5"}):(0,n.jsx)(b.A,{className:"h-3.5 w-3.5"}),(0,n.jsx)("span",{children:c?"음성 응답 OFF":"음성 응답 ON"})]}),(0,n.jsxs)("button",{type:"button",onClick:l,className:"inline-flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground","aria-label":"음성 닫고 텍스트로 돌아가기",children:[(0,n.jsx)(o.A,{className:"h-3.5 w-3.5"}),(0,n.jsx)("span",{children:"음성 끄기"})]})]})]})]})}function eb(e){let{open:t,onClose:r,lines:l}=e,[s,o]=(0,a.useState)(""),i=(0,a.useMemo)(()=>{if(!s.trim())return null;try{return RegExp(s,"i")}catch(e){return null}},[s]),c=(0,a.useMemo)(()=>s.trim().toLowerCase(),[s]),d=(0,a.useMemo)(()=>{let e=l.length>200?l.slice(l.length-200):l;return i?e.filter(e=>i.test(e.category)||i.test(e.event)):c?e.filter(e=>e.category.toLowerCase().includes(c)||e.event.toLowerCase().includes(c)):e},[l,i,c]);return(0,n.jsx)("div",{"data-elanous-debug-tap-drawer":t?"open":"closed",className:(0,Q.cn)("fixed bottom-0 left-0 right-0 z-50 transition-transform duration-200 ease-out","pointer-events-none",t?"translate-y-0":"translate-y-full"),role:"region","aria-label":"Debug Tap Drawer","aria-hidden":!t,children:(0,n.jsxs)("div",{className:(0,Q.cn)("pointer-events-auto mx-auto flex max-h-[60vh] w-full max-w-[1100px] flex-col","rounded-t-md border border-b-0 border-border bg-card shadow-xl"),children:[(0,n.jsxs)("header",{className:"flex items-center justify-between gap-2 border-b border-border/60 px-3 py-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:"Debug Tap"}),(0,n.jsxs)("span",{className:"text-[10px] text-muted-foreground/70","data-elanous-debug-tap-count":d.length,"data-elanous-debug-tap-total":l.length,children:[d.length,"/",l.length]})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("input",{type:"text",placeholder:"regex filter…",value:s,onChange:e=>o(e.target.value),spellCheck:!1,autoComplete:"off",className:(0,Q.cn)("w-40 rounded border border-border bg-background px-2 py-1 text-[11px] font-mono","focus:outline-none focus:ring-1 focus:ring-primary"),"data-elanous-debug-tap-filter":"","aria-label":"Filter debug lines"}),(0,n.jsx)("button",{type:"button",onClick:r,className:"rounded px-2 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground","aria-label":"Close debug drawer","data-elanous-debug-tap-close":"",children:"✕"})]})]}),(0,n.jsx)("ul",{className:"flex-1 overflow-y-auto px-3 py-2 text-[11px] font-mono","data-elanous-debug-tap-list":"",children:0===d.length?(0,n.jsx)("li",{className:"italic text-muted-foreground/60",children:0===l.length?"(no debug lines yet)":"(no matches for filter)"}):d.map((e,t)=>(0,n.jsx)(eg,{line:e},"".concat(e.loggedAt,"-").concat(e.seq,"-").concat(t)))})]})})}function eg(e){let{line:t}=e,r=new Date(t.loggedAt).toISOString().slice(11,23);return(0,n.jsxs)("li",{"data-elanous-debug-tap-line":"","data-elanous-category":t.category,"data-elanous-event":t.event,className:"py-0.5",children:[(0,n.jsxs)("span",{className:"text-muted-foreground/70",children:["[",r,"]"]})," ",(0,n.jsxs)("span",{className:"text-amber-400",children:["[",t.category,"]"]})," ",(0,n.jsx)("span",{className:"text-foreground",children:t.event}),void 0!==t.data&&(0,n.jsxs)("details",{className:"ml-4 text-muted-foreground",children:[(0,n.jsx)("summary",{className:"cursor-pointer select-none text-[10px]",children:"data"}),(0,n.jsx)("pre",{className:"m-0 mt-1 whitespace-pre-wrap break-all text-[10px] text-muted-foreground/80",children:function(e){try{return JSON.stringify(e,null,2)}catch(t){return String(e)}}(t.data)})]})]})}var ex=r(60516),ev=r(56974),ey=r(87969),ew=r(25042),ej=r(9734),ek=r(30158),eN=r(2021);let eS="Other";function eC(e){let{request:t,onSubmit:r,onCancel:a,onChatAboutThis:l}=e;return(0,n.jsx)(ew.lG,{open:null!==t,onOpenChange:e=>{e||a()},children:(0,n.jsx)(ew.Cf,{className:"max-w-2xl",children:t?(0,n.jsx)(eI,{request:t,onSubmit:r,onCancel:a,onChatAboutThis:l}):null})})}function eI(e){let{request:t,onSubmit:r,onCancel:l,onChatAboutThis:s}=e,[o,i]=(0,a.useState)(()=>Object.fromEntries(t.questions.map(e=>[e.id,new Set]))),[c,d]=(0,a.useState)({}),[u,m]=(0,a.useState)({}),p=1===t.questions.length?t.questions[0].header:"Pick options",h=(0,a.useMemo)(()=>{for(let r of t.questions){var e;let t=null!=(e=o[r.id])?e:new Set,n=eR(r,o,u);if(0===t.size&&!n)return!1}return!0},[t.questions,o,u]);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(ew.c7,{children:[(0,n.jsx)(ew.L3,{children:p}),1===t.questions.length?(0,n.jsx)(ew.rr,{children:t.questions[0].question}):(0,n.jsxs)(ew.rr,{children:[t.questions.length," questions"]})]}),(0,n.jsx)(eN.F,{className:"max-h-[60vh] pr-2",children:(0,n.jsx)("div",{className:"flex flex-col gap-6 py-2",children:t.questions.map(e=>{var t;return(0,n.jsx)(eA,{question:e,isSelected:t=>{var r,n,a;return r=e.id,null!=(a=null==(n=o[r])?void 0:n.has(t))&&a},onToggle:t=>{i(r=>{var n;let a={...r},l=new Set(null!=(n=a[e.id])?n:[]);return e.multiSelect?l.has(t)?l.delete(t):l.add(t):(l.clear(),l.add(t),m(t=>({...t,[e.id]:!1}))),a[e.id]=l,a})},otherActive:eR(e,o,u),onToggleOther:()=>{e.multiSelect?m(t=>{var r;return{...t,[e.id]:!(null!=(r=t[e.id])&&r)}}):i(t=>{let r={...t};return r[e.id]=new Set([eS]),r})},otherText:null!=(t=c[e.id])?t:"",onOtherText:t=>d(r=>({...r,[e.id]:t}))},e.id)})})}),(0,n.jsxs)(ew.Es,{className:"flex-wrap gap-2 sm:justify-between",children:[(0,n.jsx)(ej.$,{variant:"ghost",onClick:s,"aria-label":"Chat about this",children:"\uD83D\uDCAC Chat about this"}),(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsx)(ej.$,{variant:"outline",onClick:l,children:"Cancel"}),(0,n.jsx)(ej.$,{onClick:function(){let e={},n={};for(let r of t.questions){var a,l;let t=Array.from(null!=(a=o[r.id])?a:[]);if(eR(r,o,u)&&!t.includes(eS)&&t.push(eS),0!==t.length&&(r.multiSelect?e[r.id]=t:e[r.id]=t[0],t.includes(eS))){let e=(null!=(l=c[r.id])?l:"").trim();e.length>0&&(n[r.id]=e)}}let s={answers:e};Object.keys(n).length>0&&(s.otherText=n),r(s)},disabled:!h,children:"Submit"})]})]})]})}function eA(e){var t,r;let{question:a}=e;return(0,n.jsxs)("section",{className:"flex flex-col gap-2",children:[""!==e.question.id?(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"rounded-full bg-primary/15 px-2 py-0.5 text-xs font-medium text-primary",children:a.header}),a.multiSelect?(0,n.jsx)("span",{className:"text-xs text-muted-foreground",children:"multi-select"}):null]}):null,(0,n.jsxs)("div",{className:"flex flex-col gap-1.5",children:[a.options.map(t=>{var r;return(0,n.jsx)(eE,{multi:null!=(r=a.multiSelect)&&r,option:t,selected:e.isSelected(t.label),onToggle:()=>e.onToggle(t.label)},t.label)}),null==(t=a.includeOther)||t?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(eE,{multi:null!=(r=a.multiSelect)&&r,option:{label:"Other",description:"Type your own response"},selected:e.otherActive,onToggle:e.onToggleOther}),e.otherActive?(0,n.jsx)(ek.p,{value:e.otherText,onChange:t=>e.onOtherText(t.target.value),placeholder:"Type your own response","aria-label":"Other response",className:"ml-8"}):null]}):null]})]})}function eE(e){let{multi:t,option:r,selected:a,onToggle:l}=e;return(0,n.jsxs)("button",{type:"button",role:t?"checkbox":"radio","aria-checked":a,onClick:l,className:"\n flex items-start gap-3 rounded-md border p-3 text-left\n transition-colors\n ".concat(a?"border-primary bg-primary/10":"border-border hover:bg-muted/40","\n "),children:[(0,n.jsx)("span",{className:"mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center ".concat(t?"rounded":"rounded-full"," border ").concat(a?"border-primary bg-primary text-primary-foreground":"border-muted-foreground/40"),"aria-hidden":"true",children:a?t?"✓":"●":null}),(0,n.jsxs)("span",{className:"flex flex-col gap-0.5",children:[(0,n.jsx)("span",{className:"font-medium",children:r.label}),(0,n.jsx)("span",{className:"text-sm text-muted-foreground",children:r.description}),r.preview?(0,n.jsx)("span",{className:"mt-1 rounded bg-muted/40 px-2 py-1 text-xs font-mono text-muted-foreground",children:r.preview}):null]})]})}function eR(e,t,r){var n,a,l;return e.multiSelect?null!=(a=r[e.id])&&a:null!=(l=null==(n=t[e.id])?void 0:n.has(eS))&&l}function eD(e){if(void 0===e)return"";if("string"==typeof e)return e;try{var t;return null!=(t=JSON.stringify(e,null,2))?t:""}catch(e){return""}}function eq(e){let{request:t,receivedAt:r,onChoose:l,onCancel:s}=e,[o,i]=(0,a.useState)(()=>Date.now());(0,a.useEffect)(()=>{if(!t)return;i(Date.now());let e=setInterval(()=>i(Date.now()),1e3);return()=>clearInterval(e)},[t]);let c=t?eD(t.toolCall.rawInput):"",d=t?function(e){if(e&&"object"==typeof e&&!Array.isArray(e)){for(let t of["file_path","filePath","path","command","cmd"])if("string"==typeof e[t])return e[t].slice(0,80)}return eD(e).replace(/\s+/g," ").slice(0,80)}(t.toolCall.rawInput):"",u=Math.max(0,Math.ceil((r+6e4-o)/1e3));return(0,n.jsx)(ew.lG,{open:null!==t,onOpenChange:e=>{!e&&t&&s(t)},children:(0,n.jsx)(ew.Cf,{className:"max-w-lg",children:t&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(ew.c7,{children:[(0,n.jsx)(ew.L3,{children:"이 작업을 실행할까요?"}),(0,n.jsxs)(ew.rr,{children:["도구: ",t.toolCall.title]})]}),d&&(0,n.jsx)("p",{className:"truncate font-mono text-sm",title:d,children:d}),c&&(0,n.jsxs)("details",{className:"text-sm",children:[(0,n.jsx)("summary",{className:"cursor-pointer",children:"자세히"}),(0,n.jsx)("pre",{className:"mt-2 max-h-48 overflow-auto whitespace-pre-wrap break-all rounded bg-muted p-2",children:c})]}),(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","aria-live":"off",children:["남은 시간: ",u,"초"]}),(0,n.jsxs)(ew.Es,{className:"flex-wrap gap-2",children:[(0,n.jsx)(ej.$,{onClick:()=>l(t,"allow_once"),children:"이번만 허용"}),(0,n.jsx)(ej.$,{variant:"outline",onClick:()=>l(t,"allow_always"),children:"이 도구는 항상 허용"}),(0,n.jsx)(ej.$,{variant:"outline",onClick:()=>l(t,"reject_once"),children:"거절"})]})]})})})}let eT={outcome:{outcome:"cancelled"}},eL=["allow_once","allow_always","reject_once","reject_always"],eU="unverified";var eO=r(60750),eM=r(67327);function eF(e,t){var r;return"error"!==t.kind?null:null!=(r=function(e){if(!e||"object"!=typeof e)return null;let{error:t,message:r,holder:n}=e;return"turn_busy"!==t?null:{message:"string"==typeof r?r:"This session is currently receiving input. Please try again when that turn finishes.",holder:"string"==typeof n&&n.trim()?n:null}}(t.payload))?r:e}var eP=r(61897);function eY(e){return"string"==typeof e.mediaType&&e.mediaType.toLowerCase().startsWith("image/")}async function e_(e,t){let r=e.downloadUrl.startsWith("http")?e.downloadUrl:"".concat(t.baseUrl.replace(/\/$/,"")).concat(e.downloadUrl),n={};t.token&&(n.authorization="Bearer ".concat(t.token));let a=await fetch(r,{headers:n});if(!a.ok)throw Error("fetch attachment ".concat(e.id," failed: ").concat(a.status));return function(e){let t=new Uint8Array(e),r="";for(let e=0;e<t.length;e+=32768)r+=String.fromCharCode(...t.subarray(e,e+32768));return btoa(r)}(await a.arrayBuffer())}async function eJ(e,t,r){if(0===t.length)return null;let n=[];for(let a of(e.length>0&&n.push({type:"text",text:e}),t))if(eY(a))try{let e=await e_(a,r);n.push({type:"image",mimeType:a.mediaType,data:e})}catch(t){let e=t instanceof Error?t.message:String(t);n.push({type:"text",text:"[image fetch failed: ".concat(a.filename," — ").concat(e,"]")})}else n.push({type:"resource_link",uri:a.path?"file://".concat(a.path):a.downloadUrl,mimeType:a.mediaType,name:a.filename});return n}let ez="elanous.pwa.pendingCardFollowups";function e$(e,t){try{var r;let n=JSON.parse(null!=(r=e.getItem(ez))?r:"[]");if(!Array.isArray(n))return[];return n.filter(e=>!!e&&"object"==typeof e&&"string"==typeof e.sessionId&&e.sessionId.length>0&&"string"==typeof e.id&&e.id.length>0&&"number"==typeof e.startedAt&&Number.isFinite(e.startedAt)&&e.startedAt<=t&&t-e.startedAt<9e5)}catch(e){return[]}}function eQ(e,t){try{t.length?e.setItem(ez,JSON.stringify(t)):e.removeItem(ez)}catch(e){}}function eG(){try{return window.localStorage}catch(e){return}}async function eK(e,t,r,n){let a=await e.fetchResponse("/v1/card-followup",{...n?{signal:n}:{},method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({attachmentId:t,...void 0===r?{}:{context:r}})});if(!a.ok)throw Error("card followup start failed: ".concat(a.status));let l=await a.json();if("string"!=typeof l.id||!l.id)throw Error("card followup start returned no id");return l.id}async function eB(e,t){let r,{intervalMs:n=3e3,signal:a,onStatus:l,startedAt:s}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=void 0===s?6e5:Math.max(0,s+9e5-Date.now()),i=Date.now()+o,c={status:"failed"},d=new AbortController,u=a?AbortSignal.any([a,d.signal]):d.signal,m=!1,p=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((r,n)=>{let l;if(u.aborted){var s;n(null!=(s=null==a?void 0:a.reason)?s:Error("aborted"));return}let o="undefined"==typeof document?void 0:document,i=()=>{clearTimeout(l),null==o||o.removeEventListener("visibilitychange",c),u.removeEventListener("abort",d)},c=()=>{(null==o?void 0:o.visibilityState)!=="hidden"&&(i(),r())},d=()=>{var e;i(),n(null!=(e=null==a?void 0:a.reason)?e:Error("aborted"))};l=setTimeout(()=>{i(),r()},e),t&&(null==o||o.addEventListener("visibilitychange",c)),u.addEventListener("abort",d,{once:!0})})},h=async()=>{for(;Date.now()<i;){var r,s;if(null==a?void 0:a.aborted)throw null!=(r=a.reason)?r:Error("aborted");if("undefined"!=typeof document&&"hidden"===document.visibilityState){await p(i-Date.now(),!0);continue}let o=await e.fetchResponse("/v1/card-followup/".concat(encodeURIComponent(t)),{signal:u});if(!o.ok)throw Error("card followup poll failed: ".concat(o.status));let d=await o.json();if(null==a?void 0:a.aborted)throw null!=(s=a.reason)?s:Error("aborted");if(m)return c;if(null==l||l(d.status),"done"===d.status||"not-card"===d.status||"failed"===d.status)return d;await p(Math.min(Math.max(0,n),Math.max(0,i-Date.now())))}return null==l||l("failed"),c};try{return await Promise.race([h(),new Promise(e=>{r=setTimeout(()=>{m=!0,d.abort(),null==l||l("failed"),e(c)},o)})])}finally{clearTimeout(r)}}function eH(){var e,t;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{compact:c}=(0,u.K)(),[p,h]=(0,a.useState)(!1),[b,v]=(0,a.useState)(!1),[y,j]=(0,a.useState)(0),[T,L]=(0,a.useState)(0),U=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(!p)return;let e=e=>{U.current&&U.current.contains(e.target)||h(!1)},t=e=>{"Escape"===e.key&&h(!1)};return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t)}},[p]),(0,a.useEffect)(()=>{c||h(!1)},[c]);let{client:O,config:M,sessionId:F,setSessionId:P}=(0,m.Q)(),[Y,_]=(0,a.useState)([]),[J,z]=(0,a.useState)(),[K,B]=(0,a.useState)(!1),[H,W]=(0,a.useState)([]),Z=(0,a.useRef)([]),V=(0,a.useRef)(F),X=(0,a.useRef)(F),ee=(0,a.useRef)(null),et=(0,a.useRef)(0),ei=(0,a.useRef)(0),ec=(0,a.useRef)(!1),[ed,eu]=(0,a.useState)(null),em=V.current!==F&&ee.current!==F?[]:H;(0,a.useLayoutEffect)(()=>{X.current=F,V.current!==F&&(ee.current!==F&&(et.current++,Z.current=[],W([]),_([]),eS.current&&B(!1)),V.current=F,ee.current=null)},[F]);let ep=e=>{Z.current=e,W(e)},[eh,eg]=(0,a.useState)(null),[ew,ej]=(0,a.useState)(null),[ek,eN]=(0,a.useState)([]),eS=(0,a.useRef)(null),eI=(0,a.useRef)(null);(0,a.useEffect)(()=>()=>{var e;eI.current!==X.current&&(null==(e=eS.current)||e.abort())},[F]),(0,a.useEffect)(()=>()=>{var e;null==(e=eS.current)||e.abort()},[]);let[eA,eE]=(0,a.useState)({visible:!1,depth:0});(0,a.useEffect)(()=>{let e=()=>eE(e=>D(e,"end",!1));return window.addEventListener("dragend",e),()=>window.removeEventListener("dragend",e)},[]);let eR=(0,a.useRef)(!1),eD=(0,a.useRef)(null),e_=(0,a.useRef)(null),[ez,eH]=(0,a.useState)(null),eW=(0,a.useMemo)(()=>{try{let e=new URLSearchParams(window.location.search);return"on"===e.get("debug-tap")}catch(e){return!1}},[]),[eZ,eV]=(0,a.useState)(eW),eX=(0,a.useMemo)(()=>{let e=[];for(let t of Y)if(Array.isArray(t.blocks)){for(let r of t.blocks)if("debug_session"===r.kind)for(let t of r.lines)e.push({seq:t.seq,category:t.category,event:t.event,...void 0!==t.data?{data:t.data}:{},loggedAt:t.loggedAt})}return e},[Y]),e0=(0,a.useRef)(async()=>{}),e1=(0,a.useRef)(!1);e1.current=K;let e2=(0,a.useRef)(async()=>{}),e3=O.voiceWsUrl(),e5=(0,a.useCallback)(e=>{let t=e.trim();if(t){if(e1.current)return void(0,g.cY)("chat.voice.skip-pending",{len:t.length});(0,g.cY)("chat.voice.auto-send",{len:t.length}),e0.current(t)}},[]),e4=(0,ev.sS)({wsUrl:e3,...M.token?{token:M.token}:{},onTranscript:e5}),e6=!!M.baseUrl;e2.current=()=>e4.toggle();let[e8,e7]=(0,a.useState)(!1),e9=(0,ey.$)({enabled:e4.active&&!e8,language:"ko-KR"}),te=(0,a.useCallback)(()=>{null==ew||ew.abort(),(0,g.cY)("webterm.chat.stop",{had:!!ew})},[ew]);(0,a.useEffect)(()=>{if(!ew)return;let e=e=>{var t;if("Escape"!==e.key)return;let r=e.target,n=null==r||null==(t=r.tagName)?void 0:t.toLowerCase();"input"===n||"textarea"===n||null!=r&&r.isContentEditable||(e.preventDefault(),te())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[ew,te]),(0,a.useEffect)(()=>{let e=e=>{"m"===e.key.toLowerCase()&&e.shiftKey&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),(0,g.cY)("chat.voice.shortcut.toggle"),e2.current())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]);let tt=(0,a.useCallback)(e=>{eN(t=>[...t,...e]),(0,g.cY)("webterm.chat.attach.queue",{added:e.length,filenames:e.map(e=>e.filename)})},[]),tr=async e=>{let{files:t,tooLarge:r,tooMany:n}=e;if(r&&eM.oR.error("".concat(r," files exceed the 20 MB attachment limit")),n&&eM.oR.error("".concat(n," files exceed the 10-file attachment limit")),0===t.length)return;if(!M.baseUrl)return void eM.oR.error("Daemon URL 미설정 — Settings 에서 입력");let a=await (0,eP.K)(t,{baseUrl:M.baseUrl,...M.token?{token:M.token}:{}}),l=a.filter(e=>e.ok).map(e=>e.meta),s=a.filter(e=>!e.ok);l.length&&(tt(l),eM.oR.success(1===l.length?"\uD83D\uDCCE ".concat(l[0].filename):"\uD83D\uDCCE ".concat(l.length," files attached"))),s.length&&eM.oR.error(1===s.length?"업로드 실패: ".concat(s[0].reason.slice(0,80)):"".concat(s.length," 파일 업로드 실패"))};(0,a.useEffect)(()=>{try{let e=window.sessionStorage.getItem("elanous.pwa.shareAttachments");if(!e)return;window.sessionStorage.removeItem("elanous.pwa.shareAttachments");let t=JSON.parse(e);if(!Array.isArray(t)||0===t.length)return;eN(e=>[...e,...t]);let r=1===t.length?"1 file shared from another app":"".concat(t.length," files shared from another app");eM.oR.success(r),(0,g.cY)("pwa.chat.share-attachments.consume",{count:t.length})}catch(e){(0,g.cY)("pwa.chat.share-attachments.parse-failed",{reason:e instanceof Error?e.message:String(e)})}},[]),(0,a.useEffect)(()=>{if(!F)return;let e=!0;return(async()=>{try{let t=await O.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(F),"?ifExists=1"));if(!e||!(null==t?void 0:t.messages)||0===t.messages.length)return;_(e=>e.some(e=>!e.id.startsWith("m-card-resume-"))?e:[...function(e,t){let r,n,a=[],l=[];for(let o of e){var s;if("tool"===o.role){for(let e of(0===l.length&&(n=o.ts),function(e,t){let r,n=function(e,t){var r,n;let a,l=String(null!=(r=e.toolName)?r:"");try{a=JSON.parse(String(null!=(n=e.toolResult)?n:""))}catch(e){a=void 0}let s=a&&"object"==typeof a&&!Array.isArray(a)?a:void 0,o=null==s?void 0:s._meta,i=o&&"object"==typeof o&&!Array.isArray(o)?o.ui:void 0,c=i&&"object"==typeof i&&!Array.isArray(i)?i.resourceUri:void 0,d=null==s?void 0:s["ui/resourceUri"],u="string"==typeof c?c:"string"==typeof d?d:void 0;return void 0!==u&&""!==u.trim()?{kind:"mcp_app",toolId:t,toolName:l,screenUrl:u,...void 0!==a?{toolResult:a}:{}}:{kind:"tool_use",id:t,name:l,status:"done",...void 0!==s&&void 0!==e.toolArgs?{args:{raw:String(e.toolArgs)}}:{}}}(e,t);try{var a;r=JSON.parse(String(null!=(a=e.toolResult)?a:""))}catch(e){r=void 0}let l=(0,G.uS)(r).map(e=>({kind:"image",...e})),s=[];return(0,G.ki)(s,null!=r?r:e.toolResult),[...l,n,...s]}(o,"restore-tool-".concat(l.length,"-").concat(a.length))))"image"===e.kind&&l.some(t=>"image"===t.kind&&t.src===e.src)||l.push(e);continue}if("user"!==o.role&&"assistant"!==o.role)continue;let e=String(null!=(s=o.content)?s:""),i=String(null!=e?e:"").split("\n").filter(e=>!/^\[tool_(use|result)\]$/.test(e.trim())).join("\n"),c="assistant"===o.role?"assistant":"user";if(""===i.trim()){l.length>0&&"assistant"===c&&(a.push({id:"restore-".concat(a.length),role:c,text:"",blocks:l,timestamp:en(n,t+a.length)}),l=[],n=void 0);continue}let d=i!==e,u=void 0!==r&&r.role===c&&r.text===i&&(d||r.wasStripped)&&0===l.length;if(r={role:c,text:i,wasStripped:d},u)continue;let m=l.length>0&&"assistant"===c?[...l,{kind:"text",text:i}]:void 0,p=en(void 0!==m?n:o.ts,t+a.length);void 0!==m&&(l=[],n=void 0),a.push({id:"restore-".concat(a.length),role:c,text:i,...void 0!==m?{blocks:m}:{},timestamp:p})}return l.length>0&&a.push({id:"restore-".concat(a.length),role:"assistant",text:"",blocks:l,timestamp:en(n,t+a.length)}),a}(t.messages,Date.now()),...e])}catch(e){}})(),()=>{e=!1}},[F,O]);let tn=(0,a.useCallback)(e=>{eN(t=>t.filter(t=>t.id!==e))},[]),ta={client:O,sessionId:F,provider:M.provider,setSessionId:P,daemon:{baseUrl:M.baseUrl,...M.token?{token:M.token}:{}},messages:Y},tl=e=>{_(t=>[...t,e])},ts=async(e,t,r,n,a)=>{var l;let s=await eB(O,e,{signal:n.signal,...void 0===a?{}:{startedAt:a},onStatus:e=>(0,g.cY)("pwa.chat.card-followup",{phase:"poll",status:e})});if(n.signal.aborted||X.current!==t)return"terminal";let o=eG();return(o&&function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Date.now();eQ(e,e$(e,n).filter(e=>e.sessionId!==t||e.id!==r))}(o,t,e),"not-card"===s.status)?(_(e=>e.filter(e=>e.id!==r)),(0,g.cY)("pwa.chat.card-followup",{phase:"fallback",status:s.status}),"not-card"):("done"===s.status&&(null==(l=s.replies)?void 0:l.length)===3&&s.replies.every(e=>"string"==typeof e)?(_(e=>[...e.filter(e=>e.id!==r),...s.replies.map((e,t)=>({id:"".concat(r,"-").concat(t),role:"assistant",text:e,timestamp:Date.now(),meta:{provider:M.provider}}))]),(0,g.cY)("pwa.chat.card-followup",{phase:"complete",status:"done"})):(_(e=>e.map(e=>e.id===r?{...e,text:"명함 정리에 실패했습니다 — 다시 보내 주세요"}:e)),(0,g.cY)("pwa.chat.card-followup",{phase:"complete",status:"failed"})),"terminal")};(0,a.useEffect)(()=>{if(!F)return;let e=eG();if(!e)return;let t=(function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now(),n=e$(e,r);return eQ(e,n),n.filter(e=>e.sessionId===t)})(e,F).map(e=>{let{id:t,startedAt:r}=e,n=new AbortController,a="m-card-resume-".concat(t);return _(e=>e.some(e=>e.id===a)?e:[...e,{id:a,role:"assistant",text:"명함 읽는 중… 조사 중…",timestamp:r,meta:{provider:M.provider}}]),ts(t,F,a,n,r).catch(()=>{n.signal.aborted||X.current!==F||_(e=>e.map(e=>e.id===a?{...e,text:"명함 정리에 실패했습니다 — 다시 보내 주세요"}:e))}),n});return()=>{t.forEach(e=>e.abort())}},[O,F]);let to=async function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];eg(e=>eF(e,{kind:"turn-begin"})),(0,g.cY)("webterm.chat.input",{len:e.length,attachCount:ek.length});let n=t?[]:ek;t||eN([]);let a=t?{ok:!1}:function(e,t){if(1!==t.length||!t[0]||!eY(t[0])||!t[0].id)return{ok:!1};let r=e.trim();if(!r)return{ok:!0,attachmentId:t[0].id};let n=r.replace(/메일\s*초안/g,"메일초안").split(/[\s,]+/).filter(Boolean);return!n.length||n.some(e=>!/^(?:명함|전략|메일초안|crm)$/i.test(e))?{ok:!1}:{ok:!0,attachmentId:t[0].id,context:r}}(e,n),l=!1;if(a.ok){let t=X.current;if(!t){var s;ee.current=t=(0,ea.f6)(),X.current=t,null==(s=r.onSessionAdopt)||s.call(r,t),P(t)}let o=new AbortController;eS.current=o,eI.current=t,l=!0,e.length>0&&tl((0,G.tw)(e)),tl((0,G.$Q)("\uD83D\uDCCE attached: ".concat(n.map(e=>e.filename).join(", "))));let i="m-card-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6));tl({id:i,role:"assistant",text:"명함 읽는 중… 조사 중…",timestamp:Date.now(),meta:{provider:M.provider}}),B(!0),(0,g.cY)("pwa.chat.card-followup",{phase:"start",status:"judging"});try{let e=await eK(O,a.attachmentId,a.context,o.signal);if(o.signal.aborted||X.current!==t)return;let r=eG(),n=Date.now();r&&function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now(),n=e$(e,r).filter(e=>e.sessionId!==t.sessionId||e.id!==t.id);if(!t.sessionId||!t.id||!Number.isFinite(t.startedAt)||t.startedAt>r||r-t.startedAt>=9e5)return eQ(e,n);eQ(e,[...n,t])}(r,{sessionId:t,id:e,startedAt:n});let l=await ts(e,t,i,o,n);if("terminal"===l||o.signal.aborted||X.current!==t)return}catch(e){if(o.signal.aborted||X.current!==t)return;_(e=>e.map(e=>e.id===i?{...e,text:"명함 정리에 실패했습니다 — 다시 보내 주세요"}:e)),(0,g.cY)("pwa.chat.card-followup",{phase:"complete",status:"failed"});return}finally{eS.current===o&&(eS.current=null),o.signal.aborted||X.current!==t||(B(!1),eg(e=>eF(e,{kind:"turn-end"})))}}let o=n.filter(eY),i=n.filter(e=>!eY(e)),c=function(e){if(!e)return!0;let t=e.toLowerCase();return!!("auto"===t||t.startsWith("anthropic")||"anthropic"===t||t.startsWith("codex")||"openai-codex"===t||t.startsWith("openai")||"openai"===t||t.startsWith("gemini")||"gemini"===t||t.startsWith("grok")||"grok"===t||t.startsWith("local"))}(M.provider),d=o.length>0&&c;o.length>0&&!c&&eM.oR.warning("이 모델은 이미지 입력을 지원하지 않습니다 — ".concat(o.length,"개 이미지가 무시됩니다. (vision 모델로 전환 후 재첨부)"));let u=i.map(e=>e.path?"[attached] ".concat(e.path):"").filter(e=>e.length>0),m=u.length>0?"".concat(u.join("\n"),"\n\n").concat(e).trimEnd():e,p=null;if(d&&M.baseUrl)try{p=await eJ(m,o,{baseUrl:M.baseUrl,token:M.token})}catch(t){let e=t instanceof Error?t.message:String(t);(0,g.cY)("webterm.chat.attach.contentblock.error",{msg:e}),eM.oR.error("이미지 첨부 변환 실패 — 텍스트만 전송: ".concat(e)),p=null}!l&&(e.length>0&&tl((0,G.tw)(e)),n.length>0&&tl((0,G.$Q)("\uD83D\uDCCE attached: ".concat(n.map(e=>e.filename).join(", ")))));let h=e?await (0,G.yN)(e,ta):null;if(h){if("__CLEAR__"===h.text)_([]);else{let e=(0,G.$Q)(h.text);h.harnessAsk&&(e.blocks=[{kind:"harness_ask",acceptanceId:h.harnessAsk.acceptanceId}]),tl(e)}h.newSessionId&&(et.current++,ep([]),V.current=h.newSessionId,X.current=h.newSessionId,P(h.newSessionId));return}if(!M.baseUrl)return void tl((0,G.$Q)("error: daemon baseUrl not configured. Visit /settings."));B(!0),eR.current=!0;let f="m-stream-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6));tl({id:f,role:"assistant",text:"",timestamp:Date.now(),meta:{provider:M.provider}});let b=new AbortController;ej(b);let x=0,v=e_.current,y=!!(v&&F&&M.baseUrl),w=null;(0,g.cY)("webterm.chat.runturn.path",{useAcpPath:y,hasAcp:!!v,hasSession:!!F});let j=e=>{_(t=>t.map(t=>t.id===f?{...t,text:e}:t)),e.length>x&&(e9.pushText(e.slice(x)),x=e.length)},k=e=>{_(t=>t.map(t=>t.id===f?{...t,blocks:e}:t))};try{y&&(w=O.connectAcp({sessionId:F}));let{message:e,newSessionId:t}=y?await (0,G.py)(w,m,{...ta,sessionId:await w.ready||F},{signal:b.signal,...p?{userContent:p}:{},onPartial:j,onPartialBlocks:k}):await (0,G.HD)(m,ta,{signal:b.signal,...p?{userContent:p}:{},...eZ?{debugTap:!0}:{},onPartial:j,onPartialBlocks:k,onError:e=>eg(t=>eF(t,{kind:"error",payload:e}))});eg(e=>eF(e,{kind:"turn-end"})),_(t=>t.map(t=>t.id===f?e:t)),t&&t!==F&&X.current===F&&(ee.current=t,X.current=t,P(t)),e9.flush()}catch(r){let e=b.signal.aborted,t=r instanceof Error?r.message:String(r);e9.cancel(),e?(_(e=>e.map(e=>e.id===f?{...e,meta:{...e.meta,stopReason:"aborted"}}:e)),(0,g.cY)("webterm.chat.runturn.stream.abort",{reason:t})):(_(e=>e.filter(e=>e.id!==f)),tl((0,G.$Q)("error: ".concat(t))),eM.oR.error("chat failed: ".concat(t)),(0,g.cY)("webterm.chat.runturn.error",{reason:t,useAcpPath:y}))}finally{null==w||w.close(),B(!1),ej(null),eR.current=!1}},ti=async function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(ec.current||!t&&Z.current.length>0){var r,n;if(!t&&(ek.length>0||/^[\s]*[:/]/.test(e))){eM.oR.info("답이 끝난 뒤 보내 주세요"),z(t=>{var r;return{text:e,id:(null!=(r=null==t?void 0:t.id)?r:0)+1}});return}let a=(r=Z.current,(n={id:++ei.current,text:e}).text.trim()?r.length>=5?{queue:[...r],error:"줄이 찼습니다"}:{queue:[...r,{...n,text:n.text.trim()}]}:{queue:[...r]});a.error?(eM.oR.info(a.error),z(t=>{var r;return{text:e,id:(null!=(r=null==t?void 0:t.id)?r:0)+1}})):ep(a.queue);return}ec.current=!0;let a=et.current,l=X.current;try{await to(e,t)}finally{ec.current=!1,a!==et.current&&(0,g.cY)("webterm.chat.queue.session-changed",{turnSessionId:l,currentSessionId:X.current}),eu({generation:et.current,sessionId:X.current})}};(0,a.useEffect)(()=>{var e;if(ec.current||0===Z.current.length||!ed||ed.generation!==et.current||ed.sessionId!==F)return;let{entry:t,queue:r}={entry:(e=Z.current)[0],queue:e.slice(1)};t&&(ep(r),e0.current(t.text,!0))},[ed]),e0.current=ti,(0,a.useEffect)(()=>{eg(e=>eF(e,{kind:"session-change"}))},[F]),(0,a.useEffect)(()=>{if(!F||!M.baseUrl)return;let e=(0,G.lY)(O,F,{isLocalTurnInFlight:()=>eR.current,provider:M.provider,onPlaceholder:e=>{let{sessionId:t}=e;eg(e=>eF(e,{kind:"turn-begin"}));let r="m-obs-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),n={id:r,role:"assistant",text:"",timestamp:Date.now(),meta:{provider:M.provider}};return(0,g.cY)("webterm.chat.observer.placeholder",{id:r,turnSessionId:t}),_(e=>[...e,n]),eD.current=r,r},onPartialBlocks:(e,t)=>{_(r=>r.map(r=>r.id===e?{...r,blocks:t}:r))},onFinalize:(e,t)=>{eg(e=>eF(e,{kind:"turn-end"})),_(r=>r.map(r=>r.id===e?t:r)),eD.current===e&&(eD.current=null)},onError:(e,t)=>{eg(e=>eF(e,{kind:"error",payload:t})),(0,g.cY)("webterm.chat.observer.error",{placeholderId:e,error:t.error}),_(r=>r.map(r=>r.id===e?{...r,meta:{...r.meta,stopReason:t.error}}:r)),eD.current===e&&(eD.current=null)}});return()=>{e()}},[O,F,M.baseUrl,M.provider]),(0,a.useEffect)(()=>{if(!F||!M.baseUrl)return;let e=O.subscribeChatFeedbackEvents(F,{agentStatus:{onFeedback:e=>{_(t=>{if(0===t.length)return t;for(let r=t.length-1;r>=0;r--){if("assistant"!==t[r].role)continue;let n=t[r],a=Array.isArray(n.blocks)?[...n.blocks]:[];if("applied"!==(0,ex.K4)(a,e))break;let l={...n,blocks:a};return[...t.slice(0,r),l,...t.slice(r+1)]}return t})},onError:e=>{(0,g.cY)("webterm.agent-status.error",e)}},hudSegment:{onFeedback:e=>(0,G.Ju)(e),onError:e=>{(0,g.cY)("webterm.hud-segment.error",e)}}});return()=>{e()}},[O,F,M.baseUrl]),(0,a.useEffect)(()=>{if(!F||!M.baseUrl)return;let e=null;try{e=O.connectAcp({sessionId:F,onSession:e=>{if(e&&e!==F){var t;(0,g.cY)("webterm.chat.acp.session-adopt",{previous:F,issued:e}),X.current===F&&(ee.current=e,X.current=e,null==(t=r.onSessionAdopt)||t.call(r,e),P(e))}}})}catch(e){(0,g.cY)("webterm.chat.acp.connect-failed",{reason:String(e)});return}e_.current=e,eH(e);let t=e;(0,g.x8)(async e=>{let r=JSON.parse(e);return await t.send("elanous/debug-logs/ingest",{records:r.records}),!0});let n=(0,G.ZH)(e,F,{isLocalTurnInFlight:()=>eR.current,isRemoteSseTurnInFlight:()=>null!==eD.current,onPlaceholder:e=>{let{sessionId:t}=e;eg(e=>eF(e,{kind:"turn-begin"}));let r="m-acp-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),n={id:r,role:"assistant",text:"",timestamp:Date.now(),meta:{provider:M.provider}};return(0,g.cY)("webterm.chat.acp.foreign-placeholder",{id:r,turnSessionId:t}),_(e=>[...e,n]),r},onPartialBlocks:(e,t)=>{let r=t.find(e=>"text"===e.kind),n=t.some(e=>"image"===e.kind||"tool_use"===e.kind);_(a=>a.map(a=>a.id===e?{...a,...r?{text:r.text}:{},...n?{blocks:t}:{}}:a))},onFinalize:e=>{(0,g.cY)("webterm.chat.acp.foreign-finalize",{placeholderId:e})}});return()=>{n(),(0,g.x8)(null);try{null==e||e.close()}catch(e){}e_.current===e&&(e_.current=null),eH(null)}},[O,F,M.baseUrl,M.provider]);let tc=function(e){var t;let{acp:r,onComposerPrefill:n}=e,[l,s]=(0,a.useState)(null),o=(0,a.useRef)(null),i=(0,a.useCallback)(e=>{o.current=e,s(e)},[]),c=(0,a.useCallback)(e=>{let t=o.current;t&&(t.resolve(e),i(null))},[i]);(0,a.useEffect)(()=>{if(!r)return;let e=r.onRequest("elanous/ask/request",async e=>{let t=function(e){if(!e||"object"!=typeof e||"string"!=typeof e.id||!e.id||!e.request||"object"!=typeof e.request)return null;let t=e.request;return Array.isArray(t.questions)&&0!==t.questions.length?{id:e.id,request:e.request}:null}(e);if(!t)return{answers:{},cancelled:!0};let r=o.current;return r&&r.resolve({answers:{},cancelled:!0}),await new Promise(e=>{i({request:t.request,resolve:e,askId:t.id})})}),t=r.on("sessionUpdate",()=>{}),n=r.onAny(e=>{var t;if("elanous/ask/cancel"!==e.method||void 0!==e.id)return;let r=(t=e.params)&&"object"==typeof t&&"string"==typeof t.id&&t.id?{id:t.id,..."string"==typeof t.reason?{reason:t.reason}:{}}:null;if(!r)return;let n=o.current;n&&n.askId===r.id&&c({answers:{},cancelled:!0})});return()=>{e(),t(),n();let r=o.current;r&&(r.resolve({answers:{},cancelled:!0}),o.current=null)}},[r,i,c]);let d=(0,a.useCallback)(e=>{c(e)},[c]),u=(0,a.useCallback)(()=>{c({answers:{},cancelled:!0})},[c]),m=(0,a.useCallback)(()=>{let e=o.current;e&&n&&n(e.request),c({answers:{},cancelled:!0})},[c,n]);return{pendingRequest:null!=(t=null==l?void 0:l.request)?t:null,submit:d,cancel:u,chatAboutThis:m}}({acp:ez,onComposerPrefill:e=>{let t=e.questions[0];if(!t)return;let r="[ Q: ".concat(t.question.trim()," ]\n\n");(0,el.vn)(r),z(e=>{var t;return{text:r,id:(null!=(t=null==e?void 0:e.id)?t:0)+1}}),eM.oR.info("\uD83D\uDCAC 입력 영역에 질문 prefill 됨 (Chat about this)")}}),td=function(e){var t,r;let{acp:n,sessionId:l}=e,[s,o]=(0,a.useState)(null),i=(0,a.useRef)(null),c=(0,a.useRef)(l);c.current=l;let d=(0,a.useCallback)((e,t,r)=>{let n=i.current;n&&(!r||n.request===r)&&(i.current=null,clearTimeout(n.timer),o(null),(0,g.cY)("pwa.tool-approval.".concat("cancelled"===t?"cancelled":"decided"),{tool:eU,choice:t}),n.resolve(e))},[]);(0,a.useEffect)(()=>{if(!n)return;let e=n.onRequest("session/request_permission",e=>{let t=function(e){try{if(!e||"object"!=typeof e)return null;let t=e.toolCall;if(!t||"object"!=typeof t||"string"!=typeof e.sessionId||!e.sessionId||"string"!=typeof t.toolCallId||!t.toolCallId||"string"!=typeof t.title||!t.title||!Array.isArray(e.options))return null;let r=e.options.map(e=>{if(!e||"object"!=typeof e||"string"!=typeof e.optionId||!e.optionId||"string"!=typeof e.kind||!eL.includes(e.kind))throw Error("invalid option");return{optionId:e.optionId,kind:e.kind}});if(new Set(r.map(e=>e.optionId)).size!==r.length||new Set(r.map(e=>e.kind)).size!==r.length||["allow_once","allow_always","reject_once"].some(e=>!r.some(t=>t.kind===e)))return null;return{sessionId:e.sessionId,toolCall:{toolCallId:t.toolCallId,title:t.title,...void 0!==t.rawInput?{rawInput:t.rawInput}:{}},options:r}}catch(e){return null}}(e);return t&&t.sessionId===c.current?((0,g.cY)("pwa.tool-approval.requested",{tool:eU,choice:null}),d(eT,"cancelled"),new Promise(e=>{let r={request:t,receivedAt:Date.now(),resolve:e,timer:setTimeout(()=>{i.current===r&&d(eT,"cancelled")},6e4)};i.current=r,o(r)})):((0,g.cY)("pwa.tool-approval.cancelled",{tool:eU,choice:"cancelled"}),eT)}),t="function"==typeof n.onState?n.onState(e=>{("CLOSED"===e||"FAILED"===e)&&d(eT,"cancelled")}):()=>{};return()=>{e(),t(),d(eT,"cancelled")}},[n,d]),(0,a.useEffect)(()=>{i.current&&i.current.request.sessionId!==l&&d(eT,"cancelled")},[l,d]);let u=(0,a.useCallback)((e,t)=>{var r;if((null==(r=i.current)?void 0:r.request)!==e)return;let n=e.options.find(e=>e.kind===t);n&&d({outcome:{outcome:"selected",optionId:n.optionId}},t,e)},[d]),m=(0,a.useCallback)(e=>d(eT,"cancelled",e),[d]);return{pendingRequest:null!=(t=null==s?void 0:s.request)?t:null,receivedAt:null!=(r=null==s?void 0:s.receivedAt)?r:0,choose:u,cancel:m}}({acp:ez,sessionId:F}),tu=(0,n.jsxs)("button",{type:"button",onClick:()=>void e4.toggle(),disabled:!e6,title:e6?null!=(e=e4.errorMsg)?e:eO.g[e4.phase]:"daemon URL 미설정 — Settings 에서 Base URL 입력","data-elanous-action":"chat-voice-toggle",className:(0,Q.cn)("inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium transition-colors",e4.active?"border-rose-500/40 bg-rose-500/10 text-rose-600 hover:bg-rose-500/20":"border-border bg-background text-foreground hover:bg-muted",!e6&&"cursor-not-allowed opacity-50"),children:[(0,n.jsx)("span",{className:(0,Q.cn)("h-2 w-2 rounded-full",eO.x[e4.phase],("listening"===e4.phase||"speaking"===e4.phase)&&"animate-pulse"),"aria-hidden":!0}),e4.active?(0,n.jsx)(s.A,{className:"h-3.5 w-3.5"}):(0,n.jsx)(o.A,{className:"h-3.5 w-3.5"}),(0,n.jsx)("span",{className:"hidden sm:inline",children:eO.g[e4.phase]})]});return(0,n.jsxs)("div",{className:"relative flex h-full flex-col",onPaste:e=>{let t=function(e,t){if(!e)return A([]);let r=[];if(e.items.length>0)for(let t of Array.from(e.items)){if("file"!==t.kind)continue;let e=t.getAsFile();e&&r.push(e)}else r.push(...Array.from(e.files));return A(r.map(e=>({file:e,filename:e.name||"paste-".concat(t,".png")})))}(e.clipboardData,Date.now());(0!==t.files.length||0!==t.tooLarge||0!==t.tooMany)&&(e.preventDefault(),tr(t))},onDragEnter:e=>{eE(t=>D(t,"enter",E(e.dataTransfer)))},onDragLeave:e=>{eE(t=>D(t,"leave",E(e.dataTransfer)))},onDragOver:e=>{E(e.dataTransfer)&&e.preventDefault()},onDrop:e=>{var t;eE(t=>D(t,"drop",E(e.dataTransfer)));let r=A((t=e.dataTransfer)?Array.from(t.files,e=>({file:e,filename:e.name})):[]);(0!==r.files.length||0!==r.tooLarge||0!==r.tooMany)&&(e.preventDefault(),tr(r))},children:[eA.visible&&(0,n.jsx)(R,{}),r.mobileSimple&&c&&(0,n.jsx)(N,{activity:null!=(t=r.mobileActivity)?t:{kind:"loading"},decisions:T,menu:(0,n.jsxs)("div",{ref:U,className:"relative shrink-0",children:[(0,n.jsx)("button",{type:"button","aria-label":"채팅 메뉴","aria-expanded":p,"aria-controls":"chat-mobile-menu",onClick:()=>h(e=>!e),className:"rounded-lg p-1 hover:bg-muted",children:(0,n.jsx)(i.A,{className:"h-5 w-5","aria-hidden":"true"})}),p&&(0,n.jsxs)("div",{id:"chat-mobile-menu",className:"absolute right-0 top-full z-50 mt-2 flex max-h-[70dvh] w-[min(19rem,calc(100vw-1rem))] flex-col gap-2 overflow-y-auto rounded-lg border border-border bg-popover p-3 shadow-lg",children:[(0,n.jsxs)("nav",{"aria-label":"채팅 이동",className:"flex gap-3 text-sm",children:[(0,n.jsx)(d(),{href:"/",className:"rounded px-2 py-1 hover:bg-muted",children:"홈"}),(0,n.jsx)(d(),{href:"/workspace",className:"rounded px-2 py-1 hover:bg-muted",children:"워크스페이스"}),(0,n.jsx)(d(),{href:"/settings",className:"rounded px-2 py-1 hover:bg-muted",children:"설정"})]}),r.conversationButton,(0,n.jsx)(q.Qh,{sessionId:F,...r.onAttachRequest?{onAttachRequest:r.onAttachRequest}:{},...r.onForgetRequest?{onForgetRequest:r.onForgetRequest}:{}}),(0,n.jsx)($,{compact:!0}),(0,n.jsx)(x,{}),(0,n.jsx)(l.vG,{children:(0,n.jsx)(es.rm,{})}),(0,n.jsx)(l.vG,{children:(0,n.jsx)(eo.D,{})}),tu]})]})}),c&&!r.mobileSimple?(0,n.jsxs)("div",{"data-elanous-chat-compact-header":"",className:"flex h-11 max-h-11 min-w-0 shrink-0 items-center gap-2 border-b border-border bg-background px-3 whitespace-nowrap",children:[r.leading&&(0,n.jsx)("div",{className:"shrink-0",children:r.leading}),(0,n.jsx)("div",{className:"min-w-0 flex-1 [&>div]:min-w-0 [&>div]:max-w-full [&>div>div:first-child]:min-w-0 [&>div>div:first-child]:max-w-full [&>div>div:first-child]:overflow-hidden [&>div>div:first-child>span:last-child]:shrink-0 [&>div>div:first-child_span]:min-w-0 [&>div>div:first-child_span]:truncate [&>div>div[role=menu]]:max-w-[calc(100vw-4rem)]",children:(0,n.jsx)(q.Qh,{sessionId:F,...r.onAttachRequest?{onAttachRequest:r.onAttachRequest}:{},...r.onForgetRequest?{onForgetRequest:r.onForgetRequest}:{}})}),(0,n.jsx)("div",{className:"min-w-0 shrink-0",children:(0,n.jsx)($,{compact:!0})}),(0,n.jsx)(x,{}),(0,n.jsxs)("div",{ref:U,className:"relative shrink-0",children:[(0,n.jsx)("button",{type:"button","aria-label":"채팅 더보기","aria-expanded":p,"aria-controls":"chat-header-more",onClick:()=>h(e=>!e),className:"inline-flex h-8 w-8 items-center justify-center rounded-lg hover:bg-muted",children:(0,n.jsx)(i.A,{className:"h-5 w-5","aria-hidden":"true"})}),p&&(0,n.jsxs)("div",{id:"chat-header-more",className:"absolute right-0 top-full z-50 mt-1 flex max-w-[calc(100vw-1.5rem)] flex-col gap-2 rounded-lg border border-border bg-popover p-3 shadow-lg",children:[(0,n.jsx)(l.vG,{children:(0,n.jsx)(es.rm,{})}),(0,n.jsx)(l.vG,{children:(0,n.jsx)(eo.D,{})}),tu]})]})]}):r.mobileSimple&&c?null:(0,n.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-3 border-b border-border bg-background px-4 py-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(q.Qh,{sessionId:F,...r.onAttachRequest?{onAttachRequest:r.onAttachRequest}:{},...r.onForgetRequest?{onForgetRequest:r.onForgetRequest}:{}}),(0,n.jsx)(l.vG,{children:(0,n.jsx)(es.rm,{})}),(0,n.jsx)(l.vG,{children:(0,n.jsx)(eo.D,{})})]}),(0,n.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,n.jsx)($,{}),(0,n.jsx)(x,{}),tu]})]}),!(r.mobileSimple&&c)&&(0,n.jsx)(f,{}),r.mobileSimple&&c&&y+T>0&&(0,n.jsx)("div",{className:"shrink-0 px-3 py-1.5",children:(0,n.jsxs)("button",{type:"button","aria-expanded":b,"aria-controls":"chat-mobile-actions",onClick:()=>v(e=>!e),className:"rounded-full border border-border bg-muted px-3 py-1 text-xs font-medium",children:["승인\xb7결정 ",y+T]})}),r.mobileSimple&&c?(0,n.jsxs)("div",{id:"chat-mobile-actions",children:[(0,n.jsx)(w,{mobileOpen:b,onCount:j}),(0,n.jsx)(k,{mobileOpen:b,onCount:L})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(w,{}),(0,n.jsx)(k,{})]}),!(r.mobileSimple&&c)&&(0,n.jsx)(er,{}),(0,n.jsxs)("div",{className:"relative flex flex-1 min-h-0 flex-col",children:[(0,n.jsx)(S.D,{messages:Y,pending:K,mobileSimple:!!(r.mobileSimple&&c),...r.tabId?{tabId:r.tabId}:{}}),eh&&(0,n.jsxs)("div",{role:"alert",className:"mx-4 mb-3 flex shrink-0 items-start justify-between gap-3 rounded-md border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-foreground","data-elanous-turn-busy-banner":"",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"font-medium",children:"이 대화는 지금 응답 중입니다"}),(0,n.jsx)("p",{className:"text-muted-foreground",children:eh.message}),(0,n.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:eh.holder?"Current input holder: ".concat(eh.holder):"The current input holder is not available."})]}),(0,n.jsx)("button",{type:"button",onClick:()=>eg(null),className:"rounded px-2 py-1 text-xs text-muted-foreground hover:bg-amber-500/10 hover:text-foreground","aria-label":"응답 중 알림 닫기",children:"Dismiss"})]}),(0,n.jsx)(ef,{active:e4.active,phase:e4.phase,errorMsg:e4.errorMsg,onToggle:()=>void e4.toggle(),ttsSupported:e9.supported,ttsMuted:e8,onTtsToggle:()=>e7(e=>!e),onInterrupt:()=>{try{e9.cancel()}catch(e){}e4.interrupt()}})]}),K&&ew&&(0,n.jsxs)("div",{className:"flex shrink-0 items-center justify-end gap-2 border-t border-border bg-muted/30 px-4 py-1.5 text-xs",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"streaming…"}),(0,n.jsx)("button",{type:"button",onClick:te,className:"rounded border border-border bg-background px-2 py-0.5 font-mono hover:bg-muted","data-elanous-action":"chat-stop",title:"Stop the running turn (Esc)",children:"Stop ⎋"})]}),(0,n.jsx)(I,{queue:em,onRemove:e=>{var t;return ep((t=Z.current,t.filter(t=>t.id!==e)))},onClear:()=>ep([])}),(0,n.jsx)(C.V,{onSubmit:ti,prefill:J,attachments:ek,onAttached:tt,onRemoveAttachment:tn,voice:{active:e4.active,phase:e4.phase,dotColor:eO.x[e4.phase],phaseLabel:eO.g[e4.phase],disabled:!e6,onToggle:()=>void e4.toggle()},...r.tabId?{tabId:r.tabId}:{},onListFiles:ez&&F?async e=>{var t,r;let n=await ez.send("elanous/fs/list",{sessionId:F,query:e,limit:50}),a=(null!=(t=n.entries)?t:[]).filter(e=>"string"==typeof(null==e?void 0:e.name)&&"boolean"==typeof(null==e?void 0:e.isDir)&&"string"==typeof(null==e?void 0:e.relPath)).map(e=>({name:e.name,isDir:e.isDir,relPath:e.relPath}));return{cwd:null!=(r=n.cwd)?r:"",entries:a}}:void 0,onListSkills:ez&&F?async e=>{var t;return{entries:(null!=(t=(await ez.send("elanous/skills/list",{sessionId:F,query:e})).entries)?t:[]).filter(e=>"string"==typeof(null==e?void 0:e.name)&&"string"==typeof(null==e?void 0:e.description)).map(e=>({name:e.name,description:e.description}))}}:void 0}),eW&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(eb,{open:eZ,onClose:()=>eV(!1),lines:eX}),!eZ&&(0,n.jsxs)("button",{type:"button",onClick:()=>eV(!0),"data-elanous-debug-tap-reopen":"",className:(0,Q.cn)("fixed bottom-3 right-3 z-40 rounded-full border border-border bg-card px-3 py-1.5","text-[11px] font-mono text-muted-foreground shadow hover:bg-muted hover:text-foreground"),"aria-label":"Reopen debug drawer",title:"Reopen Debug Tap drawer",children:["⌁ debug (",eX.length,")"]})]}),(0,n.jsx)(eC,{request:tc.pendingRequest,onSubmit:tc.submit,onCancel:tc.cancel,onChatAboutThis:tc.chatAboutThis}),(0,n.jsx)(eq,{request:td.pendingRequest,receivedAt:td.receivedAt,onChoose:td.choose,onCancel:td.cancel})]})}var eW=r(8819),eZ=r(21383);function eV(e,t){var r,n;return(null==t?void 0:t.trim())||(null==(n=e.lastMsgPreview)||null==(r=n.trim().split(/\r?\n/)[0])?void 0:r.trim())||"대화"}function eX(e,t){try{"undefined"!=typeof localStorage&&localStorage.setItem(e,t)}catch(e){}}function e0(e){let{onSelect:t}=e,r=(0,m.Q)(),l=(0,L.t)({activePoll:!0}),[s,o]=(0,a.useState)({}),[i,c]=(0,a.useState)(""),[d,u]=(0,a.useState)([]),[p,h]=(0,a.useState)("all"),[f,b]=(0,a.useState)([]),[g,x]=(0,a.useState)(_);(0,a.useEffect)(()=>{let e=()=>{x(_()),j({})};return window.addEventListener(M,e),()=>window.removeEventListener(M,e)},[]);let[v,y]=(0,a.useState)({}),[w,j]=(0,a.useState)({}),k=(0,a.useRef)(new Set),N=e=>{let t=e(_());J(t),x(t)};(0,a.useEffect)(()=>{var e;h(null!=(e=function(e){try{return"undefined"==typeof localStorage?null:localStorage.getItem(e)}catch(e){return null}}(O))?e:"all");let t=!0,n=0,a=()=>{let e=++n;new U(r.client).list().then(r=>{var a;t&&e===n&&u(null!=(a=r.projects)?a:[])}).catch(()=>{})};return a(),window.addEventListener(F,a),()=>{t=!1,window.removeEventListener(F,a)}},[r.client]),(0,a.useEffect)(()=>{let e=!0,t=d.length>0&&"all"!==p&&"none"!==p?"?projectId=".concat(encodeURIComponent(p)):"";return r.client.fetchJson("/v1/sessions/store".concat(t)).then(t=>{var r;if(!e)return;let n=null!=(r=t.sessions)?r:[];b(n),o(Object.fromEntries(n.map(e=>[e.id,e.title])))}).catch(()=>{}),()=>{e=!1}},[r.client,l,d,p]),(0,a.useEffect)(()=>{let e=Object.keys(g).filter(e=>l.some(t=>t.id===e)&&!f.some(t=>t.id===e));if(0===e.length)return;let t=!0;for(let n of e)r.client.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(n),"?ifExists=1")).then(e=>{t&&e.meta&&b(t=>t.some(e=>e.id===n)?t:[...t,e.meta])}).catch(()=>{});return()=>{t=!1}},[f,r.client,g,l]),(0,a.useEffect)(()=>{for(let[e,t]of Object.entries(g)){if(e===r.sessionId||w[e]===t||!l.some(t=>t.id===e)||k.current.has(e))continue;let n=f.find(t=>t.id===e);if(n&&_()[e]===t){if(n.projectId===t||v[e]===t){N(t=>{let r={...t};return delete r[e],r});continue}k.current.add(e),new U(r.client).assign(e,t).then(()=>{y(r=>({...r,[e]:t})),b(r=>r.map(r=>r.id===e?{...r,projectId:t}:r)),_()[e]===t&&N(t=>{let r={...t};return delete r[e],r})}).catch(()=>{j(r=>({...r,[e]:t})),_()[e]===t&&N(t=>{let r={...t};return delete r[e],r})}).finally(()=>{k.current.delete(e)})}}},[v,w,f,r.client,r.sessionId,g,l]);let S=d.some(e=>e.id===p)||"none"===p?p:"all",C=0===d.length||"all"===S?l:l.filter(e=>g[e.id]?g[e.id]===S:"none"===S?!f.some(t=>t.id===e.id&&t.projectId)&&!v[e.id]:v[e.id]===S||f.some(t=>t.id===e.id&&t.projectId===S)),I=[...C].filter(e=>{var t;return"".concat(eV(e,s[e.id])," ").concat(null!=(t=e.lastMsgPreview)?t:"").toLocaleLowerCase().includes(i.trim().toLocaleLowerCase())}).sort((e,t)=>Date.parse(t.lastTurnAt)-Date.parse(e.lastTurnAt)),A=()=>{let e=(0,ea.Zr)();d.length>0&&"all"!==S&&"none"!==S&&N(t=>({...t,[e]:S})),r.setSessionId(e),null==t||t()};return(0,n.jsxs)("nav",{"aria-label":"대화 목록",className:"flex h-full min-h-0 flex-col bg-background",children:[(0,n.jsxs)("div",{className:"shrink-0 space-y-3 border-b border-border p-3",children:[(0,n.jsx)(z,{projects:d,selection:S,onChange:e=>{h(e),eX(O,e)},api:new U(r.client),onCreate:async(e,t)=>{let{project:n}=await new U(r.client).create(e,t);u(e=>[...e,n]),h(n.id),eX(O,n.id),P()}}),(0,n.jsxs)("button",{type:"button",onClick:A,className:"flex w-full items-center gap-2 rounded-lg bg-primary px-3 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90",children:[(0,n.jsx)(eW.A,{className:"h-4 w-4","aria-hidden":"true"})," 새 대화"]}),(0,n.jsxs)("label",{className:"flex items-center gap-2 rounded-lg border border-border bg-muted/30 px-2.5 py-2 focus-within:ring-2 focus-within:ring-ring",children:[(0,n.jsx)(eZ.A,{className:"h-4 w-4 shrink-0 text-muted-foreground","aria-hidden":"true"}),(0,n.jsx)("input",{"aria-label":"대화 검색",type:"search",value:i,onChange:e=>c(e.target.value),placeholder:"대화 검색",className:"min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground"})]})]}),(0,n.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto p-2",children:0===C.length?(0,n.jsxs)("div",{className:"space-y-3 px-2 py-8 text-center text-sm text-muted-foreground",children:[(0,n.jsx)("p",{children:"아직 대화가 없습니다"}),(0,n.jsx)("button",{type:"button",onClick:A,className:"rounded-lg border border-border px-3 py-2 text-foreground hover:bg-muted",children:"+ 새 대화"})]}):0===I.length?(0,n.jsx)("p",{className:"px-2 py-8 text-center text-sm text-muted-foreground",children:"검색 결과가 없습니다"}):(0,n.jsx)("ul",{className:"space-y-1",children:I.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button","aria-current":r.sessionId===e.id?"page":void 0,onClick:()=>{P(),r.setSessionId(e.id),null==t||t()},className:"w-full rounded-lg px-3 py-2.5 text-left transition-colors ".concat(r.sessionId===e.id?"bg-primary/10 text-primary ring-1 ring-inset ring-primary/25":"text-foreground hover:bg-muted"),children:[(0,n.jsx)("span",{className:"block truncate text-sm font-medium",children:eV(e,s[e.id])}),(0,n.jsxs)("span",{className:"mt-1 block truncate text-xs text-muted-foreground",children:[function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now(),r=Date.parse(e);if(!Number.isFinite(r))return"";let n=Math.max(0,Math.floor((t-r)/6e4));if(n<1)return"방금 전";if(n<60)return"".concat(n,"분 전");let a=Math.floor(n/60);if(a<24)return"".concat(a,"시간 전");let l=Math.floor(a/24);return l<7?"".concat(l,"일 전"):new Date(r).toLocaleDateString()}(e.lastTurnAt)," \xb7 ",e.msgCount,"개 메시지"]})]})},e.id))})})]})}var e1=r(35622),e2=r(69147),e3=r(44614),e5=r(89709);function e4(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{compact:r}=(0,u.K)(),l=!!t.mobileSimple&&r,s=(0,e5.DE)(),o=(0,e3.tg)(),{client:i,sessionId:c,setSessionId:d}=(0,m.Q)(),[p,h]=(0,a.useState)(c||"default"),[f,b]=(0,a.useState)(!1);(0,a.useEffect)(()=>{if(!f)return;let e=e=>{"Escape"===e.key&&b(!1)};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[f]);let g=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(g.current===c){g.current=null;return}g.current=null,h(c||"default")},[c]);let x=(0,a.useRef)(t.sessionId),v=(0,a.useRef)(c),y=null!=(e=null==o?void 0:o.state.activeId)?e:null;(0,a.useEffect)(()=>{let e=t.sessionId;if(o&&t.tabId&&e&&c){var r,n;let a=function(e){if(!e.isActive||e.tabSessionId===e.daemonSessionId)return"none";let t=e.prevTabSessionId!==e.tabSessionId,r=e.prevDaemonSessionId!==e.daemonSessionId;return t||!r?"adopt-tab":"record-global"}({isActive:y===t.tabId,tabSessionId:e,daemonSessionId:c,prevTabSessionId:null!=(r=x.current)?r:e,prevDaemonSessionId:null!=(n=v.current)?n:c});"adopt-tab"===a?d(e):"record-global"===a&&o.updateChatTab(t.tabId,{sessionId:c})}x.current=t.sessionId,v.current=c},[o,y,t.tabId,t.sessionId,c,d]);let w=o&&t.tabId?()=>o.openPicker({kind:"attachToTab",tabId:t.tabId}):void 0,j=o&&t.sessionId?async()=>{let e=(0,T.hG)(i);await e.forget(t.sessionId)}:void 0,k=(0,n.jsx)("button",{type:"button",onClick:()=>b(!0),"aria-label":"대화 목록","aria-expanded":f,"aria-controls":"chat-conversation-drawer",className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-lg hover:bg-muted",children:(0,n.jsx)(e1.A,{className:"h-4 w-4","aria-hidden":"true"})}),N=(0,n.jsx)(eH,{onSessionAdopt:e=>{g.current=e},...t.showConversationList&&r&&!l?{leading:k}:{},...l?{mobileSimple:l,mobileActivity:s,conversationButton:k}:{},...w?{onAttachRequest:w}:{},...j?{onForgetRequest:j}:{},...t.tabId?{tabId:t.tabId}:{}},p);return t.showConversationList?(0,n.jsxs)("div",{className:"flex h-full min-h-0 min-w-0",children:[(0,n.jsx)("aside",{className:r?"hidden":"hidden h-full w-[260px] shrink-0 border-r border-border md:block",children:(0,n.jsx)(e0,{})}),(0,n.jsxs)("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col",children:[!r&&(0,n.jsx)("div",{className:"shrink-0 border-b border-border bg-background px-3 py-2 md:hidden",children:(0,n.jsxs)("button",{type:"button",onClick:()=>b(!0),"aria-label":"대화 목록","aria-expanded":f,"aria-controls":"chat-conversation-drawer",className:"inline-flex items-center gap-2 rounded-lg px-2 py-1.5 text-sm font-medium hover:bg-muted",children:[(0,n.jsx)(e1.A,{className:"h-4 w-4","aria-hidden":"true"})," 대화 목록"]})}),(0,n.jsx)("div",{className:"min-h-0 min-w-0 flex-1",children:N})]}),f&&(0,n.jsxs)("div",{className:r?"fixed inset-0 z-50":"fixed inset-0 z-50 md:hidden",children:[(0,n.jsx)("button",{type:"button","aria-label":"대화 목록 닫기",onClick:()=>b(!1),className:"absolute inset-0 bg-black/50"}),(0,n.jsxs)("aside",{id:"chat-conversation-drawer",role:"dialog","aria-modal":"true","aria-label":"대화 목록",className:"relative h-full w-[min(260px,85vw)] bg-background shadow-xl",children:[(0,n.jsx)("button",{type:"button","aria-label":"대화 목록 닫기",onClick:()=>b(!1),className:"absolute right-2 top-2 z-10 rounded p-1 hover:bg-muted",children:(0,n.jsx)(e2.A,{className:"h-4 w-4"})}),(0,n.jsx)(e0,{onSelect:()=>b(!1)})]})]})]}):N}},74780:(e,t,r)=>{function n(e){return{slides:e.slides.map(e=>{let{image:t,caption:r,include:n}=e;return{image:t,caption:r,include:n}}),caption:{hook:e.caption.hook,body:e.caption.body},hashtags:[...e.hashtags],cover:{text:e.cover.text,sub:e.cover.sub},location:e.location}}r.d(t,{$Y:()=>s,LP:()=>i,Mz:()=>n,ll:()=>d,rH:()=>o});class a extends Error{constructor(e,t){super(t),this.status=e,this.name="GraphApprovalsApiError"}}let l={list:"목록을 보려면",decide:"승인하려면",save:"초안을 저장하려면"},s="/app/settings/#bearer-token";function o(e){return e instanceof a&&(401===e.status||403===e.status)}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"decide";return e instanceof a?401===e.status||403===e.status?"".concat(l[t]," 이 기기를 데몬에 연결해야 합니다 — 설정 › 데몬 연결 › 연결 토큰 칸에 토큰을 넣어 주세요."):404===e.status?"이 실행을 찾지 못했습니다. 목록을 다시 확인해 주세요.":409===e.status?"이미 결정된 실행입니다. 목록을 다시 확인해 주세요.":400===e.status?"결정 내용을 확인한 뒤 다시 시도해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요.":e instanceof TypeError?"서버에 연결하지 못했습니다. 연결 상태를 확인해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요."}let c="/v1/graph-approvals";function d(e){var t,r;let n=(null!=(t=e.baseUrl)?t:"").replace(/\/+$/,""),l=null!=(r=e.fetchImpl)?r:fetch;async function s(t,r){let s={...r,headers:{"content-type":"application/json",...e.authHeader?{authorization:e.authHeader}:{}}},o=e.client?await e.client.fetchResponse(t,s):await l("".concat(n).concat(t),s),i=await o.json().catch(()=>null);if(!o.ok){let e=i&&"object"==typeof i&&"error"in i&&"string"==typeof i.error?i.error:"request-failed";throw new a(o.status,e)}return i}return{list:()=>s(c),decide:(e,t,r)=>s("".concat(c,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t)),{method:"POST",body:JSON.stringify({decision:r})}),saveFeedDraft:(e,t,r)=>s("".concat(c,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t),"/feed-draft"),{method:"PUT",body:JSON.stringify(r)}),feedMedia:async(t,r,s)=>{let o="".concat(c,"/").concat(encodeURIComponent(t),"/").concat(encodeURIComponent(r),"/media?path=").concat(encodeURIComponent(s)),i={headers:e.authHeader?{authorization:e.authHeader}:{}},d=e.client?await e.client.fetchResponse(o,i):await l("".concat(n).concat(o),i);if(!d.ok)throw new a(d.status,"media-failed");return d.blob()}}}}}]);