elanous 0.2.12 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/chunks/{1394-ee3795b112907122.js → 1394-931c9827067b2276.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3992-2e522a8ac5f2afde.js → 3992-fe5c06d6b31f8b25.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5250-c78ca295585bbf95.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6511-ff8360be3d65aaa4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6588-ba380869b67c4fa7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7758-0b018a9e4fc56200.js → 7758-85c2b53f731da024.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{8605-0259994816604c49.js → 8605-9da4678f8a310d18.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9906-e7b8b5310a169dfe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/{page-cb169620945d1952.js → page-e5b4e1b256f41076.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-cefe8169e36cf62a.js → page-e49b9b76c565a0b1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-b4f032c893b21cc9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-f14987d5850a31e0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-b433308aad13ceb6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/{page-813c4a52c9d05ca8.js → page-4c1dbb21861beab2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/{page-4731f2c215358937.js → page-c85b816e3b269dbb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/control/{page-a022b257950f39e6.js → page-f6bc66b919b2ea7d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/{page-a2ffc717e04b8b0a.js → page-60603c1e056c9b25.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/{page-b59ee4e70fc18fcf.js → page-a0ea8f5a2341ee6b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-45c5bf04b4a605e6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/{page-c172dabd796eb7a3.js → page-36c6c4183353ac9e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/{page-1efd0cb9e0ed9d13.js → page-cb2eb0fd809980da.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/{page-d5dc7ff69a37b4cf.js → page-31012264da8a341f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-50309aeb0bdd554a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-bc00e964e855f4df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/{page-dfca9b7d2de0b135.js → page-0696ee3fac9fe56c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-793fa536b3a6ef37.js → page-66c27608f651b866.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-6dd3bfbbde2a5c2c.js → page-6ddd2109b7fc3a80.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-4e50b7298c1f69a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/{page-77447356baad75d2.js → page-7a2bf830038a2264.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-1f327f18694fabca.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-e5cef2fe6e4028df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-cf596128d2b420ba.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/{page-6d604227e1664b71.js → page-f672536f14f0969f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/page-b52365662232db89.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/{page-4048543b4b7ad5e0.js → page-e7a6c80f288b1948.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-4c3a3126abed551a.js → page-29a709616df9b050.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/{page-64b0aecb1ca75e75.js → page-fee842d7c2151129.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-78b40a344ed22f24.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-75d199f448171014.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-a011dd5b0bff29c5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/{page-9547b5cec7cf76bf.js → page-d92e32d51ab5157e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-5f21aed6932ef375.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-1e1a53946804debf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/{page-2cddeb9e2aeedc55.js → page-a1833cd43d832601.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/term/{page-e297866051595d81.js → page-63d14a4d8fe1e1c1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/today/{page-baba2e047872fb0f.js → page-2a511d320f762e06.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/{page-e895da4ec9cac345.js → page-1c3e03f88dac1e21.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-c4d5289c2ea97a89.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b91f8952deaeaf27.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-71b43a2588489987.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/{page-2e9e2fb01c9da1c9.js → page-2b256feed331546f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/{page-d62ceb13411ebba4.js → page-505bb96d69a8622c.js} +1 -1
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +13 -13
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +13 -13
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +13 -13
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +13 -13
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +13 -13
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +13 -13
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +13 -13
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +13 -13
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +13 -13
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +13 -13
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +13 -13
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +13 -13
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +13 -13
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +13 -13
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +13 -13
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +13 -13
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +13 -13
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +13 -13
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +13 -13
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +13 -13
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +13 -13
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +13 -13
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +13 -13
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +13 -13
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +14 -14
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +13 -13
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +13 -13
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +13 -13
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +13 -13
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +13 -13
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +13 -13
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +13 -13
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +13 -13
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +13 -13
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +13 -13
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +13 -13
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +13 -13
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +13 -13
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +13 -13
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +13 -13
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +13 -13
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +13 -13
- package/examples/teams/personas/backend.yaml +4 -0
- package/examples/teams/personas/pm.yaml +4 -0
- package/examples/teams/personas/qa.yaml +4 -0
- package/examples/teams/small-product.yaml +20 -0
- package/graphs/lecture/lecture-note.yaml +28 -0
- package/graphs/lecture/recipes.yaml +17 -0
- package/package.json +2 -1
- package/scripts/context-hooks/emit.ts +36 -14
- package/scripts/coord-channel-watch.sh +1 -0
- package/scripts/discord-seat-probe.ts +144 -0
- package/scripts/hq/hq-standby.sh +65 -0
- package/scripts/hq/standby-promote.ts +173 -0
- package/scripts/hq/standby-role.ts +59 -0
- package/scripts/hq/standby-snapshot.ts +226 -0
- package/scripts/hq/standby-verify.ts +219 -0
- package/scripts/lecture-note/node.ts +256 -0
- package/scripts/release-loop/gate-node.ts +53 -15
- package/scripts/release-loop/ops-upgrade-node.ts +17 -5
- package/scripts/test-deterministic.ts +53 -3
- package/skills/omni-crawl/SKILL.md +16 -16
- package/skills/omni-crawl/package-lock.json +1 -544
- package/skills/omni-crawl/package.json +3 -4
- package/skills/omni-crawl/scripts/main.ts +13 -13
- package/skills/omni-crawl/scripts/monitor.ts +8 -8
- package/skills/omni-crawl/src/apify.ts +13 -2
- package/skills/omni-crawl/src/capture.ts +6 -0
- package/skills/omni-crawl/src/registry.ts +2 -2
- package/skills/omni-crawl/src/stdout-json.ts +4 -0
- package/skills/omni-digest/SKILL.md +10 -11
- package/skills/omni-digest/package-lock.json +0 -545
- package/skills/omni-digest/package.json +2 -5
- package/skills/omni-digest/scripts/main.ts +3 -3
- package/skills/omni-digest/src/delegate.ts +5 -5
- package/skills/omni-digest/src/fetch.ts +2 -2
- package/skills/omni-digest/src/media.ts +25 -11
- package/skills/omni-digest/src/visual.ts +3 -2
- package/skills/omni-market/scripts/main.ts +1 -1
- package/skills/omni-market/scripts/stdout-json.ts +4 -0
- package/src/agent/identity-env.ts +11 -0
- package/src/agent-mission/driver.ts +12 -7
- package/src/agent-mission/duo.ts +94 -0
- package/src/agent-mission/pty-decision.ts +1 -1
- package/src/autopilot/track-agent-shadow.ts +2 -1
- package/src/autopilot/track-agent.ts +4 -1
- package/src/boot/daemon-prompt-request.ts +3 -0
- package/src/boot/daemon-prompt-turn.ts +6 -2
- package/src/boot/daemon-runtime.ts +48 -16
- package/src/cli/decisions-cli.ts +51 -19
- package/src/cli/outputs-cli.ts +92 -0
- package/src/cli/persona-cli.ts +29 -0
- package/src/cli/pod-cli.ts +10 -3
- package/src/cli/pr-cli.ts +15 -1
- package/src/cli/release-cli.ts +108 -28
- package/src/context-bus/condense.ts +194 -0
- package/src/context-bus/context-day.ts +82 -0
- package/src/context-bus/context-now-surfaces.ts +15 -2
- package/src/context-bus/long-term-memory.ts +118 -22
- package/src/context-bus/nightly-condense.ts +1 -1
- package/src/decisions/decision-cards.ts +13 -7
- package/src/decisions/decision-ledger.ts +43 -17
- package/src/graph-kinds/registry.ts +2 -2
- package/src/graph-runner/graph-approval-card.ts +2 -2
- package/src/graph-runner/graph-grow.ts +64 -11
- package/src/graph-runner/graph-tick.ts +9 -2
- package/src/graph-runner/runner.ts +81 -17
- package/src/harness/harness-cli-command.ts +27 -1
- package/src/harness/harness-queue-child.ts +37 -0
- package/src/harness/harness-queue.ts +306 -0
- package/src/hooks/github-shadow.ts +72 -2
- package/src/hooks/receiver.ts +4 -2
- package/src/hq/hq.ts +318 -0
- package/src/hq/lease.ts +210 -0
- package/src/hq/ledger-write-target.ts +41 -0
- package/src/index.ts +199 -7
- package/src/intake-plane/discord-seat-work.ts +13 -6
- package/src/intake-plane/linear-wish.ts +44 -0
- package/src/intake-plane/persona-answer.ts +5 -0
- package/src/intake-plane/telegram-seat-work.ts +13 -6
- package/src/intake-plane/wish-card.ts +1 -1
- package/src/loops/checker.ts +178 -0
- package/src/loops/loop-cli.ts +37 -3
- package/src/loops/observe.ts +49 -0
- package/src/loops/orchestrator/overlap.ts +141 -0
- package/src/loops/orchestrator/traffic.ts +150 -0
- package/src/loops/package/verify.ts +125 -0
- package/src/loops/verdict.ts +22 -0
- package/src/maturity/feature-maturity.ts +3 -3
- package/src/memory.ts +37 -4
- package/src/nexus/api/card-followup-route.ts +118 -0
- package/src/nexus/api/decisions-route.ts +68 -0
- package/src/nexus/api/http-server.ts +47 -0
- package/src/nexus/api/personas.ts +2 -1
- package/src/nexus/api/skill-exec-route.ts +97 -0
- package/src/persona/loader.ts +18 -0
- package/src/persona/persona-todo.ts +14 -9
- package/src/persona/presets.ts +2 -1
- package/src/persona/team.ts +105 -0
- package/src/persona/types.ts +4 -0
- package/src/pod-lease/host-lease.ts +130 -20
- package/src/release-loop/landed-but-yellow.ts +12 -0
- package/src/seat-dispatch/seat-ask.ts +57 -12
- package/src/seat-loop/seat-loop.ts +90 -16
- package/src/seat-loop/seat-pack.ts +127 -0
- package/src/self-dev/ask-launch-flow.ts +3 -0
- package/src/self-implement/l8-merge-queue.ts +157 -1
- package/src/steward/launch.ts +5 -1
- package/src/steward/readiness.ts +125 -0
- package/src/steward/rescue.ts +75 -0
- package/src/steward/triage.ts +48 -9
- package/src/task-cards/card-cli.ts +78 -0
- package/src/task-orchestrator/surfaces/pod-lease.ts +18 -6
- package/src/task-orchestrator/surfaces/pod-pool.ts +27 -10
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +38 -8
- package/src/telegram-dispatch-forward.ts +1 -1
- package/src/telegram-fabric-plan.ts +90 -0
- package/src/telegram-project-command.ts +10 -4
- package/src/telegram.ts +5 -0
- package/src/tool-runtime/elanous-control-runtimes.ts +2 -1
- package/src/user-config.ts +94 -10
- package/src/version/packed-revision.json +1 -1
- package/src/workflow-runtime/executor.ts +4 -0
- package/src/workflow-runtime/node-catalog.ts +13 -0
- package/src/workflow-runtime/nodes/knowledge.ts +38 -0
- package/src/workflow-runtime/schema.ts +17 -1
- package/src/workflow-runtime/types.ts +13 -1
- package/apps/pwa/out/_next/static/chunks/1147-466ec15afacc1a65.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7277-0b2fc7c16ba2d64b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9906-482c6619b3fdda20.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9920-5cfdc5e8fd209825.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-d2e35228bc497119.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-5c05b0da4bc1392c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-e0ccdb576812b523.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-a67e11ba962337b5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-e71c84189e8c683e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-1d6a533ce5a6efcb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-490653e8d4cc8852.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-29e961191f6057df.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-c822f55b884d9104.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fa4ccfc432424e52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-9c7e8f744a765daf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-4292d0149020e8a7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-db14d0be7f1c460c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-e5d8072cd7cfef73.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-e6dcb83265530636.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-45248f08d6aecae5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-4344faf20216233b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-698bb29f11864b89.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-bd6a6dc1ddc273f2.js +0 -1
- /package/apps/pwa/out/_next/static/{-6XrAoD3eU7NyMHAE4xPS → D51l8jUBplJrIpWvENsDK}/_buildManifest.js +0 -0
- /package/apps/pwa/out/_next/static/{-6XrAoD3eU7NyMHAE4xPS → D51l8jUBplJrIpWvENsDK}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7580],{5064:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>ep});var r=n(54456),a=n(60500),s=n(86048),l=n.n(s),i=n(61253),o=n(43468),d=n(81707),c=n(67495),u=n(57241);let x=["L0","L1","L2","L3"],f=e=>"string"==typeof e&&e.trim()?e:null;function m(e,t){var n;let r=null==(n=t.q)?void 0:n.trim().toLowerCase();return e.runs.filter(n=>{var a;return(!t.universe||n.universe===t.universe)&&(!t.status||n.status===t.status)&&(!r||n.runId.toLowerCase().includes(r)||(null!=(a=n.pr)?a:"").includes(r)||n.universe.toLowerCase().includes(r))&&(!t.finding||(function(e,t){let n=new Set;for(let r of e.decisions)if(r.runId===t){let e=p(r);e&&n.add(e)}return n})(e,n.runId).has(t.finding))&&(void 0===t.from||Date.parse(n.lastTs)>=t.from)&&(void 0===t.to||Date.parse(n.firstTs)<=t.to)})}function g(e,t){return e.decisions.filter(e=>e.runId===t).slice().reverse()}function p(e){var t;if("VERIFY"!==e.kind)return null;let n=null!=(t=e.why)?t:null;if(!n)return null;let r=n.toLowerCase().replace(/#\d+/g,"#").replace(/:\d+(:\d+)?/g,"").replace(/\d+/g,"n").replace(/\s+/g," ").trim();return r.length>=6?r:null}function h(e){return"PLAN"===e.kind?"author":"ROUTE"===e.kind?"build":"VERIFY"===e.kind||"HEAL"===e.kind?"review":"SHIP"===e.kind?"land":null}function v(e,t){return e.rows.filter(e=>{var n;return(null==(n=e.data)?void 0:n.runId)===t}).map(e=>({ts:e.ts,category:e.category,event:e.event,...(0,u.dl)(e)})).sort((e,t)=>e.ts<t.ts?1:-1)}function b(e){let t=[];if(e.finding&&t.push({key:"finding",label:"같은 지적: ".concat(e.finding.slice(0,24)).concat(e.finding.length>24?"…":"")}),void 0!==e.from&&void 0!==e.to){let n=e=>new Date(e).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1});t.push({key:"time",label:"시간: ".concat(n(e.from),"–").concat(n(e.to))})}return e.universe&&t.push({key:"universe",label:"우주: ".concat(e.universe)}),e.status&&t.push({key:"status",label:"상태: ".concat(e.status)}),e.runId&&t.push({key:"runId",label:"런: ".concat(e.runId.replace(/^run-/,"").slice(0,8))}),e.q&&t.push({key:"q",label:"검색: ".concat(e.q)}),t}function y(e,t){return"universe"===t.kind?{...e,level:"L1",universe:t.id.slice(2)}:"run"===t.kind?{...e,level:"L2",runId:t.id.slice(2)}:"decision"===t.kind?{...e,level:"L3",decision:Number(t.id.slice(2))}:e}function j(e){if("L3"===e.level){let{decision:t,...n}=e;return{...n,level:"L2"}}if("L2"===e.level){let{runId:t,...n}=e;return{...n,level:"L1"}}if("L1"===e.level){let{universe:t,...n}=e;return{...n,level:"L0"}}return e}var w=n(34544),k=n(36306),N=n(28129),I=n(96380),M=n(54887),S=n(3493),L=n(28304),E=n(56308);let R={running:"#818cf8",landed:"#4ade80",blocked:"#fb7185",quiet:"#64748b",ok:"#4ade80",bad:"#fb7185",info:"#c7d2fe"},A={universe:"#67e8f9",run:"#818cf8",stage:"#c7d2fe",decision:"#f0abfc"},C={PLAN:"#38bdf8",ROUTE:"#a78bfa",VERIFY:"#fbbf24",HEAL:"#34d399",ESCALATE:"#fb7185",SHIP:"#4ade80"};function T(e){return("universe"===e.kind?14:"run"===e.kind?7:"stage"===e.kind?9:5)+Math.min(10,Math.sqrt(e.weight)*("universe"===e.kind?2.5:1.2))}function q(e,t,n,r){return{x:t/2-e.x*r,y:n/2-e.y*r,k:r}}function D(e){let{nodes:t,edges:n,selected:s,onSelect:l,onDrill:i,height:o=560}=e,d=(0,a.useRef)(null),[c,u]=(0,a.useState)(null),x=null!=c?c:s,f=(0,a.useMemo)(()=>(function(e,t){let n=new Set;if(!t)return n;for(let r of(n.add(t),e))r.source===t&&n.add(r.target),r.target===t&&n.add(r.source);return n})(n,x),[n,x]);(0,a.useRef)(f).current=f;let m=(0,a.useRef)({onSelect:l,onDrill:i,setHover:u});m.current={onSelect:l,onDrill:i,setHover:u};let g=(0,a.useRef)(null),p=(0,a.useRef)(null),h="".concat(t.map(e=>{var t;return"".concat(e.id,":").concat(e.kind,":").concat(null!=(t=e.status)?t:"",":").concat(e.weight)}).join("|"),"#").concat(n.map(e=>"".concat(e.source,">").concat(e.target,":").concat(e.kind)).join("|")),v=(0,a.useRef)({nodes:t,edges:n});v.current={nodes:t,edges:n},(0,a.useEffect)(()=>{let e=d.current;if(!e)return;let{nodes:t,edges:n}=v.current,r=e.clientWidth||800,a=(0,S.A)(e);a.selectAll("*").remove();let s=a.append("g"),l=t.map(e=>({...e})),i=new Map(l.map(e=>[e.id,e])),c=n.filter(e=>i.has(e.source)&&i.has(e.target)).map(e=>({source:e.source,target:e.target,kind:e.kind})),u=s.append("g").attr("stroke-linecap","round").selectAll("line").data(c).join("line").attr("stroke",e=>"parent"===e.kind?"#f0abfc":"decides"===e.kind?"#a78bfa":"#6366f1").attr("stroke-width",e=>"parent"===e.kind?1.6:1).attr("stroke-dasharray",e=>"parent"===e.kind?"4 3":null).attr("data-trace-edge",e=>"".concat(e.source,">").concat(e.target)),x=s.append("g").selectAll("g").data(l).join("g").attr("data-trace-node",e=>e.id).style("cursor","pointer").on("mouseenter",(e,t)=>m.current.setHover(t.id)).on("mouseleave",()=>m.current.setHover(null)).on("click",(e,t)=>{e.stopPropagation(),m.current.onSelect(t.id)}).on("dblclick",(e,t)=>{if(e.stopPropagation(),null!=t.fx){t.fx=null,t.fy=null,f.alpha(.3).restart();return}m.current.onDrill(t)});x.append("circle").attr("r",e=>T(e)).attr("fill",e=>{var t;return"decision"===e.kind?null!=(t=C[e.label])?t:A.decision:e.status&&R[e.status]||A[e.kind]}).attr("fill-opacity",.9).attr("stroke","#0f172a").attr("stroke-width",1.5),x.append("text").text(e=>"decision"===e.kind?"":e.label).attr("x",e=>T(e)+4).attr("y",3).attr("fill","#e2e8f0").attr("font-size",e=>"universe"===e.kind?14:12).attr("font-family","ui-monospace, SFMono-Regular, monospace").style("pointer-events","none"),x.append("title").text(e=>"".concat(e.kind," \xb7 ").concat(e.label).concat(e.status?" \xb7 ".concat(e.status):""));let f=(0,w.A)(l).force("link",(0,k.A)(c).id(e=>e.id).distance(e=>"contains"===e.kind?70:"decides"===e.kind?40:60).strength(.7)).force("charge",(0,N.A)().strength(e=>"universe"===e.kind?-420:-90)).force("collide",(0,I.A)().radius(e=>T(e)+3)).force("center",(0,M.A)(r/2,o/2)).on("tick",()=>{u.attr("x1",e=>{var t;return null!=(t=e.source.x)?t:0}).attr("y1",e=>{var t;return null!=(t=e.source.y)?t:0}).attr("x2",e=>{var t;return null!=(t=e.target.x)?t:0}).attr("y2",e=>{var t;return null!=(t=e.target.y)?t:0}),x.attr("transform",e=>{var t,n;return"translate(".concat(null!=(t=e.x)?t:0,",").concat(null!=(n=e.y)?n:0,")")})}),h=(0,E.A)().on("start",(e,t)=>{e.active||f.alphaTarget(.2).restart(),t.fx=t.x,t.fy=t.y}).on("drag",(e,t)=>{t.fx=e.x,t.fy=e.y}).on("end",e=>{e.active||f.alphaTarget(0)});x.call(h);let b=!1,y=(0,L.s_)().scaleExtent([.2,6]).on("zoom",e=>{e.sourceEvent&&(b=!0),s.attr("transform",e.transform.toString()),p.current&&(p.current.cur={x:e.transform.x,y:e.transform.y,k:e.transform.k})});a.call(y).on("dblclick.zoom",null).on("click",()=>m.current.onSelect(null));let j=e=>{a.call(y.transform,L.GS.translate(e.x,e.y).scale(e.k))};p.current&&cancelAnimationFrame(p.current.raf),p.current={apply:j,cur:{x:0,y:0,k:1},fit:null,width:r,nodes:l,raf:0},j({x:0,y:0,k:1});let D="function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,F=(e,t,n)=>{let a=p.current;if(!a)return;if(cancelAnimationFrame(a.raf),D||n<=0)return void j(t);let s=performance.now(),l=i=>{let d=Math.min(1,(i-s)/n);j(function(e,t,n,r,a){let s={x:(r/2-e.x)/e.k,y:(a/2-e.y)/e.k},l={x:(r/2-t.x)/t.k,y:(a/2-t.y)/t.k},i=e.k*Math.pow(t.k/e.k,n);return{x:r/2-(s.x+(l.x-s.x)*n)*i,y:a/2-(s.y+(l.y-s.y)*n)*i,k:i}}(e,t,d<.5?4*d*d*d:1-Math.pow(-2*d+2,3)/2,r,o)),d<1&&p.current===a&&(a.raf=requestAnimationFrame(l))};a.raf=requestAnimationFrame(l)};g.current=F;let P=()=>{if(b||0===l.length)return;let e=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:24;if(0===e.length||t<=0||n<=0)return{x:0,y:0,k:1};let a=1/0,s=1/0,l=-1/0,i=-1/0;for(let t of e)a=Math.min(a,t.x-t.r),s=Math.min(s,t.y-t.r),l=Math.max(l,t.x+t.r+90),i=Math.max(i,t.y+t.r);let o=Math.max(.2,Math.min(1.5,(t-2*r)/Math.max(1,l-a),(n-2*r)/Math.max(1,i-s)));return{x:(t-(l-a)*o)/2-a*o,y:(n-(i-s)*o)/2-s*o,k:o}}(l.map(e=>{var t,n;return{x:null!=(t=e.x)?t:0,y:null!=(n=e.y)?n:0,r:T(e)}}),r,o);p.current&&(p.current.fit=e),F(q({x:(r/2-e.x)/e.k,y:(o/2-e.y)/e.k},r,o,.5*e.k),e,700)},U=!1;return f.on("tick.fit",()=>{!U&&.05>f.alpha()&&(U=!0,P())}),f.on("end.fit",()=>{U||(U=!0,P())}),()=>{f.stop(),p.current&&cancelAnimationFrame(p.current.raf)}},[h,o]);let b=(0,a.useRef)(!1);return(0,a.useEffect)(()=>{let e=p.current,t=g.current;if(!e||!t)return;let n=d.current,r=(null==n?void 0:n.clientWidth)||e.width;if(s){var a,l;let n=e.nodes.find(e=>e.id===s);if(!n||null==n.x||null==n.y)return;b.current=!0,t(e.cur,q({x:n.x,y:n.y},r,o,Math.max(1.2,Math.min(3.5,2.4*(null!=(l=null==(a=e.fit)?void 0:a.k)?l:e.cur.k)))),650)}else b.current&&e.fit&&(b.current=!1,t(e.cur,e.fit,550))},[s,o,h]),(0,a.useEffect)(()=>{let e=d.current;if(!e)return;let t=(0,S.A)(e),n=f.size>0;t.selectAll("g[data-trace-node]").style("transition","opacity 250ms").style("opacity",e=>!n||f.has(e.id)?1:.18).select("circle").attr("stroke",e=>e.id===s?"#f8fafc":"#0f172a").attr("stroke-width",e=>e.id===s?3:1.5),t.selectAll("line").style("transition","opacity 250ms").style("opacity",e=>{let t="string"==typeof e.source?e.source:e.source.id,r="string"==typeof e.target?e.target:e.target.id;return!n||f.has(t)&&f.has(r)?.7:.08})},[f,s,t,n]),(0,r.jsx)("svg",{ref:d,className:"w-full rounded-lg bg-[radial-gradient(ellipse_at_center,rgba(79,70,229,.18),rgba(2,6,23,.96)_70%)]",style:{height:o},role:"img","aria-label":"Trace 그래프 — 클릭 선택 \xb7 더블클릭 한 층 내려가기 \xb7 휠 줌 \xb7 끌어 고정","data-trace-graph":!0})}var F=n(29359);let P={running:"#818cf8",landed:"#4ade80",blocked:"#fb7185",quiet:"#64748b"},U={ok:"#4ade80",bad:"#fb7185",info:"#818cf8"};function O(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:6;if(t<=e)return[e];let r=(t-e)/n;return Array.from({length:n+1},(t,n)=>e+n*r)}let z=e=>new Date(e).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1});function H(e){let{runs:t,lo:n,hi:s,range:l,onBrush:i}=e,o=(0,a.useRef)(null),d=t.slice(0,40),c=4+7*d.length+6,u=e=>(e-n)/Math.max(1,s-n)*1e3,x=(0,a.useRef)(i);return x.current=i,(0,a.useEffect)(()=>{let e=o.current;if(!e)return;let t=(0,S.A)(e).select("g[data-brush]"),r=(0,F.n5)().extent([[0,0],[1e3,c]]).on("end",e=>{if(!e.sourceEvent)return;if(!e.selection)return void x.current(null);let[t,r]=e.selection;x.current({from:n+t/1e3*(s-n),to:n+r/1e3*(s-n)})});return t.call(r),l&&t.call(r.move,[u(l.from),u(l.to)]),()=>{t.on(".brush",null)}},[n,s,c,null==l?void 0:l.from,null==l?void 0:l.to]),(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)("div",{className:"pointer-events-none relative h-4 font-mono text-[11px] text-slate-500","aria-hidden":!0,"data-trace-timeline-ticks":!0,children:O(n,s).map((e,t,n)=>(0,r.jsx)("span",{className:"absolute top-0",style:{left:"".concat(u(e)/1e3*100,"%"),transform:t===n.length-1?"translateX(-100%)":0===t?void 0:"translateX(-50%)"},children:z(e)},e))}),(0,r.jsxs)("svg",{ref:o,viewBox:"0 0 ".concat(1e3," ").concat(c),preserveAspectRatio:"none",className:"h-32 w-full rounded-md bg-slate-950/60","data-trace-timeline":!0,"aria-label":"런 시간 축 — 끌어서 구간 고르기",children:[O(n,s).map(e=>(0,r.jsx)("line",{x1:u(e),x2:u(e),y1:0,y2:c,stroke:"#1e293b",strokeDasharray:"2 3"},e)),d.map((e,t)=>{let n=u(Date.parse(e.firstTs)),a=Math.max(n+2,u(Date.parse(e.lastTs)));return(0,r.jsx)("rect",{x:n,y:4+7*t,width:a-n,height:5,rx:1.5,fill:P[e.status],opacity:.85,"data-trace-timeline-run":e.runId},e.runId)}),(0,r.jsx)("g",{"data-brush":!0})]})]})}function _(e){let{bars:t}=e;if(0===t.length)return(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"이 런의 단계 신호가 없다."});let n=Math.min(...t.map(e=>e.start)),a=Math.max(...t.map(e=>e.end),n+6e4),s=e=>90+(e-n)/(a-n)*900;return(0,r.jsxs)("svg",{viewBox:"0 0 ".concat(1e3," ").concat(16*t.length+16),className:"w-full rounded-md bg-slate-950/60","data-trace-gantt":!0,"aria-label":"단계 간트",children:[t.map((e,t)=>(0,r.jsxs)("g",{children:[(0,r.jsx)("text",{x:4,y:14+16*t,fill:"#cbd5e1",fontSize:11,children:u.fQ[e.stage]}),(0,r.jsx)("rect",{x:s(e.start),y:4+16*t,width:Math.max(3,s(e.end)-s(e.start)),height:11,rx:2,fill:U[e.tone],opacity:.85}),(0,r.jsxs)("text",{x:Math.max(s(e.end),s(e.start)+3)+4,y:14+16*t,fill:"#64748b",fontSize:9,fontFamily:"monospace",children:[Math.round((e.end-e.start)/6e4),"분"]})]},e.stage)),(0,r.jsx)("text",{x:90,y:16*t.length+13,fill:"#64748b",fontSize:9,fontFamily:"monospace",children:z(n)}),(0,r.jsx)("text",{x:996,y:16*t.length+13,fill:"#64748b",fontSize:9,fontFamily:"monospace",textAnchor:"end",children:z(a)})]})}let B={grok:"#f0abfc",firecrawl:"#fb923c",tavily:"#38bdf8",ddg:"#a7f3d0",jina:"#fde68a","fc-dev":"#fdba74",capture:"#c4b5fd"},V=e=>{var t,n,r;return null!=(r=null!=(n=B[e])?n:B[null!=(t=e.split("-")[0])?t:""])?r:"#a5b4fc"};function W(e){let{session:t}=e,n=Math.max(1,t.engines.length),a=Math.max(1,...t.engines.map(e=>e.hits)),s=Object.values(t.share).reduce((e,t)=>e+t,0);return(0,r.jsxs)("div",{className:"rounded-lg border border-fuchsia-400/30 bg-slate-950/80 p-2 text-slate-100","data-trace-research":t.key,style:{boxShadow:"0 0 24px #f0abfc22"},children:[(0,r.jsx)("style",{children:"@keyframes rf-grow { from { stroke-dashoffset: 400 } to { stroke-dashoffset: 0 } } @keyframes rf-pulse { 0%,100% { opacity: .5 } 50% { opacity: 1 } } @media (prefers-reduced-motion: reduce) { [data-trace-research] * { animation: none !important } }"}),(0,r.jsxs)("div",{className:"mb-1 flex items-center gap-2 font-mono text-[11px] lg:text-[10.5px] tracking-wider text-slate-400",children:[(0,r.jsxs)("span",{children:["▸ RESEARCH \xb7 엔진 ",t.engines.length]}),(0,r.jsx)("span",{className:"ml-auto",children:new Date(t.ts).toLocaleTimeString(void 0,{hour12:!1})})]}),(0,r.jsxs)("svg",{viewBox:"0 0 ".concat(460," ").concat(200),className:"w-full","aria-label":"엔진 부채꼴",children:[(0,r.jsx)("defs",{children:(0,r.jsxs)("radialGradient",{id:"rf-core",children:[(0,r.jsx)("stop",{offset:"0%",stopColor:"#f5d0fe"}),(0,r.jsx)("stop",{offset:"100%",stopColor:"#f5d0fe00"})]})}),(0,r.jsx)("circle",{cx:50,cy:100,r:26,fill:"url(#rf-core)"}),(0,r.jsx)("circle",{cx:50,cy:100,r:6,fill:"#fdf4ff"}),t.engines.map((e,t)=>{let s=1===n?0:-.55+1.1*t/(n-1),l=Math.min(e.done?70+e.hits/a*190:90,86/Math.max(.2,Math.abs(Math.sin(s))),270),i=50+Math.cos(s)*l,o=100+Math.sin(s)*l,d=e.error?"#fb7185":V(e.id);return(0,r.jsxs)("g",{"data-trace-research-engine":e.id,children:[(0,r.jsx)("line",{x1:50,y1:100,x2:i,y2:o,stroke:d,strokeWidth:e.done?2.5:1.5,strokeDasharray:e.done?"400":"4 4",style:{animation:e.done?"rf-grow .8s ease-out both":"rf-pulse 1.2s ease-in-out infinite",filter:"drop-shadow(0 0 5px ".concat(d,")")}}),(0,r.jsx)("circle",{cx:i,cy:o,r:e.done?4+Math.min(8,e.hits):3,fill:d,style:{filter:"drop-shadow(0 0 8px ".concat(d,")")}}),(0,r.jsxs)("text",{x:i+8,y:o+3,fill:d,fontSize:13,fontFamily:"ui-monospace, monospace",children:[e.id," ",e.error?"오류":e.done?"".concat(e.hits,"건"):"…",null!==e.ms?" \xb7 ".concat((e.ms/1e3).toFixed(1),"s"):""]})]},e.id)})]}),(0,r.jsxs)("p",{className:"line-clamp-2 px-1 text-[11px] text-slate-200",title:t.question,children:["\xab",t.question,"\xbb"]}),s>0&&(0,r.jsx)("div",{className:"mt-1 flex h-2 overflow-hidden rounded-full","aria-label":"출처 비","data-trace-research-share":!0,children:Object.entries(t.share).map(e=>{let[t,n]=e;return(0,r.jsx)("span",{style:{width:"".concat(n/s*100,"%"),background:V(t)},title:"".concat(t," ").concat(n)},t)})}),t.sources.length>0&&(0,r.jsx)("ul",{className:"mt-1 flex flex-wrap gap-1 font-mono text-[11px] lg:text-[10px]","aria-label":"인용 후보",children:t.sources.slice(0,8).map((e,t)=>(0,r.jsx)("li",{className:"rounded px-1.5 py-0.5",style:{color:V(e.engine),background:"".concat(V(e.engine),"1a"),textDecoration:e.merged?"line-through":void 0},title:"".concat(e.url).concat(e.merged?" (중복 합침)":""),children:e.host},"".concat(e.url,"-").concat(t)))})]})}function Y(e){let{label:t,value:n,sub:a,color:s="#e0e7ff"}=e;return(0,r.jsxs)("div",{className:"min-w-0 rounded-lg border border-indigo-400/15 bg-slate-950/70 px-3 py-2",children:[(0,r.jsx)("div",{className:"font-mono text-[11px] lg:text-[10px] tracking-[.14em] text-slate-400",children:t}),(0,r.jsx)("div",{className:"font-mono text-3xl font-semibold tabular-nums",style:{color:s,textShadow:"0 0 18px ".concat(s,"66")},children:n}),a]})}function G(e){var t;let{s:n,i:a,delayBase:s,cited:l}=e,i=V(n.engine),o="".concat(s+.12*a,"s");return(0,r.jsxs)("div",{className:"w-44 rounded-md border bg-slate-950/90 px-2 py-1 text-[11px] lg:text-[10px] leading-tight",style:{borderColor:"".concat(i,"88"),"--c":i,animation:n.merged?"rs-rain .9s ease-out ".concat(o," both, rs-merge 1s ease-in ").concat(s+.12*a+1.4,"s forwards"):l?"rs-rain .9s ease-out ".concat(o," both, rs-cite 1.6s ease-in-out ").concat(s+.12*a+1,"s infinite"):"rs-rain .9s ease-out ".concat(o," both")},title:n.url,"data-research-card":n.merged?"merged":l?"cited":"source",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)("span",{className:"flex h-3 w-3 shrink-0 items-center justify-center rounded-sm text-[11px] lg:text-[8px] font-bold text-slate-950",style:{background:i},"aria-hidden":!0,children:n.host.charAt(0).toUpperCase()}),(0,r.jsx)("span",{className:"truncate font-mono",style:{color:i},children:n.host}),n.scraped&&(0,r.jsx)("span",{className:"ml-auto rounded bg-orange-400/20 px-1 text-[11px] lg:text-[9px] text-orange-200",children:"SCRAPED"})]}),(0,r.jsx)("div",{className:"mt-0.5 line-clamp-2 text-slate-200",children:null!=(t=n.title)?t:n.url.replace(/^https?:\/\//,"")})]})}function Q(e){var t;let{session:n,label:a}=e,s=Math.max(1,n.engines.length),l=n.sources.filter(e=>!e.merged),i=l.filter(e=>e.cited).slice(0,5),o=n.sources.filter(e=>e.engine.startsWith("firecrawl")||"fc-dev"===e.engine),d=n.sources.filter(e=>e.scraped).length,c=n.engines.reduce((e,t)=>{var n;return e+(null!=(n=t.credits)?n:0)},0),u=n.engines.some(e=>"number"==typeof e.credits),x=Math.max(0,...n.engines.map(e=>{var t;return null!=(t=e.ms)?t:0})),f=Math.ceil(s/2),m=e=>{let t=e<f?"left":"right",n="left"===t?e:e-f,r="left"===t?f:s-f;return{side:t,top:n/r,height:1/r,x:"left"===t?300:700,y:(n+.5)/r*600}};return(0,r.jsxs)("div",{className:"relative flex h-full min-h-0 flex-col overflow-hidden rounded-xl border border-indigo-400/20 bg-[radial-gradient(ellipse_at_center,rgba(124,58,237,.22),rgba(2,6,23,.98)_68%)] p-3","data-research-stage-panel":n.key,children:[(0,r.jsxs)("div",{className:"grid grid-cols-5 gap-2",children:[(0,r.jsx)(Y,{label:"ENGINES",value:String(n.engines.length),sub:(0,r.jsx)("div",{className:"mt-1 flex gap-1",children:n.engines.map(e=>(0,r.jsx)("span",{className:"h-1.5 flex-1 rounded-full",style:{background:e.error?"#fb7185":V(e.id),opacity:e.done?1:.35}},e.id))})}),(0,r.jsx)(Y,{label:"SOURCES",value:String(l.length),color:"#f5d0fe",sub:(0,r.jsxs)("div",{className:"font-mono text-[11px] lg:text-[10px] text-slate-500",children:["합침 ",n.sources.length-l.length]})}),(0,r.jsx)(Y,{label:"SCRAPED",value:"".concat(d),color:"#fdba74",sub:(0,r.jsx)("div",{className:"mt-1 h-1.5 rounded-full bg-slate-800",children:(0,r.jsx)("div",{className:"h-1.5 rounded-full bg-orange-400",style:{width:"".concat(o.length?Math.min(100,d/o.length*100):0,"%"),boxShadow:"0 0 8px #fb923c"}})})}),(0,r.jsx)(Y,{label:"CREDITS",value:u?String(c):"—",color:"#fde68a"}),(0,r.jsx)(Y,{label:"TIME",value:x?"".concat((x/1e3).toFixed(1),"s"):"—",color:"#a7f3d0",sub:a?(0,r.jsx)("div",{className:"font-mono text-[11px] lg:text-[10px] text-slate-400",children:a}):null})]}),(0,r.jsxs)("div",{className:"relative min-h-0 flex-1",children:[(0,r.jsxs)("svg",{viewBox:"0 0 ".concat(1e3," ").concat(600),preserveAspectRatio:"none",className:"absolute inset-0 h-full w-full",children:[(0,r.jsx)("defs",{children:(0,r.jsxs)("radialGradient",{id:"rs-q",children:[(0,r.jsx)("stop",{offset:"0%",stopColor:"#fdf4ff"}),(0,r.jsx)("stop",{offset:"100%",stopColor:"#f0abfc00"})]})}),n.engines.map((e,t)=>{let n=m(t),a=e.error?"#fb7185":V(e.id);return(0,r.jsx)("line",{x1:500,y1:300,x2:n.x,y2:n.y,stroke:a,strokeWidth:e.done?3:1.5,strokeDasharray:e.done?"1600":"6 6",style:{animation:e.done?"rs-grow 1.1s ease-out both":void 0,filter:"drop-shadow(0 0 8px ".concat(a,")")}},e.id)}),(0,r.jsx)("circle",{cx:500,cy:300,r:38,fill:"url(#rs-q)",style:{animation:"rs-core 2.4s ease-in-out infinite"}}),(0,r.jsx)("circle",{cx:500,cy:300,r:9,fill:"#fff"})]}),(0,r.jsxs)("div",{className:"pointer-events-none absolute left-1/2 top-1/2 w-[34%] -translate-x-1/2 translate-y-6 text-center text-sm text-slate-100",style:{textShadow:"0 0 12px #000"},children:["\xab",n.question,"\xbb"]}),n.engines.map((e,t)=>{let a=m(t),s=n.sources.filter(t=>t.engine===e.id).slice(0,12),l="right"===a.side;return(0,r.jsxs)("div",{className:"absolute overflow-hidden p-1","data-research-engine-slot":e.id,style:{top:"".concat(100*a.top,"%"),height:"".concat(100*a.height,"%"),width:"".concat(30,"%"),...l?{right:0}:{left:0}},children:[(0,r.jsxs)("div",{className:"mb-1 font-mono text-xs ".concat(l?"text-right":""),style:{color:e.error?"#fb7185":V(e.id),textShadow:"0 0 10px ".concat(V(e.id))},children:[e.id," ",e.error?"오류 \xb7 ".concat(e.error):e.done?"".concat(e.hits,"건"):"…",null!=e.ms?" \xb7 ".concat((e.ms/1e3).toFixed(1),"s"):""]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1 ".concat(l?"justify-end":""),children:s.map((e,n)=>(0,r.jsx)(G,{s:e,i:n,delayBase:.3+.25*t,cited:!e.merged&&!!e.cited},"".concat(e.url,"-").concat(n)))})]},e.id)})]}),(0,r.jsxs)("div",{className:"mx-auto mt-2 w-[min(760px,92%)] rounded-xl border border-violet-300/40 bg-slate-950/90 p-3",style:{boxShadow:"0 0 30px #a78bfa44"},"data-research-why":!0,children:[(0,r.jsx)("div",{className:"font-mono text-[11px] lg:text-[10px] tracking-widest text-violet-300",children:"▸ 판단 \xb7 왜"}),(0,r.jsx)("div",{className:"mt-1 text-sm text-slate-100",children:null!=(t=n.why)?t:(0,r.jsx)("span",{className:"text-slate-500",children:"이 조사 뒤 판단이 아직 없다"})}),i.length>0&&(0,r.jsx)("div",{className:"mt-2 flex flex-wrap gap-1",children:i.map((e,t)=>{var n;return(0,r.jsx)("span",{className:"rounded border px-1.5 py-0.5 font-mono text-[11px] lg:text-[10px]",style:{color:V(e.engine),borderColor:"".concat(V(e.engine),"88"),animation:"rs-fly .8s cubic-bezier(.2,1.4,.4,1) ".concat(2.2+.25*t,"s both"),boxShadow:"0 0 12px ".concat(V(e.engine),"66")},"data-research-cited":!0,children:null!=(n=e.title)?n:e.host},e.url)})})]})]})}function X(e){let{sessions:t,pair:n,onClose:a,onPair:s}=e,l=t[0],i=t.find(e=>"full"===e.tier),o=t.find(e=>"free"===e.tier),d=!!i&&!!o;return(0,r.jsxs)("div",{className:"fixed inset-0 z-50 flex flex-col gap-2 bg-[#020617] p-3 text-slate-100","data-research-stage":!0,children:[(0,r.jsx)("style",{children:"\n@keyframes rs-rain { from { transform: translateY(-110vh) rotate(-4deg); opacity: 0 } 70% { opacity: 1 } to { transform: none; opacity: 1 } }\n@keyframes rs-merge { 0% { box-shadow: 0 0 0 0 #fde68a } 40% { box-shadow: 0 0 28px 6px #fde68a; transform: scale(1.08) } 100% { transform: scale(0); opacity: 0 } }\n@keyframes rs-cite { 0%,100% { box-shadow: 0 0 10px var(--c) } 50% { box-shadow: 0 0 30px 4px var(--c) } }\n@keyframes rs-fly { from { transform: translateY(-46vh) scale(.6); opacity: 0 } to { transform: none; opacity: 1 } }\n@keyframes rs-grow { from { stroke-dashoffset: 1600 } to { stroke-dashoffset: 0 } }\n@keyframes rs-core { 0%,100% { r: 34 } 50% { r: 44 } }\n@media (prefers-reduced-motion: reduce) { [data-research-stage] * { animation: none !important } }\n"}),(0,r.jsxs)("header",{className:"flex items-center gap-3",children:[(0,r.jsx)("span",{className:"text-xl tracking-tight",style:{fontFamily:'Georgia, "Times New Roman", serif'},children:"Elanous"}),(0,r.jsx)("span",{className:"font-mono text-[11px] tracking-[.18em] text-fuchsia-200/80",children:"RESEARCH \xb7 조사"}),(0,r.jsx)("button",{type:"button",disabled:!d,onClick:()=>s(!n),className:"rounded-full border border-fuchsia-300/40 px-3 py-1 font-mono text-[11px] lg:text-[10px] text-fuchsia-100 disabled:opacity-30",title:d?"full ↔ free 두 판 나란히":"full\xb7free 두 조사가 모두 있을 때","data-research-pair":!0,children:n?"한 판":"full ↔ free"}),(0,r.jsx)("button",{type:"button",onClick:a,className:"ml-auto rounded-full border border-slate-600 px-3 py-1 text-xs text-slate-300 hover:bg-slate-800",children:"닫기(Esc)"})]}),l?n&&d?(0,r.jsxs)("div",{className:"grid min-h-0 flex-1 grid-cols-2 gap-2",children:[(0,r.jsx)(Q,{session:i,label:"FULL \xb7 유료 엔진"}),(0,r.jsx)(Q,{session:o,label:"FREE \xb7 무료 폴백"})]}):(0,r.jsx)("div",{className:"min-h-0 flex-1",children:(0,r.jsx)(Q,{session:l,label:l.tier?l.tier.toUpperCase():void 0})}):(0,r.jsx)("p",{className:"m-auto text-sm text-slate-400",children:"이 창에 조사가 없다 — `elanous research` 가 돌면 여기에 뜬다."})]})}function K(e,t){return"public"===e||"stage"===t&&"private"!==e}var J=n(97257);let $=e=>"string"==typeof e&&e.trim()?e:null,Z=e=>"number"==typeof e&&Number.isFinite(e)?e:0;function ee(e){var t;if("harness.decision"===e.category&&"string"==typeof(null==(t=e.data)?void 0:t.runId))return"why";if(!e.category.startsWith("research"))return null;let n=e.event.replace(/^research\./,"");return"query"===n||"result"===n||"source"===n?n:null}var et=n(50738),en=n(15304),er=n(74591);let ea=(0,a.createContext)(null),es=[],el=[60,360,1440],ei={L0:"L0 플릿",L1:"L1 런",L2:"L2 런 한 개",L3:"L3 판단"},eo={running:"도는",landed:"착지",blocked:"막힘",quiet:"끊김\xb7결과 모름"},ed={PLAN:"text-sky-400",ROUTE:"text-violet-400",VERIFY:"text-amber-400",HEAL:"text-emerald-400",ESCALATE:"text-rose-400",SHIP:"text-green-400"};function ec(){return(0,o.Qj)()?(0,r.jsx)(eu,{}):(0,r.jsxs)("div",{className:"mx-auto max-w-2xl space-y-2 p-6",children:[(0,r.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Trace"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Connect to a NEXUS daemon to trace runs."})]})}function eu(){var e,t,n,s,w,k,N;let[I,M]=(0,a.useState)({level:"L1",windowMin:1440}),[S,L]=(0,a.useState)(null),[E,R]=(0,a.useState)("@active"),[A,C]=(0,a.useState)(null),[T,q]=(0,a.useState)(!1),[F,P]=(0,a.useState)(null);(0,a.useEffect)(()=>{let e=new URLSearchParams(window.location.search);P(e.get("capture"));let t=e.get("present");("stage"===t||"research"===t)&&C(t)},[]);let U=(0,a.useRef)(null),O=(0,a.useRef)(!1);(0,a.useEffect)(()=>{M(function(e){var t;let n=new URLSearchParams(e),r=x.includes(null!=(t=n.get("level"))?t:"")?n.get("level"):"L1",a=n.get("status"),s=Number(n.get("window"));return{level:r,...n.get("universe")?{universe:n.get("universe")}:{},...n.get("run")?{runId:n.get("run")}:{},...Number.isInteger(Number(n.get("dec")))&&null!==n.get("dec")&&""!==n.get("dec")?{decision:Number(n.get("dec"))}:{},..."running"===a||"landed"===a||"blocked"===a||"quiet"===a?{status:a}:{},...n.get("q")?{q:n.get("q")}:{},...n.get("finding")?{finding:n.get("finding")}:{},...Number(n.get("from"))>0&&Number(n.get("to"))>Number(n.get("from"))?{from:Number(n.get("from")),to:Number(n.get("to"))}:{},windowMin:Number.isFinite(s)&&s>0?s:1440}}(window.location.search)),O.current=!0},[]),(0,a.useEffect)(()=>{if(!O.current)return;let e=new URLSearchParams(window.location.search),t=new URLSearchParams((function(e){let t=new URLSearchParams;return t.set("level",e.level),e.universe&&t.set("universe",e.universe),e.runId&&t.set("run",e.runId),void 0!==e.decision&&t.set("dec",String(e.decision)),e.status&&t.set("status",e.status),e.q&&t.set("q",e.q),e.finding&&t.set("finding",e.finding),void 0!==e.from&&void 0!==e.to&&(t.set("from",String(Math.round(e.from))),t.set("to",String(Math.round(e.to)))),1440!==e.windowMin&&t.set("window",String(e.windowMin)),"?".concat(t.toString())})(I).replace(/^\?/,""));for(let n of["capture","present"]){let r=e.get(n);r&&t.set(n,r)}let n=t.toString();window.history.replaceState(null,"","".concat(window.location.pathname).concat(n?"?".concat(n):""))},[I]);let{logs:z,runs:B}=(0,c.HI)({store:E,windowMinutes:I.windowMin}),V=K(F,null),Y=K(F,A),G=null!=(n=null==(e=z.data)?void 0:e.logs)?n:es,Q=(0,a.useMemo)(()=>V?(0,et.Er)(G):null,[V,G]),J=(0,a.useMemo)(()=>V?(0,et.yR)(G):G,[V,G]),[ed,ec]=(0,a.useState)(()=>Date.now());(0,a.useEffect)(()=>{ec(Date.now())},[z.dataUpdatedAt]);let eu=(0,o.Qj)(),ex=(0,d.I)({queryKey:["trace","L1",E,I.windowMin],queryFn:()=>eu.getTrace({level:"L1",from:Date.now()-6e4*I.windowMin,...E?{store:E}:{}}),enabled:!!eu,refetchInterval:6e4,retry:!1}),ep=(0,a.useMemo)(()=>{var e,t,n,r,a;return function(e,t,n,r){var a,s,l,i,o,d,c,u,x,f,m;let g=(null!=(a=null==t?void 0:t.nodes)?a:[]).filter(e=>"L1"===e.level&&e.runId);if(0===g.length)return e;let p=new Set(e.runs.map(e=>e.runId)),h=new Map(n.map(e=>[e.runId,e])),v=new Map;for(let e of null!=(s=null==t?void 0:t.edges)?s:[])"parent"===e.kind&&v.set(e.target,e.source);let b=[];for(let e of g){let t=e.runId;if(p.has(t))continue;p.add(t);let n=null!=(d=null!=(o=e.lastTs)?o:e.firstTs)?d:new Date(r).toISOString(),a=(m=null==(l=h.get(t))?void 0:l.status)?/complet|merged|landed|success|done/i.test(m)?"landed":/fail|block|park|cancel|abort|error|stall/i.test(m)?"blocked":/run|progress|active|review|build/i.test(m)?"running":null:null,s=null!=a?a:r-Date.parse(n)<=9e5?"running":"quiet",f=v.get(e.id),y=f&&null!=(c=null==(i=g.find(e=>e.id===f))?void 0:i.runId)?c:null;b.push({runId:t,universe:null!=(u=e.universe)?u:"this",status:s,current:null,stages:{},events:e.count,firstTs:null!=(x=e.firstTs)?x:n,lastTs:n,pr:null,parentRunId:y,decisions:0})}if(0===b.length)return e;let y=[...e.runs,...b],j=new Map(e.universes.map(e=>[e.name,{...e}]));for(let e of b){let t=null!=(f=j.get(e.universe))?f:{name:e.universe,signals:0,runs:0,running:0,blocked:0};t.runs+=1,t.signals+=e.events,"running"===e.status&&(t.running+=1),"blocked"===e.status&&(t.blocked+=1),j.set(e.universe,t)}return{...e,runs:y,universes:[...j.values()].sort((e,t)=>t.runs-e.runs||t.signals-e.signals)}}(function(e,t,n){var r,a,s,l,i;let o=(0,u.Hc)(e,t,n),d=new Map,c=new Map,x=new Map,m=new Map;for(let t of e){let e=null!=(s=t.instance)?s:"this";m.set(e,(null!=(l=m.get(e))?l:0)+1);let n=f(null==(r=t.data)?void 0:r.runId);if(!n)continue;d.has(n)||d.set(n,e);let i=c.get(n);(!i||t.ts<i)&&c.set(n,t.ts);let o=f(null==(a=t.data)?void 0:a.parentRunId);o&&o!==n&&x.set(n,o)}let g=new Map;for(let e of o.stream)e.runId&&g.set(e.runId,(null!=(i=g.get(e.runId))?i:0)+1);let p=o.snapshot.runs.map(e=>{var t,n,r,a;return{runId:e.runId,universe:null!=(t=d.get(e.runId))?t:"this",status:e.blocked?"blocked":"ok"===e.stages.land?"landed":"running",current:e.current,stages:e.stages,events:e.events,firstTs:null!=(n=c.get(e.runId))?n:e.lastTs,lastTs:e.lastTs,pr:e.pr,parentRunId:null!=(r=x.get(e.runId))?r:null,decisions:null!=(a=g.get(e.runId))?a:0}});return{universes:[...m.entries()].map(e=>{let[t,n]=e,r=p.filter(e=>e.universe===t);return{name:t,signals:n,runs:r.length,running:r.filter(e=>"running"===e.status).length,blocked:r.filter(e=>"blocked"===e.status).length}}).sort((e,t)=>t.runs-e.runs||t.signals-e.signals),runs:p,decisions:o.stream,rows:e}}(J,null!=(r=null==(e=B.data)?void 0:e.entries)?r:[],{now:ed,windowMinutes:I.windowMin}),(null==(t=ex.data)?void 0:t.ok)?ex.data:void 0,null!=(a=null==(n=B.data)?void 0:n.entries)?a:[],ed)},[J,B.data,ed,I.windowMin,ex.data]),eh=(0,a.useMemo)(()=>(function(e,t){let n=[],r=[],a=m(e,t);if("L0"===t.level){for(let r of e.universes.filter(e=>!t.universe||e.name===t.universe))n.push({id:"u:".concat(r.name),kind:"universe",label:r.name,weight:Math.max(1,r.runs),status:r.blocked?"bad":r.running?"info":"ok"});for(let e of a)n.some(t=>t.id==="u:".concat(e.universe))&&(n.push({id:"r:".concat(e.runId),kind:"run",label:e.runId.replace(/^run-/,"").slice(0,8),weight:1,status:e.status}),r.push({source:"u:".concat(e.universe),target:"r:".concat(e.runId),kind:"contains"}));return{nodes:n,edges:r}}if("L1"===t.level){let e=new Set(a.map(e=>e.runId));for(let e of a)n.push({id:"r:".concat(e.runId),kind:"run",label:e.runId.replace(/^run-/,"").slice(0,8),weight:1+Math.log2(1+e.events),status:e.status});for(let t of a)t.parentRunId&&e.has(t.parentRunId)&&r.push({source:"r:".concat(t.parentRunId),target:"r:".concat(t.runId),kind:"parent"});return{nodes:n,edges:r}}let s=e.runs.find(e=>e.runId===t.runId);if(!s)return{nodes:n,edges:r};n.push({id:"r:".concat(s.runId),kind:"run",label:s.runId.replace(/^run-/,"").slice(0,8),weight:3,status:s.status});let l="r:".concat(s.runId);for(let e of u.lV){let t=s.stages[e];if(!t)continue;let a="s:".concat(e);n.push({id:a,kind:"stage",label:e,weight:2,status:t}),r.push({source:l,target:a,kind:"next"}),l=a}return g(e,s.runId).forEach((e,t)=>{let a="d:".concat(t);n.push({id:a,kind:"decision",label:e.kind,weight:1}),r.push({source:n.some(t=>{var n;return t.id==="s:".concat(null!=(n=h(e))?n:"")})?"s:".concat(h(e)):"r:".concat(s.runId),target:a,kind:"decides"})}),{nodes:n,edges:r}})(ep,I),[ep,I]),ev=(0,a.useMemo)(()=>m(ep,I).sort((e,t)=>e.lastTs<t.lastTs?1:-1),[ep,I]),eb=(0,a.useMemo)(()=>(function(e,t){var n;let r={};for(let a of m(e,{...t,universe:void 0}))r[a.universe]=(null!=(n=r[a.universe])?n:0)+1;let a={running:0,landed:0,blocked:0,quiet:0};for(let n of m(e,{...t,status:void 0}))a[n.status]+=1;return{universe:r,status:a}})(ep,I),[ep,I]),ey=(0,a.useMemo)(()=>(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,n=new Map;for(let t of e.decisions){var r;let e=p(t);if(!e||!t.runId)continue;let a=null!=(r=n.get(e))?r:new Set;a.add(t.runId),n.set(e,a)}return[...n.entries()].filter(e=>{let[,n]=e;return n.size>=t}).map(e=>{let[t,n]=e;return{sig:t,runs:n.size}}).sort((e,t)=>t.runs-e.runs)})(ep).slice(0,6),[ep]),ej=I.runId&&null!=(s=ep.runs.find(e=>e.runId===I.runId))?s:null,ew=(0,a.useMemo)(()=>(function(e){let t=e.filter(e=>ee(e)).sort((e,t)=>e.ts<t.ts?-1:1),n=[],r=new Map,a=null;for(let e of t){var s,l,i,o,d,c,u,x,f;let t=ee(e),m=null!=(s=e.data)?s:{},g=$(m.runId);if("query"===t){let t=Array.isArray(m.engines)?m.engines.map(e=>$(e)).filter(e=>!!e):[],s={key:"".concat(e.ts,"|").concat(null!=g?g:""),ts:e.ts,question:null!=(i=null!=(l=$(m.question))?l:$(m.query))?i:"(질문 없음)",runId:g,engines:t.map(e=>({id:e,hits:0,ms:null,error:null,done:!1})),sources:[],share:{},tier:"full"===m.tier||"free"===m.tier?m.tier:!0===m.free?"free":null,why:null};n.push(s),g&&r.set(g,s),a=s;continue}if("why"===t){let e=g?r.get(g):null;e&&!e.why&&(e.why=null!=(d=null!=(o=$(m.reason))?o:$(m.why))?d:$(m.what));continue}let p=g&&r.get(g)||a;if(p)if("result"===t){let e=null!=(u=null!=(c=$(m.id))?c:$(m.engine))?u:"engine",t=p.engines.find(t=>t.id===e);t||(t={id:e,hits:0,ms:null,error:null,done:!1},p.engines.push(t)),t.hits=Z(m.hits),t.ms="number"==typeof m.ms?m.ms:null,t.error=$(m.error),t.done=!0,"number"==typeof m.credits&&(t.credits=m.credits)}else{let e=$(m.url);if(!e)continue;let t=null!=(x=$(m.engine))?x:"engine",n=!0===m.merged||!0===m.dedup;p.sources.push({url:e,engine:t,merged:n,host:function(e){try{return new URL(e).host.replace(/^www\./,"")}catch(t){return e.slice(0,40)}}(e),title:$(m.title),cited:!0===m.cited||!0===m.picked,scraped:!0===m.scraped}),n||(p.share[t]=(null!=(f=p.share[t])?f:0)+1)}}return n.reverse()})(J).filter(e=>!I.runId||e.runId===I.runId),[J,I.runId]),ek=ew.slice(0,2),eN=(0,a.useRef)(!1);return eN.current=null!==A,(0,a.useEffect)(()=>{let e=e=>{let t=e.target;if(t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||"SELECT"===t.tagName)){"Escape"===e.key&&t.blur();return}if("/"===e.key){var n;e.preventDefault(),null==(n=U.current)||n.focus()}else"Escape"===e.key&&eN.current?C(null):"Escape"===e.key?(L(null),M(e=>j(e))):"["===e.key?M(e=>"L3"===e.level||"L2"===e.level?j(e):"L1"===e.level?{...e,level:"L0"}:e):"ArrowLeft"===e.key?M(e=>{var t,n;return"L3"===e.level&&(null!=(t=e.decision)?t:0)>0?{...e,decision:(null!=(n=e.decision)?n:0)-1}:e}):"ArrowRight"===e.key?M(e=>{var t;return"L3"===e.level?{...e,decision:(null!=(t=e.decision)?t:0)+1}:e}):"]"===e.key&&M(e=>"L0"===e.level?{...e,level:"L1"}:e)};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]),(0,r.jsx)(ea.Provider,{value:Q,children:(0,r.jsxs)("div",{className:"mx-auto max-w-none space-y-3 p-3 text-slate-100 sm:p-4","data-trace-panel":!0,children:["research"===A&&(0,r.jsx)(X,{sessions:ew,pair:T,onPair:q,onClose:()=>C(null)}),"stage"===A&&(0,r.jsxs)("div",{className:"fixed inset-0 z-50 overflow-auto bg-[#020617] p-2","data-trace-present-stage":!0,children:[(0,r.jsxs)("div",{className:"mb-1 flex items-center gap-2 px-1 font-mono ".concat(Y?"text-sm":"text-[11px]"," text-slate-400"),children:[(0,r.jsx)("span",{children:"TRACE \xb7 발표"}),(0,r.jsx)("span",{className:"truncate text-indigo-200",children:Y?"공개 무대":b(I).map(e=>e.label).join(" › ")||"전체"}),(0,r.jsx)("button",{type:"button",onClick:()=>C(null),className:"ml-auto rounded-full border border-slate-600 px-3 py-0.5 text-slate-300 hover:bg-slate-800",children:"닫기(Esc)"})]}),(0,r.jsx)(eg,{model:ep,lens:I,ledger:null!=(w=null==(t=B.data)?void 0:t.entries)?w:[],now:ed,store:E,publicCapture:Y,rowsAlreadyMasked:V})]}),(0,r.jsxs)("header",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsxs)("h1",{className:"mr-2 flex items-center gap-2 text-xl font-semibold tracking-tight text-foreground",children:[(0,r.jsx)(i.A,{className:"h-5 w-5","aria-hidden":!0})," Trace"]}),(0,r.jsx)("nav",{className:"flex gap-1","aria-label":"해상도",children:x.map(e=>(0,r.jsx)("button",{type:"button",onClick:()=>M(t=>({...t,level:e})),disabled:"L2"===e&&!I.runId||"L3"===e&&void 0===I.decision,"aria-pressed":I.level===e,className:(0,er.cn)("rounded-md border px-2 py-1 font-mono text-xs disabled:opacity-40",I.level===e?"border-primary bg-primary/15 text-foreground":"text-muted-foreground hover:bg-muted"),"data-trace-level":e,children:ei[e]},e))}),(0,r.jsx)("input",{ref:U,value:null!=(k=I.q)?k:"",onChange:e=>M(t=>({...t,q:e.target.value||void 0})),placeholder:"/ 검색 — runId \xb7 PR \xb7 우주",className:"w-56 rounded-md border bg-background px-2 py-1 text-xs text-foreground","aria-label":"검색"}),(0,r.jsx)("select",{"aria-label":"시간 창",value:I.windowMin,onChange:e=>M(t=>({...t,windowMin:Number(e.target.value)})),className:"rounded-md border bg-background px-2 py-1 text-xs text-foreground",children:el.map(e=>(0,r.jsx)("option",{value:e,children:e<60?"".concat(e,"분"):"".concat(e/60,"시간")},e))}),(0,r.jsxs)("select",{"aria-label":"신호 출처",value:E,onChange:e=>R(e.target.value),className:"rounded-md border bg-background px-2 py-1 text-xs text-foreground",children:[(0,r.jsx)("option",{value:"@active",children:"전체(연합)"}),(0,r.jsx)("option",{value:"",children:"이 인스턴스"})]}),(0,r.jsx)("button",{type:"button",onClick:()=>C("stage"),className:"ml-auto rounded-md border border-indigo-400/50 px-2 py-1 text-xs text-indigo-200 hover:bg-indigo-500/10","data-elanous-action":"trace-present-stage",title:"렌즈에 남은 런을 v5 무대 문법으로(녹화용 \xb7 Esc 로 닫기)",children:"✦ 발표 \xb7 무대"}),(0,r.jsx)("button",{type:"button",onClick:()=>C("research"),disabled:0===ek.length,className:"rounded-md border border-fuchsia-400/50 px-2 py-1 text-xs text-fuchsia-200 hover:bg-fuchsia-500/10 disabled:opacity-40","data-elanous-action":"trace-present",title:ek.length?"조사 장면을 전체 무대로(녹화용)":"이 렌즈에 조사가 없다",children:"✦ 발표 \xb7 조사"}),(0,r.jsx)(l(),{href:"/live",className:"rounded-md border px-2 py-1 text-xs text-muted-foreground hover:bg-muted",children:"무대로(Live) →"})]}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-1 font-mono text-[11px]","aria-label":"렌즈","data-trace-crumbs":!0,children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"렌즈 ›"}),0===b(I).length&&(0,r.jsx)("span",{className:"text-muted-foreground",children:"전체"}),b(I).map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>{let t;return t=e.key,M(e=>{let n={...e};return"time"===t?(delete n.from,delete n.to):(delete n[t],"runId"===t&&"L2"===n.level&&(n.level="L1")),n})},className:"rounded-full border border-indigo-400/40 bg-indigo-500/10 px-2 py-0.5 text-indigo-200 hover:bg-indigo-500/20","data-trace-crumb":e.key,children:[e.label," ✕"]},e.key)),(0,r.jsxs)("span",{className:"ml-2 text-muted-foreground",children:["신호 ",J.length," \xb7 런 ",ep.runs.length," \xb7 우주 ",ep.universes.length,z.stores.length>0?" \xb7 저장소 ".concat(z.stores.length).concat(z.registeredStores?"/".concat(z.registeredStores):"").concat(z.failedStores.length?" (".concat(z.failedStores.length," 못 읽음)"):""):"",z.truncated?" \xb7 ⚠ 조회 상한에 닿음":""]})]}),(0,r.jsxs)("div",{className:"flex flex-wrap gap-1 text-[11px]","data-trace-chips":!0,children:[Object.keys(eo).map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>M(t=>({...t,status:t.status===e?void 0:e})),"aria-pressed":I.status===e,className:(0,er.cn)("rounded-full border px-2 py-0.5",I.status===e?"border-primary bg-primary/15 text-foreground":"text-muted-foreground hover:bg-muted"),"data-trace-chip":"status:".concat(e),children:[eo[e]," ",(0,r.jsx)("span",{className:"tabular-nums",children:eb.status[e]})]},e)),(0,r.jsx)("span",{className:"mx-1 text-muted-foreground",children:"\xb7"}),Object.entries(eb.universe).sort((e,t)=>t[1]-e[1]).slice(0,12).map(e=>{let[t,n]=e;return(0,r.jsxs)("button",{type:"button",onClick:()=>M(e=>({...e,universe:e.universe===t?void 0:t})),"aria-pressed":I.universe===t,className:(0,er.cn)("rounded-full border px-2 py-0.5 font-mono",I.universe===t?"border-cyan-400 bg-cyan-500/15 text-foreground":"text-muted-foreground hover:bg-muted"),"data-trace-chip":"universe:".concat(t),children:[t," ",(0,r.jsx)("span",{className:"tabular-nums",children:n})]},t)})]}),ey.length>0&&(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-1 text-[11px]","data-trace-findings":!0,children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"같은 지적 ›"}),ey.map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>M(t=>({...t,finding:t.finding===e.sig?void 0:e.sig})),"aria-pressed":I.finding===e.sig,className:(0,er.cn)("max-w-[28rem] truncate rounded-full border px-2 py-0.5",I.finding===e.sig?"border-amber-400 bg-amber-500/15 text-foreground":"text-muted-foreground hover:bg-muted"),title:e.sig,"data-trace-finding":!0,children:[e.sig," ",(0,r.jsxs)("span",{className:"tabular-nums",children:["\xb7 런 ",e.runs]})]},e.sig))]}),(0,r.jsxs)("div",{className:"grid gap-3 xl:grid-cols-12",children:[(0,r.jsxs)("section",{className:"xl:col-span-8","aria-label":"그래프",children:[(0,r.jsx)(D,{nodes:eh.nodes,edges:eh.edges,selected:"L3"===I.level&&void 0!==I.decision?"d:".concat(I.decision):S,onSelect:L,onDrill:e=>{L(null),M(t=>y(t,e))}}),(0,r.jsx)("div",{className:"mt-2",children:"L0"===I.level||"L1"===I.level?(0,r.jsx)(H,{runs:m(ep,{...I,from:void 0,to:void 0}).sort((e,t)=>e.firstTs<t.firstTs?-1:1),lo:ed-6e4*I.windowMin,hi:ed,range:void 0!==I.from&&void 0!==I.to?{from:I.from,to:I.to}:void 0,onBrush:e=>M(t=>e?{...t,from:e.from,to:e.to}:(()=>{let e={...t};return delete e.from,delete e.to,e})())}):ej?(0,r.jsx)(_,{bars:function(e,t){let n=new Map;for(let r of v(e,t)){if(!r.stage)continue;let e=Date.parse(r.ts),t=n.get(r.stage);t?(t.start=Math.min(t.start,e),t.end=Math.max(t.end,e),"bad"===r.tone?t.tone="bad":"ok"===r.tone&&"bad"!==t.tone&&(t.tone="ok")):n.set(r.stage,{start:e,end:e,tone:r.tone})}return u.lV.filter(e=>n.has(e)).map(e=>({stage:e,...n.get(e)}))}(ep,ej.runId)}):null}),(0,r.jsxs)("p",{className:"mt-1 text-[11px] lg:text-[10px] text-muted-foreground",children:["시간 축을 끌면 그 구간만 \xb7 클릭 = 선택(이웃만 밝게) \xb7 더블클릭 = 한 층 내려가기 \xb7 끌기 = 고정(두 번 누르면 해제) \xb7 휠 = 줌 \xb7 ",(0,r.jsx)("kbd",{children:"/"})," 검색 \xb7 ",(0,r.jsx)("kbd",{children:"Esc"})," 위로"]})]}),(0,r.jsxs)("aside",{className:"space-y-2 xl:col-span-4","aria-label":"옆 패널",children:[ek.map(e=>(0,r.jsx)(W,{session:e},e.key)),"L3"===I.level&&ej?(0,r.jsx)(em,{runId:ej.runId,universe:ej.universe,store:E,index:null!=(N=I.decision)?N:0,model:ep,onIndex:e=>M(t=>({...t,decision:e}))}):"L2"!==I.level?(0,r.jsxs)("div",{className:"rounded-lg border bg-card/60",children:[(0,r.jsxs)("h2",{className:"border-b px-3 py-1.5 font-mono text-[11px] tracking-wider text-muted-foreground",children:["▸ RUNS \xb7 ",ev.length]}),(0,r.jsxs)("ul",{className:"max-h-[520px] divide-y overflow-auto text-xs","data-trace-runs":!0,children:[ev.slice(0,120).map(e=>(0,r.jsx)("li",{children:(0,r.jsxs)("button",{type:"button",onClick:()=>L("r:".concat(e.runId)),onDoubleClick:()=>M(t=>y(t,{id:"r:".concat(e.runId),kind:"run"})),className:(0,er.cn)("flex w-full items-center gap-2 px-3 py-1.5 text-left hover:bg-muted/40",S==="r:".concat(e.runId)&&"bg-primary/10"),"data-trace-run":e.runId,children:[(0,r.jsx)("span",{className:(0,er.cn)("h-2 w-2 shrink-0 rounded-full","blocked"===e.status?"bg-rose-400":"landed"===e.status?"bg-green-400":"bg-indigo-400")}),(0,r.jsx)("span",{className:"w-20 shrink-0 truncate font-mono",children:e.runId.replace(/^run-/,"").slice(0,8)}),(0,r.jsx)("span",{className:"w-14 shrink-0 text-muted-foreground",children:e.current?u.fQ[e.current]:"—"}),(0,r.jsx)("span",{className:"min-w-0 flex-1 truncate font-mono text-[11px] lg:text-[10px] text-muted-foreground",children:e.universe}),e.pr&&(0,r.jsxs)("span",{className:"font-mono text-[11px] lg:text-[10px]",children:["#",e.pr]}),(0,r.jsx)("span",{className:"w-12 shrink-0 text-right font-mono text-[11px] lg:text-[10px] text-muted-foreground",children:(0,u.qo)(e.lastTs)})]})},e.runId)),0===ev.length&&(0,r.jsx)("li",{className:"px-3 py-6 text-center text-muted-foreground",children:"이 렌즈에 런이 없다 — 빵부스러기에서 칸을 빼 본다."})]})]}):ej?(0,r.jsx)(ef,{runId:ej.runId,store:E,model:ep,onPick:e=>M(t=>({...t,level:"L3",decision:e}))}):(0,r.jsxs)("p",{className:"rounded-lg border p-3 text-xs text-muted-foreground",children:["이 창에 런 ",I.runId," 가 없다 — 창을 넓히거나 출처를 \xab전체\xbb로."]})]})]}),("L2"===I.level||"L3"===I.level)&&ej&&(0,r.jsx)(en.RT,{runId:ej.runId,run:{runId:ej.runId,stages:ej.stages,current:ej.current,lastTs:ej.lastTs,events:ej.events,blocked:"blocked"===ej.status,pr:ej.pr,ledgerStatus:null},lines:v(ep,ej.runId).map(e=>"".concat((0,u.qo)(e.ts)," ").concat(e.category," ").concat(e.event)),onClose:()=>M(e=>j(e))})]})})}function ex(e,t,n){let r=(0,o.M1)(),s=(0,d.I)({queryKey:["trace","L3",e,t],queryFn:()=>r.getTrace({level:"L3",runId:e,limit:1e3,q:"harness.decision",...t?{store:t}:{}}),refetchInterval:3e4,retry:!1}),l=(0,a.useContext)(ea);return(0,a.useMemo)(()=>{var t,r,a,i;let o=(null==(t=s.data)?void 0:t.ok)?(i=l?(0,et.cj)(s.data.events,l):s.data.events,i.filter(t=>t.runId===e&&u.jg.includes(t.kind)).slice().sort((e,t)=>e.ts<t.ts?-1:+(e.ts>t.ts)).map(e=>{var t,n,r,a,s;return{ts:e.ts,kind:e.kind,runId:null!=(t=e.runId)?t:null,what:e.what,why:null!=(n=e.why)?n:null,purpose:null!=(r=e.purpose)?r:null,target:null!=(a=e.target)?a:null,..."number"==typeof e.paths?{paths:e.paths}:Array.isArray(e.paths)?{paths:e.paths.length}:{},logId:e.refs.logId,pr:void 0!==e.refs.pr?String(e.refs.pr).replace(/^#/,""):null,commit:null!=(s=e.refs.commit)?s:null,universe:e.universe}})):[];if(o.length>0)return{chain:o,source:"server",note:"서버 /v1/trace".concat((null==(r=s.data)?void 0:r.truncated)?" \xb7 상한에 걸림":"")};let d=s.isLoading?"서버 조회 중":s.error?"서버 조회 실패: ".concat(String(null!=(a=s.error.message)?a:s.error).slice(0,60)):"서버 0건";return{chain:g(n,e),source:"local",note:"이 창 조회 \xb7 ".concat(d)}},[s.data,s.isLoading,s.error,n,e,l])}function ef(e){let{runId:t,store:n,model:a,onPick:s}=e,l=a.runs.find(e=>e.runId===t),{chain:i,source:o,note:d}=ex(t,n,a);return(0,r.jsxs)("div",{className:"space-y-2 rounded-lg border bg-card/60 p-3 text-xs","data-trace-run-detail":t,children:[(0,r.jsxs)("div",{className:"font-mono text-[11px] text-muted-foreground",children:[t," \xb7 ",l.universe,l.parentRunId?" \xb7 부모 ".concat(l.parentRunId.replace(/^run-/,"").slice(0,8)):""]}),(0,r.jsx)("div",{className:"flex gap-1","aria-label":"단계",children:["author","decompose","build","gate","review","land"].map(e=>{let t=l.stages[e];return(0,r.jsx)("span",{className:(0,er.cn)("flex-1 rounded px-1 py-1 text-center text-[11px] lg:text-[10px]",!t&&"bg-muted text-muted-foreground","info"===t&&"bg-indigo-500/30","ok"===t&&"bg-green-600/40","bad"===t&&"bg-rose-500/40",l.current===e&&"ring-1 ring-violet-300"),children:u.fQ[e]},e)})}),(0,r.jsxs)("h3",{className:"pt-1 font-mono text-[11px] tracking-wider text-muted-foreground",children:["▸ 판단 사슬 \xb7 ",i.length," ",(0,r.jsxs)("span",{className:(0,er.cn)("ml-1 rounded px-1","server"===o?"bg-emerald-500/15 text-emerald-300":"bg-muted"),"data-trace-chain-source":o,children:["원천: ",d]})]}),0===i.length?(0,r.jsx)("p",{className:"text-muted-foreground",children:"이 런의 판단 신호가 없다(계측 없음 — MAX \xab이 런만\xbb 을 켜면 채워진다)."}):(0,r.jsx)("ol",{className:"flex gap-1 overflow-x-auto pb-1","data-trace-chain":!0,children:i.map((e,t)=>{var n,a;return(0,r.jsxs)("li",{className:"w-44 shrink-0 cursor-pointer rounded-md border bg-background/60 p-2 hover:border-primary",onClick:()=>s(t),"data-trace-chain-card":t,children:[(0,r.jsxs)("div",{className:"flex justify-between font-mono text-[11px] lg:text-[10px]",children:[(0,r.jsx)("span",{className:ed[e.kind],children:e.kind}),(0,r.jsx)("span",{className:"text-muted-foreground",children:(0,u.qo)(e.ts)})]}),(0,r.jsx)("div",{className:"mt-1 line-clamp-2 text-[11px]",children:e.what}),(0,r.jsxs)("div",{className:"mt-1 line-clamp-2 text-[11px] lg:text-[10px] text-muted-foreground",children:["왜: ",null!=(a=null!=(n=e.why)?n:e.purpose)?a:(0,r.jsx)("span",{className:"rounded bg-muted px-1",children:"계측 없음"})]}),e.target&&(0,r.jsxs)("div",{className:"mt-0.5 truncate text-[11px] lg:text-[10px] text-muted-foreground",children:["→ ",e.target]})]},"".concat(e.ts,"-").concat(t))})})]})}function em(e){var t,n,s,i,c,x,f,m;let{runId:g,universe:p,store:h,index:v,model:b,onIndex:y}=e,{chain:j,source:w}=ex(g,h,b),k=(0,o.M1)(),N=Math.min(Math.max(0,v),Math.max(0,j.length-1)),I=j[N],[M,S]=(0,a.useState)(!1);(0,a.useEffect)(()=>{j.length&&v!==N&&y(N)},[v,N,j.length,y]);let L=null==I?void 0:I.logId,E=(0,d.I)({queryKey:["trace","evidence",L],queryFn:()=>k.getTraceEvidence(L),enabled:!!L,retry:!1,staleTime:1/0}),R=(0,a.useContext)(ea),A=(null==(t=E.data)?void 0:t.evidence)&&R?(0,et.cj)(E.data.evidence,R):null==(n=E.data)?void 0:n.evidence;if(!I)return(0,r.jsx)("p",{className:"rounded-lg border p-3 text-xs text-muted-foreground",children:"이 런에 판단이 없다."});let C=function(e,t,n){var r;let a=Date.parse(t.ts),s=e=>{var n;return!t.runId||(null==(n=e.data)?void 0:n.runId)===t.runId},l=null!=(r=e.rows.find(e=>e.ts===t.ts&&s(e)))?r:null,i=e.rows.filter(e=>s(e)&&e!==l&&6e4>=Math.abs(Date.parse(e.ts)-a)).sort((e,t)=>e.ts<t.ts?-1:1).slice(0,20),o=new Date(a-6e4).toISOString(),d=new Date(a+6e4).toISOString(),c="elanous logs".concat(n&&"this"!==n?" --instance ".concat(n):"").concat(l?" --category ".concat(l.category):""," --since ").concat(o," --until ").concat(d).concat(t.runId?" --grep ".concat(t.runId):""," --json --json-data");return{source:l,around:i,command:c,pr:t.target&&/^#?\d+$/.test(t.target)?t.target.replace(/^#/,""):null}}(b,I,p),T=null!=(c=I.pr)?c:C.pr;return(0,r.jsxs)("div",{className:"space-y-2 rounded-lg border bg-card/60 p-3 text-xs","data-trace-decision":N,children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:()=>y(N-1),disabled:0===N,className:"rounded border px-1.5 disabled:opacity-30","aria-label":"앞 판단",children:"←"}),(0,r.jsxs)("span",{className:"font-mono text-[11px] text-muted-foreground",children:["판단 ",N+1,"/",j.length]}),(0,r.jsx)("button",{type:"button",onClick:()=>y(N+1),disabled:N>=j.length-1,className:"rounded border px-1.5 disabled:opacity-30","aria-label":"다음 판단",children:"→"}),(0,r.jsx)("span",{className:(0,er.cn)("ml-auto font-mono",ed[I.kind]),children:I.kind}),(0,r.jsx)("span",{className:"font-mono text-muted-foreground",children:(0,u.qo)(I.ts)})]}),(0,r.jsxs)("dl",{className:"grid grid-cols-[5rem_1fr] gap-x-2 gap-y-1",children:[(0,r.jsx)("dt",{className:"text-muted-foreground",children:"무엇"}),(0,r.jsx)("dd",{children:I.what}),(0,r.jsx)("dt",{className:"text-muted-foreground",children:"왜"}),(0,r.jsx)("dd",{children:null!=(x=I.why)?x:(0,r.jsx)("span",{className:"rounded bg-muted px-1",children:"계측 없음"})}),(0,r.jsx)("dt",{className:"text-muted-foreground",children:"목적"}),(0,r.jsx)("dd",{children:null!=(f=I.purpose)?f:(0,r.jsx)("span",{className:"rounded bg-muted px-1",children:"계측 없음"})}),(0,r.jsx)("dt",{className:"text-muted-foreground",children:"어디로"}),(0,r.jsx)("dd",{children:null!=(m=I.target)?m:"—"}),I.paths?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("dt",{className:"text-muted-foreground",children:"PATHS"}),(0,r.jsx)("dd",{className:"font-mono",children:I.paths})]}):null]}),(0,r.jsxs)("details",{open:!0,className:"rounded-md border bg-background/40 p-2","data-trace-evidence":!0,children:[(0,r.jsx)("summary",{className:"cursor-pointer font-mono text-[11px] tracking-wider text-muted-foreground",children:"▸ L4 증거"}),(0,r.jsxs)("div",{className:"mt-2 space-y-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"text-[11px] lg:text-[10px] text-muted-foreground","data-trace-evidence-origin":(null==(s=E.data)?void 0:s.evidence)?"server":"local",children:["원 로그 줄 \xb7 ",(null==(i=E.data)?void 0:i.evidence)?"서버 원문(비밀 가림)":"server"===w&&E.error?"서버 원문 실패 — 이 창 조회":"이 창 조회"]}),(0,r.jsx)("pre",{className:"max-h-40 overflow-auto rounded bg-muted/40 p-2 text-[11px] lg:text-[10px] leading-relaxed","data-trace-evidence-source":!0,children:A?JSON.stringify({ref:E.data.ref,ts:A.ts,instance:A.instance,category:A.category,event:A.event,data:A.data},null,2):C.source?JSON.stringify({ts:C.source.ts,instance:C.source.instance,category:C.source.category,event:C.source.event,data:C.source.data},null,2):L&&E.isLoading?"원문을 받는 중…":"이 창의 조회에 원 줄이 없다(조회 상한 또는 다른 우주)."})]}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"text-[11px] lg:text-[10px] text-muted-foreground",children:["앞뒤 1분 \xb7 같은 런 \xb7 ",C.around.length]}),(0,r.jsx)("pre",{className:"max-h-32 overflow-auto rounded bg-muted/40 p-2 text-[11px] lg:text-[10px] leading-relaxed",children:C.around.map(e=>"".concat((0,u.qo)(e.ts)," ").concat(e.category," ").concat(e.event)).join("\n")||"—"})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("code",{className:"min-w-0 flex-1 truncate rounded bg-muted/40 px-2 py-1 text-[11px] lg:text-[10px]",title:C.command,"data-trace-evidence-command":!0,children:C.command}),(0,r.jsx)("button",{type:"button",className:"rounded border px-2 py-1 text-[11px] lg:text-[10px] hover:bg-muted",onClick:()=>{var e;null==(e=navigator.clipboard)||e.writeText(C.command).then(()=>{S(!0),setTimeout(()=>S(!1),1200)})},children:M?"복사됨":"명령 복사"})]}),I.commit&&(0,r.jsxs)("code",{className:"rounded bg-muted/40 px-2 py-1 text-[11px] lg:text-[10px]","data-trace-evidence-commit":!0,children:["커밋 ",I.commit.slice(0,10)]}),T&&(0,r.jsxs)(l(),{href:"/approvals?pr=".concat(T),className:"inline-block rounded border px-2 py-1 text-[11px] lg:text-[10px] hover:bg-muted",children:["PR #",T," 승인 카드 →"]})]})]})]})}function eg(e){var t;let{model:n,lens:s,ledger:l,now:i,store:c,publicCapture:x,rowsAlreadyMasked:f}=e,g=(0,a.useMemo)(()=>(function(e,t){if(!(t.universe||t.status||t.q||t.runId||t.finding||void 0!==t.from))return e.rows;let n=new Set(t.runId?[t.runId]:m(e,t).map(e=>e.runId));return e.rows.filter(e=>{var t;let r=null==(t=e.data)?void 0:t.runId;return"string"!=typeof r||n.has(r)})})(n,s),[n,s]),p=(0,a.useMemo)(()=>x&&!f?(0,et.yR)(g):g,[x,f,g]),h=g===n.rows,v=(0,o.M1)(),b=(0,d.I)({queryKey:["trace","shipped",s.windowMin],queryFn:()=>v.getLiveShipped("".concat(s.windowMin,"m")),refetchInterval:6e4,enabled:h}),y=(0,a.useMemo)(()=>{var e;let t=(0,u.Hc)(p,l,{now:i,windowMinutes:s.windowMin}),n=h?null==(e=b.data)?void 0:e.merged:null;return"number"==typeof n?{...t,gauges:{...t.gauges,shipped:n}}:t},[p,l,i,s.windowMin,h,b.data]);return(0,r.jsx)(J.xl,{board:y,rows:p,publicCapture:x,windowMinutes:s.windowMin,sourceLabel:"@active"===c?"federated":c||"this instance",shippedSource:h&&"number"==typeof(null==(t=b.data)?void 0:t.merged)?"github":"log"})}function ep(){return(0,r.jsx)(ec,{})}},43628:(e,t,n)=>{Promise.resolve().then(n.bind(n,5064))}},e=>{e.O(0,[7777,9538,6048,9656,8734,6751,6303,6390,3170,7358],()=>e(e.s=43628)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7580],{5064:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>ep});var r=n(54456),a=n(60500),s=n(86048),l=n.n(s),i=n(61253),o=n(43468),d=n(81707),c=n(67495),u=n(57241);let x=["L0","L1","L2","L3"],f=e=>"string"==typeof e&&e.trim()?e:null;function m(e,t){var n;let r=null==(n=t.q)?void 0:n.trim().toLowerCase();return e.runs.filter(n=>{var a;return(!t.universe||n.universe===t.universe)&&(!t.status||n.status===t.status)&&(!r||n.runId.toLowerCase().includes(r)||(null!=(a=n.pr)?a:"").includes(r)||n.universe.toLowerCase().includes(r))&&(!t.finding||(function(e,t){let n=new Set;for(let r of e.decisions)if(r.runId===t){let e=p(r);e&&n.add(e)}return n})(e,n.runId).has(t.finding))&&(void 0===t.from||Date.parse(n.lastTs)>=t.from)&&(void 0===t.to||Date.parse(n.firstTs)<=t.to)})}function g(e,t){return e.decisions.filter(e=>e.runId===t).slice().reverse()}function p(e){var t;if("VERIFY"!==e.kind)return null;let n=null!=(t=e.why)?t:null;if(!n)return null;let r=n.toLowerCase().replace(/#\d+/g,"#").replace(/:\d+(:\d+)?/g,"").replace(/\d+/g,"n").replace(/\s+/g," ").trim();return r.length>=6?r:null}function h(e){return"PLAN"===e.kind?"author":"ROUTE"===e.kind?"build":"VERIFY"===e.kind||"HEAL"===e.kind?"review":"SHIP"===e.kind?"land":null}function v(e,t){return e.rows.filter(e=>{var n;return(null==(n=e.data)?void 0:n.runId)===t}).map(e=>({ts:e.ts,category:e.category,event:e.event,...(0,u.dl)(e)})).sort((e,t)=>e.ts<t.ts?1:-1)}function b(e){let t=[];if(e.finding&&t.push({key:"finding",label:"같은 지적: ".concat(e.finding.slice(0,24)).concat(e.finding.length>24?"…":"")}),void 0!==e.from&&void 0!==e.to){let n=e=>new Date(e).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1});t.push({key:"time",label:"시간: ".concat(n(e.from),"–").concat(n(e.to))})}return e.universe&&t.push({key:"universe",label:"우주: ".concat(e.universe)}),e.status&&t.push({key:"status",label:"상태: ".concat(e.status)}),e.runId&&t.push({key:"runId",label:"런: ".concat(e.runId.replace(/^run-/,"").slice(0,8))}),e.q&&t.push({key:"q",label:"검색: ".concat(e.q)}),t}function y(e,t){return"universe"===t.kind?{...e,level:"L1",universe:t.id.slice(2)}:"run"===t.kind?{...e,level:"L2",runId:t.id.slice(2)}:"decision"===t.kind?{...e,level:"L3",decision:Number(t.id.slice(2))}:e}function j(e){if("L3"===e.level){let{decision:t,...n}=e;return{...n,level:"L2"}}if("L2"===e.level){let{runId:t,...n}=e;return{...n,level:"L1"}}if("L1"===e.level){let{universe:t,...n}=e;return{...n,level:"L0"}}return e}var w=n(34544),k=n(36306),N=n(28129),I=n(96380),M=n(54887),S=n(3493),L=n(28304),E=n(56308);let R={running:"#818cf8",landed:"#4ade80",blocked:"#fb7185",quiet:"#64748b",ok:"#4ade80",bad:"#fb7185",info:"#c7d2fe"},A={universe:"#67e8f9",run:"#818cf8",stage:"#c7d2fe",decision:"#f0abfc"},C={PLAN:"#38bdf8",ROUTE:"#a78bfa",VERIFY:"#fbbf24",HEAL:"#34d399",ESCALATE:"#fb7185",SHIP:"#4ade80"};function T(e){return("universe"===e.kind?14:"run"===e.kind?7:"stage"===e.kind?9:5)+Math.min(10,Math.sqrt(e.weight)*("universe"===e.kind?2.5:1.2))}function q(e,t,n,r){return{x:t/2-e.x*r,y:n/2-e.y*r,k:r}}function D(e){let{nodes:t,edges:n,selected:s,onSelect:l,onDrill:i,height:o=560}=e,d=(0,a.useRef)(null),[c,u]=(0,a.useState)(null),x=null!=c?c:s,f=(0,a.useMemo)(()=>(function(e,t){let n=new Set;if(!t)return n;for(let r of(n.add(t),e))r.source===t&&n.add(r.target),r.target===t&&n.add(r.source);return n})(n,x),[n,x]);(0,a.useRef)(f).current=f;let m=(0,a.useRef)({onSelect:l,onDrill:i,setHover:u});m.current={onSelect:l,onDrill:i,setHover:u};let g=(0,a.useRef)(null),p=(0,a.useRef)(null),h="".concat(t.map(e=>{var t;return"".concat(e.id,":").concat(e.kind,":").concat(null!=(t=e.status)?t:"",":").concat(e.weight)}).join("|"),"#").concat(n.map(e=>"".concat(e.source,">").concat(e.target,":").concat(e.kind)).join("|")),v=(0,a.useRef)({nodes:t,edges:n});v.current={nodes:t,edges:n},(0,a.useEffect)(()=>{let e=d.current;if(!e)return;let{nodes:t,edges:n}=v.current,r=e.clientWidth||800,a=(0,S.A)(e);a.selectAll("*").remove();let s=a.append("g"),l=t.map(e=>({...e})),i=new Map(l.map(e=>[e.id,e])),c=n.filter(e=>i.has(e.source)&&i.has(e.target)).map(e=>({source:e.source,target:e.target,kind:e.kind})),u=s.append("g").attr("stroke-linecap","round").selectAll("line").data(c).join("line").attr("stroke",e=>"parent"===e.kind?"#f0abfc":"decides"===e.kind?"#a78bfa":"#6366f1").attr("stroke-width",e=>"parent"===e.kind?1.6:1).attr("stroke-dasharray",e=>"parent"===e.kind?"4 3":null).attr("data-trace-edge",e=>"".concat(e.source,">").concat(e.target)),x=s.append("g").selectAll("g").data(l).join("g").attr("data-trace-node",e=>e.id).style("cursor","pointer").on("mouseenter",(e,t)=>m.current.setHover(t.id)).on("mouseleave",()=>m.current.setHover(null)).on("click",(e,t)=>{e.stopPropagation(),m.current.onSelect(t.id)}).on("dblclick",(e,t)=>{if(e.stopPropagation(),null!=t.fx){t.fx=null,t.fy=null,f.alpha(.3).restart();return}m.current.onDrill(t)});x.append("circle").attr("r",e=>T(e)).attr("fill",e=>{var t;return"decision"===e.kind?null!=(t=C[e.label])?t:A.decision:e.status&&R[e.status]||A[e.kind]}).attr("fill-opacity",.9).attr("stroke","#0f172a").attr("stroke-width",1.5),x.append("text").text(e=>"decision"===e.kind?"":e.label).attr("x",e=>T(e)+4).attr("y",3).attr("fill","#e2e8f0").attr("font-size",e=>"universe"===e.kind?14:12).attr("font-family","ui-monospace, SFMono-Regular, monospace").style("pointer-events","none"),x.append("title").text(e=>"".concat(e.kind," \xb7 ").concat(e.label).concat(e.status?" \xb7 ".concat(e.status):""));let f=(0,w.A)(l).force("link",(0,k.A)(c).id(e=>e.id).distance(e=>"contains"===e.kind?70:"decides"===e.kind?40:60).strength(.7)).force("charge",(0,N.A)().strength(e=>"universe"===e.kind?-420:-90)).force("collide",(0,I.A)().radius(e=>T(e)+3)).force("center",(0,M.A)(r/2,o/2)).on("tick",()=>{u.attr("x1",e=>{var t;return null!=(t=e.source.x)?t:0}).attr("y1",e=>{var t;return null!=(t=e.source.y)?t:0}).attr("x2",e=>{var t;return null!=(t=e.target.x)?t:0}).attr("y2",e=>{var t;return null!=(t=e.target.y)?t:0}),x.attr("transform",e=>{var t,n;return"translate(".concat(null!=(t=e.x)?t:0,",").concat(null!=(n=e.y)?n:0,")")})}),h=(0,E.A)().on("start",(e,t)=>{e.active||f.alphaTarget(.2).restart(),t.fx=t.x,t.fy=t.y}).on("drag",(e,t)=>{t.fx=e.x,t.fy=e.y}).on("end",e=>{e.active||f.alphaTarget(0)});x.call(h);let b=!1,y=(0,L.s_)().scaleExtent([.2,6]).on("zoom",e=>{e.sourceEvent&&(b=!0),s.attr("transform",e.transform.toString()),p.current&&(p.current.cur={x:e.transform.x,y:e.transform.y,k:e.transform.k})});a.call(y).on("dblclick.zoom",null).on("click",()=>m.current.onSelect(null));let j=e=>{a.call(y.transform,L.GS.translate(e.x,e.y).scale(e.k))};p.current&&cancelAnimationFrame(p.current.raf),p.current={apply:j,cur:{x:0,y:0,k:1},fit:null,width:r,nodes:l,raf:0},j({x:0,y:0,k:1});let D="function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,F=(e,t,n)=>{let a=p.current;if(!a)return;if(cancelAnimationFrame(a.raf),D||n<=0)return void j(t);let s=performance.now(),l=i=>{let d=Math.min(1,(i-s)/n);j(function(e,t,n,r,a){let s={x:(r/2-e.x)/e.k,y:(a/2-e.y)/e.k},l={x:(r/2-t.x)/t.k,y:(a/2-t.y)/t.k},i=e.k*Math.pow(t.k/e.k,n);return{x:r/2-(s.x+(l.x-s.x)*n)*i,y:a/2-(s.y+(l.y-s.y)*n)*i,k:i}}(e,t,d<.5?4*d*d*d:1-Math.pow(-2*d+2,3)/2,r,o)),d<1&&p.current===a&&(a.raf=requestAnimationFrame(l))};a.raf=requestAnimationFrame(l)};g.current=F;let P=()=>{if(b||0===l.length)return;let e=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:24;if(0===e.length||t<=0||n<=0)return{x:0,y:0,k:1};let a=1/0,s=1/0,l=-1/0,i=-1/0;for(let t of e)a=Math.min(a,t.x-t.r),s=Math.min(s,t.y-t.r),l=Math.max(l,t.x+t.r+90),i=Math.max(i,t.y+t.r);let o=Math.max(.2,Math.min(1.5,(t-2*r)/Math.max(1,l-a),(n-2*r)/Math.max(1,i-s)));return{x:(t-(l-a)*o)/2-a*o,y:(n-(i-s)*o)/2-s*o,k:o}}(l.map(e=>{var t,n;return{x:null!=(t=e.x)?t:0,y:null!=(n=e.y)?n:0,r:T(e)}}),r,o);p.current&&(p.current.fit=e),F(q({x:(r/2-e.x)/e.k,y:(o/2-e.y)/e.k},r,o,.5*e.k),e,700)},U=!1;return f.on("tick.fit",()=>{!U&&.05>f.alpha()&&(U=!0,P())}),f.on("end.fit",()=>{U||(U=!0,P())}),()=>{f.stop(),p.current&&cancelAnimationFrame(p.current.raf)}},[h,o]);let b=(0,a.useRef)(!1);return(0,a.useEffect)(()=>{let e=p.current,t=g.current;if(!e||!t)return;let n=d.current,r=(null==n?void 0:n.clientWidth)||e.width;if(s){var a,l;let n=e.nodes.find(e=>e.id===s);if(!n||null==n.x||null==n.y)return;b.current=!0,t(e.cur,q({x:n.x,y:n.y},r,o,Math.max(1.2,Math.min(3.5,2.4*(null!=(l=null==(a=e.fit)?void 0:a.k)?l:e.cur.k)))),650)}else b.current&&e.fit&&(b.current=!1,t(e.cur,e.fit,550))},[s,o,h]),(0,a.useEffect)(()=>{let e=d.current;if(!e)return;let t=(0,S.A)(e),n=f.size>0;t.selectAll("g[data-trace-node]").style("transition","opacity 250ms").style("opacity",e=>!n||f.has(e.id)?1:.18).select("circle").attr("stroke",e=>e.id===s?"#f8fafc":"#0f172a").attr("stroke-width",e=>e.id===s?3:1.5),t.selectAll("line").style("transition","opacity 250ms").style("opacity",e=>{let t="string"==typeof e.source?e.source:e.source.id,r="string"==typeof e.target?e.target:e.target.id;return!n||f.has(t)&&f.has(r)?.7:.08})},[f,s,t,n]),(0,r.jsx)("svg",{ref:d,className:"w-full rounded-lg bg-[radial-gradient(ellipse_at_center,rgba(79,70,229,.18),rgba(2,6,23,.96)_70%)]",style:{height:o},role:"img","aria-label":"Trace 그래프 — 클릭 선택 \xb7 더블클릭 한 층 내려가기 \xb7 휠 줌 \xb7 끌어 고정","data-trace-graph":!0})}var F=n(29359);let P={running:"#818cf8",landed:"#4ade80",blocked:"#fb7185",quiet:"#64748b"},U={ok:"#4ade80",bad:"#fb7185",info:"#818cf8"};function O(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:6;if(t<=e)return[e];let r=(t-e)/n;return Array.from({length:n+1},(t,n)=>e+n*r)}let z=e=>new Date(e).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1});function H(e){let{runs:t,lo:n,hi:s,range:l,onBrush:i}=e,o=(0,a.useRef)(null),d=t.slice(0,40),c=4+7*d.length+6,u=e=>(e-n)/Math.max(1,s-n)*1e3,x=(0,a.useRef)(i);return x.current=i,(0,a.useEffect)(()=>{let e=o.current;if(!e)return;let t=(0,S.A)(e).select("g[data-brush]"),r=(0,F.n5)().extent([[0,0],[1e3,c]]).on("end",e=>{if(!e.sourceEvent)return;if(!e.selection)return void x.current(null);let[t,r]=e.selection;x.current({from:n+t/1e3*(s-n),to:n+r/1e3*(s-n)})});return t.call(r),l&&t.call(r.move,[u(l.from),u(l.to)]),()=>{t.on(".brush",null)}},[n,s,c,null==l?void 0:l.from,null==l?void 0:l.to]),(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)("div",{className:"pointer-events-none relative h-4 font-mono text-[11px] text-slate-500","aria-hidden":!0,"data-trace-timeline-ticks":!0,children:O(n,s).map((e,t,n)=>(0,r.jsx)("span",{className:"absolute top-0",style:{left:"".concat(u(e)/1e3*100,"%"),transform:t===n.length-1?"translateX(-100%)":0===t?void 0:"translateX(-50%)"},children:z(e)},e))}),(0,r.jsxs)("svg",{ref:o,viewBox:"0 0 ".concat(1e3," ").concat(c),preserveAspectRatio:"none",className:"h-32 w-full rounded-md bg-slate-950/60","data-trace-timeline":!0,"aria-label":"런 시간 축 — 끌어서 구간 고르기",children:[O(n,s).map(e=>(0,r.jsx)("line",{x1:u(e),x2:u(e),y1:0,y2:c,stroke:"#1e293b",strokeDasharray:"2 3"},e)),d.map((e,t)=>{let n=u(Date.parse(e.firstTs)),a=Math.max(n+2,u(Date.parse(e.lastTs)));return(0,r.jsx)("rect",{x:n,y:4+7*t,width:a-n,height:5,rx:1.5,fill:P[e.status],opacity:.85,"data-trace-timeline-run":e.runId},e.runId)}),(0,r.jsx)("g",{"data-brush":!0})]})]})}function _(e){let{bars:t}=e;if(0===t.length)return(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"이 런의 단계 신호가 없다."});let n=Math.min(...t.map(e=>e.start)),a=Math.max(...t.map(e=>e.end),n+6e4),s=e=>90+(e-n)/(a-n)*900;return(0,r.jsxs)("svg",{viewBox:"0 0 ".concat(1e3," ").concat(16*t.length+16),className:"w-full rounded-md bg-slate-950/60","data-trace-gantt":!0,"aria-label":"단계 간트",children:[t.map((e,t)=>(0,r.jsxs)("g",{children:[(0,r.jsx)("text",{x:4,y:14+16*t,fill:"#cbd5e1",fontSize:11,children:u.fQ[e.stage]}),(0,r.jsx)("rect",{x:s(e.start),y:4+16*t,width:Math.max(3,s(e.end)-s(e.start)),height:11,rx:2,fill:U[e.tone],opacity:.85}),(0,r.jsxs)("text",{x:Math.max(s(e.end),s(e.start)+3)+4,y:14+16*t,fill:"#64748b",fontSize:9,fontFamily:"monospace",children:[Math.round((e.end-e.start)/6e4),"분"]})]},e.stage)),(0,r.jsx)("text",{x:90,y:16*t.length+13,fill:"#64748b",fontSize:9,fontFamily:"monospace",children:z(n)}),(0,r.jsx)("text",{x:996,y:16*t.length+13,fill:"#64748b",fontSize:9,fontFamily:"monospace",textAnchor:"end",children:z(a)})]})}let B={grok:"#f0abfc",firecrawl:"#fb923c",tavily:"#38bdf8",ddg:"#a7f3d0",jina:"#fde68a","fc-dev":"#fdba74",capture:"#c4b5fd"},V=e=>{var t,n,r;return null!=(r=null!=(n=B[e])?n:B[null!=(t=e.split("-")[0])?t:""])?r:"#a5b4fc"};function W(e){let{session:t}=e,n=Math.max(1,t.engines.length),a=Math.max(1,...t.engines.map(e=>e.hits)),s=Object.values(t.share).reduce((e,t)=>e+t,0);return(0,r.jsxs)("div",{className:"rounded-lg border border-fuchsia-400/30 bg-slate-950/80 p-2 text-slate-100","data-trace-research":t.key,style:{boxShadow:"0 0 24px #f0abfc22"},children:[(0,r.jsx)("style",{children:"@keyframes rf-grow { from { stroke-dashoffset: 400 } to { stroke-dashoffset: 0 } } @keyframes rf-pulse { 0%,100% { opacity: .5 } 50% { opacity: 1 } } @media (prefers-reduced-motion: reduce) { [data-trace-research] * { animation: none !important } }"}),(0,r.jsxs)("div",{className:"mb-1 flex items-center gap-2 font-mono text-[11px] lg:text-[10.5px] tracking-wider text-slate-400",children:[(0,r.jsxs)("span",{children:["▸ RESEARCH \xb7 엔진 ",t.engines.length]}),(0,r.jsx)("span",{className:"ml-auto",children:new Date(t.ts).toLocaleTimeString(void 0,{hour12:!1})})]}),(0,r.jsxs)("svg",{viewBox:"0 0 ".concat(460," ").concat(200),className:"w-full","aria-label":"엔진 부채꼴",children:[(0,r.jsx)("defs",{children:(0,r.jsxs)("radialGradient",{id:"rf-core",children:[(0,r.jsx)("stop",{offset:"0%",stopColor:"#f5d0fe"}),(0,r.jsx)("stop",{offset:"100%",stopColor:"#f5d0fe00"})]})}),(0,r.jsx)("circle",{cx:50,cy:100,r:26,fill:"url(#rf-core)"}),(0,r.jsx)("circle",{cx:50,cy:100,r:6,fill:"#fdf4ff"}),t.engines.map((e,t)=>{let s=1===n?0:-.55+1.1*t/(n-1),l=Math.min(e.done?70+e.hits/a*190:90,86/Math.max(.2,Math.abs(Math.sin(s))),270),i=50+Math.cos(s)*l,o=100+Math.sin(s)*l,d=e.error?"#fb7185":V(e.id);return(0,r.jsxs)("g",{"data-trace-research-engine":e.id,children:[(0,r.jsx)("line",{x1:50,y1:100,x2:i,y2:o,stroke:d,strokeWidth:e.done?2.5:1.5,strokeDasharray:e.done?"400":"4 4",style:{animation:e.done?"rf-grow .8s ease-out both":"rf-pulse 1.2s ease-in-out infinite",filter:"drop-shadow(0 0 5px ".concat(d,")")}}),(0,r.jsx)("circle",{cx:i,cy:o,r:e.done?4+Math.min(8,e.hits):3,fill:d,style:{filter:"drop-shadow(0 0 8px ".concat(d,")")}}),(0,r.jsxs)("text",{x:i+8,y:o+3,fill:d,fontSize:13,fontFamily:"ui-monospace, monospace",children:[e.id," ",e.error?"오류":e.done?"".concat(e.hits,"건"):"…",null!==e.ms?" \xb7 ".concat((e.ms/1e3).toFixed(1),"s"):""]})]},e.id)})]}),(0,r.jsxs)("p",{className:"line-clamp-2 px-1 text-[11px] text-slate-200",title:t.question,children:["\xab",t.question,"\xbb"]}),s>0&&(0,r.jsx)("div",{className:"mt-1 flex h-2 overflow-hidden rounded-full","aria-label":"출처 비","data-trace-research-share":!0,children:Object.entries(t.share).map(e=>{let[t,n]=e;return(0,r.jsx)("span",{style:{width:"".concat(n/s*100,"%"),background:V(t)},title:"".concat(t," ").concat(n)},t)})}),t.sources.length>0&&(0,r.jsx)("ul",{className:"mt-1 flex flex-wrap gap-1 font-mono text-[11px] lg:text-[10px]","aria-label":"인용 후보",children:t.sources.slice(0,8).map((e,t)=>(0,r.jsx)("li",{className:"rounded px-1.5 py-0.5",style:{color:V(e.engine),background:"".concat(V(e.engine),"1a"),textDecoration:e.merged?"line-through":void 0},title:"".concat(e.url).concat(e.merged?" (중복 합침)":""),children:e.host},"".concat(e.url,"-").concat(t)))})]})}function Y(e){let{label:t,value:n,sub:a,color:s="#e0e7ff"}=e;return(0,r.jsxs)("div",{className:"min-w-0 rounded-lg border border-indigo-400/15 bg-slate-950/70 px-3 py-2",children:[(0,r.jsx)("div",{className:"font-mono text-[11px] lg:text-[10px] tracking-[.14em] text-slate-400",children:t}),(0,r.jsx)("div",{className:"font-mono text-3xl font-semibold tabular-nums",style:{color:s,textShadow:"0 0 18px ".concat(s,"66")},children:n}),a]})}function G(e){var t;let{s:n,i:a,delayBase:s,cited:l}=e,i=V(n.engine),o="".concat(s+.12*a,"s");return(0,r.jsxs)("div",{className:"w-44 rounded-md border bg-slate-950/90 px-2 py-1 text-[11px] lg:text-[10px] leading-tight",style:{borderColor:"".concat(i,"88"),"--c":i,animation:n.merged?"rs-rain .9s ease-out ".concat(o," both, rs-merge 1s ease-in ").concat(s+.12*a+1.4,"s forwards"):l?"rs-rain .9s ease-out ".concat(o," both, rs-cite 1.6s ease-in-out ").concat(s+.12*a+1,"s infinite"):"rs-rain .9s ease-out ".concat(o," both")},title:n.url,"data-research-card":n.merged?"merged":l?"cited":"source",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)("span",{className:"flex h-3 w-3 shrink-0 items-center justify-center rounded-sm text-[11px] lg:text-[8px] font-bold text-slate-950",style:{background:i},"aria-hidden":!0,children:n.host.charAt(0).toUpperCase()}),(0,r.jsx)("span",{className:"truncate font-mono",style:{color:i},children:n.host}),n.scraped&&(0,r.jsx)("span",{className:"ml-auto rounded bg-orange-400/20 px-1 text-[11px] lg:text-[9px] text-orange-200",children:"SCRAPED"})]}),(0,r.jsx)("div",{className:"mt-0.5 line-clamp-2 text-slate-200",children:null!=(t=n.title)?t:n.url.replace(/^https?:\/\//,"")})]})}function Q(e){var t;let{session:n,label:a}=e,s=Math.max(1,n.engines.length),l=n.sources.filter(e=>!e.merged),i=l.filter(e=>e.cited).slice(0,5),o=n.sources.filter(e=>e.engine.startsWith("firecrawl")||"fc-dev"===e.engine),d=n.sources.filter(e=>e.scraped).length,c=n.engines.reduce((e,t)=>{var n;return e+(null!=(n=t.credits)?n:0)},0),u=n.engines.some(e=>"number"==typeof e.credits),x=Math.max(0,...n.engines.map(e=>{var t;return null!=(t=e.ms)?t:0})),f=Math.ceil(s/2),m=e=>{let t=e<f?"left":"right",n="left"===t?e:e-f,r="left"===t?f:s-f;return{side:t,top:n/r,height:1/r,x:"left"===t?300:700,y:(n+.5)/r*600}};return(0,r.jsxs)("div",{className:"relative flex h-full min-h-0 flex-col overflow-hidden rounded-xl border border-indigo-400/20 bg-[radial-gradient(ellipse_at_center,rgba(124,58,237,.22),rgba(2,6,23,.98)_68%)] p-3","data-research-stage-panel":n.key,children:[(0,r.jsxs)("div",{className:"grid grid-cols-5 gap-2",children:[(0,r.jsx)(Y,{label:"ENGINES",value:String(n.engines.length),sub:(0,r.jsx)("div",{className:"mt-1 flex gap-1",children:n.engines.map(e=>(0,r.jsx)("span",{className:"h-1.5 flex-1 rounded-full",style:{background:e.error?"#fb7185":V(e.id),opacity:e.done?1:.35}},e.id))})}),(0,r.jsx)(Y,{label:"SOURCES",value:String(l.length),color:"#f5d0fe",sub:(0,r.jsxs)("div",{className:"font-mono text-[11px] lg:text-[10px] text-slate-500",children:["합침 ",n.sources.length-l.length]})}),(0,r.jsx)(Y,{label:"SCRAPED",value:"".concat(d),color:"#fdba74",sub:(0,r.jsx)("div",{className:"mt-1 h-1.5 rounded-full bg-slate-800",children:(0,r.jsx)("div",{className:"h-1.5 rounded-full bg-orange-400",style:{width:"".concat(o.length?Math.min(100,d/o.length*100):0,"%"),boxShadow:"0 0 8px #fb923c"}})})}),(0,r.jsx)(Y,{label:"CREDITS",value:u?String(c):"—",color:"#fde68a"}),(0,r.jsx)(Y,{label:"TIME",value:x?"".concat((x/1e3).toFixed(1),"s"):"—",color:"#a7f3d0",sub:a?(0,r.jsx)("div",{className:"font-mono text-[11px] lg:text-[10px] text-slate-400",children:a}):null})]}),(0,r.jsxs)("div",{className:"relative min-h-0 flex-1",children:[(0,r.jsxs)("svg",{viewBox:"0 0 ".concat(1e3," ").concat(600),preserveAspectRatio:"none",className:"absolute inset-0 h-full w-full",children:[(0,r.jsx)("defs",{children:(0,r.jsxs)("radialGradient",{id:"rs-q",children:[(0,r.jsx)("stop",{offset:"0%",stopColor:"#fdf4ff"}),(0,r.jsx)("stop",{offset:"100%",stopColor:"#f0abfc00"})]})}),n.engines.map((e,t)=>{let n=m(t),a=e.error?"#fb7185":V(e.id);return(0,r.jsx)("line",{x1:500,y1:300,x2:n.x,y2:n.y,stroke:a,strokeWidth:e.done?3:1.5,strokeDasharray:e.done?"1600":"6 6",style:{animation:e.done?"rs-grow 1.1s ease-out both":void 0,filter:"drop-shadow(0 0 8px ".concat(a,")")}},e.id)}),(0,r.jsx)("circle",{cx:500,cy:300,r:38,fill:"url(#rs-q)",style:{animation:"rs-core 2.4s ease-in-out infinite"}}),(0,r.jsx)("circle",{cx:500,cy:300,r:9,fill:"#fff"})]}),(0,r.jsxs)("div",{className:"pointer-events-none absolute left-1/2 top-1/2 w-[34%] -translate-x-1/2 translate-y-6 text-center text-sm text-slate-100",style:{textShadow:"0 0 12px #000"},children:["\xab",n.question,"\xbb"]}),n.engines.map((e,t)=>{let a=m(t),s=n.sources.filter(t=>t.engine===e.id).slice(0,12),l="right"===a.side;return(0,r.jsxs)("div",{className:"absolute overflow-hidden p-1","data-research-engine-slot":e.id,style:{top:"".concat(100*a.top,"%"),height:"".concat(100*a.height,"%"),width:"".concat(30,"%"),...l?{right:0}:{left:0}},children:[(0,r.jsxs)("div",{className:"mb-1 font-mono text-xs ".concat(l?"text-right":""),style:{color:e.error?"#fb7185":V(e.id),textShadow:"0 0 10px ".concat(V(e.id))},children:[e.id," ",e.error?"오류 \xb7 ".concat(e.error):e.done?"".concat(e.hits,"건"):"…",null!=e.ms?" \xb7 ".concat((e.ms/1e3).toFixed(1),"s"):""]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1 ".concat(l?"justify-end":""),children:s.map((e,n)=>(0,r.jsx)(G,{s:e,i:n,delayBase:.3+.25*t,cited:!e.merged&&!!e.cited},"".concat(e.url,"-").concat(n)))})]},e.id)})]}),(0,r.jsxs)("div",{className:"mx-auto mt-2 w-[min(760px,92%)] rounded-xl border border-violet-300/40 bg-slate-950/90 p-3",style:{boxShadow:"0 0 30px #a78bfa44"},"data-research-why":!0,children:[(0,r.jsx)("div",{className:"font-mono text-[11px] lg:text-[10px] tracking-widest text-violet-300",children:"▸ 판단 \xb7 왜"}),(0,r.jsx)("div",{className:"mt-1 text-sm text-slate-100",children:null!=(t=n.why)?t:(0,r.jsx)("span",{className:"text-slate-500",children:"이 조사 뒤 판단이 아직 없다"})}),i.length>0&&(0,r.jsx)("div",{className:"mt-2 flex flex-wrap gap-1",children:i.map((e,t)=>{var n;return(0,r.jsx)("span",{className:"rounded border px-1.5 py-0.5 font-mono text-[11px] lg:text-[10px]",style:{color:V(e.engine),borderColor:"".concat(V(e.engine),"88"),animation:"rs-fly .8s cubic-bezier(.2,1.4,.4,1) ".concat(2.2+.25*t,"s both"),boxShadow:"0 0 12px ".concat(V(e.engine),"66")},"data-research-cited":!0,children:null!=(n=e.title)?n:e.host},e.url)})})]})]})}function X(e){let{sessions:t,pair:n,onClose:a,onPair:s}=e,l=t[0],i=t.find(e=>"full"===e.tier),o=t.find(e=>"free"===e.tier),d=!!i&&!!o;return(0,r.jsxs)("div",{className:"fixed inset-0 z-50 flex flex-col gap-2 bg-[#020617] p-3 text-slate-100","data-research-stage":!0,children:[(0,r.jsx)("style",{children:"\n@keyframes rs-rain { from { transform: translateY(-110vh) rotate(-4deg); opacity: 0 } 70% { opacity: 1 } to { transform: none; opacity: 1 } }\n@keyframes rs-merge { 0% { box-shadow: 0 0 0 0 #fde68a } 40% { box-shadow: 0 0 28px 6px #fde68a; transform: scale(1.08) } 100% { transform: scale(0); opacity: 0 } }\n@keyframes rs-cite { 0%,100% { box-shadow: 0 0 10px var(--c) } 50% { box-shadow: 0 0 30px 4px var(--c) } }\n@keyframes rs-fly { from { transform: translateY(-46vh) scale(.6); opacity: 0 } to { transform: none; opacity: 1 } }\n@keyframes rs-grow { from { stroke-dashoffset: 1600 } to { stroke-dashoffset: 0 } }\n@keyframes rs-core { 0%,100% { r: 34 } 50% { r: 44 } }\n@media (prefers-reduced-motion: reduce) { [data-research-stage] * { animation: none !important } }\n"}),(0,r.jsxs)("header",{className:"flex items-center gap-3",children:[(0,r.jsx)("span",{className:"text-xl tracking-tight",style:{fontFamily:'Georgia, "Times New Roman", serif'},children:"Elanous"}),(0,r.jsx)("span",{className:"font-mono text-[11px] tracking-[.18em] text-fuchsia-200/80",children:"RESEARCH \xb7 조사"}),(0,r.jsx)("button",{type:"button",disabled:!d,onClick:()=>s(!n),className:"rounded-full border border-fuchsia-300/40 px-3 py-1 font-mono text-[11px] lg:text-[10px] text-fuchsia-100 disabled:opacity-30",title:d?"full ↔ free 두 판 나란히":"full\xb7free 두 조사가 모두 있을 때","data-research-pair":!0,children:n?"한 판":"full ↔ free"}),(0,r.jsx)("button",{type:"button",onClick:a,className:"ml-auto rounded-full border border-slate-600 px-3 py-1 text-xs text-slate-300 hover:bg-slate-800",children:"닫기(Esc)"})]}),l?n&&d?(0,r.jsxs)("div",{className:"grid min-h-0 flex-1 grid-cols-2 gap-2",children:[(0,r.jsx)(Q,{session:i,label:"FULL \xb7 유료 엔진"}),(0,r.jsx)(Q,{session:o,label:"FREE \xb7 무료 폴백"})]}):(0,r.jsx)("div",{className:"min-h-0 flex-1",children:(0,r.jsx)(Q,{session:l,label:l.tier?l.tier.toUpperCase():void 0})}):(0,r.jsx)("p",{className:"m-auto text-sm text-slate-400",children:"이 창에 조사가 없다 — `elanous research` 가 돌면 여기에 뜬다."})]})}function K(e,t){return"public"===e||"stage"===t&&"private"!==e}var J=n(97257);let $=e=>"string"==typeof e&&e.trim()?e:null,Z=e=>"number"==typeof e&&Number.isFinite(e)?e:0;function ee(e){var t;if("harness.decision"===e.category&&"string"==typeof(null==(t=e.data)?void 0:t.runId))return"why";if(!e.category.startsWith("research"))return null;let n=e.event.replace(/^research\./,"");return"query"===n||"result"===n||"source"===n?n:null}var et=n(50738),en=n(15304),er=n(74591);let ea=(0,a.createContext)(null),es=[],el=[60,360,1440],ei={L0:"L0 플릿",L1:"L1 런",L2:"L2 런 한 개",L3:"L3 판단"},eo={running:"도는",landed:"착지",blocked:"막힘",quiet:"끊김\xb7결과 모름"},ed={PLAN:"text-sky-400",ROUTE:"text-violet-400",VERIFY:"text-amber-400",HEAL:"text-emerald-400",ESCALATE:"text-rose-400",SHIP:"text-green-400"};function ec(){return(0,o.Qj)()?(0,r.jsx)(eu,{}):(0,r.jsxs)("div",{className:"mx-auto max-w-2xl space-y-2 p-6",children:[(0,r.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Trace"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Connect to a NEXUS daemon to trace runs."})]})}function eu(){var e,t,n,s,w,k,N;let[I,M]=(0,a.useState)({level:"L1",windowMin:1440}),[S,L]=(0,a.useState)(null),[E,R]=(0,a.useState)("@active"),[A,C]=(0,a.useState)(null),[T,q]=(0,a.useState)(!1),[F,P]=(0,a.useState)(null);(0,a.useEffect)(()=>{let e=new URLSearchParams(window.location.search);P(e.get("capture"));let t=e.get("present");("stage"===t||"research"===t)&&C(t)},[]);let U=(0,a.useRef)(null),O=(0,a.useRef)(!1);(0,a.useEffect)(()=>{M(function(e){var t;let n=new URLSearchParams(e),r=x.includes(null!=(t=n.get("level"))?t:"")?n.get("level"):"L1",a=n.get("status"),s=Number(n.get("window"));return{level:r,...n.get("universe")?{universe:n.get("universe")}:{},...n.get("run")?{runId:n.get("run")}:{},...Number.isInteger(Number(n.get("dec")))&&null!==n.get("dec")&&""!==n.get("dec")?{decision:Number(n.get("dec"))}:{},..."running"===a||"landed"===a||"blocked"===a||"quiet"===a?{status:a}:{},...n.get("q")?{q:n.get("q")}:{},...n.get("finding")?{finding:n.get("finding")}:{},...Number(n.get("from"))>0&&Number(n.get("to"))>Number(n.get("from"))?{from:Number(n.get("from")),to:Number(n.get("to"))}:{},windowMin:Number.isFinite(s)&&s>0?s:1440}}(window.location.search)),O.current=!0},[]),(0,a.useEffect)(()=>{if(!O.current)return;let e=new URLSearchParams(window.location.search),t=new URLSearchParams((function(e){let t=new URLSearchParams;return t.set("level",e.level),e.universe&&t.set("universe",e.universe),e.runId&&t.set("run",e.runId),void 0!==e.decision&&t.set("dec",String(e.decision)),e.status&&t.set("status",e.status),e.q&&t.set("q",e.q),e.finding&&t.set("finding",e.finding),void 0!==e.from&&void 0!==e.to&&(t.set("from",String(Math.round(e.from))),t.set("to",String(Math.round(e.to)))),1440!==e.windowMin&&t.set("window",String(e.windowMin)),"?".concat(t.toString())})(I).replace(/^\?/,""));for(let n of["capture","present"]){let r=e.get(n);r&&t.set(n,r)}let n=t.toString();window.history.replaceState(null,"","".concat(window.location.pathname).concat(n?"?".concat(n):""))},[I]);let{logs:z,runs:B}=(0,c.HI)({store:E,windowMinutes:I.windowMin}),V=K(F,null),Y=K(F,A),G=null!=(n=null==(e=z.data)?void 0:e.logs)?n:es,Q=(0,a.useMemo)(()=>V?(0,et.Er)(G):null,[V,G]),J=(0,a.useMemo)(()=>V?(0,et.yR)(G):G,[V,G]),[ed,ec]=(0,a.useState)(()=>Date.now());(0,a.useEffect)(()=>{ec(Date.now())},[z.dataUpdatedAt]);let eu=(0,o.Qj)(),ex=(0,d.I)({queryKey:["trace","L1",E,I.windowMin],queryFn:()=>eu.getTrace({level:"L1",from:Date.now()-6e4*I.windowMin,...E?{store:E}:{}}),enabled:!!eu,refetchInterval:6e4,retry:!1}),ep=(0,a.useMemo)(()=>{var e,t,n,r,a;return function(e,t,n,r){var a,s,l,i,o,d,c,u,x,f,m;let g=(null!=(a=null==t?void 0:t.nodes)?a:[]).filter(e=>"L1"===e.level&&e.runId);if(0===g.length)return e;let p=new Set(e.runs.map(e=>e.runId)),h=new Map(n.map(e=>[e.runId,e])),v=new Map;for(let e of null!=(s=null==t?void 0:t.edges)?s:[])"parent"===e.kind&&v.set(e.target,e.source);let b=[];for(let e of g){let t=e.runId;if(p.has(t))continue;p.add(t);let n=null!=(d=null!=(o=e.lastTs)?o:e.firstTs)?d:new Date(r).toISOString(),a=(m=null==(l=h.get(t))?void 0:l.status)?/complet|merged|landed|success|done/i.test(m)?"landed":/fail|block|park|cancel|abort|error|stall/i.test(m)?"blocked":/run|progress|active|review|build/i.test(m)?"running":null:null,s=null!=a?a:r-Date.parse(n)<=9e5?"running":"quiet",f=v.get(e.id),y=f&&null!=(c=null==(i=g.find(e=>e.id===f))?void 0:i.runId)?c:null;b.push({runId:t,universe:null!=(u=e.universe)?u:"this",status:s,current:null,stages:{},events:e.count,firstTs:null!=(x=e.firstTs)?x:n,lastTs:n,pr:null,parentRunId:y,decisions:0})}if(0===b.length)return e;let y=[...e.runs,...b],j=new Map(e.universes.map(e=>[e.name,{...e}]));for(let e of b){let t=null!=(f=j.get(e.universe))?f:{name:e.universe,signals:0,runs:0,running:0,blocked:0};t.runs+=1,t.signals+=e.events,"running"===e.status&&(t.running+=1),"blocked"===e.status&&(t.blocked+=1),j.set(e.universe,t)}return{...e,runs:y,universes:[...j.values()].sort((e,t)=>t.runs-e.runs||t.signals-e.signals)}}(function(e,t,n){var r,a,s,l,i;let o=(0,u.Hc)(e,t,n),d=new Map,c=new Map,x=new Map,m=new Map;for(let t of e){let e=null!=(s=t.instance)?s:"this";m.set(e,(null!=(l=m.get(e))?l:0)+1);let n=f(null==(r=t.data)?void 0:r.runId);if(!n)continue;d.has(n)||d.set(n,e);let i=c.get(n);(!i||t.ts<i)&&c.set(n,t.ts);let o=f(null==(a=t.data)?void 0:a.parentRunId);o&&o!==n&&x.set(n,o)}let g=new Map;for(let e of o.stream)e.runId&&g.set(e.runId,(null!=(i=g.get(e.runId))?i:0)+1);let p=o.snapshot.runs.map(e=>{var t,n,r,a;return{runId:e.runId,universe:null!=(t=d.get(e.runId))?t:"this",status:e.blocked?"blocked":"ok"===e.stages.land?"landed":"running",current:e.current,stages:e.stages,events:e.events,firstTs:null!=(n=c.get(e.runId))?n:e.lastTs,lastTs:e.lastTs,pr:e.pr,parentRunId:null!=(r=x.get(e.runId))?r:null,decisions:null!=(a=g.get(e.runId))?a:0}});return{universes:[...m.entries()].map(e=>{let[t,n]=e,r=p.filter(e=>e.universe===t);return{name:t,signals:n,runs:r.length,running:r.filter(e=>"running"===e.status).length,blocked:r.filter(e=>"blocked"===e.status).length}}).sort((e,t)=>t.runs-e.runs||t.signals-e.signals),runs:p,decisions:o.stream,rows:e}}(J,null!=(r=null==(e=B.data)?void 0:e.entries)?r:[],{now:ed,windowMinutes:I.windowMin}),(null==(t=ex.data)?void 0:t.ok)?ex.data:void 0,null!=(a=null==(n=B.data)?void 0:n.entries)?a:[],ed)},[J,B.data,ed,I.windowMin,ex.data]),eh=(0,a.useMemo)(()=>(function(e,t){let n=[],r=[],a=m(e,t);if("L0"===t.level){for(let r of e.universes.filter(e=>!t.universe||e.name===t.universe))n.push({id:"u:".concat(r.name),kind:"universe",label:r.name,weight:Math.max(1,r.runs),status:r.blocked?"bad":r.running?"info":"ok"});for(let e of a)n.some(t=>t.id==="u:".concat(e.universe))&&(n.push({id:"r:".concat(e.runId),kind:"run",label:e.runId.replace(/^run-/,"").slice(0,8),weight:1,status:e.status}),r.push({source:"u:".concat(e.universe),target:"r:".concat(e.runId),kind:"contains"}));return{nodes:n,edges:r}}if("L1"===t.level){let e=new Set(a.map(e=>e.runId));for(let e of a)n.push({id:"r:".concat(e.runId),kind:"run",label:e.runId.replace(/^run-/,"").slice(0,8),weight:1+Math.log2(1+e.events),status:e.status});for(let t of a)t.parentRunId&&e.has(t.parentRunId)&&r.push({source:"r:".concat(t.parentRunId),target:"r:".concat(t.runId),kind:"parent"});return{nodes:n,edges:r}}let s=e.runs.find(e=>e.runId===t.runId);if(!s)return{nodes:n,edges:r};n.push({id:"r:".concat(s.runId),kind:"run",label:s.runId.replace(/^run-/,"").slice(0,8),weight:3,status:s.status});let l="r:".concat(s.runId);for(let e of u.lV){let t=s.stages[e];if(!t)continue;let a="s:".concat(e);n.push({id:a,kind:"stage",label:e,weight:2,status:t}),r.push({source:l,target:a,kind:"next"}),l=a}return g(e,s.runId).forEach((e,t)=>{let a="d:".concat(t);n.push({id:a,kind:"decision",label:e.kind,weight:1}),r.push({source:n.some(t=>{var n;return t.id==="s:".concat(null!=(n=h(e))?n:"")})?"s:".concat(h(e)):"r:".concat(s.runId),target:a,kind:"decides"})}),{nodes:n,edges:r}})(ep,I),[ep,I]),ev=(0,a.useMemo)(()=>m(ep,I).sort((e,t)=>e.lastTs<t.lastTs?1:-1),[ep,I]),eb=(0,a.useMemo)(()=>(function(e,t){var n;let r={};for(let a of m(e,{...t,universe:void 0}))r[a.universe]=(null!=(n=r[a.universe])?n:0)+1;let a={running:0,landed:0,blocked:0,quiet:0};for(let n of m(e,{...t,status:void 0}))a[n.status]+=1;return{universe:r,status:a}})(ep,I),[ep,I]),ey=(0,a.useMemo)(()=>(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,n=new Map;for(let t of e.decisions){var r;let e=p(t);if(!e||!t.runId)continue;let a=null!=(r=n.get(e))?r:new Set;a.add(t.runId),n.set(e,a)}return[...n.entries()].filter(e=>{let[,n]=e;return n.size>=t}).map(e=>{let[t,n]=e;return{sig:t,runs:n.size}}).sort((e,t)=>t.runs-e.runs)})(ep).slice(0,6),[ep]),ej=I.runId&&null!=(s=ep.runs.find(e=>e.runId===I.runId))?s:null,ew=(0,a.useMemo)(()=>(function(e){let t=e.filter(e=>ee(e)).sort((e,t)=>e.ts<t.ts?-1:1),n=[],r=new Map,a=null;for(let e of t){var s,l,i,o,d,c,u,x,f;let t=ee(e),m=null!=(s=e.data)?s:{},g=$(m.runId);if("query"===t){let t=Array.isArray(m.engines)?m.engines.map(e=>$(e)).filter(e=>!!e):[],s={key:"".concat(e.ts,"|").concat(null!=g?g:""),ts:e.ts,question:null!=(i=null!=(l=$(m.question))?l:$(m.query))?i:"(질문 없음)",runId:g,engines:t.map(e=>({id:e,hits:0,ms:null,error:null,done:!1})),sources:[],share:{},tier:"full"===m.tier||"free"===m.tier?m.tier:!0===m.free?"free":null,why:null};n.push(s),g&&r.set(g,s),a=s;continue}if("why"===t){let e=g?r.get(g):null;e&&!e.why&&(e.why=null!=(d=null!=(o=$(m.reason))?o:$(m.why))?d:$(m.what));continue}let p=g&&r.get(g)||a;if(p)if("result"===t){let e=null!=(u=null!=(c=$(m.id))?c:$(m.engine))?u:"engine",t=p.engines.find(t=>t.id===e);t||(t={id:e,hits:0,ms:null,error:null,done:!1},p.engines.push(t)),t.hits=Z(m.hits),t.ms="number"==typeof m.ms?m.ms:null,t.error=$(m.error),t.done=!0,"number"==typeof m.credits&&(t.credits=m.credits)}else{let e=$(m.url);if(!e)continue;let t=null!=(x=$(m.engine))?x:"engine",n=!0===m.merged||!0===m.dedup;p.sources.push({url:e,engine:t,merged:n,host:function(e){try{return new URL(e).host.replace(/^www\./,"")}catch(t){return e.slice(0,40)}}(e),title:$(m.title),cited:!0===m.cited||!0===m.picked,scraped:!0===m.scraped}),n||(p.share[t]=(null!=(f=p.share[t])?f:0)+1)}}return n.reverse()})(J).filter(e=>!I.runId||e.runId===I.runId),[J,I.runId]),ek=ew.slice(0,2),eN=(0,a.useRef)(!1);return eN.current=null!==A,(0,a.useEffect)(()=>{let e=e=>{let t=e.target;if(t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||"SELECT"===t.tagName)){"Escape"===e.key&&t.blur();return}if("/"===e.key){var n;e.preventDefault(),null==(n=U.current)||n.focus()}else"Escape"===e.key&&eN.current?C(null):"Escape"===e.key?(L(null),M(e=>j(e))):"["===e.key?M(e=>"L3"===e.level||"L2"===e.level?j(e):"L1"===e.level?{...e,level:"L0"}:e):"ArrowLeft"===e.key?M(e=>{var t,n;return"L3"===e.level&&(null!=(t=e.decision)?t:0)>0?{...e,decision:(null!=(n=e.decision)?n:0)-1}:e}):"ArrowRight"===e.key?M(e=>{var t;return"L3"===e.level?{...e,decision:(null!=(t=e.decision)?t:0)+1}:e}):"]"===e.key&&M(e=>"L0"===e.level?{...e,level:"L1"}:e)};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]),(0,r.jsx)(ea.Provider,{value:Q,children:(0,r.jsxs)("div",{className:"mx-auto max-w-none space-y-3 p-3 text-slate-100 sm:p-4","data-trace-panel":!0,children:["research"===A&&(0,r.jsx)(X,{sessions:ew,pair:T,onPair:q,onClose:()=>C(null)}),"stage"===A&&(0,r.jsxs)("div",{className:"fixed inset-0 z-50 overflow-auto bg-[#020617] p-2","data-trace-present-stage":!0,children:[(0,r.jsxs)("div",{className:"mb-1 flex items-center gap-2 px-1 font-mono ".concat(Y?"text-sm":"text-[11px]"," text-slate-400"),children:[(0,r.jsx)("span",{children:"TRACE \xb7 발표"}),(0,r.jsx)("span",{className:"truncate text-indigo-200",children:Y?"공개 무대":b(I).map(e=>e.label).join(" › ")||"전체"}),(0,r.jsx)("button",{type:"button",onClick:()=>C(null),className:"ml-auto rounded-full border border-slate-600 px-3 py-0.5 text-slate-300 hover:bg-slate-800",children:"닫기(Esc)"})]}),(0,r.jsx)(eg,{model:ep,lens:I,ledger:null!=(w=null==(t=B.data)?void 0:t.entries)?w:[],now:ed,store:E,publicCapture:Y,rowsAlreadyMasked:V})]}),(0,r.jsxs)("header",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsxs)("h1",{className:"mr-2 flex items-center gap-2 text-xl font-semibold tracking-tight text-foreground",children:[(0,r.jsx)(i.A,{className:"h-5 w-5","aria-hidden":!0})," Trace"]}),(0,r.jsx)("nav",{className:"flex gap-1","aria-label":"해상도",children:x.map(e=>(0,r.jsx)("button",{type:"button",onClick:()=>M(t=>({...t,level:e})),disabled:"L2"===e&&!I.runId||"L3"===e&&void 0===I.decision,"aria-pressed":I.level===e,className:(0,er.cn)("rounded-md border px-2 py-1 font-mono text-xs disabled:opacity-40",I.level===e?"border-primary bg-primary/15 text-foreground":"text-muted-foreground hover:bg-muted"),"data-trace-level":e,children:ei[e]},e))}),(0,r.jsx)("input",{ref:U,value:null!=(k=I.q)?k:"",onChange:e=>M(t=>({...t,q:e.target.value||void 0})),placeholder:"/ 검색 — runId \xb7 PR \xb7 우주",className:"w-56 rounded-md border bg-background px-2 py-1 text-xs text-foreground","aria-label":"검색"}),(0,r.jsx)("select",{"aria-label":"시간 창",value:I.windowMin,onChange:e=>M(t=>({...t,windowMin:Number(e.target.value)})),className:"rounded-md border bg-background px-2 py-1 text-xs text-foreground",children:el.map(e=>(0,r.jsx)("option",{value:e,children:e<60?"".concat(e,"분"):"".concat(e/60,"시간")},e))}),(0,r.jsxs)("select",{"aria-label":"신호 출처",value:E,onChange:e=>R(e.target.value),className:"rounded-md border bg-background px-2 py-1 text-xs text-foreground",children:[(0,r.jsx)("option",{value:"@active",children:"전체(연합)"}),(0,r.jsx)("option",{value:"",children:"이 인스턴스"})]}),(0,r.jsx)("button",{type:"button",onClick:()=>C("stage"),className:"ml-auto rounded-md border border-indigo-400/50 px-2 py-1 text-xs text-indigo-200 hover:bg-indigo-500/10","data-elanous-action":"trace-present-stage",title:"렌즈에 남은 런을 v5 무대 문법으로(녹화용 \xb7 Esc 로 닫기)",children:"✦ 발표 \xb7 무대"}),(0,r.jsx)("button",{type:"button",onClick:()=>C("research"),disabled:0===ek.length,className:"rounded-md border border-fuchsia-400/50 px-2 py-1 text-xs text-fuchsia-200 hover:bg-fuchsia-500/10 disabled:opacity-40","data-elanous-action":"trace-present",title:ek.length?"조사 장면을 전체 무대로(녹화용)":"이 렌즈에 조사가 없다",children:"✦ 발표 \xb7 조사"}),(0,r.jsx)(l(),{href:"/live",className:"rounded-md border px-2 py-1 text-xs text-muted-foreground hover:bg-muted",children:"무대로(Live) →"})]}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-1 font-mono text-[11px]","aria-label":"렌즈","data-trace-crumbs":!0,children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"렌즈 ›"}),0===b(I).length&&(0,r.jsx)("span",{className:"text-muted-foreground",children:"전체"}),b(I).map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>{let t;return t=e.key,M(e=>{let n={...e};return"time"===t?(delete n.from,delete n.to):(delete n[t],"runId"===t&&"L2"===n.level&&(n.level="L1")),n})},className:"rounded-full border border-indigo-400/40 bg-indigo-500/10 px-2 py-0.5 text-indigo-200 hover:bg-indigo-500/20","data-trace-crumb":e.key,children:[e.label," ✕"]},e.key)),(0,r.jsxs)("span",{className:"ml-2 text-muted-foreground",children:["신호 ",J.length," \xb7 런 ",ep.runs.length," \xb7 우주 ",ep.universes.length,z.stores.length>0?" \xb7 저장소 ".concat(z.stores.length).concat(z.registeredStores?"/".concat(z.registeredStores):"").concat(z.failedStores.length?" (".concat(z.failedStores.length," 못 읽음)"):""):"",z.truncated?" \xb7 ⚠ 조회 상한에 닿음":""]})]}),(0,r.jsxs)("div",{className:"flex flex-wrap gap-1 text-[11px]","data-trace-chips":!0,children:[Object.keys(eo).map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>M(t=>({...t,status:t.status===e?void 0:e})),"aria-pressed":I.status===e,className:(0,er.cn)("rounded-full border px-2 py-0.5",I.status===e?"border-primary bg-primary/15 text-foreground":"text-muted-foreground hover:bg-muted"),"data-trace-chip":"status:".concat(e),children:[eo[e]," ",(0,r.jsx)("span",{className:"tabular-nums",children:eb.status[e]})]},e)),(0,r.jsx)("span",{className:"mx-1 text-muted-foreground",children:"\xb7"}),Object.entries(eb.universe).sort((e,t)=>t[1]-e[1]).slice(0,12).map(e=>{let[t,n]=e;return(0,r.jsxs)("button",{type:"button",onClick:()=>M(e=>({...e,universe:e.universe===t?void 0:t})),"aria-pressed":I.universe===t,className:(0,er.cn)("rounded-full border px-2 py-0.5 font-mono",I.universe===t?"border-cyan-400 bg-cyan-500/15 text-foreground":"text-muted-foreground hover:bg-muted"),"data-trace-chip":"universe:".concat(t),children:[t," ",(0,r.jsx)("span",{className:"tabular-nums",children:n})]},t)})]}),ey.length>0&&(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-1 text-[11px]","data-trace-findings":!0,children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"같은 지적 ›"}),ey.map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>M(t=>({...t,finding:t.finding===e.sig?void 0:e.sig})),"aria-pressed":I.finding===e.sig,className:(0,er.cn)("max-w-[28rem] truncate rounded-full border px-2 py-0.5",I.finding===e.sig?"border-amber-400 bg-amber-500/15 text-foreground":"text-muted-foreground hover:bg-muted"),title:e.sig,"data-trace-finding":!0,children:[e.sig," ",(0,r.jsxs)("span",{className:"tabular-nums",children:["\xb7 런 ",e.runs]})]},e.sig))]}),(0,r.jsxs)("div",{className:"grid gap-3 xl:grid-cols-12",children:[(0,r.jsxs)("section",{className:"xl:col-span-8","aria-label":"그래프",children:[(0,r.jsx)(D,{nodes:eh.nodes,edges:eh.edges,selected:"L3"===I.level&&void 0!==I.decision?"d:".concat(I.decision):S,onSelect:L,onDrill:e=>{L(null),M(t=>y(t,e))}}),(0,r.jsx)("div",{className:"mt-2",children:"L0"===I.level||"L1"===I.level?(0,r.jsx)(H,{runs:m(ep,{...I,from:void 0,to:void 0}).sort((e,t)=>e.firstTs<t.firstTs?-1:1),lo:ed-6e4*I.windowMin,hi:ed,range:void 0!==I.from&&void 0!==I.to?{from:I.from,to:I.to}:void 0,onBrush:e=>M(t=>e?{...t,from:e.from,to:e.to}:(()=>{let e={...t};return delete e.from,delete e.to,e})())}):ej?(0,r.jsx)(_,{bars:function(e,t){let n=new Map;for(let r of v(e,t)){if(!r.stage)continue;let e=Date.parse(r.ts),t=n.get(r.stage);t?(t.start=Math.min(t.start,e),t.end=Math.max(t.end,e),"bad"===r.tone?t.tone="bad":"ok"===r.tone&&"bad"!==t.tone&&(t.tone="ok")):n.set(r.stage,{start:e,end:e,tone:r.tone})}return u.lV.filter(e=>n.has(e)).map(e=>({stage:e,...n.get(e)}))}(ep,ej.runId)}):null}),(0,r.jsxs)("p",{className:"mt-1 text-[11px] lg:text-[10px] text-muted-foreground",children:["시간 축을 끌면 그 구간만 \xb7 클릭 = 선택(이웃만 밝게) \xb7 더블클릭 = 한 층 내려가기 \xb7 끌기 = 고정(두 번 누르면 해제) \xb7 휠 = 줌 \xb7 ",(0,r.jsx)("kbd",{children:"/"})," 검색 \xb7 ",(0,r.jsx)("kbd",{children:"Esc"})," 위로"]})]}),(0,r.jsxs)("aside",{className:"space-y-2 xl:col-span-4","aria-label":"옆 패널",children:[ek.map(e=>(0,r.jsx)(W,{session:e},e.key)),"L3"===I.level&&ej?(0,r.jsx)(em,{runId:ej.runId,universe:ej.universe,store:E,index:null!=(N=I.decision)?N:0,model:ep,onIndex:e=>M(t=>({...t,decision:e}))}):"L2"!==I.level?(0,r.jsxs)("div",{className:"rounded-lg border bg-card/60",children:[(0,r.jsxs)("h2",{className:"border-b px-3 py-1.5 font-mono text-[11px] tracking-wider text-muted-foreground",children:["▸ RUNS \xb7 ",ev.length]}),(0,r.jsxs)("ul",{className:"max-h-[520px] divide-y overflow-auto text-xs","data-trace-runs":!0,children:[ev.slice(0,120).map(e=>(0,r.jsx)("li",{children:(0,r.jsxs)("button",{type:"button",onClick:()=>L("r:".concat(e.runId)),onDoubleClick:()=>M(t=>y(t,{id:"r:".concat(e.runId),kind:"run"})),className:(0,er.cn)("flex w-full items-center gap-2 px-3 py-1.5 text-left hover:bg-muted/40",S==="r:".concat(e.runId)&&"bg-primary/10"),"data-trace-run":e.runId,children:[(0,r.jsx)("span",{className:(0,er.cn)("h-2 w-2 shrink-0 rounded-full","blocked"===e.status?"bg-rose-400":"landed"===e.status?"bg-green-400":"bg-indigo-400")}),(0,r.jsx)("span",{className:"w-20 shrink-0 truncate font-mono",children:e.runId.replace(/^run-/,"").slice(0,8)}),(0,r.jsx)("span",{className:"w-14 shrink-0 text-muted-foreground",children:e.current?u.fQ[e.current]:"—"}),(0,r.jsx)("span",{className:"min-w-0 flex-1 truncate font-mono text-[11px] lg:text-[10px] text-muted-foreground",children:e.universe}),e.pr&&(0,r.jsxs)("span",{className:"font-mono text-[11px] lg:text-[10px]",children:["#",e.pr]}),(0,r.jsx)("span",{className:"w-12 shrink-0 text-right font-mono text-[11px] lg:text-[10px] text-muted-foreground",children:(0,u.qo)(e.lastTs)})]})},e.runId)),0===ev.length&&(0,r.jsx)("li",{className:"px-3 py-6 text-center text-muted-foreground",children:"이 렌즈에 런이 없다 — 빵부스러기에서 칸을 빼 본다."})]})]}):ej?(0,r.jsx)(ef,{runId:ej.runId,store:E,model:ep,onPick:e=>M(t=>({...t,level:"L3",decision:e}))}):(0,r.jsxs)("p",{className:"rounded-lg border p-3 text-xs text-muted-foreground",children:["이 창에 런 ",I.runId," 가 없다 — 창을 넓히거나 출처를 \xab전체\xbb로."]})]})]}),("L2"===I.level||"L3"===I.level)&&ej&&(0,r.jsx)(en.RT,{runId:ej.runId,run:{runId:ej.runId,stages:ej.stages,current:ej.current,lastTs:ej.lastTs,events:ej.events,blocked:"blocked"===ej.status,pr:ej.pr,ledgerStatus:null},lines:v(ep,ej.runId).map(e=>"".concat((0,u.qo)(e.ts)," ").concat(e.category," ").concat(e.event)),onClose:()=>M(e=>j(e))})]})})}function ex(e,t,n){let r=(0,o.M1)(),s=(0,d.I)({queryKey:["trace","L3",e,t],queryFn:()=>r.getTrace({level:"L3",runId:e,limit:1e3,q:"harness.decision",...t?{store:t}:{}}),refetchInterval:3e4,retry:!1}),l=(0,a.useContext)(ea);return(0,a.useMemo)(()=>{var t,r,a,i;let o=(null==(t=s.data)?void 0:t.ok)?(i=l?(0,et.cj)(s.data.events,l):s.data.events,i.filter(t=>t.runId===e&&u.jg.includes(t.kind)).slice().sort((e,t)=>e.ts<t.ts?-1:+(e.ts>t.ts)).map(e=>{var t,n,r,a,s;return{ts:e.ts,kind:e.kind,runId:null!=(t=e.runId)?t:null,what:e.what,why:null!=(n=e.why)?n:null,purpose:null!=(r=e.purpose)?r:null,target:null!=(a=e.target)?a:null,..."number"==typeof e.paths?{paths:e.paths}:Array.isArray(e.paths)?{paths:e.paths.length}:{},logId:e.refs.logId,pr:void 0!==e.refs.pr?String(e.refs.pr).replace(/^#/,""):null,commit:null!=(s=e.refs.commit)?s:null,universe:e.universe}})):[];if(o.length>0)return{chain:o,source:"server",note:"서버 /v1/trace".concat((null==(r=s.data)?void 0:r.truncated)?" \xb7 상한에 걸림":"")};let d=s.isLoading?"서버 조회 중":s.error?"서버 조회 실패: ".concat(String(null!=(a=s.error.message)?a:s.error).slice(0,60)):"서버 0건";return{chain:g(n,e),source:"local",note:"이 창 조회 \xb7 ".concat(d)}},[s.data,s.isLoading,s.error,n,e,l])}function ef(e){let{runId:t,store:n,model:a,onPick:s}=e,l=a.runs.find(e=>e.runId===t),{chain:i,source:o,note:d}=ex(t,n,a);return(0,r.jsxs)("div",{className:"space-y-2 rounded-lg border bg-card/60 p-3 text-xs","data-trace-run-detail":t,children:[(0,r.jsxs)("div",{className:"font-mono text-[11px] text-muted-foreground",children:[t," \xb7 ",l.universe,l.parentRunId?" \xb7 부모 ".concat(l.parentRunId.replace(/^run-/,"").slice(0,8)):""]}),(0,r.jsx)("div",{className:"flex gap-1","aria-label":"단계",children:["author","decompose","build","gate","review","land"].map(e=>{let t=l.stages[e];return(0,r.jsx)("span",{className:(0,er.cn)("flex-1 rounded px-1 py-1 text-center text-[11px] lg:text-[10px]",!t&&"bg-muted text-muted-foreground","info"===t&&"bg-indigo-500/30","ok"===t&&"bg-green-600/40","bad"===t&&"bg-rose-500/40",l.current===e&&"ring-1 ring-violet-300"),children:u.fQ[e]},e)})}),(0,r.jsxs)("h3",{className:"pt-1 font-mono text-[11px] tracking-wider text-muted-foreground",children:["▸ 판단 사슬 \xb7 ",i.length," ",(0,r.jsxs)("span",{className:(0,er.cn)("ml-1 rounded px-1","server"===o?"bg-emerald-500/15 text-emerald-300":"bg-muted"),"data-trace-chain-source":o,children:["원천: ",d]})]}),0===i.length?(0,r.jsx)("p",{className:"text-muted-foreground",children:"이 런의 판단 신호가 없다(계측 없음 — MAX \xab이 런만\xbb 을 켜면 채워진다)."}):(0,r.jsx)("ol",{className:"flex gap-1 overflow-x-auto pb-1","data-trace-chain":!0,children:i.map((e,t)=>{var n,a;return(0,r.jsxs)("li",{className:"w-44 shrink-0 cursor-pointer rounded-md border bg-background/60 p-2 hover:border-primary",onClick:()=>s(t),"data-trace-chain-card":t,children:[(0,r.jsxs)("div",{className:"flex justify-between font-mono text-[11px] lg:text-[10px]",children:[(0,r.jsx)("span",{className:ed[e.kind],children:e.kind}),(0,r.jsx)("span",{className:"text-muted-foreground",children:(0,u.qo)(e.ts)})]}),(0,r.jsx)("div",{className:"mt-1 line-clamp-2 text-[11px]",children:e.what}),(0,r.jsxs)("div",{className:"mt-1 line-clamp-2 text-[11px] lg:text-[10px] text-muted-foreground",children:["왜: ",null!=(a=null!=(n=e.why)?n:e.purpose)?a:(0,r.jsx)("span",{className:"rounded bg-muted px-1",children:"계측 없음"})]}),e.target&&(0,r.jsxs)("div",{className:"mt-0.5 truncate text-[11px] lg:text-[10px] text-muted-foreground",children:["→ ",e.target]})]},"".concat(e.ts,"-").concat(t))})})]})}function em(e){var t,n,s,i,c,x,f,m;let{runId:g,universe:p,store:h,index:v,model:b,onIndex:y}=e,{chain:j,source:w}=ex(g,h,b),k=(0,o.M1)(),N=Math.min(Math.max(0,v),Math.max(0,j.length-1)),I=j[N],[M,S]=(0,a.useState)(!1);(0,a.useEffect)(()=>{j.length&&v!==N&&y(N)},[v,N,j.length,y]);let L=null==I?void 0:I.logId,E=(0,d.I)({queryKey:["trace","evidence",L],queryFn:()=>k.getTraceEvidence(L),enabled:!!L,retry:!1,staleTime:1/0}),R=(0,a.useContext)(ea),A=(null==(t=E.data)?void 0:t.evidence)&&R?(0,et.cj)(E.data.evidence,R):null==(n=E.data)?void 0:n.evidence;if(!I)return(0,r.jsx)("p",{className:"rounded-lg border p-3 text-xs text-muted-foreground",children:"이 런에 판단이 없다."});let C=function(e,t,n){var r;let a=Date.parse(t.ts),s=e=>{var n;return!t.runId||(null==(n=e.data)?void 0:n.runId)===t.runId},l=null!=(r=e.rows.find(e=>e.ts===t.ts&&s(e)))?r:null,i=e.rows.filter(e=>s(e)&&e!==l&&6e4>=Math.abs(Date.parse(e.ts)-a)).sort((e,t)=>e.ts<t.ts?-1:1).slice(0,20),o=new Date(a-6e4).toISOString(),d=new Date(a+6e4).toISOString(),c="elanous logs".concat(n&&"this"!==n?" --instance ".concat(n):"").concat(l?" --category ".concat(l.category):""," --since ").concat(o," --until ").concat(d).concat(t.runId?" --grep ".concat(t.runId):""," --json --json-data");return{source:l,around:i,command:c,pr:t.target&&/^#?\d+$/.test(t.target)?t.target.replace(/^#/,""):null}}(b,I,p),T=null!=(c=I.pr)?c:C.pr;return(0,r.jsxs)("div",{className:"space-y-2 rounded-lg border bg-card/60 p-3 text-xs","data-trace-decision":N,children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:()=>y(N-1),disabled:0===N,className:"rounded border px-1.5 disabled:opacity-30","aria-label":"앞 판단",children:"←"}),(0,r.jsxs)("span",{className:"font-mono text-[11px] text-muted-foreground",children:["판단 ",N+1,"/",j.length]}),(0,r.jsx)("button",{type:"button",onClick:()=>y(N+1),disabled:N>=j.length-1,className:"rounded border px-1.5 disabled:opacity-30","aria-label":"다음 판단",children:"→"}),(0,r.jsx)("span",{className:(0,er.cn)("ml-auto font-mono",ed[I.kind]),children:I.kind}),(0,r.jsx)("span",{className:"font-mono text-muted-foreground",children:(0,u.qo)(I.ts)})]}),(0,r.jsxs)("dl",{className:"grid grid-cols-[5rem_1fr] gap-x-2 gap-y-1",children:[(0,r.jsx)("dt",{className:"text-muted-foreground",children:"무엇"}),(0,r.jsx)("dd",{children:I.what}),(0,r.jsx)("dt",{className:"text-muted-foreground",children:"왜"}),(0,r.jsx)("dd",{children:null!=(x=I.why)?x:(0,r.jsx)("span",{className:"rounded bg-muted px-1",children:"계측 없음"})}),(0,r.jsx)("dt",{className:"text-muted-foreground",children:"목적"}),(0,r.jsx)("dd",{children:null!=(f=I.purpose)?f:(0,r.jsx)("span",{className:"rounded bg-muted px-1",children:"계측 없음"})}),(0,r.jsx)("dt",{className:"text-muted-foreground",children:"어디로"}),(0,r.jsx)("dd",{children:null!=(m=I.target)?m:"—"}),I.paths?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("dt",{className:"text-muted-foreground",children:"PATHS"}),(0,r.jsx)("dd",{className:"font-mono",children:I.paths})]}):null]}),(0,r.jsxs)("details",{open:!0,className:"rounded-md border bg-background/40 p-2","data-trace-evidence":!0,children:[(0,r.jsx)("summary",{className:"cursor-pointer font-mono text-[11px] tracking-wider text-muted-foreground",children:"▸ L4 증거"}),(0,r.jsxs)("div",{className:"mt-2 space-y-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"text-[11px] lg:text-[10px] text-muted-foreground","data-trace-evidence-origin":(null==(s=E.data)?void 0:s.evidence)?"server":"local",children:["원 로그 줄 \xb7 ",(null==(i=E.data)?void 0:i.evidence)?"서버 원문(비밀 가림)":"server"===w&&E.error?"서버 원문 실패 — 이 창 조회":"이 창 조회"]}),(0,r.jsx)("pre",{className:"max-h-40 overflow-auto rounded bg-muted/40 p-2 text-[11px] lg:text-[10px] leading-relaxed","data-trace-evidence-source":!0,children:A?JSON.stringify({ref:E.data.ref,ts:A.ts,instance:A.instance,category:A.category,event:A.event,data:A.data},null,2):C.source?JSON.stringify({ts:C.source.ts,instance:C.source.instance,category:C.source.category,event:C.source.event,data:C.source.data},null,2):L&&E.isLoading?"원문을 받는 중…":"이 창의 조회에 원 줄이 없다(조회 상한 또는 다른 우주)."})]}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"text-[11px] lg:text-[10px] text-muted-foreground",children:["앞뒤 1분 \xb7 같은 런 \xb7 ",C.around.length]}),(0,r.jsx)("pre",{className:"max-h-32 overflow-auto rounded bg-muted/40 p-2 text-[11px] lg:text-[10px] leading-relaxed",children:C.around.map(e=>"".concat((0,u.qo)(e.ts)," ").concat(e.category," ").concat(e.event)).join("\n")||"—"})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("code",{className:"min-w-0 flex-1 truncate rounded bg-muted/40 px-2 py-1 text-[11px] lg:text-[10px]",title:C.command,"data-trace-evidence-command":!0,children:C.command}),(0,r.jsx)("button",{type:"button",className:"rounded border px-2 py-1 text-[11px] lg:text-[10px] hover:bg-muted",onClick:()=>{var e;null==(e=navigator.clipboard)||e.writeText(C.command).then(()=>{S(!0),setTimeout(()=>S(!1),1200)})},children:M?"복사됨":"명령 복사"})]}),I.commit&&(0,r.jsxs)("code",{className:"rounded bg-muted/40 px-2 py-1 text-[11px] lg:text-[10px]","data-trace-evidence-commit":!0,children:["커밋 ",I.commit.slice(0,10)]}),T&&(0,r.jsxs)(l(),{href:"/approvals?pr=".concat(T),className:"inline-block rounded border px-2 py-1 text-[11px] lg:text-[10px] hover:bg-muted",children:["PR #",T," 승인 카드 →"]})]})]})]})}function eg(e){var t;let{model:n,lens:s,ledger:l,now:i,store:c,publicCapture:x,rowsAlreadyMasked:f}=e,g=(0,a.useMemo)(()=>(function(e,t){if(!(t.universe||t.status||t.q||t.runId||t.finding||void 0!==t.from))return e.rows;let n=new Set(t.runId?[t.runId]:m(e,t).map(e=>e.runId));return e.rows.filter(e=>{var t;let r=null==(t=e.data)?void 0:t.runId;return"string"!=typeof r||n.has(r)})})(n,s),[n,s]),p=(0,a.useMemo)(()=>x&&!f?(0,et.yR)(g):g,[x,f,g]),h=g===n.rows,v=(0,o.M1)(),b=(0,d.I)({queryKey:["trace","shipped",s.windowMin],queryFn:()=>v.getLiveShipped("".concat(s.windowMin,"m")),refetchInterval:6e4,enabled:h}),y=(0,a.useMemo)(()=>{var e;let t=(0,u.Hc)(p,l,{now:i,windowMinutes:s.windowMin}),n=h?null==(e=b.data)?void 0:e.merged:null;return"number"==typeof n?{...t,gauges:{...t.gauges,shipped:n}}:t},[p,l,i,s.windowMin,h,b.data]);return(0,r.jsx)(J.xl,{board:y,rows:p,publicCapture:x,windowMinutes:s.windowMin,sourceLabel:"@active"===c?"federated":c||"this instance",shippedSource:h&&"number"==typeof(null==(t=b.data)?void 0:t.merged)?"github":"log"})}function ep(){return(0,r.jsx)(ec,{})}},14751:(e,t,n)=>{Promise.resolve().then(n.bind(n,5064))}},e=>{e.O(0,[7777,9538,6048,9656,8734,6751,6303,6390,3170,7358],()=>e(e.s=14751)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8677],{1355:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>l,f6:()=>a,oD:()=>s});let n="elanous.daemon.sessionId";function a(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=a();return localStorage.setItem(n,t),t}function l(){let e=a();return localStorage.setItem(n,e),e}},10080:(e,t,r)=>{"use strict";r.d(t,{$:()=>i});var n=r(54456),a=r(80247),s=r(13680),l=r(74591);let o=(0,s.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function i(e){let{className:t,variant:r="default",size:s="default",...i}=e;return(0,n.jsx)(a.$,{"data-slot":"button",className:(0,l.cn)(o({variant:r,size:s,className:t})),...i})}},19785:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>k});var n=r(54456),a=r(60500),s=r(36581),l=r(10080),o=r(31395),i=r(52468),d=r(81573),c=r(15375);let u="wikilink:",m={aliasDivider:"|",pageResolver:e=>[e],hrefTemplate:e=>"".concat(u).concat(encodeURIComponent(e))};function x(e){let{markdown:t,onWikilink:r}=e;return(0,n.jsx)("div",{className:"text-sm text-foreground/90",children:(0,n.jsx)(o.oz,{remarkPlugins:[i.A,c.A,[d.A,m]],components:{h1:e=>{let{children:t}=e;return(0,n.jsx)("h1",{className:"mb-3 mt-5 border-b border-border pb-1 text-2xl font-bold",children:t})},h2:e=>{let{children:t}=e;return(0,n.jsx)("h2",{className:"mb-2 mt-5 text-xl font-bold",children:t})},h3:e=>{let{children:t}=e;return(0,n.jsx)("h3",{className:"mb-2 mt-4 text-lg font-semibold",children:t})},h4:e=>{let{children:t}=e;return(0,n.jsx)("h4",{className:"mb-1 mt-3 text-base font-semibold",children:t})},h5:e=>{let{children:t}=e;return(0,n.jsx)("h5",{className:"mb-1 mt-2 text-sm font-semibold text-muted-foreground",children:t})},h6:e=>{let{children:t}=e;return(0,n.jsx)("h6",{className:"mb-1 mt-2 text-xs font-semibold uppercase text-muted-foreground",children:t})},p:e=>{let{children:t}=e;return(0,n.jsx)("p",{className:"my-2 leading-relaxed",children:t})},ul:e=>{let{children:t}=e;return(0,n.jsx)("ul",{className:"my-2 list-disc space-y-1 pl-6",children:t})},ol:e=>{let{children:t}=e;return(0,n.jsx)("ol",{className:"my-2 list-decimal space-y-1 pl-6",children:t})},li:e=>{let{children:t}=e;return(0,n.jsx)("li",{className:"leading-relaxed",children:t})},blockquote:e=>{let{children:t}=e;return(0,n.jsx)("blockquote",{className:"my-3 border-l-4 border-primary/40 bg-muted/40 py-1 pl-3 text-muted-foreground",children:t})},hr:()=>(0,n.jsx)("hr",{className:"my-4 border-border"}),table:e=>{let{children:t}=e;return(0,n.jsx)("div",{className:"my-3 overflow-x-auto",children:(0,n.jsx)("table",{className:"w-full border-collapse text-sm",children:t})})},thead:e=>{let{children:t}=e;return(0,n.jsx)("thead",{className:"bg-muted/60",children:t})},th:e=>{let{children:t}=e;return(0,n.jsx)("th",{className:"border border-border px-3 py-1.5 text-left font-semibold",children:t})},td:e=>{let{children:t}=e;return(0,n.jsx)("td",{className:"border border-border px-3 py-1.5",children:t})},code:e=>{let{className:t,children:r}=e;return t?(0,n.jsx)("code",{className:"".concat(t," font-mono"),children:r}):(0,n.jsx)("code",{className:"rounded bg-muted px-1 py-0.5 font-mono text-[0.85em]",children:r})},pre:e=>{let{children:t}=e;return(0,n.jsx)("pre",{className:"my-3 overflow-x-auto rounded-lg border border-border bg-muted/40 p-3 text-xs",children:t})},img:e=>{let{src:t,alt:r}=e;return(0,n.jsx)("img",{src:"string"==typeof t?t:"",alt:null!=r?r:"",className:"my-2 max-w-full rounded"})},a:e=>{let{href:t,children:a}=e,s=null!=t?t:"";if(s.startsWith(u)){let e=decodeURIComponent(s.slice(u.length));return(0,n.jsx)("button",{type:"button",onClick:()=>null==r?void 0:r(e),className:"text-primary underline decoration-dotted underline-offset-2 hover:decoration-solid",children:a})}return(0,n.jsx)("a",{href:s,target:"_blank",rel:"noreferrer",className:"text-primary underline underline-offset-2",children:a})}},children:t})})}class h{get(e){return this.client.fetchJson(e)}info(){return this.get("/v1/vault/info")}list(e){return this.get("/v1/vault/list".concat(e?"?cwd=".concat(encodeURIComponent(e)):""))}read(e,t){let r=new URLSearchParams({path:e,...t?{maxBytes:String(t)}:{}});return this.get("/v1/vault/read?".concat(r.toString()))}search(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50;return this.get("/v1/vault/search?q=".concat(encodeURIComponent(e),"&limit=").concat(t))}notes(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500;return this.get("/v1/vault/notes?".concat(e?"query=".concat(encodeURIComponent(e),"&"):"","limit=").concat(t))}backlinks(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100;return this.get("/v1/vault/backlinks?target=".concat(encodeURIComponent(e),"&limit=").concat(t))}tags(){return this.get("/v1/vault/tags")}templates(){return this.get("/v1/vault/templates")}graph(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:500,n=new URLSearchParams({limit:String(r),...e?{focus:e,hops:String(t)}:{}});return this.get("/v1/vault/graph?".concat(n.toString()))}pollChanges(e){return this.get("/v1/vault/poll-changes?sinceMs=".concat(e))}orphans(){return this.get("/v1/vault/orphans")}templateExpand(e,t){return this.client.fetchJson("/v1/vault/template-expand",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({templatePath:e,...t?{title:t}:{}})})}async writeNote(e){var t,r,n,a;let s=await this.client.fetchResponse("/v1/vault/file",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(e)}),l=(null!=(t=s.headers.get("content-type"))?t:"").includes("application/json")?await s.json():await s.text();if(!s.ok&&409!==s.status)throw Error(String("string"==typeof l?l:null!=(a=null!=(n=null!=(r=null==l?void 0:l.message)?r:null==l?void 0:l.reason)?n:null==l?void 0:l.error)?a:"".concat(s.status)));return l}async saveNote(e){var t,r,n;let a=await this.client.fetchResponse("/v1/notes/save",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)}),s=(null!=(t=a.headers.get("content-type"))?t:"").includes("application/json")?await a.json():await a.text();if(!a.ok&&409!==a.status)throw Error(String("string"==typeof s?s:null!=(n=null!=(r=null==s?void 0:s.reason)?r:null==s?void 0:s.error)?n:"".concat(a.status)));return s}constructor(e){this.client=e}}function p(e){let t=/^---\n([\s\S]*?)\n---\n?/.exec(e);return t?{frontmatter:t[1],body:e.slice(t[0].length)}:{frontmatter:null,body:e}}function g(e){let t=e.toLowerCase();return t.endsWith(".md")||t.endsWith(".markdown")?"markdown":/\.(png|jpe?g|gif|webp|svg)$/.test(t)?"image":t.endsWith(".pdf")?"pdf":/\.(txt|json|ya?ml|csv|log)$/.test(t)?"text":"other"}function f(e){let{onPickTag:t}=e,{client:r}=(0,s.Q)(),l=(0,a.useMemo)(()=>new h(r),[r]),[o,i]=(0,a.useState)([]),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)(!0),x=(0,a.useCallback)(async()=>{m(!0);try{var e;let t=await l.tags();i((null!=(e=t.tags)?e:[]).sort((e,t)=>t.count-e.count))}catch(e){}finally{m(!1)}},[l]);(0,a.useEffect)(()=>{x()},[x]);let p=d?o.filter(e=>e.tag.toLowerCase().includes(d.toLowerCase())):o;return(0,n.jsxs)("div",{className:"flex h-full flex-col",children:[(0,n.jsx)("div",{className:"border-b border-border p-2",children:(0,n.jsx)("input",{value:d,onChange:e=>c(e.target.value),placeholder:"태그 필터…",className:"w-full rounded border border-border bg-background px-2 py-1 text-xs"})}),(0,n.jsx)("div",{className:"flex-1 overflow-auto p-1",children:u?(0,n.jsx)("p",{className:"p-2 text-xs text-muted-foreground",children:"불러오는 중…"}):0===p.length?(0,n.jsx)("p",{className:"p-2 text-xs text-muted-foreground",children:"태그 없음"}):(0,n.jsx)("ul",{className:"space-y-0.5",children:p.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{onClick:()=>t(e.tag),className:"flex w-full items-center justify-between rounded px-2 py-1 text-left text-xs hover:bg-muted",children:[(0,n.jsxs)("span",{className:"truncate",children:["#",e.tag]}),(0,n.jsx)("span",{className:"ml-2 shrink-0 rounded bg-muted px-1.5 text-[10px] text-muted-foreground",children:e.count})]})},e.tag))})})]})}function v(e){var t,r;let{onOpen:o}=e,{client:i}=(0,s.Q)(),d=(0,a.useMemo)(()=>new h(i),[i]),[c,u]=(0,a.useState)(null),[m,x]=(0,a.useState)(null),[p,g]=(0,a.useState)(!0),f=(0,a.useCallback)(async e=>{g(!0);try{u(await d.graph(null!=e?e:void 0,1,e?60:400))}catch(e){}finally{g(!1)}},[d]);(0,a.useEffect)(()=>{f(m)},[f,m]);let v=(0,a.useMemo)(()=>{if(!c)return{nodes:[],edges:[]};let e=c.nodes.map(e=>e.id),t=c.edges.map(e=>({source:e.from,target:e.to}));return{nodes:function(e,t){var r,n,a;let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{width:800,height:600},{width:l,height:o}=s,i=null!=(r=s.iterations)?r:120,d=e.length,c=new Map;for(let e of t)c.set(e.source,(null!=(n=c.get(e.source))?n:0)+1),c.set(e.target,(null!=(a=c.get(e.target))?a:0)+1);let u=l/2,m=o/2,x=.4*Math.min(l,o),h=e.map((e,t)=>{var r;return{id:e,deg:null!=(r=c.get(e))?r:0,x:u+x*Math.cos(2*Math.PI*t/Math.max(1,d)),y:m+x*Math.sin(2*Math.PI*t/Math.max(1,d))}}),p=new Map(h.map((e,t)=>[e.id,t])),g=Math.sqrt(l*o/Math.max(1,d));for(let e=0;e<i;e++){let r=h.map(()=>({x:0,y:0}));for(let e=0;e<d;e++)for(let t=e+1;t<d;t++){let n=h[e].x-h[t].x,a=h[e].y-h[t].y,s=Math.hypot(n,a)||.01,l=g*g/s;n/=s,a/=s,r[e].x+=n*l,r[e].y+=a*l,r[t].x-=n*l,r[t].y-=a*l}for(let e of t){let t=p.get(e.source),n=p.get(e.target);if(null==t||null==n)continue;let a=h[t].x-h[n].x,s=h[t].y-h[n].y,l=Math.hypot(a,s)||.01,o=l*l/g;a/=l,s/=l,r[t].x-=a*o,r[t].y-=s*o,r[n].x+=a*o,r[n].y+=s*o}let n=1-e/i;for(let e=0;e<d;e++){let t=Math.hypot(r[e].x,r[e].y)||.01,a=Math.min(t,30*n);h[e].x=Math.max(20,Math.min(l-20,h[e].x+r[e].x/t*a)),h[e].y=Math.max(20,Math.min(o-20,h[e].y+r[e].y/t*a))}}return h}(e,t,{width:900,height:640,iterations:140}),edges:t}},[c]),b=(0,a.useMemo)(()=>new Map(v.nodes.map(e=>[e.id,e])),[v]),y=Math.max(1,...v.nodes.map(e=>e.deg));return(0,n.jsxs)("div",{className:"flex h-full flex-col",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 border-b border-border px-3 py-2 text-sm",children:[(0,n.jsx)("span",{className:"font-medium",children:"노트 그래프"}),m?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("span",{className:"text-xs text-muted-foreground",children:["focus: ",m," (1-hop)"]}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",className:"ml-auto h-6 px-2 text-xs",onClick:()=>x(null),children:"전체 그래프"})]}):(0,n.jsxs)("span",{className:"ml-auto text-xs text-muted-foreground",children:[null!=(t=null==c?void 0:c.nodes.length)?t:0," 노드 \xb7 ",null!=(r=null==c?void 0:c.edges.length)?r:0," 링크",(null==c?void 0:c.truncated)?" (일부)":""]})]}),(0,n.jsx)("div",{className:"flex-1 overflow-auto p-2",children:p?(0,n.jsx)("p",{className:"p-4 text-sm text-muted-foreground",children:"그래프 계산 중…"}):c&&0!==c.nodes.length?(0,n.jsxs)("svg",{viewBox:"0 0 ".concat(900," ").concat(640),className:"h-auto w-full",style:{maxHeight:"78vh"},children:[v.edges.map((e,t)=>{let r=b.get(e.source),a=b.get(e.target);return r&&a?(0,n.jsx)("line",{x1:r.x,y1:r.y,x2:a.x,y2:a.y,stroke:"currentColor",className:"text-border",strokeWidth:.6,opacity:.5},t):null}),v.nodes.map(e=>{let t=3+e.deg/y*9;return(0,n.jsxs)("g",{className:"cursor-pointer",onClick:()=>null==o?void 0:o(e.id),onDoubleClick:()=>x(e.id),children:[(0,n.jsx)("circle",{cx:e.x,cy:e.y,r:t,className:"fill-primary/70 hover:fill-primary"}),(e.deg>=.3*y||m)&&(0,n.jsx)("text",{x:e.x+t+2,y:e.y+3,className:"fill-foreground/70 text-[9px]",children:e.id.split("/").pop()})]},e.id)})]}):(0,n.jsx)("p",{className:"p-4 text-sm text-muted-foreground",children:"그래프가 비어있습니다."})}),(0,n.jsx)("p",{className:"border-t border-border px-3 py-1 text-[11px] text-muted-foreground",children:"클릭=노트 열기 \xb7 더블클릭=로컬 그래프(focus)"})]})}function b(e){let{onClose:t,onCreated:r}=e,{client:o}=(0,s.Q)(),i=(0,a.useMemo)(()=>new h(o),[o]),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)([]),[x,p]=(0,a.useState)(""),[g,f]=(0,a.useState)(!1),[v,b]=(0,a.useState)(null);(0,a.useEffect)(()=>{i.templates().then(e=>{var t;return m(null!=(t=e.templates)?t:[])}).catch(()=>{})},[i]);let y=(0,a.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};f(!0),b(null);try{let t=e.daily?function(){let e=new Date;return"".concat(e.getFullYear(),"-").concat(String(e.getMonth()+1).padStart(2,"0"),"-").concat(String(e.getDate()).padStart(2,"0"))}():d.trim();if(!t){b("제목을 입력하세요"),f(!1);return}let n="# ".concat(t,"\n\n");if(x){let e=await i.templateExpand(x,t);e.content&&(n=e.content)}else e.daily&&(n="# ".concat(t,"\n\n## 오늘\n\n- \n"));let a=e.daily?"Daily/".concat(t,".md"):"".concat(t,".md"),s=await i.writeNote({path:a,content:n,createOnly:!0});if(s.error){b("file_exists"===s.error?"이미 존재하는 노트입니다":s.error),f(!1);return}r(a)}catch(e){b(e instanceof Error?e.message:String(e)),f(!1)}},[i,d,x,r]);return(0,n.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:t,children:(0,n.jsxs)("div",{className:"w-[420px] rounded-lg border border-border bg-card p-4 shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,n.jsx)("h2",{className:"mb-3 text-sm font-semibold",children:"새 노트"}),(0,n.jsx)("input",{value:d,onChange:e=>c(e.target.value),onKeyDown:e=>{"Enter"===e.key&&y()},placeholder:"노트 제목…",autoFocus:!0,className:"mb-2 w-full rounded border border-border bg-background px-3 py-2 text-sm"}),u.length>0&&(0,n.jsxs)("select",{value:x,onChange:e=>p(e.target.value),className:"mb-2 w-full rounded border border-border bg-background px-2 py-1.5 text-sm",children:[(0,n.jsx)("option",{value:"",children:"템플릿 없음"}),u.map(e=>(0,n.jsx)("option",{value:e.relPath,children:e.name},e.relPath))]}),v&&(0,n.jsx)("p",{className:"mb-2 text-xs text-rose-400",children:v}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(l.$,{size:"sm",onClick:()=>void y(),disabled:g||!d.trim(),children:"생성"}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>void y({daily:!0}),disabled:g,children:"오늘 데일리노트"}),(0,n.jsx)(l.$,{size:"sm",variant:"ghost",className:"ml-auto",onClick:t,children:"취소"})]})]})})}let y="elanous.pwa.vaultTreeOpen";function j(e){let{onEdit:t}=e,{client:r}=(0,s.Q)(),o=(0,a.useMemo)(()=>new h(r),[r]),[i,d]=(0,a.useState)(null),[c,u]=(0,a.useState)(""),[m,x]=(0,a.useState)([]),[p,j]=(0,a.useState)(null),[N,k]=(0,a.useState)(null),[C,S]=(0,a.useState)(""),[M,z]=(0,a.useState)(null),[D,E]=(0,a.useState)(!1),[I,P]=(0,a.useState)("view"),[U,R]=(0,a.useState)("files"),[$,_]=(0,a.useState)(!1),[O,T]=(0,a.useState)(0),[q,F]=(0,a.useState)(!0);(0,a.useEffect)(()=>{F(function(e){try{return(null==e?void 0:e.getItem(y))!=="0"}catch(e){return!0}}(window.localStorage))},[]);let L=(0,a.useCallback)(()=>{F(e=>{let t=!e;var r=window.localStorage;try{null==r||r.setItem(y,t?"1":"0")}catch(e){}return t})},[]);(0,a.useEffect)(()=>{let e=Date.now(),t=setInterval(()=>{o.pollChanges(e).then(e=>{var t;return T(null!=(t=e.count)?t:0)}).catch(()=>{})},3e4);return()=>clearInterval(t)},[o]);let K=(0,a.useCallback)(e=>{S("#".concat(e)),R("files"),(async()=>{E(!0);try{var t;let r=await o.search("#".concat(e),50);z(null!=(t=r.matches)?t:[])}catch(e){z([])}finally{E(!1)}})()},[o]),Q=(0,a.useCallback)(async e=>{E(!0),z(null);try{let t=await o.list(e||void 0);t.error||(x(t.entries),u(t.cwd))}catch(e){}finally{E(!1)}},[o]);(0,a.useEffect)(()=>{let e=!0;return o.info().then(t=>{e&&(d(t),t.available&&Q(""))}).catch(()=>{}),()=>{e=!1}},[o,Q]);let W=(0,a.useCallback)(async e=>{j(e),k(null),window.innerWidth<=767&&F(!1);try{k(await o.read(e))}catch(e){}},[o]),A=(0,a.useCallback)(async()=>{let e=C.trim();if(!e)return void z(null);E(!0);try{var t;let r=await o.search(e,50);z(null!=(t=r.matches)?t:[])}catch(e){z([])}finally{E(!1)}},[o,C]),V=c&&(null==i?void 0:i.root)?c.replace(i.root,"").split("/").filter(Boolean):[],Y=(null==i?void 0:i.root)?c.replace(i.root,"").replace(/^\//,""):"";return i&&!i.available?(0,n.jsxs)("div",{className:"p-6 text-sm text-muted-foreground",children:["Obsidian vault를 찾을 수 없습니다 (source: ",i.source,"). ~/.elanous/config.json 의 obsidian.vault 를 확인하세요."]}):(0,n.jsxs)("div",{className:"mx-auto flex h-[calc(100vh-3rem)] max-w-[1920px] gap-3 px-3 py-3",children:[$&&(0,n.jsx)(b,{onClose:()=>_(!1),onCreated:e=>{_(!1),Q(""),null==t||t(e)}}),(0,n.jsxs)("div",{"data-testid":"vault-tree",className:[q?"flex":"hidden","w-full shrink-0 flex-col rounded-lg border border-border bg-card/40 md:w-64 lg:w-72"].join(" "),children:[(0,n.jsxs)("div",{className:"flex items-center gap-1 border-b border-border px-2 py-1.5",children:[["files","tags","graph"].map(e=>(0,n.jsx)("button",{onClick:()=>R(e),className:["rounded px-2 py-0.5 text-xs",U===e?"bg-primary/20 text-foreground":"text-muted-foreground"].join(" "),children:{files:"파일",tags:"태그",graph:"그래프"}[e]},e)),O>0&&(0,n.jsxs)("span",{className:"rounded bg-amber-500/15 px-1.5 py-0.5 text-[10px] text-amber-300",title:"외부 변경 감지",children:["↻ ",O]}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",className:"ml-auto h-6 px-2 text-xs",onClick:()=>_(!0),children:"+ 새 노트"})]}),"graph"===U?(0,n.jsx)(v,{onOpen:e=>{R("files"),W("".concat(e,".md"))}}):"tags"===U?(0,n.jsx)(f,{onPickTag:K}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"border-b border-border p-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("input",{value:C,onChange:e=>S(e.target.value),onKeyDown:e=>{"Enter"===e.key&&A()},placeholder:"vault 전문검색…",className:"min-w-0 flex-1 rounded border border-border bg-background px-2 py-1 text-sm"}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>void A(),children:"검색"})]}),!M&&(0,n.jsxs)("div",{className:"mt-1.5 flex flex-wrap items-center gap-1 text-xs text-muted-foreground",children:[(0,n.jsx)("button",{className:"hover:text-foreground",onClick:()=>void Q(""),children:"vault"}),V.map((e,t)=>(0,n.jsxs)("span",{children:["/ ",(0,n.jsx)("button",{className:"hover:text-foreground",onClick:()=>void Q("".concat(i.root,"/").concat(V.slice(0,t+1).join("/"))),children:e})]},t))]})]}),(0,n.jsxs)("div",{className:"flex-1 overflow-auto p-1",children:[D&&(0,n.jsx)("p",{className:"p-2 text-xs text-muted-foreground",children:"불러오는 중…"}),M?0===M.length?(0,n.jsx)("p",{className:"p-2 text-xs text-muted-foreground",children:"검색 결과 없음"}):(0,n.jsx)("ul",{className:"space-y-1",children:M.map((e,t)=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{className:"w-full rounded px-2 py-1.5 text-left text-xs hover:bg-muted",onClick:()=>void W(e.path),children:[(0,n.jsx)("span",{className:"font-medium",children:e.path.split("/").pop()})," ",(0,n.jsxs)("span",{className:"text-muted-foreground",children:[":",e.lineNumber]}),(0,n.jsx)("div",{className:"truncate text-muted-foreground",children:e.snippet})]})},t))}):(0,n.jsxs)("ul",{children:[Y&&(0,n.jsx)("li",{children:(0,n.jsx)("button",{className:"w-full rounded px-2 py-1.5 text-left text-sm text-muted-foreground hover:bg-muted",onClick:()=>void Q("".concat(i.root,"/").concat(function(e){let t=e.split("/").filter(Boolean);return t.pop(),t.join("/")}(Y))),children:"\uD83D\uDCC1 .."})}),m.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{className:["flex w-full items-center gap-1.5 rounded px-2 py-1.5 text-left text-sm hover:bg-muted",p==="".concat(Y?Y+"/":"").concat(e.name)?"bg-muted":""].join(" "),onClick:()=>e.isDir?void Q("".concat(c,"/").concat(e.name)):void W("".concat(Y?Y+"/":"").concat(e.name)),children:[(0,n.jsx)("span",{children:e.isDir?"\uD83D\uDCC1":"markdown"===g(e.name)?"\uD83D\uDCDD":"image"===g(e.name)?"\uD83D\uDDBC️":"\uD83D\uDCC4"}),(0,n.jsx)("span",{className:"truncate",children:e.name})]})},e.relPath))]})]})]})]}),(0,n.jsxs)("div",{className:[q?"hidden md:flex":"flex","min-w-0 flex-1 flex-col rounded-lg border border-border bg-card/40"].join(" "),children:[(0,n.jsxs)("div",{className:"flex items-center justify-between border-b border-border px-3 py-2",children:[(0,n.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,n.jsx)("button",{type:"button",onClick:L,"aria-expanded":q,"aria-label":q?"폴더 접기":"폴더 펴기",title:q?"폴더 접기":"폴더 펴기",className:"shrink-0 rounded px-1.5 py-0.5 text-xs text-muted-foreground ring-1 ring-border hover:text-foreground",children:q?"◀ 폴더":"▶ 폴더"}),(0,n.jsx)("span",{className:"truncate text-sm font-medium",children:null!=p?p:"파일을 선택하세요"})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[p&&"markdown"===g(p)&&(0,n.jsx)("div",{className:"flex items-center gap-0.5 rounded ring-1 ring-border",children:["view","raw"].map(e=>(0,n.jsx)("button",{onClick:()=>P(e),className:["px-2 py-0.5 text-xs",I===e?"bg-primary/20 text-foreground":"text-muted-foreground"].join(" "),children:"view"===e?"View":"Raw"},e))}),p&&"markdown"===g(p)&&t&&(0,n.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>t(p),children:"편집"})]})]}),(0,n.jsx)("div",{className:"flex-1 overflow-auto p-4",children:N?(0,n.jsx)(w,{preview:N,selected:p,mode:I,onWikilink:e=>{W("".concat(Y?Y+"/":"").concat(e,".md"))}}):(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:p?"로딩…":"좌측에서 노트를 선택하면 여기에 표시됩니다."})})]})]})}function w(e){let{preview:t,selected:r,mode:a,onWikilink:s}=e;if(t.error)return(0,n.jsx)("p",{className:"text-sm text-rose-400",children:t.error});let l=g(r);if("image"===l&&t.bytes)return(0,n.jsx)("img",{src:"data:".concat(t.mime,";base64,").concat(t.bytes),alt:r,className:"max-w-full rounded"});if("markdown"===l&&null!=t.content){let{frontmatter:e,body:r}=p(t.content);return"raw"===a?(0,n.jsx)("pre",{className:"whitespace-pre-wrap font-mono text-xs leading-relaxed",children:t.content}):(0,n.jsxs)("div",{children:[e&&(0,n.jsx)("pre",{className:"mb-3 rounded bg-muted/40 p-2 text-[11px] text-muted-foreground",children:e}),(0,n.jsx)(x,{markdown:r,onWikilink:s}),t.truncated&&(0,n.jsxs)("p",{className:"mt-2 text-xs text-amber-400",children:["⚠ 일부만 표시됨(",(t.size/1024).toFixed(0),"KB)"]})]})}return null!=t.content?(0,n.jsx)("pre",{className:"whitespace-pre-wrap text-sm",children:t.content}):(0,n.jsxs)("p",{className:"text-sm text-muted-foreground",children:["미리보기 불가(",t.mime,")"]})}function N(e){let{path:t,onClose:r}=e,{client:o}=(0,s.Q)(),i=(0,a.useMemo)(()=>new h(o),[o]),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)(!1),[g,f]=(0,a.useState)("split"),[v,b]=(0,a.useState)("clean"),[y,j]=(0,a.useState)(null),w=(0,a.useRef)(void 0),N=(0,a.useRef)(null),k=(0,a.useRef)(null),[C,S]=(0,a.useState)("outline"),[M,z]=(0,a.useState)([]),[D,E]=(0,a.useState)(null),I=(0,a.useMemo)(()=>(function(e){let t=[],r=!1;return e.split("\n").forEach((e,n)=>{let a=e.trimEnd();if(/^```/.test(a.trim())){r=!r;return}if(r)return;let s=/^(#{1,6})\s+(.+)$/.exec(a);s&&t.push({level:s[1].length,text:s[2].trim(),line:n})}),t})(p(d).body),[d]);(0,a.useEffect)(()=>{let e=!0;return i.read(t,8388608).then(t=>{var r;e&&(c(null!=(r=t.content)?r:""),w.current=t.mtimeMs,m(!0),b("clean"))}).catch(()=>{e&&(j("노트를 불러오지 못했습니다"),m(!0))}),()=>{e=!1,N.current&&clearTimeout(N.current)}},[i,t]);let P=(0,a.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d;b("saving"),j(null);try{let n=await i.writeNote({path:t,content:r,...e?{}:null!=w.current?{lastKnownMtime:w.current}:{}});if("mtime_conflict"===n.error||n.error&&null!=n.currentMtime)return void b("conflict");if(n.error){b("error"),j(n.error);return}null!=n.mtimeMs&&(w.current=n.mtimeMs),b("saved")}catch(e){b("error"),j(e instanceof Error?e.message:String(e))}},[i,t,d]);(0,a.useEffect)(()=>{var e;let r=!0;return i.backlinks((null!=(e=t.split("/").pop())?e:t).replace(/\.md$/i,""),100).then(e=>{var t;r&&z(null!=(t=e.matches)?t:[])}).catch(()=>{}),()=>{r=!1}},[i,t]);let U=(0,a.useCallback)((e,t)=>{let r=function(e,t){let r=e.slice(0,t),n=r.lastIndexOf("[[");if(n<0)return null;let a=r.slice(n+2);return a.includes("]]")||a.includes("\n")?null:{query:a,start:n+2}}(e,t);if(!r)return void E(null);i.notes(r.query||void 0,8).then(e=>{var n;E({query:r.query,start:r.start,caret:t,items:(null!=(n=e.notes)?n:[]).slice(0,8)})}).catch(()=>E(null))},[i]),R=(0,a.useCallback)((e,t)=>{c(e),b("dirty"),U(e,t),N.current&&clearTimeout(N.current),N.current=setTimeout(()=>{P(!1,e)},2500)},[P,U]),$=(0,a.useCallback)(e=>{if(!D)return;let t=function(e,t,r,n){let a=e.slice(0,t),s=e.slice(r),l="".concat(n,"]]");return{text:a+l+s,caret:a.length+l.length}}(d,D.start,D.caret,e.name);c(t.text),b("dirty"),E(null),requestAnimationFrame(()=>{k.current&&(k.current.focus(),k.current.setSelectionRange(t.caret,t.caret))})},[D,d]),_=(0,a.useCallback)(e=>{let t=k.current;if(!t)return;let r=d.split("\n").slice(0,e).join("\n").length;t.focus(),t.setSelectionRange(r,r),t.scrollTop=Math.max(0,20*e-100)},[d]),O=p(d).body;return u?(0,n.jsxs)("div",{className:"mx-auto flex h-[calc(100vh-3rem)] max-w-[1500px] flex-col px-3 py-3",children:[(0,n.jsxs)("div",{className:"mb-2 flex items-center gap-2",children:[(0,n.jsx)(l.$,{size:"sm",variant:"ghost",onClick:r,children:"← 목록"}),(0,n.jsx)("span",{className:"truncate text-sm font-medium",children:t}),(0,n.jsx)("span",{className:["ml-2 rounded px-2 py-0.5 text-xs",{clean:"text-muted-foreground",dirty:"text-amber-400",saving:"text-sky-400",saved:"text-emerald-400",conflict:"text-rose-400",error:"text-rose-400"}[v]].join(" "),children:{clean:"저장됨",dirty:"● 편집 중",saving:"저장 중…",saved:"✓ 저장됨",conflict:"⚠ 충돌",error:"✗ 오류"}[v]}),(0,n.jsxs)("div",{className:"ml-auto flex items-center gap-1",children:[["edit","split","preview"].map(e=>(0,n.jsx)("button",{onClick:()=>f(e),className:["rounded px-2 py-1 text-xs ring-1",g===e?"bg-primary/20 ring-primary/40":"bg-muted text-muted-foreground ring-border"].join(" "),children:{edit:"편집",split:"분할",preview:"미리보기"}[e]},e)),(0,n.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>void P(!1),children:"저장"})]})]}),"conflict"===v&&(0,n.jsxs)("div",{className:"mb-2 flex items-center gap-2 rounded border border-rose-500/40 bg-rose-500/10 px-3 py-2 text-xs text-rose-200",children:[(0,n.jsx)("span",{children:"디스크의 노트가 외부에서 변경됐습니다."}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>void P(!0),children:"강제 덮어쓰기"}),(0,n.jsx)(l.$,{size:"sm",variant:"ghost",onClick:()=>void i.read(t,8388608).then(e=>{var t;c(null!=(t=e.content)?t:""),w.current=e.mtimeMs,b("clean")}),children:"디스크 버전 로드"})]}),y&&(0,n.jsx)("div",{className:"mb-2 text-xs text-rose-400",children:y}),(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 gap-3",children:["preview"!==g&&(0,n.jsxs)("div",{className:"relative min-h-0 flex-1",children:[(0,n.jsx)("textarea",{ref:k,value:d,onChange:e=>R(e.target.value,e.target.selectionStart),onKeyUp:e=>U(d,e.target.selectionStart),onClick:e=>U(d,e.target.selectionStart),onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&"s"===e.key&&(e.preventDefault(),P(!1)),"Escape"===e.key&&D&&(e.preventDefault(),E(null)),"Enter"===e.key&&D&&D.items.length&&(e.preventDefault(),$(D.items[0]))},className:"h-full min-h-0 w-full resize-none rounded-lg border border-border bg-background p-3 font-mono text-sm leading-relaxed focus:outline-none focus:ring-1 focus:ring-ring",spellCheck:!1}),D&&D.items.length>0&&(0,n.jsxs)("div",{className:"absolute left-3 top-3 z-20 max-h-56 w-72 overflow-auto rounded-md border border-border bg-popover shadow-lg",children:[(0,n.jsxs)("div",{className:"border-b border-border px-2 py-1 text-[11px] text-muted-foreground",children:["[[wikilink: ",D.query||"…"]}),D.items.map(e=>(0,n.jsxs)("button",{className:"block w-full truncate px-2 py-1.5 text-left text-xs hover:bg-muted",onMouseDown:t=>{t.preventDefault(),$(e)},children:[(0,n.jsx)("span",{className:"font-medium",children:e.name})," ",(0,n.jsx)("span",{className:"text-muted-foreground",children:e.relPath})]},e.relPath))]})]}),"edit"!==g&&(0,n.jsx)("div",{className:"min-h-0 flex-1 overflow-auto rounded-lg border border-border bg-card/40 p-4",children:(0,n.jsx)(x,{markdown:O})}),(0,n.jsxs)("div",{className:"flex w-[220px] min-w-[180px] flex-col rounded-lg border border-border bg-card/40",children:[(0,n.jsx)("div",{className:"flex border-b border-border text-xs",children:["outline","backlinks"].map(e=>(0,n.jsx)("button",{onClick:()=>S(e),className:["flex-1 px-2 py-1.5",C===e?"border-b-2 border-primary text-foreground":"text-muted-foreground"].join(" "),children:"outline"===e?"개요":"역참조 ".concat(M.length?"(".concat(M.length,")"):"")},e))}),(0,n.jsx)("div",{className:"flex-1 overflow-auto p-1 text-xs",children:"outline"===C?0===I.length?(0,n.jsx)("p",{className:"p-2 text-muted-foreground",children:"heading 없음"}):I.map((e,t)=>(0,n.jsx)("button",{onClick:()=>_(e.line),className:"block w-full truncate rounded px-2 py-1 text-left hover:bg-muted",style:{paddingLeft:"".concat(8*e.level,"px")},children:e.text},t)):0===M.length?(0,n.jsx)("p",{className:"p-2 text-muted-foreground",children:"역참조 없음"}):M.map((e,t)=>(0,n.jsxs)("div",{className:"truncate rounded px-2 py-1",title:e.snippet,children:["\uD83D\uDCCE ",e.path.split("/").pop(),e.headingAnchor?" #".concat(e.headingAnchor):""]},t))})]})]})]}):(0,n.jsx)("div",{className:"p-6 text-sm text-muted-foreground",children:"노트 로딩…"})}function k(){let[e,t]=(0,a.useState)(null);return e?(0,n.jsx)(N,{path:e,onClose:()=>t(null)}):(0,n.jsx)(j,{onEdit:e=>t(e)})}},36581:(e,t,r)=>{"use strict";r.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var n=r(54456),a=r(60500),s=r(86704),l=r(1355),o=r(39906),i=r(50733);let d=(0,a.createContext)(null);function c(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[c,u]=(0,a.useState)(r),[m,x]=(0,a.useState)(""),[h]=(0,a.useState)(()=>new o.ki(r));(0,a.useEffect)(()=>{let e=(0,s.Fp)();u(e),h.updateConfig(e),x((0,l.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[h]),(0,a.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,s.Fp)();h.updateConfig(t),u(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&x(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[h]);let p=e=>{u(t=>{let r={...t,...e};return(0,s.Qc)(e),h.updateConfig(r),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},g=e=>{x(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},f=(0,a.useMemo)(()=>({config:c,setConfig:p,client:h,sessionId:m,setSessionId:g}),[c,h,m]);return(0,n.jsx)(d.Provider,{value:f,children:t})}function u(){let e=(0,a.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},44892:(e,t,r)=>{Promise.resolve().then(r.bind(r,19785))},74591:(e,t,r)=>{"use strict";r.d(t,{cn:()=>s});var n=r(49454),a=r(79946);function s(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,a.QP)((0,n.$)(t))}}},e=>{e.O(0,[7777,3278,5978,8039,9906,6390,3170,7358],()=>e(e.s=44892)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4191],{60287:(e,t,s)=>{"use strict";async function n(e){var t,s;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=null!=(t=n.fetchImpl)?t:fetch,r="".concat(null!=(s=n.origin)?s:"","/v1/workflows/").concat(encodeURIComponent(e),"/chat-config"),o=await a(r);if(404===o.status)return null;if(!o.ok)throw Error("chat-config ".concat(o.status));return await o.json()}async function a(e){var t,s,n,a,o;let i=null!=(t=e.fetchImpl)?t:fetch,l="".concat(null!=(s=e.origin)?s:"","/v1/workflows/chat").concat(e.chatPath),c={"content-type":"application/json"};e.bearer&&e.bearer.length>0&&(c.authorization="Bearer ".concat(e.bearer));let d={message:e.message};e.sessionId&&(d.sessionId=e.sessionId);let u=await i(l,{method:"POST",headers:c,body:JSON.stringify(d),...e.signal?{signal:e.signal}:{}});if(!u.ok){let e=await u.text().catch(()=>"");throw Error("chat ".concat(u.status).concat(e?": "+e:""))}if((null!=(n=u.headers.get("content-type"))?n:"").includes("text/event-stream")&&u.body)return{kind:"streaming",frames:r(u.body)};let h=await u.json();return{kind:"buffered",response:null!=(a=h.response)?a:"",runId:null!=(o=h.runId)?o:""}}async function*r(e){let t=e.getReader(),s=new TextDecoder,n="";try{for(;;){let{value:e,done:a}=await t.read();if(a)break;let r=(n+=s.decode(e,{stream:!0})).indexOf("\n\n");for(;-1!==r;){let e=n.slice(0,r);n=n.slice(r+2);let t=o(e);t&&(yield t),r=n.indexOf("\n\n")}}if(n.trim().length>0){let e=o(n);e&&(yield e)}}finally{t.releaseLock()}}function o(e){let t="message",s=[];for(let n of e.split("\n")){let e=n.endsWith("\r")?n.slice(0,-1):n;if(e.startsWith(":"))continue;let a=e.indexOf(":");if(-1===a)continue;let r=e.slice(0,a),o=e.slice(a+1).replace(/^ /,"");"event"===r?t=o:"data"===r&&s.push(o)}return 0===s.length?null:{event:t,data:s.join("\n")}}s.d(t,{XQ:()=>n,gJ:()=>a})},80581:(e,t,s)=>{"use strict";var n=s(35793);s.o(n,"useParams")&&s.d(t,{useParams:function(){return n.useParams}}),s.o(n,"usePathname")&&s.d(t,{usePathname:function(){return n.usePathname}}),s.o(n,"useRouter")&&s.d(t,{useRouter:function(){return n.useRouter}}),s.o(n,"useSearchParams")&&s.d(t,{useSearchParams:function(){return n.useSearchParams}})},95720:(e,t,s)=>{Promise.resolve().then(s.bind(s,97951))},97951:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>l});var n=s(54456),a=s(60500),r=s(80581),o=s(60287);function i(){var e,t;let s=(0,r.useSearchParams)(),i=null!=(e=s.get("workflow"))?e:"",l=null!=(t=s.get("token"))?t:"",[c,d]=(0,a.useState)({kind:"loading"}),[u,h]=(0,a.useState)([]),[f,m]=(0,a.useState)(""),[x,g]=(0,a.useState)(!1),[p]=(0,a.useState)(()=>"hosted-".concat(Date.now().toString(36),"-").concat(Math.random().toString(16).slice(2,6))),w=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=!1;return 0===i.length?void d({kind:"error",reason:"missing ?workflow= query param"}):((0,o.XQ)(i).then(t=>{e||(t?d({kind:"ready",config:t}):d({kind:"not-found"}))}).catch(t=>{e||d({kind:"error",reason:t instanceof Error?t.message:String(t)})}),()=>{e=!0})},[i]),(0,a.useEffect)(()=>{w.current&&(w.current.scrollTop=w.current.scrollHeight)},[u]);let b=async()=>{if("ready"!==c.kind||x)return;let e=f.trim();if(0===e.length)return;let t={id:"u-".concat(Date.now()),role:"user",text:e},s="a-".concat(Date.now());h(e=>[...e,t,{id:s,role:"assistant",text:"",pending:!0}]),m(""),g(!0);try{let t=await (0,o.gJ)({chatPath:c.config.path,message:e,sessionId:"per-session"===c.config.sessionMode?p:void 0,bearer:l.length>0?l:void 0,streaming:c.config.streaming});if("buffered"===t.kind)h(e=>e.map(e=>e.id===s?{...e,text:t.response,pending:!1}:e));else for await(let e of t.frames)if("token"===e.event)h(t=>t.map(t=>t.id===s?{...t,text:t.text+e.data}:t));else if("done"===e.event){let t;try{t=JSON.parse(e.data).response}catch(e){}h(e=>e.map(e=>e.id===s?{...e,text:null!=t?t:e.text,pending:!1}:e))}else"error"===e.event&&h(t=>t.map(t=>t.id===s?{...t,text:t.text+"\n[error: ".concat(e.data,"]"),pending:!1,role:"system"}:t))}catch(t){let e=t instanceof Error?t.message:String(t);h(t=>t.map(t=>t.id===s?{...t,text:"[error: ".concat(e,"]"),pending:!1,role:"system"}:t))}finally{g(!1)}};return"loading"===c.kind?(0,n.jsx)("div",{className:"p-6 text-sm text-slate-500",children:"Loading workflow chat…"}):"not-found"===c.kind?(0,n.jsxs)("div",{className:"p-6 text-sm",children:[(0,n.jsx)("h1",{className:"text-lg font-medium mb-2",children:"Workflow not found"}),(0,n.jsxs)("p",{className:"text-slate-600",children:["The workflow ",(0,n.jsx)("code",{className:"px-1 bg-slate-100 rounded",children:i})," is not available for hosted chat. The workflow author needs to add",(0,n.jsxs)("code",{className:"px-1 bg-slate-100 rounded ml-1",children:["hostedUi: ","{"," enabled: true ","}"]}),"to the chat trigger node."]})]}):"error"===c.kind?(0,n.jsxs)("div",{className:"p-6 text-sm",children:[(0,n.jsx)("h1",{className:"text-lg font-medium mb-2 text-red-600",children:"Connection error"}),(0,n.jsx)("p",{className:"text-slate-600",children:c.reason})]}):(0,n.jsxs)("div",{className:"flex flex-col h-screen max-w-2xl mx-auto px-4",children:[(0,n.jsxs)("header",{className:"py-3 border-b",children:[(0,n.jsx)("h1",{className:"text-base font-medium",children:c.config.workflowName}),(0,n.jsxs)("p",{className:"text-xs text-slate-500",children:[c.config.streaming?"streaming":"buffered"," \xb7 ",c.config.sessionMode,c.config.hostedUi.requiresBearer?" \xb7 bearer required":""]})]}),c.config.hostedUi.requiresBearer&&l.length>0?(0,n.jsx)("div",{className:"text-xs px-3 py-2 bg-amber-50 border-b border-amber-200 text-amber-800",children:"⚠ The bearer token is embedded in this URL. Treat this link as a secret — sharing the URL gives anyone full access to the workflow."}):null,(0,n.jsxs)("div",{ref:w,className:"flex-1 overflow-y-auto py-4 space-y-3",children:[0===u.length?(0,n.jsx)("p",{className:"text-sm text-slate-400 italic",children:"Type a message to start the conversation."}):null,u.map(e=>(0,n.jsxs)("div",{className:"text-sm",children:[(0,n.jsxs)("div",{className:"font-medium text-xs uppercase text-slate-500",children:[e.role,e.pending?" \xb7 typing…":null]}),(0,n.jsx)("pre",{className:"whitespace-pre-wrap font-sans text-slate-800",children:e.text})]},e.id))]}),(0,n.jsxs)("div",{className:"py-3 border-t flex gap-2",children:[(0,n.jsx)("input",{className:"flex-1 px-3 py-2 border rounded text-sm",value:f,onChange:e=>m(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),b())},placeholder:"Message…",disabled:x}),(0,n.jsx)("button",{type:"button",onClick:()=>void b(),disabled:x||0===f.trim().length,className:"px-4 py-2 bg-slate-900 text-white rounded text-sm disabled:opacity-50",children:"Send"})]})]})}function l(){return(0,n.jsx)(a.Suspense,{fallback:(0,n.jsx)("div",{className:"p-6 text-sm text-slate-500",children:"Loading workflow chat…"}),children:(0,n.jsx)(i,{})})}}},e=>{e.O(0,[6390,3170,7358],()=>e(e.s=95720)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7143],{65750:(e,o,r)=>{Promise.resolve().then(r.bind(r,93772))},93772:(e,o,r)=>{"use strict";r.r(o),r.d(o,{default:()=>t});var n=r(54456),s=r(60500);function t(){return(0,s.useEffect)(()=>{window.location.replace("/app/editor/?mode=workflow")},[]),(0,n.jsx)("a",{href:"/app/editor/?mode=workflow",children:"편집기로 이동"})}}},e=>{e.O(0,[6390,3170,7358],()=>e(e.s=65750)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6364],{4222:(e,t,r)=>{"use strict";r.d(t,{U:()=>x});var s=r(54456),n=r(60500),a=r(36581),l=r(10080),i=r(95564);function o(e){let{items:t}=e;return 0===t.length?(0,s.jsx)("div",{className:"rounded-lg border border-dashed border-border p-6 text-center text-sm text-muted-foreground",children:"No control signals matched the current filter."}):(0,s.jsx)("ul",{className:"space-y-2",children:t.map((e,t)=>{var r,n,a,l,i;let o=[(null==(r=e.scope)?void 0:r.surface)&&"surface=".concat(e.scope.surface),(null==(n=e.scope)?void 0:n.channel)&&"channel=".concat(e.scope.channel),(null==(a=e.scope)?void 0:a.sessionId)&&"session=".concat(e.scope.sessionId)].filter(Boolean).join(" \xb7 ")||"unscoped";return(0,s.jsxs)("li",{className:"rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,s.jsxs)("div",{className:"text-sm font-medium",children:[e.kind," \xb7 ",e.urgency]}),(0,s.jsxs)("div",{className:"mt-0.5 font-mono text-[10px] text-muted-foreground",children:[function(e){let t=Date.now()-new Date(e).getTime();return t<6e4?"just now":t<36e5?"".concat(Math.floor(t/6e4),"m ago"):t<864e5?"".concat(Math.floor(t/36e5),"h ago"):"".concat(Math.floor(t/864e5),"d ago")}(e.createdAt)," \xb7 ",null!=(l=e.source)?l:"unknown"," \xb7 ",o]}),(0,s.jsx)("pre",{className:"mt-2 overflow-x-auto rounded-md bg-muted p-2 text-[11px]",children:JSON.stringify(null!=(i=e.payload)?i:{},null,2)})]},t)})})}let d=["background","quick-pass","normal","priority","critical"];class c{async list(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new URLSearchParams;Object.entries(e).forEach(e=>{let[r,s]=e;s&&t.set(r,s)});let r=t.toString();return this.client.fetchJson("/v1/control-signals".concat(r?"?".concat(r):""))}emit(e){return this.client.fetchJson("/v1/control-signals",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)})}constructor(e){this.client=e}}var u=r(71829),m=r(50733);function x(){var e,t,r,x;let{client:h}=(0,a.Q)(),p=(0,n.useMemo)(()=>new c(h),[h]),[f,g]=(0,n.useState)({items:[]}),[b,v]=(0,n.useState)(!1),[j,y]=(0,n.useState)(""),[N,k]=(0,n.useState)(""),[w,C]=(0,n.useState)(""),[I,S]=(0,n.useState)(""),[E,D]=(0,n.useState)(""),[T,M]=(0,n.useState)(""),[L,P]=(0,n.useState)("normal"),[A,R]=(0,n.useState)("operator"),[O,K]=(0,n.useState)(""),[z,J]=(0,n.useState)(""),[U,_]=(0,n.useState)(""),[B,F]=(0,n.useState)(""),[q,Y]=(0,n.useState)(!1),$=(0,n.useCallback)(async()=>{(0,m.cY)("webterm.control.list.refresh",{kind:j,surface:N,minUrgency:w,sessionId:I,limit:E}),v(!0);try{let e=await p.list({kind:j||void 0,surface:N||void 0,minUrgency:w||void 0,sessionId:I||void 0,limit:E||void 0});g(e)}catch(e){u.oR.error("signals list failed: ".concat(e instanceof Error?e.message:e))}finally{v(!1)}},[p,j,N,w,I,E]);(0,n.useEffect)(()=>{$()},[$]);let H=async e=>{if(e.preventDefault(),!T.trim())return void u.oR.error("kind required");let t={};if(B.trim())try{t=JSON.parse(B)}catch(e){u.oR.error("payload must be valid JSON");return}let r={kind:T.trim(),urgency:L,source:A.trim()||"operator",mayPreempt:q,payload:t,scope:{...O?{surface:O}:{},...z?{channel:z}:{},...U?{sessionId:U}:{}}};(0,m.cY)("webterm.control.emit",{kind:r.kind,urgency:r.urgency});try{v(!0),await p.emit(r),u.oR.success("signal emitted"),F(""),await $()}catch(e){u.oR.error("emit failed: ".concat(e instanceof Error?e.message:e))}finally{v(!1)}},Q=null!=(e=f.countsByKind)?e:{};return(0,s.jsxs)("div",{className:"mx-auto max-w-5xl space-y-4 p-4",children:[(0,s.jsxs)("header",{className:"space-y-2",children:[(0,s.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Control signals"}),(0,s.jsxs)("div",{className:"flex flex-wrap gap-2 text-[11px] text-muted-foreground",children:[(0,s.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["total ",null!=(t=f.total)?t:0]}),(0,s.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["latest ",null!=(r=f.latest)?r:"-"]}),Object.entries(Q).map(e=>{let[t,r]=e;return(0,s.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:[t," ",r]},t)})]})]}),(0,s.jsxs)("form",{onSubmit:e=>{e.preventDefault(),$()},className:"flex flex-wrap items-center gap-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,s.jsx)(i.p,{value:j,onChange:e=>y(e.target.value),placeholder:"kind",className:"flex-1 min-w-[140px]"}),(0,s.jsx)(i.p,{value:N,onChange:e=>k(e.target.value),placeholder:"surface",className:"flex-1 min-w-[140px]"}),(0,s.jsxs)("select",{value:w,onChange:e=>C(e.target.value),className:"h-9 flex-1 min-w-[170px] rounded-md border border-input bg-background px-2 text-sm",children:[(0,s.jsx)("option",{value:"",children:"min urgency (any)"}),d.map(e=>(0,s.jsx)("option",{value:e,children:e},e))]}),(0,s.jsx)(i.p,{value:I,onChange:e=>S(e.target.value),placeholder:"session id",className:"flex-1 min-w-[140px]"}),(0,s.jsx)(i.p,{value:E,onChange:e=>D(e.target.value),placeholder:"limit",type:"number",className:"w-[100px]"}),(0,s.jsx)(l.$,{type:"submit",size:"sm",disabled:b,children:"Filter"})]}),(0,s.jsxs)("form",{onSubmit:H,className:"space-y-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold",children:"Emit a signal"}),(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,s.jsx)(i.p,{value:T,onChange:e=>M(e.target.value),placeholder:"kind (required)",className:"flex-1 min-w-[140px]"}),(0,s.jsx)("select",{value:L,onChange:e=>{let t=e.target.value;"string"==typeof t&&d.includes(t)&&P(t)},className:"h-9 rounded-md border border-input bg-background px-2 text-sm",children:d.map(e=>(0,s.jsx)("option",{value:e,children:e},e))}),(0,s.jsx)(i.p,{value:A,onChange:e=>R(e.target.value),placeholder:"source",className:"flex-1 min-w-[120px]"}),(0,s.jsx)(i.p,{value:O,onChange:e=>K(e.target.value),placeholder:"scope.surface",className:"flex-1 min-w-[120px]"}),(0,s.jsx)(i.p,{value:z,onChange:e=>J(e.target.value),placeholder:"scope.channel",className:"flex-1 min-w-[120px]"}),(0,s.jsx)(i.p,{value:U,onChange:e=>_(e.target.value),placeholder:"scope.session",className:"flex-1 min-w-[120px]"}),(0,s.jsxs)("label",{className:"flex items-center gap-1.5 text-xs",children:[(0,s.jsx)("input",{type:"checkbox",checked:q,onChange:e=>Y(e.target.checked)}),"mayPreempt"]})]}),(0,s.jsx)("textarea",{value:B,onChange:e=>F(e.target.value),placeholder:'payload JSON (optional, e.g. {"reason":"manual"})',rows:3,className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 font-mono text-xs"}),(0,s.jsx)(l.$,{type:"submit",size:"sm",disabled:b,children:"Emit"})]}),(0,s.jsx)(o,{items:null!=(x=f.items)?x:[]})]})}},4563:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>O});var s=r(54456),n=r(60500),a=r(80581),l=r(24685),i=r(74591);function o(e){let{id:t,active:r,children:n}=e;return(0,s.jsx)("div",{role:"tabpanel","data-tab-id":t,"data-active":r?"true":"false",className:(0,i.cn)("h-full min-h-0",r?"block":"hidden"),children:n})}var d=r(61147),c=r(48605),u=r(18834),m=r(84508),x=r(4222),h=r(17758),p=r(46773),f=r(966);function g(e){let{tab:t}=e;switch(t.kind){case"chat":return(0,s.jsx)(d.ChatPanel,{sessionId:t.sessionId,tabId:t.id});case"term":return(0,s.jsx)(c.zV,{});case"intake":return(0,s.jsx)(u.SY,{});case"tasks":return(0,s.jsx)(m.B,{});case"control":return(0,s.jsx)(x.U,{});case"settings":return(0,s.jsx)(h.O,{})}}function b(){return(0,s.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-muted-foreground",children:(0,s.jsx)("span",{children:"(이 탭은 절약 모드 — 클릭 시 복원)"})})}function v(){let{state:e,addTab:t,activateTab:r}=(0,l.hA)(),a=(0,p.ub)(e),i=(0,n.useRef)(null);if((0,n.useEffect)(()=>{if(i.current&&!(a.length<=1))return(0,f.gI)(i.current,{shouldIgnore:e=>{if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return!!("INPUT"===t||"TEXTAREA"===t||"SELECT"===t||e.closest(".xterm"))||!!e.isContentEditable},onSwipe:t=>{let s=e.activeId?a.findIndex(t=>t.id===e.activeId):-1;if(s<0)return;let n="left"===t?Math.min(a.length-1,s+1):Math.max(0,s-1);n!==s&&r(a[n].id)}})},[a,e.activeId,r]),0===a.length)return(0,s.jsx)("div",{className:"flex h-full flex-col items-center justify-center gap-4 px-6 text-center",children:(0,s.jsxs)("div",{className:"rounded-lg border border-dashed border-border bg-card px-6 py-8 max-w-md",children:[(0,s.jsx)("h2",{className:"text-base font-semibold tracking-tight",children:"워크스페이스 시작"}),(0,s.jsxs)("p",{className:"mt-2 text-sm text-muted-foreground",children:["상단 strip 의"," ",(0,s.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-xs",children:"+"})," ","또는 아래 버튼으로 첫 탭을 추가하세요. 비활성 탭은 닫기 전까지 unmount 되지 않아 입력 중 텍스트가 보존됩니다."]}),(0,s.jsxs)("div",{className:"mt-4 flex flex-wrap justify-center gap-2",children:[(0,s.jsx)("button",{type:"button",onClick:()=>t({kind:"chat"}),className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary",children:"+ chat"}),(0,s.jsx)("button",{type:"button",onClick:()=>t({kind:"term"}),className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary",children:"+ terminal"})]})]})});let d=new Set(e.frozenIds);return(0,s.jsx)("div",{ref:i,className:"relative h-full min-h-0 touch-pan-y",children:a.map(t=>(0,s.jsx)(o,{id:t.id,active:e.activeId===t.id,children:d.has(t.id)?(0,s.jsx)(b,{}):(0,s.jsx)(g,{tab:t})},t.id))})}function j(){let e=(0,l.hA)();return(0,n.useEffect)(()=>{let t=t=>{if(!(t.metaKey||t.ctrlKey))return;let r=(0,p.ub)(e.state),s=e.state.activeId?r.findIndex(t=>t.id===e.state.activeId):-1;if(!t.shiftKey&&"t"===t.key.toLowerCase()){t.preventDefault(),e.openPicker({kind:"addNewChat"});return}if(!t.shiftKey&&"w"===t.key.toLowerCase()){t.preventDefault(),e.state.activeId&&r.length>0&&e.closeTab(e.state.activeId);return}if(t.shiftKey&&("]"===t.key||"["===t.key)){if(t.preventDefault(),r.length<=1||s<0)return;let n="]"===t.key?(s+1)%r.length:(s-1+r.length)%r.length;e.activateTab(r[n].id);return}if(!t.shiftKey&&/^[1-9]$/.test(t.key)){t.preventDefault();let s=parseInt(t.key,10)-1;if(s>=r.length)return;e.activateTab(r[s].id);return}};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[e]),null}var y=r(75361),N=r(91321),k=r(37637),w=r(8286),C=r(36581),I=r(1355),S=r(10037),E=r(79450),D=r(84693);function T(e){var t;let{open:r,session:a,onCancel:l,onConfirm:i,busy:o}=e;if((0,n.useEffect)(()=>{if(!r)return;let e=e=>{"Escape"===e.key&&l()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[r,l]),!r||!a)return null;let d=null!=(t=a.lastMsgPreview)?t:"(빈 대화)";return(0,s.jsx)("div",{role:"alertdialog","aria-modal":"true",className:"fixed inset-0 z-[60] flex items-center justify-center bg-black/40",onClick:l,children:(0,s.jsxs)("div",{onClick:e=>e.stopPropagation(),className:"w-[min(420px,calc(100vw-2rem))] rounded-lg border border-border bg-card p-5 shadow-lg",children:[(0,s.jsxs)("div",{className:"flex items-start gap-3",children:[(0,s.jsx)(w.A,{className:"mt-0.5 h-5 w-5 shrink-0 text-rose-500","aria-hidden":!0}),(0,s.jsxs)("div",{className:"min-w-0 space-y-2",children:[(0,s.jsx)("h2",{className:"text-base font-semibold",children:"대화 지우기"}),(0,s.jsxs)("p",{className:"truncate font-mono text-xs text-muted-foreground",children:['"',d,'"']}),(0,s.jsxs)("p",{className:"text-xs text-muted-foreground",children:[a.origin&&(0,s.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono uppercase mr-1.5",children:a.origin}),a.msgCount," 메시지"]}),(0,s.jsx)("p",{className:"text-sm",children:"이 대화를 영구히 지웁니다. 복구할 수 없습니다. 다른 기기에서 이 대화를 보고 있다면 더 이상 이어갈 수 없습니다."})]})]}),(0,s.jsxs)("div",{className:"mt-4 flex justify-end gap-2",children:[(0,s.jsx)("button",{type:"button",onClick:l,disabled:o,className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary disabled:opacity-50",children:"취소"}),(0,s.jsx)("button",{type:"button",onClick:i,disabled:o,className:"rounded-md bg-rose-500 px-3 py-1.5 text-sm font-medium text-white hover:bg-rose-600 disabled:opacity-50",children:o?"지우는 중…":"지우기"})]})]})})}var M=r(78925);let L={cli:"cli",pwa:"pwa",tg:"tg",dc:"dc"};function P(e){let{open:t,onClose:r,onPick:a,attachedSessions:l}=e,{client:o}=(0,C.Q)(),d=(0,S.hG)(o),c=(0,n.useMemo)(()=>new E.jU(o),[o]),u=(0,D.h)(),[m,x]=(0,n.useState)(""),[h,p]=(0,n.useState)(0),[f,g]=(0,n.useState)(null),[b,v]=(0,n.useState)(!1),[j,P]=(0,n.useState)(!1),[A,R]=(0,n.useState)(null),O=(0,n.useRef)(null),K=(0,n.useRef)(null);(0,n.useEffect)(()=>{t&&(x(""),p(0),R(null),d.forceRefresh())},[t,d]),(0,n.useEffect)(()=>{R(null)},[m]);let z=(0,n.useMemo)(()=>{if(!m.trim())return[...u];let e=m.trim().toLowerCase();return u.filter(t=>!!(t.id.toLowerCase().startsWith(e)||t.lastMsgPreview&&t.lastMsgPreview.toLowerCase().includes(e))||!!t.origin&&e==="[".concat(t.origin,"]")||!!t.origin&&e===t.origin)},[u,m]);if((0,n.useEffect)(()=>{h>=z.length&&p(Math.max(0,z.length-1))},[z.length,h]),(0,n.useEffect)(()=>{var e;if(!t)return;null==(e=O.current)||e.focus();let s=e=>{if("Escape"===e.key){e.preventDefault(),r();return}if((e.metaKey||e.ctrlKey)&&"n"===e.key.toLowerCase()){e.preventDefault(),J();return}if((e.metaKey||e.ctrlKey)&&"f"===e.key.toLowerCase()){var t;e.preventDefault(),null==(t=O.current)||t.focus();return}if("ArrowDown"===e.key)e.preventDefault(),p(e=>Math.min(z.length-1,e+1));else if("ArrowUp"===e.key)e.preventDefault(),p(e=>Math.max(0,e-1));else if("Enter"===e.key){let t=z[h];if(!t){m.trim().length>=4&&(e.preventDefault(),_());return}e.preventDefault(),U(t)}else if("Delete"===e.key||"Backspace"===e.key){if(e.target instanceof HTMLInputElement)return;let t=z[h];t&&(e.preventDefault(),g(t))}};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[t,z,h,r,m,j]),!t)return null;let J=()=>{a({kind:"new",sessionId:(0,I.f6)()})},U=e=>{let t=l.get(e.id);if(t)return void a({kind:"jumpToTab",tabId:t.tabId});a({kind:"existing",sessionId:e.id})},_=async()=>{let e=m.trim().toLowerCase();if(!(e.length<4)&&!j){P(!0);try{var t;let r=await c.list(!0),s=(0,E.nj)(null!=(t=r.sessions)?t:[],e);if("one"===s.kind){let e=l.get(s.id);e?a({kind:"jumpToTab",tabId:e.tabId}):a({kind:"existing",sessionId:s.id})}else"none"===s.kind?R("'".concat(e,"'로 시작하는 대화가 없습니다.")):R("".concat(s.count,"개의 대화가 일치합니다. ID를 더 길게 입력하세요."))}catch(e){R("대화를 찾지 못했습니다: ".concat(e instanceof Error?e.message:String(e)))}finally{P(!1)}}},B=async()=>{if(f){v(!0);try{await d.forget(f.id),g(null)}finally{v(!1)}}};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":"대화 선택",className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",onClick:r,children:(0,s.jsxs)("div",{onClick:e=>e.stopPropagation(),className:"flex max-h-[min(640px,90vh)] w-[min(640px,calc(100vw-2rem))] flex-col rounded-lg border border-border bg-card shadow-lg",children:[(0,s.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-2 border-b border-border px-4 py-3",children:[(0,s.jsx)("h2",{className:"text-base font-semibold",children:"대화 선택"}),(0,s.jsx)("button",{type:"button","aria-label":"close",onClick:r,className:"rounded-md p-1 text-muted-foreground hover:bg-secondary hover:text-foreground",children:(0,s.jsx)(y.A,{className:"h-4 w-4"})})]}),(0,s.jsx)("div",{className:"shrink-0 px-4 py-3",children:(0,s.jsxs)("button",{type:"button",onClick:J,className:"flex w-full items-center gap-3 rounded-lg border border-primary/40 bg-primary/10 px-3 py-2.5 text-left hover:bg-primary/15",children:[(0,s.jsx)(N.A,{className:"h-5 w-5 text-primary"}),(0,s.jsxs)("div",{className:"flex-1",children:[(0,s.jsx)("div",{className:"text-sm font-medium",children:"새 대화 시작"}),(0,s.jsx)("div",{className:"text-xs text-muted-foreground",children:"비어있는 새 채팅을 엽니다 (⌘N)"})]})]})}),(0,s.jsx)("div",{className:"shrink-0 border-y border-border bg-muted/30 px-4 py-2",children:(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)(k.A,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),(0,s.jsx)("input",{ref:O,value:m,onChange:e=>x(e.target.value),placeholder:"대화 검색 — 내용 \xb7 ID \xb7 [pwa]/[cli]/[tg]/[dc]",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground/60"}),m&&(0,s.jsx)("button",{type:"button","aria-label":"clear search",onClick:()=>x(""),className:"rounded p-0.5 text-muted-foreground hover:bg-background",children:(0,s.jsx)(y.A,{className:"h-3 w-3"})})]})}),(0,s.jsx)("div",{ref:K,className:"min-h-0 flex-1 overflow-y-auto",children:0===z.length?(0,s.jsxs)("div",{className:"px-4 py-12 text-center",children:[(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:0!==u.length||m.trim()?"검색과 일치하는 대화가 없습니다.":'아직 대화가 없습니다. 위의 "새 대화 시작"으로 첫 대화를 시작하세요.'}),m.trim().length>=4&&(0,s.jsx)("button",{type:"button",disabled:j,onClick:()=>void _(),className:"mt-3 rounded-md border border-violet-500/40 bg-violet-500/10 px-3 py-1.5 text-xs text-violet-300 hover:bg-violet-500/15 disabled:opacity-50",children:j?"찾는 중…":"ID '".concat(m.trim(),"'로 대화 이어가기 (Enter)")}),A&&(0,s.jsx)("p",{className:"mt-2 text-xs text-amber-400",children:A}),0===u.length&&!m.trim()&&(0,s.jsx)("p",{className:"mt-2 text-xs text-muted-foreground",children:"다른 기기(CLI / Telegram / Discord)에서 대화를 시작하면 여기에 자동으로 나타납니다."})]}):(0,s.jsx)("ul",{className:"divide-y divide-border",children:z.map((e,t)=>{var r;let n=l.get(e.id),a=t===h;return(0,s.jsx)("li",{children:(0,s.jsxs)("div",{className:(0,i.cn)("group flex items-center gap-3 px-4 py-2.5 transition-colors",a?"bg-primary/10 ring-1 ring-inset ring-primary/30":"hover:bg-secondary/50"),onMouseEnter:()=>p(t),children:[(0,s.jsxs)("button",{type:"button",onClick:()=>U(e),className:"flex min-w-0 flex-1 flex-col items-start text-left",children:[(0,s.jsxs)("div",{className:"flex w-full items-center gap-2",children:[(0,s.jsx)("span",{className:"truncate text-sm font-medium",children:null!=(r=e.lastMsgPreview)?r:(0,s.jsx)("span",{className:"text-muted-foreground italic",children:"(빈 대화)"})}),n&&(0,s.jsxs)("span",{className:"ml-auto shrink-0 rounded-full bg-primary/15 px-2 py-0.5 text-[10px] font-medium text-primary",children:["✓ ",n.label,"에서 열림"]})]}),(0,s.jsxs)("div",{className:"mt-0.5 flex items-center gap-2 text-[11px] text-muted-foreground",children:[e.origin&&(0,s.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono",children:L[e.origin]}),(0,s.jsx)("span",{children:function(e){try{let t=new Date(e).getTime();if(!Number.isFinite(t))return"";let r=Date.now()-t,s=Math.floor(r/6e4);if(s<1)return"방금 전";if(s<60)return"".concat(s,"분 전");let n=Math.floor(s/60);if(n<24)return"".concat(n,"시간 전");let a=Math.floor(n/24);if(a<7)return"".concat(a,"일 전");return new Date(t).toLocaleDateString()}catch(e){return""}}(e.lastTurnAt)}),(0,s.jsxs)("span",{children:["\xb7 ",e.msgCount," 메시지"]}),(0,s.jsx)(M.S,{sessionId:e.id,source:"picker",variant:"subtle",showCopyIcon:!1})]})]}),(0,s.jsx)("button",{type:"button","aria-label":"대화 ".concat(e.id," 지우기"),onClick:t=>{t.stopPropagation(),g(e)},className:(0,i.cn)("shrink-0 rounded p-1.5 text-muted-foreground transition-colors hover:bg-rose-500/10 hover:text-rose-500",a?"opacity-100":"opacity-0 group-hover:opacity-100"),children:(0,s.jsx)(w.A,{className:"h-4 w-4"})})]})},e.id)})})}),(0,s.jsxs)("div",{className:"shrink-0 border-t border-border bg-muted/30 px-4 py-2 text-[10px] text-muted-foreground",children:[(0,s.jsx)("span",{className:"mr-3",children:"↑↓ 이동"}),(0,s.jsx)("span",{className:"mr-3",children:"Enter 선택"}),(0,s.jsx)("span",{className:"mr-3",children:"⌘N 새 대화"}),(0,s.jsx)("span",{className:"mr-3",children:"⌘F 검색"}),(0,s.jsx)("span",{children:"Del 지우기"})]})]})}),(0,s.jsx)(T,{open:null!==f,session:f,busy:b,onCancel:()=>g(null),onConfirm:B})]})}let A=new Set(["chat","term","intake","tasks","control","settings"]);function R(){var e;let t=(0,l.hA)(),r=(0,a.useRouter)(),i=(0,a.useSearchParams)(),o=null!=(e=null==i?void 0:i.get("intent"))?e:null,d=(0,n.useRef)(null);(0,n.useEffect)(()=>{if(o&&d.current!==o){if(!A.has(o))return void r.replace("/workspace");if(d.current=o,"chat"===o){let e=(0,p.ub)(t.state).find(e=>"chat"===e.kind);e?t.activateTab(e.id):t.openPicker({kind:"addNewChat"})}else t.activateOrAdd(o);r.replace("/workspace")}},[o,t,r]);let c=(0,n.useMemo)(()=>{let e=new Map,r=0;for(let s of t.state.order){let n=t.state.tabs.find(e=>e.id===s);n&&"chat"===n.kind&&(r+=1,e.set(n.sessionId,{tabId:n.id,label:"chat#".concat(r)}))}return e},[t.state.order,t.state.tabs]);return(0,s.jsxs)("div",{className:"flex h-full flex-col",children:[(0,s.jsx)(j,{}),(0,s.jsx)("div",{className:"flex-1 min-h-0",children:(0,s.jsx)(v,{})}),(0,s.jsx)(P,{open:null!==t.pickerMode,onClose:t.closePicker,onPick:e=>{let r=t.pickerMode;r&&("jumpToTab"===e.kind?t.activateTab(e.tabId):"addNewChat"===r.kind?t.addTab({kind:"chat",sessionId:e.sessionId}):"attachToTab"===r.kind&&(t.updateChatTab(r.tabId,{sessionId:e.sessionId}),t.activateTab(r.tabId)),t.closePicker())},attachedSessions:c})]})}function O(){return(0,s.jsx)(n.Suspense,{fallback:(0,s.jsx)("div",{className:"h-full"}),children:(0,s.jsx)(R,{})})}},51948:(e,t,r)=>{Promise.resolve().then(r.bind(r,4563))}},e=>{e.O(0,[7777,9538,3278,1829,6048,9656,7551,5978,3454,1159,3735,9906,3869,4215,2176,7277,5845,1394,7274,4685,7758,8605,1147,4508,8834,6390,3170,7358],()=>e(e.s=51948)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6364],{4222:(e,t,r)=>{"use strict";r.d(t,{U:()=>x});var s=r(54456),n=r(60500),a=r(36581),l=r(10080),i=r(95564);function o(e){let{items:t}=e;return 0===t.length?(0,s.jsx)("div",{className:"rounded-lg border border-dashed border-border p-6 text-center text-sm text-muted-foreground",children:"No control signals matched the current filter."}):(0,s.jsx)("ul",{className:"space-y-2",children:t.map((e,t)=>{var r,n,a,l,i;let o=[(null==(r=e.scope)?void 0:r.surface)&&"surface=".concat(e.scope.surface),(null==(n=e.scope)?void 0:n.channel)&&"channel=".concat(e.scope.channel),(null==(a=e.scope)?void 0:a.sessionId)&&"session=".concat(e.scope.sessionId)].filter(Boolean).join(" \xb7 ")||"unscoped";return(0,s.jsxs)("li",{className:"rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,s.jsxs)("div",{className:"text-sm font-medium",children:[e.kind," \xb7 ",e.urgency]}),(0,s.jsxs)("div",{className:"mt-0.5 font-mono text-[10px] text-muted-foreground",children:[function(e){let t=Date.now()-new Date(e).getTime();return t<6e4?"just now":t<36e5?"".concat(Math.floor(t/6e4),"m ago"):t<864e5?"".concat(Math.floor(t/36e5),"h ago"):"".concat(Math.floor(t/864e5),"d ago")}(e.createdAt)," \xb7 ",null!=(l=e.source)?l:"unknown"," \xb7 ",o]}),(0,s.jsx)("pre",{className:"mt-2 overflow-x-auto rounded-md bg-muted p-2 text-[11px]",children:JSON.stringify(null!=(i=e.payload)?i:{},null,2)})]},t)})})}let d=["background","quick-pass","normal","priority","critical"];class c{async list(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new URLSearchParams;Object.entries(e).forEach(e=>{let[r,s]=e;s&&t.set(r,s)});let r=t.toString();return this.client.fetchJson("/v1/control-signals".concat(r?"?".concat(r):""))}emit(e){return this.client.fetchJson("/v1/control-signals",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)})}constructor(e){this.client=e}}var u=r(71829),m=r(50733);function x(){var e,t,r,x;let{client:h}=(0,a.Q)(),p=(0,n.useMemo)(()=>new c(h),[h]),[f,g]=(0,n.useState)({items:[]}),[b,v]=(0,n.useState)(!1),[j,y]=(0,n.useState)(""),[N,k]=(0,n.useState)(""),[w,C]=(0,n.useState)(""),[I,S]=(0,n.useState)(""),[E,D]=(0,n.useState)(""),[T,M]=(0,n.useState)(""),[L,P]=(0,n.useState)("normal"),[A,R]=(0,n.useState)("operator"),[O,K]=(0,n.useState)(""),[z,J]=(0,n.useState)(""),[U,_]=(0,n.useState)(""),[B,F]=(0,n.useState)(""),[q,Y]=(0,n.useState)(!1),$=(0,n.useCallback)(async()=>{(0,m.cY)("webterm.control.list.refresh",{kind:j,surface:N,minUrgency:w,sessionId:I,limit:E}),v(!0);try{let e=await p.list({kind:j||void 0,surface:N||void 0,minUrgency:w||void 0,sessionId:I||void 0,limit:E||void 0});g(e)}catch(e){u.oR.error("signals list failed: ".concat(e instanceof Error?e.message:e))}finally{v(!1)}},[p,j,N,w,I,E]);(0,n.useEffect)(()=>{$()},[$]);let H=async e=>{if(e.preventDefault(),!T.trim())return void u.oR.error("kind required");let t={};if(B.trim())try{t=JSON.parse(B)}catch(e){u.oR.error("payload must be valid JSON");return}let r={kind:T.trim(),urgency:L,source:A.trim()||"operator",mayPreempt:q,payload:t,scope:{...O?{surface:O}:{},...z?{channel:z}:{},...U?{sessionId:U}:{}}};(0,m.cY)("webterm.control.emit",{kind:r.kind,urgency:r.urgency});try{v(!0),await p.emit(r),u.oR.success("signal emitted"),F(""),await $()}catch(e){u.oR.error("emit failed: ".concat(e instanceof Error?e.message:e))}finally{v(!1)}},Q=null!=(e=f.countsByKind)?e:{};return(0,s.jsxs)("div",{className:"mx-auto max-w-5xl space-y-4 p-4",children:[(0,s.jsxs)("header",{className:"space-y-2",children:[(0,s.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Control signals"}),(0,s.jsxs)("div",{className:"flex flex-wrap gap-2 text-[11px] text-muted-foreground",children:[(0,s.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["total ",null!=(t=f.total)?t:0]}),(0,s.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["latest ",null!=(r=f.latest)?r:"-"]}),Object.entries(Q).map(e=>{let[t,r]=e;return(0,s.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:[t," ",r]},t)})]})]}),(0,s.jsxs)("form",{onSubmit:e=>{e.preventDefault(),$()},className:"flex flex-wrap items-center gap-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,s.jsx)(i.p,{value:j,onChange:e=>y(e.target.value),placeholder:"kind",className:"flex-1 min-w-[140px]"}),(0,s.jsx)(i.p,{value:N,onChange:e=>k(e.target.value),placeholder:"surface",className:"flex-1 min-w-[140px]"}),(0,s.jsxs)("select",{value:w,onChange:e=>C(e.target.value),className:"h-9 flex-1 min-w-[170px] rounded-md border border-input bg-background px-2 text-sm",children:[(0,s.jsx)("option",{value:"",children:"min urgency (any)"}),d.map(e=>(0,s.jsx)("option",{value:e,children:e},e))]}),(0,s.jsx)(i.p,{value:I,onChange:e=>S(e.target.value),placeholder:"session id",className:"flex-1 min-w-[140px]"}),(0,s.jsx)(i.p,{value:E,onChange:e=>D(e.target.value),placeholder:"limit",type:"number",className:"w-[100px]"}),(0,s.jsx)(l.$,{type:"submit",size:"sm",disabled:b,children:"Filter"})]}),(0,s.jsxs)("form",{onSubmit:H,className:"space-y-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold",children:"Emit a signal"}),(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,s.jsx)(i.p,{value:T,onChange:e=>M(e.target.value),placeholder:"kind (required)",className:"flex-1 min-w-[140px]"}),(0,s.jsx)("select",{value:L,onChange:e=>{let t=e.target.value;"string"==typeof t&&d.includes(t)&&P(t)},className:"h-9 rounded-md border border-input bg-background px-2 text-sm",children:d.map(e=>(0,s.jsx)("option",{value:e,children:e},e))}),(0,s.jsx)(i.p,{value:A,onChange:e=>R(e.target.value),placeholder:"source",className:"flex-1 min-w-[120px]"}),(0,s.jsx)(i.p,{value:O,onChange:e=>K(e.target.value),placeholder:"scope.surface",className:"flex-1 min-w-[120px]"}),(0,s.jsx)(i.p,{value:z,onChange:e=>J(e.target.value),placeholder:"scope.channel",className:"flex-1 min-w-[120px]"}),(0,s.jsx)(i.p,{value:U,onChange:e=>_(e.target.value),placeholder:"scope.session",className:"flex-1 min-w-[120px]"}),(0,s.jsxs)("label",{className:"flex items-center gap-1.5 text-xs",children:[(0,s.jsx)("input",{type:"checkbox",checked:q,onChange:e=>Y(e.target.checked)}),"mayPreempt"]})]}),(0,s.jsx)("textarea",{value:B,onChange:e=>F(e.target.value),placeholder:'payload JSON (optional, e.g. {"reason":"manual"})',rows:3,className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 font-mono text-xs"}),(0,s.jsx)(l.$,{type:"submit",size:"sm",disabled:b,children:"Emit"})]}),(0,s.jsx)(o,{items:null!=(x=f.items)?x:[]})]})}},4563:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>O});var s=r(54456),n=r(60500),a=r(80581),l=r(24685),i=r(74591);function o(e){let{id:t,active:r,children:n}=e;return(0,s.jsx)("div",{role:"tabpanel","data-tab-id":t,"data-active":r?"true":"false",className:(0,i.cn)("h-full min-h-0",r?"block":"hidden"),children:n})}var d=r(45250),c=r(48605),u=r(18834),m=r(84508),x=r(4222),h=r(17758),p=r(46773),f=r(966);function g(e){let{tab:t}=e;switch(t.kind){case"chat":return(0,s.jsx)(d.ChatPanel,{sessionId:t.sessionId,tabId:t.id});case"term":return(0,s.jsx)(c.zV,{});case"intake":return(0,s.jsx)(u.SY,{});case"tasks":return(0,s.jsx)(m.B,{});case"control":return(0,s.jsx)(x.U,{});case"settings":return(0,s.jsx)(h.O,{})}}function b(){return(0,s.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-muted-foreground",children:(0,s.jsx)("span",{children:"(이 탭은 절약 모드 — 클릭 시 복원)"})})}function v(){let{state:e,addTab:t,activateTab:r}=(0,l.hA)(),a=(0,p.ub)(e),i=(0,n.useRef)(null);if((0,n.useEffect)(()=>{if(i.current&&!(a.length<=1))return(0,f.gI)(i.current,{shouldIgnore:e=>{if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return!!("INPUT"===t||"TEXTAREA"===t||"SELECT"===t||e.closest(".xterm"))||!!e.isContentEditable},onSwipe:t=>{let s=e.activeId?a.findIndex(t=>t.id===e.activeId):-1;if(s<0)return;let n="left"===t?Math.min(a.length-1,s+1):Math.max(0,s-1);n!==s&&r(a[n].id)}})},[a,e.activeId,r]),0===a.length)return(0,s.jsx)("div",{className:"flex h-full flex-col items-center justify-center gap-4 px-6 text-center",children:(0,s.jsxs)("div",{className:"rounded-lg border border-dashed border-border bg-card px-6 py-8 max-w-md",children:[(0,s.jsx)("h2",{className:"text-base font-semibold tracking-tight",children:"워크스페이스 시작"}),(0,s.jsxs)("p",{className:"mt-2 text-sm text-muted-foreground",children:["상단 strip 의"," ",(0,s.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-xs",children:"+"})," ","또는 아래 버튼으로 첫 탭을 추가하세요. 비활성 탭은 닫기 전까지 unmount 되지 않아 입력 중 텍스트가 보존됩니다."]}),(0,s.jsxs)("div",{className:"mt-4 flex flex-wrap justify-center gap-2",children:[(0,s.jsx)("button",{type:"button",onClick:()=>t({kind:"chat"}),className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary",children:"+ chat"}),(0,s.jsx)("button",{type:"button",onClick:()=>t({kind:"term"}),className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary",children:"+ terminal"})]})]})});let d=new Set(e.frozenIds);return(0,s.jsx)("div",{ref:i,className:"relative h-full min-h-0 touch-pan-y",children:a.map(t=>(0,s.jsx)(o,{id:t.id,active:e.activeId===t.id,children:d.has(t.id)?(0,s.jsx)(b,{}):(0,s.jsx)(g,{tab:t})},t.id))})}function j(){let e=(0,l.hA)();return(0,n.useEffect)(()=>{let t=t=>{if(!(t.metaKey||t.ctrlKey))return;let r=(0,p.ub)(e.state),s=e.state.activeId?r.findIndex(t=>t.id===e.state.activeId):-1;if(!t.shiftKey&&"t"===t.key.toLowerCase()){t.preventDefault(),e.openPicker({kind:"addNewChat"});return}if(!t.shiftKey&&"w"===t.key.toLowerCase()){t.preventDefault(),e.state.activeId&&r.length>0&&e.closeTab(e.state.activeId);return}if(t.shiftKey&&("]"===t.key||"["===t.key)){if(t.preventDefault(),r.length<=1||s<0)return;let n="]"===t.key?(s+1)%r.length:(s-1+r.length)%r.length;e.activateTab(r[n].id);return}if(!t.shiftKey&&/^[1-9]$/.test(t.key)){t.preventDefault();let s=parseInt(t.key,10)-1;if(s>=r.length)return;e.activateTab(r[s].id);return}};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[e]),null}var y=r(75361),N=r(91321),k=r(37637),w=r(8286),C=r(36581),I=r(1355),S=r(10037),E=r(79450),D=r(84693);function T(e){var t;let{open:r,session:a,onCancel:l,onConfirm:i,busy:o}=e;if((0,n.useEffect)(()=>{if(!r)return;let e=e=>{"Escape"===e.key&&l()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[r,l]),!r||!a)return null;let d=null!=(t=a.lastMsgPreview)?t:"(빈 대화)";return(0,s.jsx)("div",{role:"alertdialog","aria-modal":"true",className:"fixed inset-0 z-[60] flex items-center justify-center bg-black/40",onClick:l,children:(0,s.jsxs)("div",{onClick:e=>e.stopPropagation(),className:"w-[min(420px,calc(100vw-2rem))] rounded-lg border border-border bg-card p-5 shadow-lg",children:[(0,s.jsxs)("div",{className:"flex items-start gap-3",children:[(0,s.jsx)(w.A,{className:"mt-0.5 h-5 w-5 shrink-0 text-rose-500","aria-hidden":!0}),(0,s.jsxs)("div",{className:"min-w-0 space-y-2",children:[(0,s.jsx)("h2",{className:"text-base font-semibold",children:"대화 지우기"}),(0,s.jsxs)("p",{className:"truncate font-mono text-xs text-muted-foreground",children:['"',d,'"']}),(0,s.jsxs)("p",{className:"text-xs text-muted-foreground",children:[a.origin&&(0,s.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono uppercase mr-1.5",children:a.origin}),a.msgCount," 메시지"]}),(0,s.jsx)("p",{className:"text-sm",children:"이 대화를 영구히 지웁니다. 복구할 수 없습니다. 다른 기기에서 이 대화를 보고 있다면 더 이상 이어갈 수 없습니다."})]})]}),(0,s.jsxs)("div",{className:"mt-4 flex justify-end gap-2",children:[(0,s.jsx)("button",{type:"button",onClick:l,disabled:o,className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary disabled:opacity-50",children:"취소"}),(0,s.jsx)("button",{type:"button",onClick:i,disabled:o,className:"rounded-md bg-rose-500 px-3 py-1.5 text-sm font-medium text-white hover:bg-rose-600 disabled:opacity-50",children:o?"지우는 중…":"지우기"})]})]})})}var M=r(78925);let L={cli:"cli",pwa:"pwa",tg:"tg",dc:"dc"};function P(e){let{open:t,onClose:r,onPick:a,attachedSessions:l}=e,{client:o}=(0,C.Q)(),d=(0,S.hG)(o),c=(0,n.useMemo)(()=>new E.jU(o),[o]),u=(0,D.h)(),[m,x]=(0,n.useState)(""),[h,p]=(0,n.useState)(0),[f,g]=(0,n.useState)(null),[b,v]=(0,n.useState)(!1),[j,P]=(0,n.useState)(!1),[A,R]=(0,n.useState)(null),O=(0,n.useRef)(null),K=(0,n.useRef)(null);(0,n.useEffect)(()=>{t&&(x(""),p(0),R(null),d.forceRefresh())},[t,d]),(0,n.useEffect)(()=>{R(null)},[m]);let z=(0,n.useMemo)(()=>{if(!m.trim())return[...u];let e=m.trim().toLowerCase();return u.filter(t=>!!(t.id.toLowerCase().startsWith(e)||t.lastMsgPreview&&t.lastMsgPreview.toLowerCase().includes(e))||!!t.origin&&e==="[".concat(t.origin,"]")||!!t.origin&&e===t.origin)},[u,m]);if((0,n.useEffect)(()=>{h>=z.length&&p(Math.max(0,z.length-1))},[z.length,h]),(0,n.useEffect)(()=>{var e;if(!t)return;null==(e=O.current)||e.focus();let s=e=>{if("Escape"===e.key){e.preventDefault(),r();return}if((e.metaKey||e.ctrlKey)&&"n"===e.key.toLowerCase()){e.preventDefault(),J();return}if((e.metaKey||e.ctrlKey)&&"f"===e.key.toLowerCase()){var t;e.preventDefault(),null==(t=O.current)||t.focus();return}if("ArrowDown"===e.key)e.preventDefault(),p(e=>Math.min(z.length-1,e+1));else if("ArrowUp"===e.key)e.preventDefault(),p(e=>Math.max(0,e-1));else if("Enter"===e.key){let t=z[h];if(!t){m.trim().length>=4&&(e.preventDefault(),_());return}e.preventDefault(),U(t)}else if("Delete"===e.key||"Backspace"===e.key){if(e.target instanceof HTMLInputElement)return;let t=z[h];t&&(e.preventDefault(),g(t))}};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[t,z,h,r,m,j]),!t)return null;let J=()=>{a({kind:"new",sessionId:(0,I.f6)()})},U=e=>{let t=l.get(e.id);if(t)return void a({kind:"jumpToTab",tabId:t.tabId});a({kind:"existing",sessionId:e.id})},_=async()=>{let e=m.trim().toLowerCase();if(!(e.length<4)&&!j){P(!0);try{var t;let r=await c.list(!0),s=(0,E.nj)(null!=(t=r.sessions)?t:[],e);if("one"===s.kind){let e=l.get(s.id);e?a({kind:"jumpToTab",tabId:e.tabId}):a({kind:"existing",sessionId:s.id})}else"none"===s.kind?R("'".concat(e,"'로 시작하는 대화가 없습니다.")):R("".concat(s.count,"개의 대화가 일치합니다. ID를 더 길게 입력하세요."))}catch(e){R("대화를 찾지 못했습니다: ".concat(e instanceof Error?e.message:String(e)))}finally{P(!1)}}},B=async()=>{if(f){v(!0);try{await d.forget(f.id),g(null)}finally{v(!1)}}};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":"대화 선택",className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",onClick:r,children:(0,s.jsxs)("div",{onClick:e=>e.stopPropagation(),className:"flex max-h-[min(640px,90vh)] w-[min(640px,calc(100vw-2rem))] flex-col rounded-lg border border-border bg-card shadow-lg",children:[(0,s.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-2 border-b border-border px-4 py-3",children:[(0,s.jsx)("h2",{className:"text-base font-semibold",children:"대화 선택"}),(0,s.jsx)("button",{type:"button","aria-label":"close",onClick:r,className:"rounded-md p-1 text-muted-foreground hover:bg-secondary hover:text-foreground",children:(0,s.jsx)(y.A,{className:"h-4 w-4"})})]}),(0,s.jsx)("div",{className:"shrink-0 px-4 py-3",children:(0,s.jsxs)("button",{type:"button",onClick:J,className:"flex w-full items-center gap-3 rounded-lg border border-primary/40 bg-primary/10 px-3 py-2.5 text-left hover:bg-primary/15",children:[(0,s.jsx)(N.A,{className:"h-5 w-5 text-primary"}),(0,s.jsxs)("div",{className:"flex-1",children:[(0,s.jsx)("div",{className:"text-sm font-medium",children:"새 대화 시작"}),(0,s.jsx)("div",{className:"text-xs text-muted-foreground",children:"비어있는 새 채팅을 엽니다 (⌘N)"})]})]})}),(0,s.jsx)("div",{className:"shrink-0 border-y border-border bg-muted/30 px-4 py-2",children:(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)(k.A,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),(0,s.jsx)("input",{ref:O,value:m,onChange:e=>x(e.target.value),placeholder:"대화 검색 — 내용 \xb7 ID \xb7 [pwa]/[cli]/[tg]/[dc]",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground/60"}),m&&(0,s.jsx)("button",{type:"button","aria-label":"clear search",onClick:()=>x(""),className:"rounded p-0.5 text-muted-foreground hover:bg-background",children:(0,s.jsx)(y.A,{className:"h-3 w-3"})})]})}),(0,s.jsx)("div",{ref:K,className:"min-h-0 flex-1 overflow-y-auto",children:0===z.length?(0,s.jsxs)("div",{className:"px-4 py-12 text-center",children:[(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:0!==u.length||m.trim()?"검색과 일치하는 대화가 없습니다.":'아직 대화가 없습니다. 위의 "새 대화 시작"으로 첫 대화를 시작하세요.'}),m.trim().length>=4&&(0,s.jsx)("button",{type:"button",disabled:j,onClick:()=>void _(),className:"mt-3 rounded-md border border-violet-500/40 bg-violet-500/10 px-3 py-1.5 text-xs text-violet-300 hover:bg-violet-500/15 disabled:opacity-50",children:j?"찾는 중…":"ID '".concat(m.trim(),"'로 대화 이어가기 (Enter)")}),A&&(0,s.jsx)("p",{className:"mt-2 text-xs text-amber-400",children:A}),0===u.length&&!m.trim()&&(0,s.jsx)("p",{className:"mt-2 text-xs text-muted-foreground",children:"다른 기기(CLI / Telegram / Discord)에서 대화를 시작하면 여기에 자동으로 나타납니다."})]}):(0,s.jsx)("ul",{className:"divide-y divide-border",children:z.map((e,t)=>{var r;let n=l.get(e.id),a=t===h;return(0,s.jsx)("li",{children:(0,s.jsxs)("div",{className:(0,i.cn)("group flex items-center gap-3 px-4 py-2.5 transition-colors",a?"bg-primary/10 ring-1 ring-inset ring-primary/30":"hover:bg-secondary/50"),onMouseEnter:()=>p(t),children:[(0,s.jsxs)("button",{type:"button",onClick:()=>U(e),className:"flex min-w-0 flex-1 flex-col items-start text-left",children:[(0,s.jsxs)("div",{className:"flex w-full items-center gap-2",children:[(0,s.jsx)("span",{className:"truncate text-sm font-medium",children:null!=(r=e.lastMsgPreview)?r:(0,s.jsx)("span",{className:"text-muted-foreground italic",children:"(빈 대화)"})}),n&&(0,s.jsxs)("span",{className:"ml-auto shrink-0 rounded-full bg-primary/15 px-2 py-0.5 text-[10px] font-medium text-primary",children:["✓ ",n.label,"에서 열림"]})]}),(0,s.jsxs)("div",{className:"mt-0.5 flex items-center gap-2 text-[11px] text-muted-foreground",children:[e.origin&&(0,s.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono",children:L[e.origin]}),(0,s.jsx)("span",{children:function(e){try{let t=new Date(e).getTime();if(!Number.isFinite(t))return"";let r=Date.now()-t,s=Math.floor(r/6e4);if(s<1)return"방금 전";if(s<60)return"".concat(s,"분 전");let n=Math.floor(s/60);if(n<24)return"".concat(n,"시간 전");let a=Math.floor(n/24);if(a<7)return"".concat(a,"일 전");return new Date(t).toLocaleDateString()}catch(e){return""}}(e.lastTurnAt)}),(0,s.jsxs)("span",{children:["\xb7 ",e.msgCount," 메시지"]}),(0,s.jsx)(M.S,{sessionId:e.id,source:"picker",variant:"subtle",showCopyIcon:!1})]})]}),(0,s.jsx)("button",{type:"button","aria-label":"대화 ".concat(e.id," 지우기"),onClick:t=>{t.stopPropagation(),g(e)},className:(0,i.cn)("shrink-0 rounded p-1.5 text-muted-foreground transition-colors hover:bg-rose-500/10 hover:text-rose-500",a?"opacity-100":"opacity-0 group-hover:opacity-100"),children:(0,s.jsx)(w.A,{className:"h-4 w-4"})})]})},e.id)})})}),(0,s.jsxs)("div",{className:"shrink-0 border-t border-border bg-muted/30 px-4 py-2 text-[10px] text-muted-foreground",children:[(0,s.jsx)("span",{className:"mr-3",children:"↑↓ 이동"}),(0,s.jsx)("span",{className:"mr-3",children:"Enter 선택"}),(0,s.jsx)("span",{className:"mr-3",children:"⌘N 새 대화"}),(0,s.jsx)("span",{className:"mr-3",children:"⌘F 검색"}),(0,s.jsx)("span",{children:"Del 지우기"})]})]})}),(0,s.jsx)(T,{open:null!==f,session:f,busy:b,onCancel:()=>g(null),onConfirm:B})]})}let A=new Set(["chat","term","intake","tasks","control","settings"]);function R(){var e;let t=(0,l.hA)(),r=(0,a.useRouter)(),i=(0,a.useSearchParams)(),o=null!=(e=null==i?void 0:i.get("intent"))?e:null,d=(0,n.useRef)(null);(0,n.useEffect)(()=>{if(o&&d.current!==o){if(!A.has(o))return void r.replace("/workspace");if(d.current=o,"chat"===o){let e=(0,p.ub)(t.state).find(e=>"chat"===e.kind);e?t.activateTab(e.id):t.openPicker({kind:"addNewChat"})}else t.activateOrAdd(o);r.replace("/workspace")}},[o,t,r]);let c=(0,n.useMemo)(()=>{let e=new Map,r=0;for(let s of t.state.order){let n=t.state.tabs.find(e=>e.id===s);n&&"chat"===n.kind&&(r+=1,e.set(n.sessionId,{tabId:n.id,label:"chat#".concat(r)}))}return e},[t.state.order,t.state.tabs]);return(0,s.jsxs)("div",{className:"flex h-full flex-col",children:[(0,s.jsx)(j,{}),(0,s.jsx)("div",{className:"flex-1 min-h-0",children:(0,s.jsx)(v,{})}),(0,s.jsx)(P,{open:null!==t.pickerMode,onClose:t.closePicker,onPick:e=>{let r=t.pickerMode;r&&("jumpToTab"===e.kind?t.activateTab(e.tabId):"addNewChat"===r.kind?t.addTab({kind:"chat",sessionId:e.sessionId}):"attachToTab"===r.kind&&(t.updateChatTab(r.tabId,{sessionId:e.sessionId}),t.activateTab(r.tabId)),t.closePicker())},attachedSessions:c})]})}function O(){return(0,s.jsx)(n.Suspense,{fallback:(0,s.jsx)("div",{className:"h-full"}),children:(0,s.jsx)(R,{})})}},67683:(e,t,r)=>{Promise.resolve().then(r.bind(r,4563))}},e=>{e.O(0,[7777,9538,3278,1829,6048,9656,7551,5978,3454,1159,3735,9906,3869,4215,2176,6588,5845,1394,7274,4685,7758,8605,5250,4508,8834,6390,3170,7358],()=>e(e.s=67683)),_N_E=e.O()}]);
|