elanous 0.2.21 → 0.2.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/chunks/1307-08b716476f1d50af.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2489-ff55a35b202c0f94.js → 2489-d238d3e2eb5b2bf5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3857-5985236d9307f676.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5633-d6852385000738ef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5977-5b9e8a45a5b0c823.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8857-aa1cc4ac90af4d40.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9247-55bcfbb0e8057f59.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-88459e0903da2803.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-d781be3e3a9cfd74.js → page-d85c43f46f58716b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/board/{page-b0a80997903852d8.js → page-4e645600579ae952.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-2b1263165630d9c8.js → page-87edbfd19117823b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-7f0c2b7801ac6a54.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-bf1f030a9d1adffd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/{page-e2d6bed48ac20120.js → page-cbaf66b1e1804adf.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/{page-111cabe4d1fd69ae.js → page-80ed511e02c81412.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/control/{page-544dd4bd4847eeb7.js → page-9f5610caaa06178c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/{page-3ee191319bf97d87.js → page-ec8f3575e339de74.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-86d753e460f1a989.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-4166a7d51cf0a57d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/{page-a449f1ed472b81c2.js → page-2a19c5cd3b562580.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/field/{page-9045094d6d3b5cd0.js → page-b6a09cde2e07521a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/{page-c06673596849ef45.js → page-f7eae1518ca0c353.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-456a8573ad811381.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/{layout-9f81233f29dcd409.js → layout-8462d6a543cbb2d9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-2974cdfb87c0f9c9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-f927ffa25f3c86d1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-abd86cd832aaa011.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-79daf68f6256adaa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-8c3f168fc3f91939.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-7a12f61be4a579d1.js → page-786fb4504d0f2fa9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/{not-found-c85b0589591a99c9.js → not-found-75209f14597dcb8f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/{page-725a4da02dd129eb.js → page-bf30affe3a85af7e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-1187a44b7515434b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-3d0910185a66ed54.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-f401ee1dd5a26e25.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-5dfe7604fd842784.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/{page-21bec4afeb2f0917.js → page-76cf838050a8d681.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/{page-dc39ee7a36d26385.js → page-7ec8e289b4c14df6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-84ae759f76053672.js → page-8c8ac17d52be2a79.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/{page-3db58ddb61fe2be9.js → page-d359ab048d63a9d9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/{page-c5315e30f3528dc4.js → page-b8b345c880bf78d1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/{page-2fe368efb6de3b6a.js → page-f151cc10ad026940.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-9875f103057da433.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-9789328af9a9aa62.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/{page-c69762987b751174.js → page-bf495a1e284f4e00.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-a263d94bca4be22a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-3962eab8ec58d16e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-9abcfac07e02a542.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-bee49f927c333abb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-bac2d56dcb02d955.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-937cbcc13176295c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-d09495594f7f480d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/{page-7f8d7fcdf058a845.js → page-69cb93d1a2e57e0e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/{page-22163556cd38bc88.js → page-72ec543928d67c3e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-82906eeda0186a7b.js +1 -0
- package/apps/pwa/out/_next/static/css/f2bd5257e6af88d8.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +14 -14
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +14 -14
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +14 -14
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +14 -14
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +14 -14
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +14 -14
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +14 -14
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +14 -14
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +14 -14
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +14 -14
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +14 -14
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +14 -14
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +14 -14
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +14 -14
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +14 -14
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +14 -14
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +14 -14
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +14 -14
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +14 -14
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +14 -14
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +14 -14
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +14 -14
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +14 -14
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +14 -14
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +14 -14
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +14 -14
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +14 -14
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +14 -14
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +15 -15
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +14 -14
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +14 -14
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +14 -14
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +14 -14
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +14 -14
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +14 -14
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +14 -14
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +14 -14
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +14 -14
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +14 -14
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +14 -14
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +14 -14
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +14 -14
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +14 -14
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +14 -14
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +14 -14
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +14 -14
- package/graphs/catalog/catalog.yaml +1 -1
- package/graphs/drafts/recipes.yaml +2 -2
- package/graphs/test-diet/recipes.yaml +3 -0
- package/graphs/test-diet/test-diet.yaml +3 -1
- package/package.json +1 -1
- package/scripts/f-session-monitor.ts +69 -0
- package/scripts/hq/standby-snapshot.ts +7 -3
- package/scripts/knowledge-compress.ts +11 -0
- package/scripts/nightly-docops.ts +90 -3
- package/scripts/research-coo-admin-dates.ts +39 -0
- package/scripts/skills/public-check.ts +7 -2
- package/scripts/smart-merge/resync-shadow.ts +5 -3
- package/scripts/test-diet/lib.ts +81 -1
- package/scripts/test-diet/node.ts +48 -2
- package/scripts/verify-coo-admin-evidence.ts +83 -0
- package/src/acp/client.ts +4 -2
- package/src/agent/run-context.ts +4 -0
- package/src/agent-env/profile.ts +25 -5
- package/src/agent-mission/driver.ts +26 -12
- package/src/agent-mission/supervisor-metrics.ts +17 -2
- package/src/agent-substrate/acp-reviewer.ts +12 -5
- package/src/agent-substrate/pr-reviewer.ts +11 -4
- package/src/agent-substrate/review-intent.ts +102 -3
- package/src/autopilot/build/llm-conflict-merge.ts +22 -8
- package/src/autopilot/pr-manager.ts +18 -8
- package/src/away/release-watch.ts +47 -8
- package/src/briefing/brief-items.ts +104 -11
- package/src/chat/index.ts +1 -0
- package/src/cli/brief-cli.ts +20 -2
- package/src/cli/config-classify.ts +83 -0
- package/src/cli/control-cli.ts +14 -0
- package/src/cli/decisions-cli.ts +26 -16
- package/src/cli/logs-model-input.ts +1 -1
- package/src/cli/pr-cli.ts +65 -8
- package/src/cli/release-cli.ts +21 -4
- package/src/cli/tasks-cli.ts +108 -1
- package/src/connectors/types.ts +6 -6
- package/src/context-bus/context-now-surfaces.ts +18 -0
- package/src/context-bus/coord-events.ts +32 -4
- package/src/context-bus/long-term-memory.ts +23 -6
- package/src/context-bus/nightly-condense.ts +169 -21
- package/src/control/control-status.ts +87 -0
- package/src/control-plane/light-member.ts +5 -3
- package/src/control-plane/member.ts +172 -7
- package/src/core-turn/run-goal-loop.ts +22 -1
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +9 -0
- package/src/decisions/decision-cards.ts +20 -1
- package/src/decisions/decision-ledger.ts +11 -8
- package/src/decisions/web-push-decision-cards.ts +19 -3
- package/src/discord-self-message.ts +2 -2
- package/src/domains/coo-admin-dates.evidence.json +876 -0
- package/src/domains/coo-admin-tool.ts +48 -14
- package/src/domains/ops-status.ts +53 -0
- package/src/domains/outbound-alert.ts +24 -1
- package/src/exec-requests/planner.ts +6 -0
- package/src/graph-kinds/registry.ts +6 -6
- package/src/graph-runner/graph-cli.ts +34 -2
- package/src/graph-runner/graph-run-api.ts +7 -0
- package/src/graph-runner/graph-tick.ts +73 -12
- package/src/graph-runner/runner.ts +43 -11
- package/src/graph-unify/wf-to-graph.ts +79 -0
- package/src/graph-wizard/generate.ts +34 -2
- package/src/graph-wizard/steps.ts +13 -0
- package/src/harness/harness-cli-command.ts +121 -23
- package/src/harness/harness-queue.ts +58 -14
- package/src/harness/launch-advice.ts +23 -0
- package/src/index.ts +36 -7
- package/src/knowledge/conclusion-compress.ts +93 -0
- package/src/knowledge/know-find.ts +9 -2
- package/src/knowledge/query.ts +20 -0
- package/src/llm.ts +26 -16
- package/src/loops/neighbor-runtime.ts +88 -0
- package/src/loops/orchestrator/author-depth.ts +29 -11
- package/src/loops/orchestrator/overlap.ts +7 -1
- package/src/loops/orchestrator/resync-shadow.ts +1 -1
- package/src/loops/orchestrator/tick.ts +35 -2
- package/src/loops/orchestrator/traffic.ts +2 -0
- package/src/loops/registry.ts +5 -0
- package/src/market/publish.ts +17 -1
- package/src/maturity/feature-maturity.ts +2 -1
- package/src/mss/logging/redaction.ts +17 -0
- package/src/nexus/api/draft-metrics.ts +22 -8
- package/src/nexus/api/graph-peer-edit.ts +77 -0
- package/src/nexus/api/graph-wizard-api.ts +9 -1
- package/src/nexus/api/graphs-api.ts +145 -7
- package/src/nexus/api/http-server.ts +93 -8
- package/src/nexus/api/plugins-market.ts +24 -0
- package/src/nexus/index.ts +3 -2
- package/src/oauth/claude-pty-maturity.ts +24 -0
- package/src/oauth/fallback-chain.ts +27 -14
- package/src/plugins/maker/market-bundle.ts +9 -0
- package/src/plugins/maker/plugin-maker.ts +9 -3
- package/src/plugins/maker/wizard-generate.ts +73 -9
- package/src/policy/llm-policy.ts +11 -6
- package/src/release-loop/checklist-board.ts +27 -0
- package/src/release-loop/checklist.ts +38 -0
- package/src/seat-address/seat-address.ts +1 -0
- package/src/seat-loop/seat-loop.ts +174 -20
- package/src/seat-loop/seat-report.ts +29 -1
- package/src/self-dev/dev-cli.ts +90 -8
- package/src/self-dev/dev-pipeline.ts +20 -1
- package/src/self-dev/draft-sweep.ts +45 -8
- package/src/self-dev/orchestrate.ts +3 -0
- package/src/self-dev/review-provider-fallback.ts +83 -0
- package/src/self-dev/run-supervisor.ts +5 -1
- package/src/self-implement/harness-policy-gates.ts +7 -5
- package/src/self-implement/host-regate.ts +28 -14
- package/src/self-implement/l8-merge-queue.ts +80 -8
- package/src/self-implement/orchestrator.ts +68 -27
- package/src/self-implement/seams.ts +5 -3
- package/src/self-implement/self-implement-cli.ts +4 -0
- package/src/shell-env-bootstrap.ts +19 -4
- package/src/steward/triage.ts +25 -8
- package/src/storage/file-lock.ts +33 -4
- package/src/task-agent/completion-evidence.ts +31 -3
- package/src/task-agent/cover.ts +61 -0
- package/src/task-agent/live-moves.ts +126 -3
- package/src/task-agent/shadow.ts +19 -4
- package/src/task-agent/task-hand.ts +2 -0
- package/src/task-orchestrator/surfaces/pod-pool.ts +138 -15
- package/src/task-orchestrator/surfaces/self-implement.ts +7 -0
- package/src/telegram-commands.ts +8 -0
- package/src/telegram-project-command.ts +6 -0
- package/src/telegram.ts +2 -2
- package/src/typecheck-ratchet.ts +2 -1
- package/src/user-config.ts +35 -4
- package/src/version/packed-revision.json +1 -1
- package/src/workflow-runtime/executor.ts +24 -2
- package/src/workflow-runtime/triggers/registry.ts +27 -0
- package/src/workflow-runtime/triggers/schedule-source.ts +30 -3
- package/apps/pwa/out/_next/static/chunks/1307-c97eba9fb72a9a5e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3857-995ea9f5ef33d71e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5977-59fedea50d13c762.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8857-f1762140ef9a96b1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9247-7581825d511a64c0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9497-b0e758d1cd4ae8d7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-937c92292a4ab4f0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-ea998f7f5d156bea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-33c328b64ca508f8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-e4bcb2c503dab04b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-300897dcbbd5ed76.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-103fa3191c1b2e08.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-be8b4615c919e36c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-c685b104e0dfa609.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-8d693331cfbb6add.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-cef4f30a4c22fae1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-66ea1b54fc83fa15.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-8cc707bd09a497d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-90b55be1f15ce0e8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-cb16606e08be65db.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-16dc64b74ed6a40a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-8d04132dd0ac5e10.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-f23484de467c9ea3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-5456692bda39aafb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-d75f7cd65845ce98.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-5603f5e568b25ce3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-d2cc0f4e89f42028.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-a6eb73b8a4840f1c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-c0a3f4d10edb83fa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-6c0b88068c143f15.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-141436fd26dd56fc.js +0 -1
- package/apps/pwa/out/_next/static/css/e81df11490b4413b.css +0 -1
- /package/apps/pwa/out/_next/static/{MObU8ujkMciAKr6ljAV05 → aBi6EyMtLsrl7J8eH4kF7}/_buildManifest.js +0 -0
- /package/apps/pwa/out/_next/static/{MObU8ujkMciAKr6ljAV05 → aBi6EyMtLsrl7J8eH4kF7}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{7456:(e,t,r)=>{"use strict";r.d(t,{Er:()=>a,cj:()=>d,dc:()=>o,yR:()=>i});let n=/^(oauth\.|harness\.decision|llm\.router)/;function a(e){let t=[],r=e=>{"string"==typeof e&&e.trim()&&!t.includes(e.trim())&&t.push(e.trim())};for(let t of e){var a;let e=null!=(a=t.data)?a:{};if(t.category.startsWith("oauth.")){for(let t of["from","to","name","account"])r(e[t]);if(Array.isArray(e.usage))for(let t of e.usage)r(null==t?void 0:t.name);continue}if(n.test(t.category))for(let t of(r(e.account),["what","why","reason"])){let n=e[t];if("string"==typeof n)for(let e of n.matchAll(/계정\s+([A-Za-z0-9][\w.-]*)/g))r(e[1])}}return t}function s(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function o(e){let t=new Map(e.map((e,t)=>[e,"account-".concat(t+1)])),r=e.length?RegExp("(^|[^\\w-])(".concat(e.map(s).sort((e,t)=>t.length-e.length).join("|"),")(?![\\w-])"),"g"):null,n=new Map;return(e,a)=>{let s=e.replace(/\b[a-z0-9-]+\.tail[0-9a-f]+\.ts\.net\b/gi,"tailnet-host").replace(/\bmsb\d+\b/gi,e=>(e=>{let t=e.toLowerCase();n.has(t)||n.set(t,"remote-".concat(n.size+1));let r=n.get(t);return e===e.toUpperCase()?r.toUpperCase():r})(e)).replace(/\bmbp\b/gi,e=>e===e.toUpperCase()?"LOCAL":"local").replace(/\/Users\/[^/\s"']+/g,"~").replace(/(크레딧|credits?|💳)(\s*[:=]?\s*)[\d][\d,.]*/gi,"$1$2•••").replace(/[\d][\d,.]*(\s*)(크레딧|credits?)/gi,"•••$1$2").replace(/\$\s?[\d][\d,.]*/g,"$•••").replace(/(잔량?|remaining|left)(\s*[:=]?\s*)(?:[A-Za-z0-9][\w.-]*\s+)?\d+(?:\.\d+)?\s?%/gi,"$1$2•••");return a&&r&&(s=s.replace(r,(e,r,n)=>{var a;return"".concat(r).concat(null!=(a=t.get(n))?a:"account")})),s}}function l(e,t){if("string"==typeof e)return t(e);if(Array.isArray(e))return e.map(e=>l(e,t));if(e&&"object"==typeof e){let r={};for(let[n,a]of Object.entries(e))"apiEquivalentUsd"===n||"usd"===n||/credit(s|Balance)?$/i.test(n)||(r[n]=l(a,t));return r}return e}function i(e){let t=o(a(e));return e.map(e=>{let r=n.test(e.category);return{...e,event:t(e.event,!1),data:e.data?l(e.data,e=>t(e,r)):e.data}})}function d(e,t){let r=o(t);return l(e,e=>r(e,!0))}},8219:(e,t,r)=>{"use strict";r.d(t,{MaturityBanner:()=>l});var n=r(55539),a=r(46124),s=r(58603),o=r(92161);function l(){let e=(0,s.usePathname)(),t=(null==e?void 0:e.replace(/\/+$/,""))==="/inside"||(null==e?void 0:e.replace(/\/+$/,""))==="/app/inside",[r,l]=(0,a.useState)(null);(0,a.useEffect)(()=>{if(!t)return;let e=()=>l(function(){let e=new URL(window.location.href).searchParams.get("demo");if(null!==e)return"1"===e;try{return"1"===window.localStorage.getItem("elanous.inside.demo")}catch(e){return!1}}());return e(),window.addEventListener("elanous:inside-demo",e),()=>window.removeEventListener("elanous:inside-demo",e)},[t]);let i=(0,o.dY)(t?"/inside":null!=e?e:"");return t&&!0===r||"beta"!==i&&"broken"!==i?null:(0,n.jsx)("div",{role:"status",className:"border-b border-border bg-muted px-4 py-2 text-sm text-foreground",children:"beta"===i?"베타 — 화면과 동작이 바뀔 수 있습니다.":"이 화면은 지금 고치는 중입니다."})}},9086:(e,t,r)=>{"use strict";r.d(t,{ToastProvider:()=>m});var n=r(55539),a=r(69122),s=r(67327),o=r(3004),l=r(16199),i=r(81694),d=r(72937),c=r(76573);let u=e=>{let{...t}=e,{theme:r="system"}=(0,a.D)();return(0,n.jsx)(s.l$,{theme:r,className:"toaster group",icons:{success:(0,n.jsx)(o.A,{className:"size-4"}),info:(0,n.jsx)(l.A,{className:"size-4"}),warning:(0,n.jsx)(i.A,{className:"size-4"}),error:(0,n.jsx)(d.A,{className:"size-4"}),loading:(0,n.jsx)(c.A,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},toastOptions:{classNames:{toast:"cn-toast"}},...t})};function m(e){let{children:t}=e;return(0,n.jsxs)(n.Fragment,{children:[t,(0,n.jsx)(u,{})]})}},11986:(e,t,r)=>{"use strict";r.d(t,{$5:()=>d,dJ:()=>c});var n=r(46124);let a=new Set,s=new Set;function o(e,t){if(t!==a.has(e))for(let r of(t?a.add(e):a.delete(e),s))r()}function l(){return a.size>0}function i(e){return s.add(e),()=>{s.delete(e)}}function d(){return(0,n.useSyncExternalStore)(i,l,()=>!1)}function c(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];(0,n.useEffect)(()=>(o(e,t),()=>o(e,!1)),[e,t])}},17467:(e,t,r)=>{"use strict";r.d(t,{OperatorRoleDefault:()=>o});var n=r(46124),a=r(15151),s=r(31843);function o(){let{config:e}=(0,a.Q)(),t=e.baseUrl;return(0,n.useEffect)(()=>{(0,s.Un)({baseUrl:t,storage:window.localStorage})},[t]),null}},24669:(e,t,r)=>{"use strict";r.d(t,{NewBuildBanner:()=>d});var n=r(55539),a=r(46124),s=r(72215);let o=/\\?"b\\?":\\?"([A-Za-z0-9_-]{8,})\\?"/;function l(e){var t,r;return null!=(r=null==(t=o.exec(e))?void 0:t[1])?r:null}function i(e,t){return null!==e&&null!==t&&e!==t}function d(){let[e,t]=(0,a.useState)(null),[r,o]=(0,a.useState)(null);return((0,a.useEffect)(()=>{let e=function(){for(let e of Array.from(document.scripts)){let t=e.textContent?l(e.textContent):null;if(t)return t}return null}();o(e);let r=!1,n=async()=>{if("visible"===document.visibilityState)try{let n=await fetch("/app/",{cache:"no-store"});if(!n.ok)return;let a=l(await n.text());if(r)return;t(a),i(e,a)&&(0,s.cY)("pwa.new-build.detected",{current:e,served:a})}catch(e){}},a=window.setInterval(()=>{n()},12e4),d=()=>{n()};return document.addEventListener("visibilitychange",d),n(),()=>{r=!0,window.clearInterval(a),document.removeEventListener("visibilitychange",d)}},[]),i(r,e))?(0,n.jsxs)("div",{role:"status",className:"fixed inset-x-2 bottom-2 z-[60] mx-auto flex max-w-md items-center gap-3 rounded-md border border-primary/50 bg-background/95 px-3 py-2 text-sm shadow-lg","data-pwa-new-build":!0,children:[(0,n.jsx)("span",{className:"flex-1",children:"새 판이 있습니다 — 이 화면은 이전 판으로 돌고 있어요."}),(0,n.jsx)("button",{type:"button",onClick:()=>{(0,s.cY)("pwa.new-build.reload",{current:r,served:e}),window.location.reload()},className:"rounded-md bg-primary px-2 py-1 text-primary-foreground",children:"새로고침"})]}):null}},31843:(e,t,r)=>{"use strict";r.d(t,{Tp:()=>a,Un:()=>s});var n=r(97479);async function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:fetch;try{let r=await t("".concat(e.replace(/\/$/,""),"/v1/me"),{cache:"no-store"});if(!r.ok)return!1;let n=await r.json();return(null==n?void 0:n.operator)===!0}catch(e){return!1}}async function s(e){var t,r,s,o;let l=null;try{l=null!=(r=null==(t=e.storage)?void 0:t.getItem(n.GC))?r:null}catch(e){return!1}if(null!==l)return!1;let i=await a(e.baseUrl,e.fetchImpl);return o=l,!!i&&null===o&&((null!=(s=e.write)?s:n.OG)("owner"),!0)}},34781:(e,t,r)=>{"use strict";r.d(t,{MQ:()=>s,OY:()=>n,fG:()=>a});let n="elanous:nav-prefs";function a(e){try{return"1"===window.localStorage.getItem(e)}catch(e){return!1}}function s(e,t){try{t?window.localStorage.setItem(e,"1"):window.localStorage.removeItem(e)}catch(e){}try{window.dispatchEvent(new Event(n))}catch(e){}}},44373:(e,t,r)=>{"use strict";r.d(t,{cn:()=>s});var n=r(20852),a=r(30984);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))}},52982:(e,t,r)=>{"use strict";r.d(t,{hj:()=>l});var n=r(46124);let a="elanous.pwa.showBeta",s="elanous:show-beta";function o(){try{return"1"===window.localStorage.getItem(a)}catch(e){return!1}}function l(){let[e,t]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{t(o());let e=e=>{let r=e.detail;t("boolean"==typeof r?r:o())},r=e=>{(e.key===a||null===e.key)&&t(o())};return window.addEventListener(s,e),window.addEventListener("storage",r),()=>{window.removeEventListener(s,e),window.removeEventListener("storage",r)}},[]),{showBeta:e,setShowBeta:(0,n.useCallback)(e=>{t(e);try{e?window.localStorage.setItem(a,"1"):window.localStorage.removeItem(a)}catch(e){}window.dispatchEvent(new CustomEvent(s,{detail:e}))},[])}}},54664:(e,t,r)=>{"use strict";r.d(t,{i$:()=>l,nZ:()=>c,oM:()=>d,sF:()=>i});let n="elanous.showroom.layouts";function a(){return window.localStorage?window.localStorage:{getItem:()=>null,setItem:()=>{},removeItem:()=>{}}}function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a(),t=e.getItem(n);if(!t)return{};try{let e=JSON.parse(t);if(!e||"object"!=typeof e)return{};return e}catch(e){return{}}}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a(),r=JSON.stringify(e);if(r.length>102400)return{ok:!1,reason:"storage quota exceeded (".concat(r.length," > ").concat(102400,")")};try{return t.setItem(n,r),{ok:!0}}catch(e){return{ok:!1,reason:String(e)}}}async function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a();try{let{layouts:r}=await e.listShowroomLayouts(),n={};for(let e of r)n[e.name]=e;return o(n,t),{layouts:r.slice().sort((e,t)=>t.savedAt-e.savedAt),source:"daemon"}}catch(e){return{layouts:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a();return Object.values(s(e)).sort((e,t)=>t.savedAt-e.savedAt)}(t),source:"local"}}}async function i(e,t,r){var n;let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=e.trim();if(!i)return{ok:!1,reason:"name required"};let d=null!=(n=l.backend)?n:a(),c=function(e,t){var r;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=e.trim();if(!l)return{ok:!1,reason:"name required"};let i=null!=(r=n.backend)?r:a(),d=s(i),c={name:l,savedAt:Date.now(),panels:t.map(e=>({id:e.id,kind:e.kind,provider:e.provider,...e.agentBrand?{agentBrand:e.agentBrand}:{},...e.roleHint?{roleHint:e.roleHint}:{},...e.personaId?{personaId:e.personaId}:{},state:e.state})),...n.layoutMode?{layoutMode:n.layoutMode}:{}};d[l]=c;let u=o(d,i);return u.ok?{ok:!0,saved:c}:u}(i,t,l);if(!c.ok)return c;let u=0;try{let e=await r.listShowroomLayouts();if(0===e.layouts.length){let e=s(d);for(let t of Object.values(e))try{await r.saveShowroomLayout(t.name,{savedAt:t.savedAt,panels:t.panels,...t.layoutMode?{layoutMode:t.layoutMode}:{}}),u+=1}catch(e){}return{ok:!0,saved:c.saved,source:"daemon",migrated:u}}return await r.saveShowroomLayout(i,{savedAt:c.saved.savedAt,panels:c.saved.panels,...c.saved.layoutMode?{layoutMode:c.saved.layoutMode}:{}}),{ok:!0,saved:c.saved,source:"daemon",migrated:0}}catch(e){return{ok:!0,saved:c.saved,source:"local",migrated:0}}}async function d(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a(),n=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a(),r=s(t);return e.trim()in r&&(delete r[e.trim()],o(r,t),!0)}(e,r);try{return await t.deleteShowroomLayout(e),{ok:!0,source:"daemon"}}catch(e){return{ok:n,source:"local"}}}function c(e){return e.panels.map(e=>({id:e.id,kind:e.kind,provider:e.provider,...e.agentBrand?{agentBrand:e.agentBrand}:{},...e.roleHint?{roleHint:e.roleHint}:{},...e.personaId?{personaId:e.personaId}:{},sessionId:null,state:e.state}))}},57040:(e,t,r)=>{"use strict";r.d(t,{D:()=>f,ThemeProvider:()=>h,z:()=>l});var n=r(55539),a=r(46124),s=r(72215),o=r(94306);let l=["catppuccin-mocha","mocha-pastel-accent","catppuccin-latte","rose-pine-dawn","nord-light","elanous-pastel-default"],i="elanous.pwa.theme",d="dashboard.theme.active",c="catppuccin-mocha";function u(e){return"string"==typeof e&&l.includes(e)}let m=(0,a.createContext)(null);function h(e){let{children:t}=e,r=(0,o.Qj)(),[h,f]=(0,a.useState)(c),p=(0,a.useRef)(0),b=(0,a.useCallback)(e=>{f(e),document.documentElement.dataset.theme=e},[]);(0,a.useEffect)(()=>{let e=localStorage.getItem(i),t=u(e)?e:c;b(t),(0,s.cY)("webterm.provider.theme.init",{theme:t})},[b]),(0,a.useEffect)(()=>{if(!r)return;let e=!0,t=p.current;return r.getSwitch(d).then(r=>{let{switch:n}=r;e&&t===p.current&&u(n.value)&&(b(n.value),localStorage.setItem(i,n.value))}).catch(()=>void 0),()=>{e=!1}},[b,r]);let x=(0,a.useCallback)(e=>{u(e)&&(p.current+=1,b(e),localStorage.setItem(i,e),(0,s.cY)("webterm.provider.theme.set",{theme:e}),null==r||r.putSwitch(d,{value:e}).catch(()=>void 0))},[b,r]);return(0,n.jsx)(m.Provider,{value:{theme:h,setTheme:x,themes:l},children:t})}function f(){let e=(0,a.useContext)(m);if(!e)throw Error("useTheme must be used inside <ThemeProvider>");return e}},57147:(e,t,r)=>{"use strict";r.d(t,{C:()=>s,P:()=>a});let n="셋업 모드 — 먼저 LLM 을 정하세요";function a(e,t){return(null==e?void 0:e.setupMode)!==!0||"/"!==t?null:"/setup"}function s(e,t){if((null==e?void 0:e.setupMode)!==!0||"/setup"===t||t.startsWith("/setup/"))return null;let r=e.setupMissing;return r&&r.length>0?"".concat(n," (").concat(r.join(", "),")"):n}},58839:(e,t,r)=>{"use strict";r.d(t,{NexusClientProvider:()=>d});var n=r(55539),a=r(46124),s=r(79247),o=r(94306),l=r(8101);function i(){let e=(0,l.Fp)();return{baseUrl:e.baseUrl,token:e.token}}function d(e){let{children:t}=e,[r,l]=(0,a.useState)({baseUrl:"",token:""});(0,a.useEffect)(()=>{l(i());let e=()=>l(i());return window.addEventListener("storage",e),window.addEventListener("elanous.daemon.changed",e),()=>{window.removeEventListener("storage",e),window.removeEventListener("elanous.daemon.changed",e)}},[]);let d=(0,a.useMemo)(()=>r.baseUrl?(0,s.xX)({baseUrl:r.baseUrl,...r.token?{token:r.token}:{}}):null,[r.baseUrl,r.token]);return d?(0,n.jsx)(o.tI,{client:d,children:t}):(0,n.jsx)(n.Fragment,{children:t})}},60903:(e,t,r)=>{"use strict";r.d(t,{TooltipProvider:()=>s});var n=r(55539),a=r(44422);function s(e){let{delay:t=0,...r}=e;return(0,n.jsx)(a.B,{"data-slot":"tooltip-provider",delay:t,...r})}},65650:(e,t,r)=>{"use strict";r.d(t,{_r:()=>s});var n=r(46124),a=r(94306);function s(){let e=(0,a.Qj)(),[t,r]=(0,n.useState)({data:void 0,isError:!1,isPending:!0});return(0,n.useEffect)(()=>{if(!e)return void r({data:void 0,isError:!1,isPending:!0});let t=!0,n=()=>{e.getHealth().then(e=>{t&&r({data:e,isError:!1,isPending:!1})}).catch(()=>{t&&r(e=>({...e,isError:!0,isPending:!1}))})};n();let a=setInterval(n,6e4);return()=>{t=!1,clearInterval(a)}},[e]),{...t,isLoading:t.isPending&&null!==e}}r(65354)},66894:(e,t,r)=>{"use strict";r.d(t,{ServiceWorkerRegister:()=>o});var n=r(46124),a=r(72215);async function s(){if("undefined"==typeof navigator)return{status:"unsupported",reason:"no window/navigator (SSR)"};if(!("serviceWorker"in navigator))return{status:"unsupported",reason:"navigator.serviceWorker absent"};if(!window.isSecureContext)return{status:"unsupported",reason:"page not in a secure context (HTTPS or localhost required)"};try{let e=await navigator.serviceWorker.register("/app/sw.js",{scope:"/app/"});if((0,a.cY)("pwa.sw.registered",{scope:e.scope}),e.waiting)return(0,a.cY)("pwa.sw.update-waiting"),{status:"registered",scope:e.scope,updateAvailable:!0};return e.addEventListener("updatefound",()=>{let t=e.installing;t&&t.addEventListener("statechange",()=>{(0,a.cY)("pwa.sw.statechange",{state:t.state})})}),{status:"registered",scope:e.scope,updateAvailable:!1}}catch(t){let e=t instanceof Error?t.message:String(t);return(0,a.cY)("pwa.sw.register-failed",{reason:e}),{status:"error",reason:e}}}function o(){let e=(0,n.useRef)(!1);return(0,n.useEffect)(()=>{e.current||(e.current=!0,s())},[]),null}},71923:(e,t,r)=>{"use strict";r.d(t,{K:()=>i,u:()=>a});var n=r(46124);let a=932,s="elanous.pwa.wideView",o="elanous:wide-view";function l(){try{return"1"===window.localStorage.getItem(s)}catch(e){return!1}}function i(){let[e,t]=(0,n.useState)(null),[r,i]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{t(window.innerWidth),i(l());let e=()=>t(window.innerWidth),r=e=>{let t=e.detail;i("boolean"==typeof t?t:l())};return window.addEventListener("resize",e),window.addEventListener(o,r),window.addEventListener("storage",r),()=>{window.removeEventListener("resize",e),window.removeEventListener(o,r),window.removeEventListener("storage",r)}},[]),{compact:null!==e&&e<=a&&!r,setWide:(0,n.useCallback)(e=>{i(e);try{e?window.localStorage.setItem(s,"1"):window.localStorage.removeItem(s)}catch(e){}window.dispatchEvent(new CustomEvent(o,{detail:e}))},[])}}},77008:(e,t,r)=>{Promise.resolve().then(r.t.bind(r,98651,23)),Promise.resolve().then(r.bind(r,15151)),Promise.resolve().then(r.bind(r,24669)),Promise.resolve().then(r.bind(r,58839)),Promise.resolve().then(r.bind(r,17467)),Promise.resolve().then(r.bind(r,66894)),Promise.resolve().then(r.bind(r,57040)),Promise.resolve().then(r.bind(r,9086)),Promise.resolve().then(r.bind(r,83961)),Promise.resolve().then(r.bind(r,8219)),Promise.resolve().then(r.bind(r,60903)),Promise.resolve().then(r.t.bind(r,18536,23))},83961:(e,t,r)=>{"use strict";r.d(t,{AppShell:()=>eB});var n=r(55539),a=r(46124),s=r(58603),o=r(3558),l=r.n(o),i=r(69147),d=r(88069),c=r(44373),u=r(97479),m=r(8101),h=r(31843);function f(){let[e,t]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{let e=!0,r=0,n=n=>{if(n&&null!==n.key&&"elanous.nexus.baseUrl"!==n.key&&"elanous.daemon.baseUrl"!==n.key)return;let a=++r,s="";try{s=(0,m.Fp)().baseUrl}catch(e){}if(!s)try{s=(0,m.Ip)()}catch(e){}t(!1),s&&(0,h.Tp)(s).then(n=>{e&&r===a&&t(n)})};return n(),"function"==typeof window.addEventListener&&window.addEventListener("storage",n),()=>{e=!1,"function"==typeof window.removeEventListener&&window.removeEventListener("storage",n)}},[]),e}var p=r(92161),b=r(52982),x=r(48087);function g(e){var t;let{onSearch:r}=e,n=(0,s.useSearchParams)(),o=null!=(t=null==n?void 0:n.toString())?t:"";return(0,a.useEffect)(()=>{r(o)},[o,r]),null}var v=r(34781),w=r(76573),y=r(87285),j=r(75342),k=r(3004),N=r(94306),E=r(8695);function S(e){let{compact:t=!1}=e,r=(0,N.Qj)();return t||!r?null:(0,n.jsx)(A,{})}function A(){var e,t,r;let s=(0,E.mP)(),o=(0,E.XL)(),[l,i]=(0,a.useState)(""),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)({kind:"idle"}),h=null!=(r=null==(e=s.data)?void 0:e.workflows)?r:[],f=l||(null==(t=h[0])?void 0:t.name)||"",p=async()=>{if(f){m({kind:"pending"});try{let e=await o.mutateAsync({name:f,args:d});m({kind:"started",runId:e.runId,name:f})}catch(e){m({kind:"error",message:e instanceof Error?e.message:"run failed to start"})}}},b=(0,a.useMemo)(()=>(function(e){let t=new Map;for(let n of e){var r;let e=null!=(r=t.get(n.source))?r:[];e.push(n),t.set(n.source,e)}let n=[];for(let e of C){let r=t.get(e);r&&0!==r.length&&(r.sort((e,t)=>e.name.localeCompare(t.name)),n.push({source:e,label:I[e],items:r}))}return n})(h),[h]);return(0,n.jsxs)("div",{"data-testid":"sidebar-workflow-invoker",className:"border-t border-sidebar-border px-3 py-2.5 space-y-1.5",children:[(0,n.jsx)("div",{className:"text-[10px] font-medium uppercase tracking-wider text-sidebar-foreground/60",children:"Run workflow"}),(0,n.jsxs)("select",{value:f,onChange:e=>i(e.target.value),disabled:s.isLoading||0===h.length,"aria-label":"Select workflow to run",className:"block w-full truncate rounded border border-border bg-surface px-1.5 py-1 text-[11px] focus:outline-none focus:ring-1 focus:ring-primary disabled:opacity-50",children:[0===h.length&&(0,n.jsx)("option",{value:"",children:s.isLoading?"loading…":"no workflows"}),b.map(e=>(0,n.jsx)("optgroup",{label:e.label,children:e.items.map(e=>(0,n.jsx)("option",{value:e.name,children:e.name},e.name))},e.source))]}),(0,n.jsx)("input",{type:"text",value:d,onChange:e=>c(e.target.value),placeholder:"args (optional)","aria-label":"Workflow arguments",className:"block w-full rounded border border-border bg-surface px-1.5 py-1 text-[11px] focus:outline-none focus:ring-1 focus:ring-primary"}),(0,n.jsxs)("button",{type:"button",onClick:p,disabled:!f||"pending"===u.kind,"data-testid":"sidebar-workflow-invoker-run",className:"flex w-full items-center justify-center gap-1 rounded bg-primary px-2 py-1 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:["pending"===u.kind?(0,n.jsx)(w.A,{className:"h-3 w-3 animate-spin"}):(0,n.jsx)(y.A,{className:"h-3 w-3"}),"Run"]}),(0,n.jsx)(L,{status:u})]})}function L(e){let{status:t}=e;return"idle"===t.kind||"pending"===t.kind?null:"error"===t.kind?(0,n.jsxs)("p",{"data-testid":"sidebar-workflow-invoker-error",className:"flex items-start gap-1 text-[10px] leading-tight text-error",children:[(0,n.jsx)(j.A,{className:"mt-0.5 h-3 w-3 shrink-0"}),(0,n.jsx)("span",{className:"break-all",children:t.message})]}):(0,n.jsxs)("p",{"data-testid":"sidebar-workflow-invoker-started",className:"flex items-start gap-1 text-[10px] leading-tight text-muted-foreground",children:[(0,n.jsx)(k.A,{className:"mt-0.5 h-3 w-3 shrink-0 text-green-600"}),(0,n.jsxs)("span",{className:"min-w-0 flex-1 truncate",children:["started ",(0,n.jsx)("span",{className:"font-mono",children:t.runId.slice(0,14)})," \xb7"," ",(0,n.jsx)(l(),{href:"/workflows",className:"underline",children:"view"})]})]})}let C=["project","global","builtin"],I={project:"Project",global:"Global",builtin:"Built-in"};var P=r(33932),Y=r(15151),z=r(54664),R=r(72215),$=r(69370);function M(){var e;let{compact:t=!1,onNavigate:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=(0,a.useContext)(Y.C),l=(0,s.useRouter)(),i=(0,s.usePathname)(),d=(0,s.useSearchParams)(),u=null!=(e=null==d?void 0:d.get("show"))?e:null,[m,h]=(0,a.useState)([]),[f,p]=(0,a.useState)(!1);(0,a.useEffect)(()=>{if(!o)return;let e=!1;return(async()=>{try{let{layouts:t,source:r}=await (0,z.i$)(o.client);if(e)return;(0,R.cY)("showroom.sidebar.list",{count:t.length,source:r}),h(t)}catch(t){if(e)return;(0,R.cY)("showroom.sidebar.list.error",{error:String(t)})}finally{e||p(!0)}})(),()=>{e=!0}},[o]),(0,a.useEffect)(()=>{if(!o)return;let e=e=>{(!e.key||e.key.startsWith("elanous.showroom"))&&(async()=>{try{let{layouts:e}=await (0,z.i$)(o.client);h(e)}catch(e){}})()};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[o]),(0,a.useEffect)(()=>{if(!o)return;let e=o.client.showroomLayoutsEventsUrl();if(!e)return;let t=e=>async()=>{if("hello"!==e){(0,R.cY)("showroom.sidebar.sse.event",{kind:e});try{let{layouts:e}=await (0,z.i$)(o.client);h(e)}catch(e){}}};return(0,$.BX)(e,{events:{hello:t("hello"),upsert:t("upsert"),remove:t("remove")},onError:()=>{},onConstructError:e=>(0,R.cY)("showroom.sidebar.sse.construct-error",{error:String(e)})})},[o]);let b=(0,a.useCallback)(e=>{(0,R.cY)("showroom.sidebar.switch",{name:e}),l.push("/showroom?show=".concat(encodeURIComponent(e))),null==r||r()},[l,r]);return t||!o?null:(0,n.jsxs)("div",{className:"border-t border-sidebar-border/40 px-2 py-3","data-testid":"showroom-sidebar-section",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between px-1 pb-1",children:[(0,n.jsx)("span",{className:"text-[10px] font-medium uppercase tracking-wide text-sidebar-foreground/50",children:"Showrooms"}),(0,n.jsx)("span",{className:"text-[10px] text-sidebar-foreground/40",children:m.length})]}),!f&&0===m.length&&(0,n.jsx)("div",{className:"px-2 py-1 text-[11px] text-sidebar-foreground/40","data-testid":"showroom-sidebar-loading",children:"loading…"}),f&&0===m.length&&(0,n.jsxs)("div",{className:"px-2 py-1 text-[11px] leading-snug text-sidebar-foreground/50","data-testid":"showroom-sidebar-empty",children:["Save a layout in ",(0,n.jsx)("span",{className:"font-medium",children:"/showroom"})," to populate this rail."]}),m.length>0&&(0,n.jsxs)("ul",{className:"space-y-0.5",children:[m.slice(0,8).map(e=>{var t;let r=(t=e.name,!!i&&"/showroom"===i.replace(/\/+$/,"")&&!!u&&u===t);return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>b(e.name),"data-testid":"showroom-sidebar-item-".concat(e.name),className:(0,c.cn)("flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-[12px] transition-colors",r?"bg-primary/15 text-foreground font-semibold ring-1 ring-primary/40":"text-sidebar-foreground/75 hover:bg-sidebar-accent hover:text-sidebar-foreground"),"aria-current":r?"true":void 0,title:"".concat(e.name," — ").concat(e.panels.length," panels"),children:[(0,n.jsx)(P.A,{className:(0,c.cn)("size-3 shrink-0",r?"text-primary":"text-current"),"aria-hidden":!0}),(0,n.jsx)("span",{className:"flex-1 truncate",children:e.name}),(0,n.jsx)("span",{className:"shrink-0 text-[10px] text-sidebar-foreground/40",children:e.panels.length})]})},e.name)}),m.length>8&&(0,n.jsxs)("li",{className:"px-2 py-1 text-[10px] text-sidebar-foreground/40","data-testid":"showroom-sidebar-truncated",children:["+ ",m.length-8," more (open Showroom to browse)"]})]})]})}let U=x.Ue;function O(){let{onNavigate:e,onClose:t,compact:r=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=(0,s.usePathname)(),m=(0,s.useRouter)(),h=function(e){if(!e)return"/";let t=e.replace(/\/+$/,"");return""===t?"/":t}(null!=o?o:"/"),[w,y]=(0,a.useState)(""),j=(0,u.In)(),{showBeta:k}=(0,b.hj)(),N=f(),[E,A]=(0,a.useState)([]);(0,a.useEffect)(()=>{try{var e;let t=JSON.parse(null!=(e=window.localStorage.getItem("elanous.nav.collapsedGroups"))?e:"[]");Array.isArray(t)&&A(x.Hw.filter(e=>t.includes(e.id)).map(e=>e.id))}catch(e){}},[]);let[L,C]=(0,a.useState)({showLabs:!1,showHidden:!1});(0,a.useEffect)(()=>{let e=()=>C({showLabs:(0,v.fG)(x.f4),showHidden:(0,v.fG)(x.vm)});return e(),window.addEventListener(v.OY,e),window.addEventListener("storage",e),()=>{window.removeEventListener(v.OY,e),window.removeEventListener("storage",e)}},[]);let I=(0,x.Ye)(U,L,j,N,{showBeta:k}),P=t=>{let a=(0,x.HW)(t,h,w,U),s=t.icon,o="general"===j&&k&&"/settings"!==t.href&&"beta"===(0,p.dY)(t.href);return(0,n.jsxs)("li",{className:"group/nav relative",children:[(0,n.jsxs)(l(),{href:t.href,"aria-current":a?"page":void 0,onClick:r=>{var n,a;n=t,a=r,null!==n.kind&&"general"!==j&&(a.metaKey||a.ctrlKey||a.shiftKey||a.altKey||(a.preventDefault(),m.push("/workspace?intent=".concat(n.kind)),null==e||e())),r.defaultPrevented||null==e||e()},title:r?"".concat(t.label).concat(o?" \xb7 실험":""," — ").concat(t.hint):t.hint,"aria-label":"".concat(t.label).concat(o?" \xb7 실험":""," — ").concat(t.hint),className:(0,c.cn)("flex items-center rounded-md text-sm transition-colors",r?"justify-center px-1.5 py-2":"gap-3 px-3 py-2",a?"bg-primary/15 text-foreground font-semibold ring-1 ring-primary/40":"text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-foreground"),children:[(0,n.jsx)(s,{className:(0,c.cn)("h-4 w-4 shrink-0",a?"text-primary":"text-current")}),!r&&t.label,!r&&o&&(0,n.jsx)("span",{className:"rounded border border-primary/40 px-1 text-[10px] text-primary",children:"실험"}),!r&&a&&(0,n.jsx)("span",{className:"ml-auto h-1.5 w-1.5 rounded-full bg-primary","aria-hidden":!0})]}),r&&(0,n.jsxs)("span",{role:"tooltip",className:"pointer-events-none absolute left-full top-1/2 z-50 ml-2 -translate-y-1/2 whitespace-nowrap rounded-md border border-border bg-popover px-2 py-1 text-[11px] text-popover-foreground opacity-0 shadow-md transition-opacity group-hover/nav:opacity-100 [@media(pointer:coarse)]:hidden",children:[(0,n.jsx)("span",{className:"font-medium",children:t.label}),o&&(0,n.jsx)("span",{className:"ml-1 text-primary",children:"실험"}),(0,n.jsxs)("span",{className:"ml-1 text-muted-foreground",children:["— ",t.hint]})]})]},t.href)};return(0,n.jsxs)("nav",{className:"flex h-full flex-col",children:[(0,n.jsx)(a.Suspense,{fallback:null,children:(0,n.jsx)(g,{onSearch:y})}),t&&!r&&(0,n.jsxs)("div",{className:"flex items-center justify-between px-3 pt-3 pb-1",children:[(0,n.jsx)("span",{className:"text-[10px] font-medium uppercase tracking-wide text-sidebar-foreground/50",children:"menu"}),(0,n.jsx)("button",{type:"button",onClick:t,"aria-label":"close menu",title:"close menu",className:"rounded-md p-1.5 text-sidebar-foreground/60 hover:bg-sidebar-accent hover:text-sidebar-foreground",children:(0,n.jsx)(i.A,{className:"h-4 w-4"})})]}),(0,n.jsx)("div",{className:(0,c.cn)("flex-1 space-y-2",r?"px-1 py-2":"px-2 py-3"),children:x.Hw.map(t=>{let a=I.main.filter(e=>e.group===t.id);if(0===a.length)return null;let s=t.icon,o=a[0];return(0,n.jsx)("section",{"aria-label":t.label,children:r||1!==a.length?r?(0,n.jsxs)(l(),{href:o.href,title:"".concat(t.label).concat("general"===j&&k&&"/settings"!==o.href&&"beta"===(0,p.dY)(o.href)?" \xb7 실험":""),"aria-label":"".concat(t.label).concat("general"===j&&k&&"/settings"!==o.href&&"beta"===(0,p.dY)(o.href)?" \xb7 실험":""),onClick:()=>null==e?void 0:e(),className:"relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent",children:[(0,n.jsx)(s,{className:"h-4 w-4"}),"general"===j&&k&&"/settings"!==o.href&&"beta"===(0,p.dY)(o.href)&&(0,n.jsx)("span",{"aria-hidden":!0,className:"absolute -right-1 -top-1 rounded bg-primary px-0.5 text-[8px] text-primary-foreground",children:"실험"})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("button",{type:"button",onClick:()=>(e=>{let t=E.includes(e)?E.filter(t=>t!==e):[...E,e];A(t);try{window.localStorage.setItem("elanous.nav.collapsedGroups",JSON.stringify(t))}catch(e){}})(t.id),"aria-expanded":!E.includes(t.id),"aria-controls":"nav-group-".concat(t.id),className:"flex w-full items-center gap-2 rounded-md px-3 py-2 text-left text-xs font-semibold text-sidebar-foreground/80 hover:bg-sidebar-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,n.jsx)(s,{className:"h-4 w-4"}),t.label,(0,n.jsx)(d.A,{"aria-hidden":!0,className:(0,c.cn)("ml-auto h-3.5 w-3.5 transition-transform",E.includes(t.id)&&"-rotate-90")})]}),!E.includes(t.id)&&(0,n.jsx)("ul",{id:"nav-group-".concat(t.id),className:"ml-3 space-y-1 border-l border-sidebar-border pl-2",children:a.map(P)})]}):(0,n.jsx)("ul",{children:P(o)})},t.id)})}),I.labs.length>0&&(0,n.jsx)(T,{label:"Labs",compact:r,children:I.labs.map(P)}),I.hidden.length>0&&(0,n.jsx)(T,{label:"Hidden",compact:r,children:I.hidden.map(P)}),L.showLabs&&(0,p.EX)(j,"/showroom")&&(0,n.jsx)(a.Suspense,{fallback:null,children:(0,n.jsx)(M,{compact:r,onNavigate:e})}),L.showLabs&&(0,p.EX)(j,"/workflows")&&(0,n.jsx)(S,{compact:r})]})}function T(e){let{label:t,compact:r,children:a}=e;return(0,n.jsxs)("div",{className:(0,c.cn)("border-t border-sidebar-border",r?"px-1 py-2":"px-2 py-2"),children:[!r&&(0,n.jsx)("span",{className:"px-3 text-[10px] font-medium uppercase tracking-wide text-sidebar-foreground/50",children:t}),(0,n.jsx)("ul",{className:"mt-1 space-y-1",children:a})]})}var D=r(35622),H=r(94226),W=r(94476),B=r(92988),_=r(85833),q=r(71923),F=r(57040),Z=r(67327),G=r(40828),K=r(17873),Q=r(6164),J=r(76340),X=r(24982),V=r(65962),ee=r(51907),et=r(44614),er=r(72765),en=r(8819);let ea=[{kind:"chat",label:"chat",icon:G.A},{kind:"term",label:"terminal",icon:K.A},{kind:"intake",label:"intake",icon:Q.A},{kind:"tasks",label:"tasks",icon:J.A},{kind:"control",label:"control",icon:V.A},{kind:"settings",label:"settings",icon:W.A}];function es(){let e=(0,et.hA)(),{addTab:t,activateOrAdd:r}=e,[s,o]=(0,a.useState)(!1),[l,i]=(0,a.useState)({top:0,left:0}),d=(0,a.useRef)(null),c=(0,a.useRef)(null);return(0,a.useLayoutEffect)(()=>{var e;if(!s)return;let t=null==(e=d.current)?void 0:e.getBoundingClientRect();t&&i({top:t.bottom+4,left:t.left})},[s]),(0,a.useEffect)(()=>{if(!s)return;let e=e=>{var t,r;let n=e.target;(null==(t=d.current)||!t.contains(n))&&(null!=(r=c.current)&&r.contains(n)||o(!1))};document.addEventListener("mousedown",e);let t=e=>{"Escape"===e.key&&o(!1)};document.addEventListener("keydown",t);let r=()=>o(!1);return window.addEventListener("scroll",r,!0),window.addEventListener("resize",r),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t),window.removeEventListener("scroll",r,!0),window.removeEventListener("resize",r)}},[s]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{ref:d,type:"button","aria-label":"add tab",title:"새 탭 (+)",onClick:()=>o(e=>!e),className:"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-secondary hover:text-foreground",children:(0,n.jsx)(en.A,{className:"h-4 w-4"})}),s&&"undefined"!=typeof document&&(0,er.createPortal)((0,n.jsx)("div",{ref:c,role:"menu",style:{position:"fixed",top:l.top,left:l.left,zIndex:100},className:"w-44 rounded-md border border-border bg-popover py-1 shadow-md",children:ea.map(t=>{let a=t.icon;return(0,n.jsxs)("button",{type:"button",role:"menuitem",onClick:()=>{var n;"chat"===(n=t.kind)?e.openPicker({kind:"addNewChat"}):r(n),o(!1)},className:"flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm hover:bg-secondary",children:[(0,n.jsx)(a,{className:"h-4 w-4 text-muted-foreground"}),(0,n.jsx)("span",{className:"flex-1",children:t.label})]},t.kind)})}),document.body)]})}var eo=r(51903);let el={chat:G.A,term:K.A,intake:Q.A,tasks:J.A,workflows:X.A,control:V.A,settings:W.A};function ei(e){let{open:t,onClose:r}=e,{state:s,activateTab:o,closeTab:l}=(0,et.hA)(),d=(0,eo.ub)(s),u=(0,a.useRef)(null);if((0,a.useEffect)(()=>{if(!t)return;let e=e=>{"Escape"===e.key&&r()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[t,r]),!t)return null;let m=new Map,h=0;for(let e of d)"chat"===e.kind&&(h+=1,m.set(e.id,h));return(0,n.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":"탭 전환",className:"fixed inset-0 z-50 flex flex-col bg-background",children:[(0,n.jsxs)("div",{className:"flex h-9 shrink-0 items-center justify-between border-b border-border px-3",children:[(0,n.jsx)("h2",{className:"text-sm font-medium",children:"탭 전환"}),(0,n.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,n.jsx)(i.A,{className:"h-4 w-4"})})]}),(0,n.jsxs)("div",{ref:u,className:"flex-1 overflow-y-auto p-3 space-y-2",children:[0===d.length&&(0,n.jsx)("p",{className:"text-center text-sm text-muted-foreground py-6",children:"아직 탭이 없습니다."}),d.map(e=>{var t,a;let d=el[e.kind],u=s.activeId===e.id,h="chat"===e.kind&&null!=(t=m.get(e.id))?t:0,f="chat"===e.kind?null!=(a=e.title)?a:"chat#".concat(h):"term"===e.kind?"terminal":"tasks"===e.kind?"tasks":e.kind;return(0,n.jsxs)("div",{className:(0,c.cn)("flex items-center gap-3 rounded-lg border px-3 py-3 text-sm transition-colors",u?"border-primary bg-primary/10":"border-border bg-card hover:bg-secondary"),children:[(0,n.jsx)("span",{className:(0,c.cn)("inline-flex h-2 w-2 shrink-0 rounded-full",u?"bg-primary":"bg-muted-foreground/30"),"aria-hidden":!0}),(0,n.jsx)(d,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),(0,n.jsx)("button",{type:"button",onClick:()=>{o(e.id),r()},className:"flex-1 truncate text-left",children:f}),(0,n.jsx)("button",{type:"button","aria-label":"close ".concat(f),onClick:t=>{t.stopPropagation(),l(e.id)},className:"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-background hover:text-foreground",children:(0,n.jsx)(i.A,{className:"h-3.5 w-3.5"})})]},e.id)})]})]})}let ed={chat:G.A,term:K.A,intake:Q.A,tasks:J.A,workflows:X.A,control:V.A,settings:W.A};function ec(e,t){var r;return"chat"===e.kind?null!=(r=e.title)?r:"chat#".concat(t):"term"===e.kind?"terminal":e.kind}function eu(){var e;let t=(0,et.tg)(),[r,s]=(0,a.useState)(!1);if(!t)return null;let o=(0,eo.ub)(t.state);if(0===o.length)return null;let l=new Map,d=0;for(let e of o)"chat"===e.kind&&(d+=1,l.set(e.id,d));let u=o.find(e=>e.id===t.state.activeId),m=(null==u?void 0:u.kind)==="chat"&&null!=(e=l.get(u.id))?e:0,h=Math.max(0,o.length-!!u);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{role:"tablist","aria-label":"workspace tabs","data-elanous-component":"topbar-workspace-strip",className:"hidden sm:flex min-w-0 flex-1 items-center gap-1 overflow-x-auto px-1",children:[o.map(e=>{var r;let a=ed[e.kind],s=t.state.activeId===e.id,o="chat"===e.kind&&null!=(r=l.get(e.id))?r:0,d=ec(e,o);return(0,n.jsxs)("div",{role:"tab","aria-selected":s,onClick:()=>t.activateTab(e.id),className:(0,c.cn)("group flex shrink-0 items-center gap-1 rounded-md px-1.5 py-0.5 text-[11px] font-medium transition-colors cursor-pointer",s?"bg-primary/15 text-foreground ring-1 ring-primary/40":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:[(0,n.jsx)(a,{className:"h-3 w-3 shrink-0"}),(0,n.jsx)("span",{className:"max-w-[120px] truncate",children:d}),(0,n.jsx)("button",{type:"button","aria-label":"close ".concat(d),onClick:r=>{r.stopPropagation(),t.closeTab(e.id)},className:"ml-0.5 inline-flex h-3.5 w-3.5 items-center justify-center rounded text-muted-foreground/60 opacity-0 transition-opacity hover:bg-background hover:text-foreground group-hover:opacity-100 data-[active=true]:opacity-100","data-active":s?"true":"false",children:(0,n.jsx)(i.A,{className:"h-2.5 w-2.5"})})]},e.id)}),(0,n.jsx)(es,{})]}),(0,n.jsxs)("div",{role:"tablist","aria-label":"workspace tabs (compact)","data-elanous-component":"topbar-workspace-strip-mobile",className:"flex sm:hidden min-w-0 flex-1 items-center gap-1 px-1",children:[u&&(0,n.jsxs)("div",{className:"flex flex-1 min-w-0 items-center gap-1 rounded-md bg-primary/15 px-1.5 py-0.5 text-[11px] font-medium ring-1 ring-primary/40",children:[(()=>{let e=ed[u.kind];return(0,n.jsx)(e,{className:"h-3 w-3 shrink-0"})})(),(0,n.jsx)("span",{className:"flex-1 truncate",children:ec(u,m)}),(0,n.jsx)("button",{type:"button","aria-label":"close",onClick:()=>t.closeTab(u.id),className:"inline-flex h-3.5 w-3.5 items-center justify-center rounded hover:bg-background",children:(0,n.jsx)(i.A,{className:"h-2.5 w-2.5"})})]}),h>0&&(0,n.jsxs)("button",{type:"button","aria-label":"other tabs (".concat(h,")"),onClick:()=>s(!0),className:"inline-flex h-6 shrink-0 items-center gap-0.5 rounded-md px-1.5 text-[11px] text-muted-foreground hover:bg-secondary hover:text-foreground",children:[(0,n.jsx)(ee.A,{className:"h-3 w-3"}),(0,n.jsx)("span",{children:h})]}),(0,n.jsx)(es,{})]}),(0,n.jsx)(ei,{open:r,onClose:()=>s(!1)})]})}var em=r(47006);function eh(e){let{snapshot:t}=e;if("quiet"===t.kind||"loading"===t.kind)return null;if("error"===t.kind)return(0,n.jsx)("span",{role:"alert","data-elanous-component":"topbar-activity","data-activity-kind":"error",title:t.message,className:"max-w-[9rem] shrink-0 truncate rounded px-1.5 py-0.5 text-[10px] text-rose-500 sm:max-w-[16rem]",children:"activity error"});let r=(0,em.Hl)(t);return(0,n.jsxs)(l(),{href:t.run.href,"aria-label":r,title:r,"data-elanous-component":"topbar-activity","data-activity-kind":"active","data-run-id":t.run.runId,className:"flex min-w-0 max-w-[7.5rem] shrink items-center gap-1 rounded-md px-1.5 py-0.5 text-[10px] font-medium text-emerald-600 hover:bg-accent sm:max-w-[18rem]",children:[(0,n.jsx)("span",{className:"h-1.5 w-1.5 shrink-0 rounded-full bg-emerald-500","aria-hidden":!0}),(0,n.jsx)("span",{className:"hidden uppercase tracking-wide sm:inline",children:"LIVE"}),(0,n.jsx)("span",{className:"min-w-0 truncate",children:t.run.runId}),t.run.progressLine&&(0,n.jsx)("span",{className:"hidden min-w-0 truncate text-muted-foreground md:inline",children:t.run.progressLine}),t.extraLiveCount>0&&(0,n.jsxs)("span",{className:"shrink-0 text-muted-foreground",children:["+",t.extraLiveCount]})]})}var ef=r(5358),ep=r(7456);let eb="•••",ex=[[/\b(?:elt|els)_[A-Za-z0-9_-]{8,}/g,eb],[/\b(?:ghp|gho|ghs|ghu|github_pat)_[A-Za-z0-9_]{10,}/g,eb],[/\bsk-(?:ant-|proj-)?[A-Za-z0-9_-]{16,}/g,eb],[/\bxox[abpr]-[A-Za-z0-9-]{10,}/g,eb],[/\b\d{6,}:[A-Za-z0-9_-]{30,}\b/g,eb],[/(Bearer\s+)[A-Za-z0-9._~+/-]{12,}=*/gi,"$1".concat(eb)],[/([?&](?:token|access_token|key|auth|code)=)[^&\s"'<>]+/gi,"$1".concat(eb)],[/\b(?:10|127)\.\d{1,3}\.\d{1,3}\.\d{1,3}(?::\d{2,5})?\b/g,eb],[/\b192\.168\.\d{1,3}\.\d{1,3}(?::\d{2,5})?\b/g,eb],[/\b172\.(?:1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}(?::\d{2,5})?\b/g,eb],[/\b100\.(?:6[4-9]|[7-9]\d|1[01]\d|12[0-7])\.\d{1,3}\.\d{1,3}(?::\d{2,5})?\b/g,eb],[/\b[a-z0-9-]+(?:\.[a-z0-9-]+)*\.ts\.net(?::\d{2,5})?\b/gi,"tailnet-host"],[/\b[a-z0-9-]+\.local(?::\d{2,5})?\b/gi,"local-host"],[/\blocalhost:\d{2,5}\b/gi,"localhost"],[/\/(?:Users|home)\/[^/\s"'<>]+/g,"~"],[/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g,"".concat(eb,"@").concat(eb)]];async function eg(e){let t=Math.max(320,Math.round(window.innerWidth)),r=Math.max(320,Math.round(window.innerHeight)),n=document.body.cloneNode(!0),a=0;for(let e of Array.from(n.querySelectorAll("[data-share-hide], [data-share-capture-ui]"))){let t=document.createElement("span");t.setAttribute("style","display:inline-block;min-width:4em;height:1em;background:#9ca3af;border-radius:3px"),e.replaceWith(t),a++}for(let e of Array.from(n.querySelectorAll("input, textarea")))e.setAttribute("value",""),"TEXTAREA"===e.tagName&&(e.textContent="");let s="";for(let e of Array.from(document.styleSheets))try{for(let t of Array.from(e.cssRules))s+="".concat(t.cssText,"\n")}catch(e){}let{markup:o,hits:l}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],{text:r,hits:n}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=0,n=e;for(let e of t){let t=RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g");n=n.replace(t,()=>(r++,eb))}for(let[e,t]of ex)n=n.replace(e,function(){for(var e,n=arguments.length,a=Array(n),s=0;s<n;s++)a[s]=arguments[s];return r++,t.replace("$1",null!=(e=a[1])?e:"")});let a=(0,ep.dc)([])(n,!1);return a!==n&&r++,{text:a,hits:r}}(e.replace(/<script\b[\s\S]*?<\/script>/gi,"").replace(/<noscript\b[\s\S]*?<\/noscript>/gi,"").replace(/(<input\b[^>]*?\bvalue=)("[^"]*"|'[^']*')/gi,'$1""').replace(/(<textarea\b[^>]*>)[\s\S]*?(<\/textarea>)/gi,"$1$2"),t);return{markup:r,hits:n}}(new XMLSerializer().serializeToString(n),e),i=document.documentElement.className.replace(/[^\w\s-]/g,""),d='<svg xmlns="http://www.w3.org/2000/svg" width="'.concat(t,'" height="').concat(r,'"><foreignObject width="100%" height="100%">')+'<div xmlns="http://www.w3.org/1999/xhtml" class="'.concat(i,'" style="width:').concat(t,"px;height:").concat(r,'px;overflow:hidden">')+"<style>".concat(s.replace(/<\/style/gi,""),"</style>").concat(o,"</div></foreignObject></svg>"),c="data:image/svg+xml;charset=utf-8,".concat(encodeURIComponent(d)),u=new Image;await new Promise((e,t)=>{u.onload=()=>e(),u.onerror=()=>t(Error("render-failed")),u.src=c});let m=Math.min(2,window.devicePixelRatio||1),h=document.createElement("canvas");h.width=Math.round(t*m),h.height=Math.round(r*m);let f=h.getContext("2d");if(!f)throw Error("no-canvas");f.fillStyle=getComputedStyle(document.body).backgroundColor||"#ffffff",f.fillRect(0,0,h.width,h.height),f.scale(m,m),f.drawImage(u,0,0);let p=await new Promise(e=>h.toBlob(e,"image/png"));if(!p)throw Error("encode-failed");return{blob:p,hits:l+a,width:t,height:r}}function ev(){let{config:e}=(0,Y.Q)(),[t,r]=(0,a.useState)(!1),s=async()=>{if(!t){r(!0);try{let t=function(e){let t=new Set,r=e=>{e&&e.trim().length>=4&&t.add(e.trim())};if(r(e.token),r(e.pageHost),e.baseUrl)try{let t=new URL(e.baseUrl);r(t.host),r(t.hostname),r(e.baseUrl.replace(/\/$/,""))}catch(t){r(e.baseUrl)}return[...t].sort((e,t)=>t.length-e.length)}({pageHost:window.location.host,baseUrl:e.baseUrl,token:e.token}),r=await eg(t),n=await fetch("".concat(e.baseUrl.replace(/\/$/,""),"/v1/captures"),{method:"POST",headers:{"content-type":"image/png",...e.token?{authorization:"Bearer ".concat(e.token)}:{}},body:r.blob});if(!n.ok)throw Error(401===n.status?"auth":"http-".concat(n.status));let a=await n.json();(0,R.cY)("pwa.share-capture.uploaded",{hits:r.hits,width:r.width,height:r.height}),Z.oR.success("공유용 캡처를 저장했습니다 — 가린 항목 ".concat(r.hits,"개"),{description:"데몬 captures/".concat(a.id,".png \xb7 올리기 전에 한 번 더 확인해 주세요")})}catch(t){let e=t instanceof Error?t.message:"unknown";(0,R.cY)("pwa.share-capture.failed",{reason:e}),Z.oR.error("auth"===e?"저장하지 못했습니다 — 연결 토큰이 필요합니다(설정 › 데몬 연결)":"이 화면은 아직 캡처하지 못했습니다(beta) — 다른 브라우저에서 다시 시도해 주세요")}finally{r(!1)}}};return(0,n.jsx)("button",{type:"button","data-share-capture-ui":!0,onClick:()=>{s()},disabled:t,"aria-label":"공유용 캡처",title:"공유용 캡처 (beta) — 주소\xb7토큰을 가린 사진을 데몬에 저장",className:"rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-50",children:(0,n.jsx)(ef.A,{className:"h-4 w-4"})})}let ew="elanous.pwa.wakeLockOn";function ey(){let e=!(arguments.length>0)||void 0===arguments[0]||arguments[0],[t,r]=(0,a.useState)(!1),n=function(e){let[t,r]=(0,a.useState)({supported:"undefined"!=typeof navigator&&"wakeLock"in navigator,held:!1,error:null}),n=(0,a.useRef)(null),s=(0,a.useRef)(e);return s.current=e,(0,a.useEffect)(()=>{if("undefined"==typeof navigator)return;let t=navigator.wakeLock;if(!t)return void r(e=>({...e,supported:!1}));let a=async()=>{if(s.current&&(!n.current||n.current.released))try{let e=await t.request("screen");n.current=e,r({supported:!0,held:!0,error:null}),(0,R.cY)("webterm.wake-lock.acquired"),e.addEventListener("release",()=>{n.current=null,r(e=>({...e,held:!1})),(0,R.cY)("webterm.wake-lock.auto-released")})}catch(t){let e=t instanceof Error?t.message:String(t);r({supported:!0,held:!1,error:e}),(0,R.cY)("webterm.wake-lock.acquire-failed",{reason:e})}},o=async()=>{let e=n.current;if(e&&!e.released){try{await e.release(),(0,R.cY)("webterm.wake-lock.released")}catch(e){}n.current=null,r(e=>({...e,held:!1}))}};e?a():o();let l=()=>{"visible"===document.visibilityState&&s.current&&a()};return document.addEventListener("visibilitychange",l),()=>{document.removeEventListener("visibilitychange",l),o()}},[e]),t}(e&&t);return(0,a.useEffect)(()=>{if(e)try{"1"===window.localStorage.getItem(ew)&&r(!0)}catch(e){}},[e]),{on:t,status:n,toggle:()=>{r(e=>{let t=!e;try{window.localStorage.setItem(ew,t?"1":"0")}catch(e){}return(0,R.cY)("pwa.topbar.wake-lock.toggle",{next:t}),t})}}}function ej(e){let{onToggleSidebar:t,sidebarOpen:r,activity:s,onCompactView:o,sheetMode:d=!1,wakeControl:u}=e,{sessionId:m,config:h}=(0,Y.Q)(),{theme:f,setTheme:p}=(0,F.D)(),[b,x]=(0,a.useState)(d),[g,v]=(0,a.useState)(!1),w=ey(!u),{on:y,status:j,toggle:k}=null!=u?u:w;(0,a.useEffect)(()=>{if(!o)return;let e=()=>v(window.innerWidth<=q.u);return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[o]);let N=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(!b||d)return;let e=e=>{N.current&&(N.current.contains(e.target)||x(!1))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[b,d]);let E=async()=>{if(m)try{await navigator.clipboard.writeText(m),Z.oR.success("Session id copied"),(0,R.cY)("pwa.topbar.session-copy",{sessionId:m})}catch(e){Z.oR.error("Copy failed"),(0,R.cY)("pwa.topbar.session-copy-error",{err:String(e)})}};return(0,n.jsxs)("header",{className:d?"flex flex-col gap-2 text-xs":"flex h-9 shrink-0 items-center gap-1 border-b border-border bg-background px-2 text-xs",children:[!d&&(0,n.jsxs)("button",{type:"button",onClick:t,"aria-label":r?"close menu":"open menu",title:r?"close menu":"open menu",className:"flex shrink-0 items-center gap-1.5 rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground",children:[r?(0,n.jsx)(i.A,{className:"h-4 w-4"}):(0,n.jsx)(D.A,{className:"h-4 w-4"}),(0,n.jsx)("span",{className:"hidden text-[11px] font-medium leading-none sm:inline",children:r?"닫기":"메뉴"})]}),d?(0,n.jsx)("div",{className:"w-full",children:(0,n.jsx)(eu,{})}):(0,n.jsx)(eu,{}),s&&(0,n.jsx)(eh,{snapshot:s}),(0,n.jsxs)("div",{className:d?"flex flex-wrap items-center gap-2":"ml-auto flex items-center gap-1",children:[o&&g&&(0,n.jsx)("button",{type:"button",onClick:o,className:"rounded-md px-2 py-1 text-muted-foreground hover:bg-accent hover:text-foreground",children:"간소하게 보기"}),(0,n.jsx)(ev,{}),(0,n.jsx)(l(),{href:"/","aria-label":"voice",title:"voice (HTTPS Tailscale Serve 필요)",className:"rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground",onClick:()=>(0,R.cY)("pwa.topbar.voice-link"),children:(0,n.jsx)(H.A,{className:"h-4 w-4"})}),(0,n.jsxs)("div",{ref:N,className:d?"w-full":"relative",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>x(e=>!e),"aria-expanded":d?b:void 0,"aria-label":"settings",title:"session ".concat(m?m.slice(0,8):"—"," \xb7 theme ").concat(f),className:(0,c.cn)("rounded-md p-1.5 hover:bg-accent",d&&"flex items-center",b?"bg-accent text-foreground":"text-muted-foreground hover:text-foreground"),children:[(0,n.jsx)(W.A,{className:"h-4 w-4"}),d&&(0,n.jsx)("span",{className:"ml-1",children:"설정"})]}),b&&(0,n.jsxs)("div",{className:d?"w-full rounded-md border border-border bg-popover p-2":"absolute right-0 top-full z-50 mt-1 min-w-[240px] rounded-md border border-border bg-popover p-2 shadow-md",children:[(0,n.jsxs)("div",{className:"mb-2 border-b border-border pb-2",children:[(0,n.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-muted-foreground",children:"session"}),(0,n.jsxs)("button",{type:"button",onClick:E,className:"flex w-full items-center justify-between rounded border border-border bg-card px-2 py-1 font-mono text-[11px] hover:bg-secondary",title:"click to copy",children:[(0,n.jsx)("span",{className:"truncate",children:m||"— (not connected)"}),(0,n.jsx)(B.A,{className:"ml-2 h-3 w-3 shrink-0"})]}),h.provider&&(0,n.jsxs)("div",{className:"mt-1 text-[11px] text-muted-foreground",children:["provider: ",(0,n.jsx)("span",{className:"font-medium text-foreground",children:h.provider})]})]}),j.supported&&(0,n.jsxs)("div",{className:"mb-2 border-b border-border pb-2",children:[(0,n.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-muted-foreground",children:"screen"}),(0,n.jsxs)("button",{type:"button",onClick:k,className:(0,c.cn)("flex w-full items-center justify-between rounded-sm px-2 py-1 text-xs hover:bg-accent",y&&"bg-accent text-accent-foreground"),title:y?"화면 깨움 해제":"화면 깨움 유지",children:[(0,n.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,n.jsx)(_.A,{className:(0,c.cn)("h-3.5 w-3.5",y&&"text-amber-500"),"aria-hidden":!0}),"Wake Lock"]}),(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground",children:j.held?"held":y?"requested":"off"})]}),j.error&&(0,n.jsx)("p",{className:"mt-1 truncate text-[10px] text-rose-500",title:j.error,children:j.error})]}),(0,n.jsxs)("div",{className:"mb-1",children:[(0,n.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-muted-foreground",children:"theme"}),(0,n.jsx)("ul",{className:"max-h-56 overflow-auto",children:F.z.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",className:(0,c.cn)("flex w-full items-center justify-between rounded-sm px-2 py-1 text-xs hover:bg-accent",e===f&&"bg-accent text-accent-foreground"),onClick:()=>{p(e),(0,R.cY)("pwa.topbar.theme",{theme:e})},children:[(0,n.jsx)("span",{className:"truncate",children:e}),e===f&&(0,n.jsx)("span",{className:"ml-2 text-[10px]",children:"✓"})]})},e))})]}),(0,n.jsx)("div",{className:"mt-2 border-t border-border pt-2",children:(0,n.jsx)(l(),{href:"/settings",className:"block rounded px-2 py-1 text-[11px] text-muted-foreground hover:bg-accent hover:text-foreground",onClick:()=>x(!1),children:"full settings →"})})]})]})]})]})}var ek=r(46586);function eN(e){var t,r;let{onToggleSidebar:o,sidebarOpen:l,activity:d,setWide:c,wakeControl:u}=e,[m,h]=(0,a.useState)(!1),f=ey(!u),p=(0,a.useRef)(null),b=(0,a.useRef)(null),g=(0,s.usePathname)(),v=(0,et.tg)(),w=v&&(0,eo.ub)(v.state).find(e=>e.id===v.state.activeId),y=(null!=g?g:"/").replace(/\/+$/,"")||"/",j=(null==w?void 0:w.kind)==="chat"?null!=(r=w.title)?r:"채팅":(null==w?void 0:w.kind)==="term"?"터미널":null==w?void 0:w.kind,[k,N]=(0,a.useState)(""),E=null==(t=x.Ue.find(e=>(0,x.HW)(e,y,k,x.Ue)))?void 0:t.label;return(0,a.useEffect)(()=>{if(!m)return;let e=b.current;if(!e)return;let t=()=>Array.from(e.querySelectorAll('button:not(:disabled), a[href], [tabindex]:not([tabindex="-1"])')).filter(e=>e.getClientRects().length>0);e.focus();let r=r=>{if("Escape"===r.key){r.preventDefault(),h(!1);return}if("Tab"!==r.key)return;let n=t();if(0===n.length){r.preventDefault(),e.focus();return}let a=n[0],s=n[n.length-1];r.shiftKey&&(document.activeElement===a||document.activeElement===e||!e.contains(document.activeElement))?(r.preventDefault(),s.focus()):r.shiftKey||document.activeElement!==s&&e.contains(document.activeElement)||(r.preventDefault(),a.focus())},n=r=>{var n;e.contains(r.target)||(null!=(n=t()[0])?n:e).focus()};return document.addEventListener("keydown",r,!0),document.addEventListener("focusin",n),()=>{var e;document.removeEventListener("keydown",r,!0),document.removeEventListener("focusin",n),null==(e=p.current)||e.focus()}},[m]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("header",{className:"flex h-10 max-h-11 shrink-0 items-center gap-2 border-b border-border bg-background px-2 text-sm",children:[(0,n.jsx)("button",{type:"button",onClick:o,"aria-label":l?"close menu":"open menu",className:"rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground",children:l?(0,n.jsx)(i.A,{className:"h-4 w-4"}):(0,n.jsx)(D.A,{className:"h-4 w-4"})}),(0,n.jsx)("span",{className:"min-w-0 flex-1 truncate font-medium",children:"/workspace"===y&&j?j:null!=E?E:"elanous"}),(0,n.jsx)("button",{ref:p,type:"button",onClick:()=>h(!0),"aria-label":"더 보기","aria-expanded":m,"aria-controls":"compact-topbar-sheet",className:"rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground",children:(0,n.jsx)(ek.A,{className:"h-4 w-4"})})]}),m&&(0,n.jsxs)("div",{className:"fixed inset-0 z-50",children:[(0,n.jsx)("button",{type:"button","aria-label":"시트 닫기",className:"absolute inset-0 bg-black/40",onClick:()=>h(!1)}),(0,n.jsxs)("div",{ref:b,id:"compact-topbar-sheet",role:"dialog","aria-modal":"true","aria-label":"더 보기",tabIndex:-1,className:"absolute inset-x-0 bottom-0 max-h-[85dvh] overflow-y-auto rounded-t-xl border border-border bg-background p-4 shadow-lg",children:[(0,n.jsxs)("div",{className:"mb-2 flex items-center justify-between",children:[(0,n.jsx)("span",{className:"font-medium",children:"더 보기"}),(0,n.jsx)("button",{type:"button","aria-label":"시트 닫기",onClick:()=>h(!1),className:"rounded p-2",children:(0,n.jsx)(i.A,{className:"h-4 w-4"})})]}),(0,n.jsx)(ej,{sheetMode:!0,onToggleSidebar:o,sidebarOpen:l,activity:d,wakeControl:null!=u?u:f}),(0,n.jsx)("button",{type:"button",className:"mt-3 w-full rounded-md border border-border px-3 py-2 text-left text-sm hover:bg-accent",onClick:()=>{h(!1),c(!0)},children:"넓게 보기"})]})]})]})}function eE(){var e,t;let r=(0,s.usePathname)(),o=(0,u.In)(),{showBeta:d}=(0,b.hj)(),c=f(),[m,h]=(0,a.useState)({showLabs:!1,showHidden:!1}),[g,w]=(0,a.useState)(null),y=(0,a.useRef)(null),j=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=()=>h({showLabs:(0,v.fG)(x.f4),showHidden:(0,v.fG)(x.vm)});return e(),window.addEventListener(v.OY,e),window.addEventListener("storage",e),()=>{window.removeEventListener(v.OY,e),window.removeEventListener("storage",e)}},[]),(0,a.useEffect)(()=>{var e;if(!g)return;null==(e=j.current)||e.focus();let t=e=>{if("Escape"===e.key){e.preventDefault(),w(null);return}if("Tab"!==e.key||!j.current)return;let t=Array.from(j.current.querySelectorAll("a[href], button:not(:disabled)"));if(!t.length)return;let r=t[0],n=t[t.length-1];e.shiftKey&&(document.activeElement===r||document.activeElement===j.current)?(e.preventDefault(),n.focus()):e.shiftKey||document.activeElement!==n||(e.preventDefault(),r.focus())},r=e=>{j.current&&!j.current.contains(e.target)&&j.current.focus()};return document.addEventListener("keydown",t),document.addEventListener("focusin",r),()=>{var e;document.removeEventListener("keydown",t),document.removeEventListener("focusin",r),null==(e=y.current)||e.focus()}},[g]);let k=(0,x.Ye)(x.Ue,m,o,c,{showBeta:d}),N=new Set([...k.main,...k.labs,...k.hidden]),E=x.Ue.filter(e=>N.has(e)),S=x.Hw.map(e=>({...e,items:E.filter(t=>t.group===e.id)})).filter(e=>e.items.length>0),A=S.filter(e=>e.bottomTab),L=S.filter(e=>!e.bottomTab).sort((e,t)=>Number("ops"===t.id)-Number("ops"===e.id)),C=(null!=r?r:"/").replace(/\/+$/,"")||"/",I=e=>{var t;return C===e.href||"/"!==e.href&&C.startsWith("".concat(e.href,"/"))||(null!=(t=e.activeAlso)?t:[]).some(e=>C===e||C.startsWith("".concat(e,"/")))},P=S.find(e=>e.items.some(I)),Y="more"===g?L:S.filter(e=>e.id===g);return(0,a.useEffect)(()=>{g&&!Y.length&&w(null)},[g,Y.length]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("nav",{"aria-label":"아래 탭",className:"h-[calc(3.5rem+env(safe-area-inset-bottom))] shrink-0 border-t border-border bg-background pb-[env(safe-area-inset-bottom)]",children:(0,n.jsxs)("div",{className:"flex h-full items-stretch",children:[A.map(e=>{let t=e.icon,r=(null==P?void 0:P.id)===e.id,a="flex min-w-0 flex-1 flex-col items-center justify-center gap-0.5 text-xs ".concat(r?"font-semibold text-primary":"text-muted-foreground");return 1===e.items.length?(0,n.jsxs)(l(),{href:e.items[0].href,"aria-label":e.label,"aria-current":r?"page":void 0,className:a,children:[(0,n.jsx)(t,{"aria-hidden":!0,className:"h-5 w-5"}),(0,n.jsx)("span",{children:e.label}),"general"===o&&d&&"/settings"!==e.items[0].href&&"beta"===(0,p.dY)(e.items[0].href)&&(0,n.jsx)("span",{className:"text-[10px] text-primary",children:"실험"})]},e.id):(0,n.jsxs)("button",{type:"button","aria-label":e.label,"aria-expanded":g===e.id,"aria-controls":"mobile-nav-sheet",onClick:t=>{y.current=t.currentTarget,w(e.id)},className:a,children:[(0,n.jsx)(t,{"aria-hidden":!0,className:"h-5 w-5"}),(0,n.jsx)("span",{children:e.label})]},e.id)}),(0,n.jsxs)("button",{type:"button","aria-label":"더보기","aria-expanded":"more"===g,"aria-controls":"mobile-nav-sheet",onClick:e=>{y.current=e.currentTarget,w("more")},className:"flex min-w-0 flex-1 flex-col items-center justify-center gap-0.5 text-xs ".concat(P&&!P.bottomTab?"font-semibold text-primary":"text-muted-foreground"),children:[(0,n.jsx)(ek.A,{"aria-hidden":!0,className:"h-5 w-5"}),(0,n.jsx)("span",{children:"더보기"})]})]})}),g&&Y.length>0&&(0,n.jsxs)("div",{className:"fixed inset-0 z-50",children:[(0,n.jsx)("button",{type:"button","aria-label":"메뉴 닫기",className:"absolute inset-0 bg-black/40",onClick:()=>w(null)}),(0,n.jsxs)("div",{ref:j,id:"mobile-nav-sheet",role:"dialog","aria-modal":"true","aria-label":"more"===g?"더보기":null==(e=S.find(e=>e.id===g))?void 0:e.label,tabIndex:-1,className:"absolute inset-x-0 bottom-0 max-h-[85dvh] overflow-y-auto rounded-t-xl border border-border bg-background px-4 pt-3 pb-[calc(1rem+env(safe-area-inset-bottom))] shadow-lg",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between",children:[(0,n.jsx)("span",{className:"font-semibold",children:"more"===g?"더보기":null==(t=S.find(e=>e.id===g))?void 0:t.label}),(0,n.jsx)("button",{type:"button","aria-label":"메뉴 닫기",onClick:()=>w(null),className:"rounded-md p-2",children:(0,n.jsx)(i.A,{"aria-hidden":!0,className:"h-5 w-5"})})]}),Y.map(e=>(0,n.jsxs)("section",{"aria-label":e.label,className:"mt-2",children:["more"===g&&e.items.length>1&&(0,n.jsx)("h2",{className:"px-2 py-1 text-xs font-semibold text-muted-foreground",children:e.label}),e.items.map(e=>{let t=e.icon,r="general"===o&&d&&"/settings"!==e.href&&"beta"===(0,p.dY)(e.href);return(0,n.jsxs)(l(),{href:e.href,"aria-current":I(e)?"page":void 0,onClick:()=>w(null),className:"flex items-center gap-3 rounded-md px-3 py-3 text-sm hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,n.jsx)(t,{"aria-hidden":!0,className:"h-4 w-4"}),e.label,r&&(0,n.jsx)("span",{className:"rounded border border-primary/40 px-1 text-[10px] text-primary",children:"실험"})]},e.href)})]},e.id))]})]})]})}var eS=r(89709),eA=r(59587),eL=r(99426),eC=r(11986);let eI="elanous.pwa.installBanner.dismissedAt";function eP(){try{return window.localStorage}catch(e){return null}}function eY(e){let t=eP();if(t)try{t.setItem(eI,String(e))}catch(e){}}function ez(){return(0,n.jsx)(a.Suspense,{fallback:null,children:(0,n.jsx)(eR,{})})}function eR(){let[e,t]=(0,a.useState)(!1),[r,o]=(0,a.useState)("unsupported"),[l,d]=(0,a.useState)(null),c=(0,s.usePathname)(),{compact:u}=(0,q.K)(),m=(0,eC.$5)(),h=(0,s.useSearchParams)(),f=null==h?void 0:h.get("capture"),p=null==h?void 0:h.get("demo"),b=(0,a.useRef)(!1),x=(0,a.useRef)("unsupported"),g=e=>{var r,n;let a=null;try{a=window.localStorage.getItem("elanous.inside.demo")}catch(e){}let s=(n={now:Date.now(),standalone:function(){let e=!0===window.navigator.standalone,t=!1;try{var r,n,a;t=(null==(n=(a=window).matchMedia)||null==(r=n.call(a,"(display-mode: standalone)"))?void 0:r.matches)===!0}catch(e){}return e||t}(),platform:e,dismissedAt:function(){let e=eP();if(!e)return null;let t=e.getItem(eI);if(null===t)return null;let r=Number(t);return Number.isFinite(r)?r:null}(),quiet:null!=(r=window.location)&&!!r.href&&function(e,t){let r=new URL(e);if("public"===r.searchParams.get("capture"))return!0;let n=r.pathname.replace(/\/+$/,"");if("/inside"!==n&&"/app/inside"!==n)return!1;let a=r.searchParams.get("demo");return null!==a?"1"===a:"1"===t}(window.location.href,a)}).quiet?{show:!1,reason:"quiet"}:n.standalone?{show:!1,reason:"standalone"}:"unsupported"===n.platform?{show:!1,reason:"unsupported"}:null!==n.dismissedAt&&n.now-n.dismissedAt<6048e5?{show:!1,reason:"recently-dismissed"}:{show:!0,reason:"show"};return t(s.show&&!b.current),s};(0,a.useEffect)(()=>{let e=e=>{e.preventDefault(),d(e),x.current="beforeInstallPromptCapable",o(x.current);let t=g(x.current);(0,R.cY)("pwa.install-banner.beforeinstallprompt",{decision:t})};window.addEventListener("beforeinstallprompt",e);let r=function(e,t){if(t)return"beforeInstallPromptCapable";if("string"!=typeof e||0===e.length)return"unsupported";let r=/iPad|iPhone|iPod/.test(e),n=/Safari/.test(e)&&!/CriOS|FxiOS|EdgiOS/.test(e);return r&&n?"iosSafari":"unsupported"}(navigator.userAgent,!1);x.current=r,o(r);let n=g(r);(0,R.cY)("pwa.install-banner.mount",{platform:r,decision:n});let a=()=>{b.current=!0,t(!1),(0,R.cY)("pwa.install-banner.appinstalled")},s=()=>{g(x.current)};return window.addEventListener("appinstalled",a),window.addEventListener("elanous:inside-demo",s),()=>{window.removeEventListener("beforeinstallprompt",e),window.removeEventListener("appinstalled",a),window.removeEventListener("elanous:inside-demo",s)}},[]),(0,a.useEffect)(()=>{g(x.current)},[c,f,p]);let v=async()=>{if(l)try{await l.prompt();let e=await l.userChoice;(0,R.cY)("pwa.install-banner.userChoice",{outcome:e.outcome}),"dismissed"===e.outcome&&(eY(Date.now()),t(!1))}catch(e){(0,R.cY)("pwa.install-banner.prompt-error",{reason:String(e)})}finally{d(null)}};return!e||m||"/chat"===c&&u?null:(0,n.jsx)("div",{role:"dialog","aria-label":"Install elanous to home screen","data-testid":"install-banner",className:"shrink-0 border-t border-border bg-card/95 px-4 py-3 shadow-lg backdrop-blur",children:(0,n.jsxs)("div",{className:"mx-auto flex max-w-2xl items-start gap-3",children:[(0,n.jsx)("div",{className:"mt-0.5 inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-primary/30 bg-primary/10 text-primary",children:(0,n.jsx)(eA.A,{className:"h-4 w-4"})}),(0,n.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,n.jsx)("p",{className:"text-sm font-medium",children:"elanous 를 홈 화면에 추가하세요"}),"iosSafari"===r?(0,n.jsxs)("p",{className:"mt-1 text-[12px] leading-relaxed text-muted-foreground",children:[(0,n.jsx)(eL.A,{className:"inline-block h-3.5 w-3.5 align-text-bottom"})," 공유 버튼 →",(0,n.jsx)("span",{className:"mx-1 rounded bg-muted px-1 font-mono text-[11px]",children:"홈 화면에 추가"}),"로 PWA 로 사용. 알림 \xb7 카메라 \xb7 백그라운드 모두 활성화."]}):(0,n.jsx)("p",{className:"mt-1 text-[12px] leading-relaxed text-muted-foreground",children:"한 번의 클릭으로 PWA 설치 — 알림 \xb7 백그라운드 turn 보장."})]}),(0,n.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:["beforeInstallPromptCapable"===r&&l&&(0,n.jsx)("button",{type:"button",onClick:()=>{v()},className:"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90","data-testid":"install-banner-install",children:"설치"}),(0,n.jsx)("button",{type:"button",onClick:()=>{t(!1),eY(Date.now()),(0,R.cY)("pwa.install-banner.dismiss")},"aria-label":"dismiss install banner","data-testid":"install-banner-dismiss",className:"inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground",children:(0,n.jsx)(i.A,{className:"h-4 w-4"})})]})]})})}var e$=r(65650),eM=r(57147);function eU(){let e=(0,s.usePathname)(),t=(0,e$._r)(),r=null==e||t.isError||t.isPending||t.isLoading?null:(0,eM.C)(t.data,e);return r?(0,n.jsxs)("div",{role:"status","data-testid":"setup-mode-banner",className:"flex items-center justify-between gap-3 border-b border-border bg-muted px-3 py-1.5 text-xs text-foreground",children:[(0,n.jsx)("span",{children:r}),(0,n.jsx)(l(),{href:"/setup",className:"shrink-0 font-semibold underline underline-offset-2",children:"/setup"})]}):null}var eO=r(18068);function eT(){let[e,t]=(0,a.useState)(!1);return((0,a.useEffect)(()=>(0,eO.dJ)(()=>t(!0)),[]),e)?(0,n.jsxs)("div",{role:"alert","data-testid":"auth-required-banner",className:"flex items-center justify-between gap-3 border-b border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-foreground",children:[(0,n.jsx)("span",{children:"이 기기는 아직 데몬에 연결되지 않았습니다(인증 필요). 연결된 기기의 설정 › 연결 토큰 만들기 에서 토큰을 만들어, 이 기기의 설정 › 데몬 연결 › 연결 토큰 칸에 붙여 넣으세요."}),(0,n.jsx)(l(),{href:"/settings",className:"shrink-0 font-semibold underline underline-offset-2",children:"/settings"}),(0,n.jsx)("button",{type:"button","aria-label":"연결 안내 닫기",onClick:()=>{(0,eO.SI)(),t(!1)},className:"shrink-0 rounded px-2 py-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring",children:"닫기"})]}):null}let eD=null;function eH(){let{confirm:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:t}=(0,Y.Q)(),[r,s]=(0,a.useState)([]),[o,l]=(0,a.useState)(!1),[i,d]=(0,a.useState)(!1),[c,u]=(0,a.useState)(""),m=(0,a.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!e&&eD&&Date.now()-eD.at<6e5)return void s(eD.items);try{let e=await t.fetchResponse("/v1/skills/problems"),r=e.ok?await e.json():{},n=Array.isArray(r.items)?r.items:[];eD={at:Date.now(),items:n},s(n)}catch(e){s([])}},[t]);if((0,a.useEffect)(()=>{m()},[m]),!r.length&&!c)return null;let h=r.filter(e=>e.fixable);async function f(){if(!(null!=e?e:e=>window.confirm(e))("다른 도구의 스킬 파일입니다. 고칠 수 있는 것만 고칠까요? (고치기 전 원본은 남겨 둡니다)"))return;d(!0);let r=0;for(let e of h)try{(await t.fetchResponse("/v1/skills/problems/repair",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:e.id})})).ok&&(r+=1)}catch(e){}d(!1),u("".concat(r,"개를 고쳤습니다.")),await m(!0)}return(0,n.jsxs)("div",{role:"status","data-testid":"skill-problems-banner",className:"border-b border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-foreground",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[r.length>0?(0,n.jsx)("span",{children:"스킬 ".concat(r.length,"개를 읽지 못했습니다.")}):(0,n.jsx)("span",{children:c}),h.length>0&&(0,n.jsx)("button",{type:"button",disabled:i,onClick:()=>{f()},className:"rounded border px-2 py-0.5 font-medium disabled:opacity-50",children:"고치기"}),r.some(e=>!e.fixable)&&(0,n.jsx)("button",{type:"button",onClick:()=>l(e=>!e),className:"underline underline-offset-2",children:o?"접기":"왜 못 고치나"}),r.length>0&&c&&(0,n.jsx)("span",{className:"text-muted-foreground",children:c})]}),o&&(0,n.jsx)("ul",{className:"mt-1 space-y-0.5 text-xs text-muted-foreground",children:r.filter(e=>!e.fixable).map(e=>{var t;return(0,n.jsxs)("li",{className:"break-words",children:["\xb7 ",e.name," — ",null!=(t=e.hint)?t:"파일을 직접 확인해 주세요."]},e.id)})})]})}let eW="elanous.pwa.sidebarOpen";function eB(e){let{children:t,activity:r}=e,[o,l]=(0,a.useState)(!1),{compact:i,setWide:d}=(0,q.K)(),c=(0,s.usePathname)(),u=i&&"/chat"===c,m=ey(),h=(0,eS.DE)(),f=null!=r?r:h,p=(0,s.usePathname)(),b=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=function(e,t,r,n){var a;let s=function(e,t){var r,n;let a=(null!=(r=e.split(/[?#]/)[0])?r:"/").replace(/\/+$/,"")||"/",s=null;for(let e of t){let t=e.href.split("?")[0].replace(/\/+$/,"")||"/";("/"===t?"/"===a:a===t||a.startsWith("".concat(t,"/")))&&(!s||t.length>s.href.length)&&(s={...e,href:t})}return s?{tab:s.href,visibility:null!=(n=s.visibility)?n:"public"}:{tab:"other",visibility:"other"}}(t,n);return e&&e.tab===s.tab?null:{record:{tab:s.tab,visibility:s.visibility,from:null!=(a=null==e?void 0:e.tab)?a:null,dwellMs:e?Math.max(0,r-e.at):null},next:{tab:s.tab,at:r}}}(b.current,null!=p?p:"/",Date.now(),x.Ue);e&&(b.current=e.next,(0,R.cY)("pwa.nav.visit",e.record))},[p]),(0,a.useEffect)(()=>{let e=()=>{let e=b.current;"hidden"===document.visibilityState&&e&&((0,R.cY)("pwa.nav.leave",{tab:e.tab,dwellMs:Math.max(0,Date.now()-e.at)}),b.current={tab:e.tab,at:1/0})},t=()=>{"visible"===document.visibilityState&&b.current&&!Number.isFinite(b.current.at)&&(b.current={tab:b.current.tab,at:Date.now()})};return document.addEventListener("visibilitychange",e),document.addEventListener("visibilitychange",t),()=>{document.removeEventListener("visibilitychange",e),document.removeEventListener("visibilitychange",t)}},[]),(0,a.useEffect)(()=>{"1"===window.localStorage.getItem(eW)&&l(!0)},[]);let g=()=>{l(e=>{let t=!e;return window.localStorage.setItem(eW,t?"1":"0"),t})},v=()=>{l(!1),window.localStorage.setItem(eW,"0")};return(0,n.jsx)(et.$M,{children:(0,n.jsxs)("div",{className:"flex h-screen w-full flex-col bg-background text-foreground",children:[!u&&(0,n.jsx)(eT,{}),!u&&(0,n.jsx)(eU,{}),!u&&(0,n.jsx)(eH,{}),!u&&(i?(0,n.jsx)(eN,{onToggleSidebar:g,sidebarOpen:o,activity:f,setWide:d,wakeControl:m}):(0,n.jsx)(ej,{onToggleSidebar:g,sidebarOpen:o,activity:f,onCompactView:()=>d(!1),wakeControl:m})),(0,n.jsxs)("div",{className:"flex flex-1 min-h-0",children:[o?(0,n.jsx)("aside",{className:"hidden md:flex md:w-56 md:flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground",children:(0,n.jsx)(O,{onNavigate:v,onClose:v})}):(0,n.jsx)("aside",{className:"hidden md:flex md:w-10 md:flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground",children:(0,n.jsx)(O,{onNavigate:v,compact:!0})}),o&&!u&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{type:"button","aria-label":"close menu",className:"fixed inset-0 z-30 bg-black/40 md:hidden",onClick:v}),(0,n.jsx)("aside",{className:i?"fixed left-0 top-10 z-40 h-[calc(100vh-2.5rem)] w-56 border-r border-sidebar-border bg-sidebar text-sidebar-foreground md:hidden":"fixed left-0 top-9 z-40 h-[calc(100vh-2.25rem)] w-56 border-r border-sidebar-border bg-sidebar text-sidebar-foreground md:hidden",children:(0,n.jsx)(O,{onNavigate:v,onClose:v})})]}),(0,n.jsx)("main",{className:"flex-1 overflow-auto min-w-0",children:t})]}),(0,n.jsx)(ez,{}),i&&(0,n.jsx)(eE,{})]})})}},97479:(e,t,r)=>{"use strict";r.d(t,{GC:()=>a,In:()=>d,OG:()=>l});var n=r(46124);let a="elanous.pwa.role",s="elanous:pwa-role";function o(){try{let e=window.localStorage.getItem(a);if("owner"===e||"contributor"===e||"general"===e)return e}catch(e){}return"general"}function l(e){try{window.localStorage.setItem(a,e)}catch(e){}"function"==typeof window.dispatchEvent&&window.dispatchEvent(new Event(s))}function i(e){if("function"!=typeof window.addEventListener)return()=>{};window.addEventListener(s,e);let t=t=>{(t.key===a||null===t.key)&&e()};return window.addEventListener("storage",t),()=>{window.removeEventListener(s,e),window.removeEventListener("storage",t)}}function d(){return(0,n.useSyncExternalStore)(i,o,()=>"general")}},98651:()=>{}},e=>{e.O(0,[7840,421,211,3324,3558,7327,1501,1612,9103,8060,9247,2699,5977,1986,8695,2463,2196,7358],()=>e(e.s=77008)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{7456:(e,t,r)=>{"use strict";r.d(t,{Er:()=>a,cj:()=>d,dc:()=>o,yR:()=>i});let n=/^(oauth\.|harness\.decision|llm\.router)/;function a(e){let t=[],r=e=>{"string"==typeof e&&e.trim()&&!t.includes(e.trim())&&t.push(e.trim())};for(let t of e){var a;let e=null!=(a=t.data)?a:{};if(t.category.startsWith("oauth.")){for(let t of["from","to","name","account"])r(e[t]);if(Array.isArray(e.usage))for(let t of e.usage)r(null==t?void 0:t.name);continue}if(n.test(t.category))for(let t of(r(e.account),["what","why","reason"])){let n=e[t];if("string"==typeof n)for(let e of n.matchAll(/계정\s+([A-Za-z0-9][\w.-]*)/g))r(e[1])}}return t}function s(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function o(e){let t=new Map(e.map((e,t)=>[e,"account-".concat(t+1)])),r=e.length?RegExp("(^|[^\\w-])(".concat(e.map(s).sort((e,t)=>t.length-e.length).join("|"),")(?![\\w-])"),"g"):null,n=new Map;return(e,a)=>{let s=e.replace(/\b[a-z0-9-]+\.tail[0-9a-f]+\.ts\.net\b/gi,"tailnet-host").replace(/\bmsb\d+\b/gi,e=>(e=>{let t=e.toLowerCase();n.has(t)||n.set(t,"remote-".concat(n.size+1));let r=n.get(t);return e===e.toUpperCase()?r.toUpperCase():r})(e)).replace(/\bmbp\b/gi,e=>e===e.toUpperCase()?"LOCAL":"local").replace(/\/Users\/[^/\s"']+/g,"~").replace(/(크레딧|credits?|💳)(\s*[:=]?\s*)[\d][\d,.]*/gi,"$1$2•••").replace(/[\d][\d,.]*(\s*)(크레딧|credits?)/gi,"•••$1$2").replace(/\$\s?[\d][\d,.]*/g,"$•••").replace(/(잔량?|remaining|left)(\s*[:=]?\s*)(?:[A-Za-z0-9][\w.-]*\s+)?\d+(?:\.\d+)?\s?%/gi,"$1$2•••");return a&&r&&(s=s.replace(r,(e,r,n)=>{var a;return"".concat(r).concat(null!=(a=t.get(n))?a:"account")})),s}}function l(e,t){if("string"==typeof e)return t(e);if(Array.isArray(e))return e.map(e=>l(e,t));if(e&&"object"==typeof e){let r={};for(let[n,a]of Object.entries(e))"apiEquivalentUsd"===n||"usd"===n||/credit(s|Balance)?$/i.test(n)||(r[n]=l(a,t));return r}return e}function i(e){let t=o(a(e));return e.map(e=>{let r=n.test(e.category);return{...e,event:t(e.event,!1),data:e.data?l(e.data,e=>t(e,r)):e.data}})}function d(e,t){let r=o(t);return l(e,e=>r(e,!0))}},8219:(e,t,r)=>{"use strict";r.d(t,{MaturityBanner:()=>l});var n=r(55539),a=r(46124),s=r(58603),o=r(92161);function l(){let e=(0,s.usePathname)(),t=(null==e?void 0:e.replace(/\/+$/,""))==="/inside"||(null==e?void 0:e.replace(/\/+$/,""))==="/app/inside",[r,l]=(0,a.useState)(null);(0,a.useEffect)(()=>{if(!t)return;let e=()=>l(function(){let e=new URL(window.location.href).searchParams.get("demo");if(null!==e)return"1"===e;try{return"1"===window.localStorage.getItem("elanous.inside.demo")}catch(e){return!1}}());return e(),window.addEventListener("elanous:inside-demo",e),()=>window.removeEventListener("elanous:inside-demo",e)},[t]);let i=(0,o.dY)(t?"/inside":null!=e?e:"");return t&&!0===r||"beta"!==i&&"broken"!==i?null:(0,n.jsx)("div",{role:"status",className:"border-b border-border bg-muted px-4 py-2 text-sm text-foreground",children:"beta"===i?"베타 — 화면과 동작이 바뀔 수 있습니다.":"이 화면은 지금 고치는 중입니다."})}},9086:(e,t,r)=>{"use strict";r.d(t,{ToastProvider:()=>m});var n=r(55539),a=r(69122),s=r(67327),o=r(3004),l=r(16199),i=r(81694),d=r(72937),c=r(76573);let u=e=>{let{...t}=e,{theme:r="system"}=(0,a.D)();return(0,n.jsx)(s.l$,{theme:r,className:"toaster group",icons:{success:(0,n.jsx)(o.A,{className:"size-4"}),info:(0,n.jsx)(l.A,{className:"size-4"}),warning:(0,n.jsx)(i.A,{className:"size-4"}),error:(0,n.jsx)(d.A,{className:"size-4"}),loading:(0,n.jsx)(c.A,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},toastOptions:{classNames:{toast:"cn-toast"}},...t})};function m(e){let{children:t}=e;return(0,n.jsxs)(n.Fragment,{children:[t,(0,n.jsx)(u,{})]})}},11986:(e,t,r)=>{"use strict";r.d(t,{$5:()=>d,dJ:()=>c});var n=r(46124);let a=new Set,s=new Set;function o(e,t){if(t!==a.has(e))for(let r of(t?a.add(e):a.delete(e),s))r()}function l(){return a.size>0}function i(e){return s.add(e),()=>{s.delete(e)}}function d(){return(0,n.useSyncExternalStore)(i,l,()=>!1)}function c(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];(0,n.useEffect)(()=>(o(e,t),()=>o(e,!1)),[e,t])}},17115:(e,t,r)=>{Promise.resolve().then(r.t.bind(r,98651,23)),Promise.resolve().then(r.bind(r,15151)),Promise.resolve().then(r.bind(r,24669)),Promise.resolve().then(r.bind(r,58839)),Promise.resolve().then(r.bind(r,17467)),Promise.resolve().then(r.bind(r,66894)),Promise.resolve().then(r.bind(r,57040)),Promise.resolve().then(r.bind(r,9086)),Promise.resolve().then(r.bind(r,83961)),Promise.resolve().then(r.bind(r,8219)),Promise.resolve().then(r.bind(r,60903)),Promise.resolve().then(r.t.bind(r,18536,23))},17467:(e,t,r)=>{"use strict";r.d(t,{OperatorRoleDefault:()=>o});var n=r(46124),a=r(15151),s=r(31843);function o(){let{config:e}=(0,a.Q)(),t=e.baseUrl;return(0,n.useEffect)(()=>{(0,s.Un)({baseUrl:t,storage:window.localStorage})},[t]),null}},24669:(e,t,r)=>{"use strict";r.d(t,{NewBuildBanner:()=>d});var n=r(55539),a=r(46124),s=r(72215);let o=/\\?"b\\?":\\?"([A-Za-z0-9_-]{8,})\\?"/;function l(e){var t,r;return null!=(r=null==(t=o.exec(e))?void 0:t[1])?r:null}function i(e,t){return null!==e&&null!==t&&e!==t}function d(){let[e,t]=(0,a.useState)(null),[r,o]=(0,a.useState)(null);return((0,a.useEffect)(()=>{let e=function(){for(let e of Array.from(document.scripts)){let t=e.textContent?l(e.textContent):null;if(t)return t}return null}();o(e);let r=!1,n=async()=>{if("visible"===document.visibilityState)try{let n=await fetch("/app/",{cache:"no-store"});if(!n.ok)return;let a=l(await n.text());if(r)return;t(a),i(e,a)&&(0,s.cY)("pwa.new-build.detected",{current:e,served:a})}catch(e){}},a=window.setInterval(()=>{n()},12e4),d=()=>{n()};return document.addEventListener("visibilitychange",d),n(),()=>{r=!0,window.clearInterval(a),document.removeEventListener("visibilitychange",d)}},[]),i(r,e))?(0,n.jsxs)("div",{role:"status",className:"fixed inset-x-2 bottom-2 z-[60] mx-auto flex max-w-md items-center gap-3 rounded-md border border-primary/50 bg-background/95 px-3 py-2 text-sm shadow-lg","data-pwa-new-build":!0,children:[(0,n.jsx)("span",{className:"flex-1",children:"새 판이 있습니다 — 이 화면은 이전 판으로 돌고 있어요."}),(0,n.jsx)("button",{type:"button",onClick:()=>{(0,s.cY)("pwa.new-build.reload",{current:r,served:e}),window.location.reload()},className:"rounded-md bg-primary px-2 py-1 text-primary-foreground",children:"새로고침"})]}):null}},31843:(e,t,r)=>{"use strict";r.d(t,{Tp:()=>a,Un:()=>s});var n=r(97479);async function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:fetch;try{let r=await t("".concat(e.replace(/\/$/,""),"/v1/me"),{cache:"no-store"});if(!r.ok)return!1;let n=await r.json();return(null==n?void 0:n.operator)===!0}catch(e){return!1}}async function s(e){var t,r,s,o;let l=null;try{l=null!=(r=null==(t=e.storage)?void 0:t.getItem(n.GC))?r:null}catch(e){return!1}if(null!==l)return!1;let i=await a(e.baseUrl,e.fetchImpl);return o=l,!!i&&null===o&&((null!=(s=e.write)?s:n.OG)("owner"),!0)}},34781:(e,t,r)=>{"use strict";r.d(t,{MQ:()=>s,OY:()=>n,fG:()=>a});let n="elanous:nav-prefs";function a(e){try{return"1"===window.localStorage.getItem(e)}catch(e){return!1}}function s(e,t){try{t?window.localStorage.setItem(e,"1"):window.localStorage.removeItem(e)}catch(e){}try{window.dispatchEvent(new Event(n))}catch(e){}}},44373:(e,t,r)=>{"use strict";r.d(t,{cn:()=>s});var n=r(20852),a=r(30984);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))}},52982:(e,t,r)=>{"use strict";r.d(t,{hj:()=>l});var n=r(46124);let a="elanous.pwa.showBeta",s="elanous:show-beta";function o(){try{return"1"===window.localStorage.getItem(a)}catch(e){return!1}}function l(){let[e,t]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{t(o());let e=e=>{let r=e.detail;t("boolean"==typeof r?r:o())},r=e=>{(e.key===a||null===e.key)&&t(o())};return window.addEventListener(s,e),window.addEventListener("storage",r),()=>{window.removeEventListener(s,e),window.removeEventListener("storage",r)}},[]),{showBeta:e,setShowBeta:(0,n.useCallback)(e=>{t(e);try{e?window.localStorage.setItem(a,"1"):window.localStorage.removeItem(a)}catch(e){}window.dispatchEvent(new CustomEvent(s,{detail:e}))},[])}}},54664:(e,t,r)=>{"use strict";r.d(t,{i$:()=>l,nZ:()=>c,oM:()=>d,sF:()=>i});let n="elanous.showroom.layouts";function a(){return window.localStorage?window.localStorage:{getItem:()=>null,setItem:()=>{},removeItem:()=>{}}}function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a(),t=e.getItem(n);if(!t)return{};try{let e=JSON.parse(t);if(!e||"object"!=typeof e)return{};return e}catch(e){return{}}}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a(),r=JSON.stringify(e);if(r.length>102400)return{ok:!1,reason:"storage quota exceeded (".concat(r.length," > ").concat(102400,")")};try{return t.setItem(n,r),{ok:!0}}catch(e){return{ok:!1,reason:String(e)}}}async function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a();try{let{layouts:r}=await e.listShowroomLayouts(),n={};for(let e of r)n[e.name]=e;return o(n,t),{layouts:r.slice().sort((e,t)=>t.savedAt-e.savedAt),source:"daemon"}}catch(e){return{layouts:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a();return Object.values(s(e)).sort((e,t)=>t.savedAt-e.savedAt)}(t),source:"local"}}}async function i(e,t,r){var n;let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=e.trim();if(!i)return{ok:!1,reason:"name required"};let d=null!=(n=l.backend)?n:a(),c=function(e,t){var r;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=e.trim();if(!l)return{ok:!1,reason:"name required"};let i=null!=(r=n.backend)?r:a(),d=s(i),c={name:l,savedAt:Date.now(),panels:t.map(e=>({id:e.id,kind:e.kind,provider:e.provider,...e.agentBrand?{agentBrand:e.agentBrand}:{},...e.roleHint?{roleHint:e.roleHint}:{},...e.personaId?{personaId:e.personaId}:{},state:e.state})),...n.layoutMode?{layoutMode:n.layoutMode}:{}};d[l]=c;let u=o(d,i);return u.ok?{ok:!0,saved:c}:u}(i,t,l);if(!c.ok)return c;let u=0;try{let e=await r.listShowroomLayouts();if(0===e.layouts.length){let e=s(d);for(let t of Object.values(e))try{await r.saveShowroomLayout(t.name,{savedAt:t.savedAt,panels:t.panels,...t.layoutMode?{layoutMode:t.layoutMode}:{}}),u+=1}catch(e){}return{ok:!0,saved:c.saved,source:"daemon",migrated:u}}return await r.saveShowroomLayout(i,{savedAt:c.saved.savedAt,panels:c.saved.panels,...c.saved.layoutMode?{layoutMode:c.saved.layoutMode}:{}}),{ok:!0,saved:c.saved,source:"daemon",migrated:0}}catch(e){return{ok:!0,saved:c.saved,source:"local",migrated:0}}}async function d(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a(),n=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a(),r=s(t);return e.trim()in r&&(delete r[e.trim()],o(r,t),!0)}(e,r);try{return await t.deleteShowroomLayout(e),{ok:!0,source:"daemon"}}catch(e){return{ok:n,source:"local"}}}function c(e){return e.panels.map(e=>({id:e.id,kind:e.kind,provider:e.provider,...e.agentBrand?{agentBrand:e.agentBrand}:{},...e.roleHint?{roleHint:e.roleHint}:{},...e.personaId?{personaId:e.personaId}:{},sessionId:null,state:e.state}))}},57040:(e,t,r)=>{"use strict";r.d(t,{D:()=>f,ThemeProvider:()=>h,z:()=>l});var n=r(55539),a=r(46124),s=r(72215),o=r(94306);let l=["catppuccin-mocha","mocha-pastel-accent","catppuccin-latte","rose-pine-dawn","nord-light","elanous-pastel-default"],i="elanous.pwa.theme",d="dashboard.theme.active",c="catppuccin-mocha";function u(e){return"string"==typeof e&&l.includes(e)}let m=(0,a.createContext)(null);function h(e){let{children:t}=e,r=(0,o.Qj)(),[h,f]=(0,a.useState)(c),p=(0,a.useRef)(0),b=(0,a.useCallback)(e=>{f(e),document.documentElement.dataset.theme=e},[]);(0,a.useEffect)(()=>{let e=localStorage.getItem(i),t=u(e)?e:c;b(t),(0,s.cY)("webterm.provider.theme.init",{theme:t})},[b]),(0,a.useEffect)(()=>{if(!r)return;let e=!0,t=p.current;return r.getSwitch(d).then(r=>{let{switch:n}=r;e&&t===p.current&&u(n.value)&&(b(n.value),localStorage.setItem(i,n.value))}).catch(()=>void 0),()=>{e=!1}},[b,r]);let x=(0,a.useCallback)(e=>{u(e)&&(p.current+=1,b(e),localStorage.setItem(i,e),(0,s.cY)("webterm.provider.theme.set",{theme:e}),null==r||r.putSwitch(d,{value:e}).catch(()=>void 0))},[b,r]);return(0,n.jsx)(m.Provider,{value:{theme:h,setTheme:x,themes:l},children:t})}function f(){let e=(0,a.useContext)(m);if(!e)throw Error("useTheme must be used inside <ThemeProvider>");return e}},57147:(e,t,r)=>{"use strict";r.d(t,{C:()=>s,P:()=>a});let n="셋업 모드 — 먼저 LLM 을 정하세요";function a(e,t){return(null==e?void 0:e.setupMode)!==!0||"/"!==t?null:"/setup"}function s(e,t){if((null==e?void 0:e.setupMode)!==!0||"/setup"===t||t.startsWith("/setup/"))return null;let r=e.setupMissing;return r&&r.length>0?"".concat(n," (").concat(r.join(", "),")"):n}},58839:(e,t,r)=>{"use strict";r.d(t,{NexusClientProvider:()=>d});var n=r(55539),a=r(46124),s=r(79247),o=r(94306),l=r(8101);function i(){let e=(0,l.Fp)();return{baseUrl:e.baseUrl,token:e.token}}function d(e){let{children:t}=e,[r,l]=(0,a.useState)({baseUrl:"",token:""});(0,a.useEffect)(()=>{l(i());let e=()=>l(i());return window.addEventListener("storage",e),window.addEventListener("elanous.daemon.changed",e),()=>{window.removeEventListener("storage",e),window.removeEventListener("elanous.daemon.changed",e)}},[]);let d=(0,a.useMemo)(()=>r.baseUrl?(0,s.xX)({baseUrl:r.baseUrl,...r.token?{token:r.token}:{}}):null,[r.baseUrl,r.token]);return d?(0,n.jsx)(o.tI,{client:d,children:t}):(0,n.jsx)(n.Fragment,{children:t})}},60903:(e,t,r)=>{"use strict";r.d(t,{TooltipProvider:()=>s});var n=r(55539),a=r(44422);function s(e){let{delay:t=0,...r}=e;return(0,n.jsx)(a.B,{"data-slot":"tooltip-provider",delay:t,...r})}},65650:(e,t,r)=>{"use strict";r.d(t,{_r:()=>s});var n=r(46124),a=r(94306);function s(){let e=(0,a.Qj)(),[t,r]=(0,n.useState)({data:void 0,isError:!1,isPending:!0});return(0,n.useEffect)(()=>{if(!e)return void r({data:void 0,isError:!1,isPending:!0});let t=!0,n=()=>{e.getHealth().then(e=>{t&&r({data:e,isError:!1,isPending:!1})}).catch(()=>{t&&r(e=>({...e,isError:!0,isPending:!1}))})};n();let a=setInterval(n,6e4);return()=>{t=!1,clearInterval(a)}},[e]),{...t,isLoading:t.isPending&&null!==e}}r(65354)},66894:(e,t,r)=>{"use strict";r.d(t,{ServiceWorkerRegister:()=>o});var n=r(46124),a=r(72215);async function s(){if("undefined"==typeof navigator)return{status:"unsupported",reason:"no window/navigator (SSR)"};if(!("serviceWorker"in navigator))return{status:"unsupported",reason:"navigator.serviceWorker absent"};if(!window.isSecureContext)return{status:"unsupported",reason:"page not in a secure context (HTTPS or localhost required)"};try{let e=await navigator.serviceWorker.register("/app/sw.js",{scope:"/app/"});if((0,a.cY)("pwa.sw.registered",{scope:e.scope}),e.waiting)return(0,a.cY)("pwa.sw.update-waiting"),{status:"registered",scope:e.scope,updateAvailable:!0};return e.addEventListener("updatefound",()=>{let t=e.installing;t&&t.addEventListener("statechange",()=>{(0,a.cY)("pwa.sw.statechange",{state:t.state})})}),{status:"registered",scope:e.scope,updateAvailable:!1}}catch(t){let e=t instanceof Error?t.message:String(t);return(0,a.cY)("pwa.sw.register-failed",{reason:e}),{status:"error",reason:e}}}function o(){let e=(0,n.useRef)(!1);return(0,n.useEffect)(()=>{e.current||(e.current=!0,s())},[]),null}},71923:(e,t,r)=>{"use strict";r.d(t,{K:()=>i,u:()=>a});var n=r(46124);let a=932,s="elanous.pwa.wideView",o="elanous:wide-view";function l(){try{return"1"===window.localStorage.getItem(s)}catch(e){return!1}}function i(){let[e,t]=(0,n.useState)(null),[r,i]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{t(window.innerWidth),i(l());let e=()=>t(window.innerWidth),r=e=>{let t=e.detail;i("boolean"==typeof t?t:l())};return window.addEventListener("resize",e),window.addEventListener(o,r),window.addEventListener("storage",r),()=>{window.removeEventListener("resize",e),window.removeEventListener(o,r),window.removeEventListener("storage",r)}},[]),{compact:null!==e&&e<=a&&!r,setWide:(0,n.useCallback)(e=>{i(e);try{e?window.localStorage.setItem(s,"1"):window.localStorage.removeItem(s)}catch(e){}window.dispatchEvent(new CustomEvent(o,{detail:e}))},[])}}},83961:(e,t,r)=>{"use strict";r.d(t,{AppShell:()=>eB});var n=r(55539),a=r(46124),s=r(58603),o=r(3558),l=r.n(o),i=r(69147),d=r(88069),c=r(44373),u=r(97479),m=r(8101),h=r(31843);function f(){let[e,t]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{let e=!0,r=0,n=n=>{if(n&&null!==n.key&&"elanous.nexus.baseUrl"!==n.key&&"elanous.daemon.baseUrl"!==n.key)return;let a=++r,s="";try{s=(0,m.Fp)().baseUrl}catch(e){}if(!s)try{s=(0,m.Ip)()}catch(e){}t(!1),s&&(0,h.Tp)(s).then(n=>{e&&r===a&&t(n)})};return n(),"function"==typeof window.addEventListener&&window.addEventListener("storage",n),()=>{e=!1,"function"==typeof window.removeEventListener&&window.removeEventListener("storage",n)}},[]),e}var p=r(92161),b=r(52982),x=r(48087);function g(e){var t;let{onSearch:r}=e,n=(0,s.useSearchParams)(),o=null!=(t=null==n?void 0:n.toString())?t:"";return(0,a.useEffect)(()=>{r(o)},[o,r]),null}var v=r(34781),w=r(76573),y=r(87285),j=r(75342),k=r(3004),N=r(94306),E=r(8695);function S(e){let{compact:t=!1}=e,r=(0,N.Qj)();return t||!r?null:(0,n.jsx)(A,{})}function A(){var e,t,r;let s=(0,E.mP)(),o=(0,E.XL)(),[l,i]=(0,a.useState)(""),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)({kind:"idle"}),h=null!=(r=null==(e=s.data)?void 0:e.workflows)?r:[],f=l||(null==(t=h[0])?void 0:t.name)||"",p=async()=>{if(f){m({kind:"pending"});try{let e=await o.mutateAsync({name:f,args:d});m({kind:"started",runId:e.runId,name:f})}catch(e){m({kind:"error",message:e instanceof Error?e.message:"run failed to start"})}}},b=(0,a.useMemo)(()=>(function(e){let t=new Map;for(let n of e){var r;let e=null!=(r=t.get(n.source))?r:[];e.push(n),t.set(n.source,e)}let n=[];for(let e of C){let r=t.get(e);r&&0!==r.length&&(r.sort((e,t)=>e.name.localeCompare(t.name)),n.push({source:e,label:I[e],items:r}))}return n})(h),[h]);return(0,n.jsxs)("div",{"data-testid":"sidebar-workflow-invoker",className:"border-t border-sidebar-border px-3 py-2.5 space-y-1.5",children:[(0,n.jsx)("div",{className:"text-[10px] font-medium uppercase tracking-wider text-sidebar-foreground/60",children:"Run workflow"}),(0,n.jsxs)("select",{value:f,onChange:e=>i(e.target.value),disabled:s.isLoading||0===h.length,"aria-label":"Select workflow to run",className:"block w-full truncate rounded border border-border bg-surface px-1.5 py-1 text-[11px] focus:outline-none focus:ring-1 focus:ring-primary disabled:opacity-50",children:[0===h.length&&(0,n.jsx)("option",{value:"",children:s.isLoading?"loading…":"no workflows"}),b.map(e=>(0,n.jsx)("optgroup",{label:e.label,children:e.items.map(e=>(0,n.jsx)("option",{value:e.name,children:e.name},e.name))},e.source))]}),(0,n.jsx)("input",{type:"text",value:d,onChange:e=>c(e.target.value),placeholder:"args (optional)","aria-label":"Workflow arguments",className:"block w-full rounded border border-border bg-surface px-1.5 py-1 text-[11px] focus:outline-none focus:ring-1 focus:ring-primary"}),(0,n.jsxs)("button",{type:"button",onClick:p,disabled:!f||"pending"===u.kind,"data-testid":"sidebar-workflow-invoker-run",className:"flex w-full items-center justify-center gap-1 rounded bg-primary px-2 py-1 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:["pending"===u.kind?(0,n.jsx)(w.A,{className:"h-3 w-3 animate-spin"}):(0,n.jsx)(y.A,{className:"h-3 w-3"}),"Run"]}),(0,n.jsx)(L,{status:u})]})}function L(e){let{status:t}=e;return"idle"===t.kind||"pending"===t.kind?null:"error"===t.kind?(0,n.jsxs)("p",{"data-testid":"sidebar-workflow-invoker-error",className:"flex items-start gap-1 text-[10px] leading-tight text-error",children:[(0,n.jsx)(j.A,{className:"mt-0.5 h-3 w-3 shrink-0"}),(0,n.jsx)("span",{className:"break-all",children:t.message})]}):(0,n.jsxs)("p",{"data-testid":"sidebar-workflow-invoker-started",className:"flex items-start gap-1 text-[10px] leading-tight text-muted-foreground",children:[(0,n.jsx)(k.A,{className:"mt-0.5 h-3 w-3 shrink-0 text-green-600"}),(0,n.jsxs)("span",{className:"min-w-0 flex-1 truncate",children:["started ",(0,n.jsx)("span",{className:"font-mono",children:t.runId.slice(0,14)})," \xb7"," ",(0,n.jsx)(l(),{href:"/workflows",className:"underline",children:"view"})]})]})}let C=["project","global","builtin"],I={project:"Project",global:"Global",builtin:"Built-in"};var P=r(33932),Y=r(15151),z=r(54664),R=r(72215),$=r(69370);function M(){var e;let{compact:t=!1,onNavigate:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=(0,a.useContext)(Y.C),l=(0,s.useRouter)(),i=(0,s.usePathname)(),d=(0,s.useSearchParams)(),u=null!=(e=null==d?void 0:d.get("show"))?e:null,[m,h]=(0,a.useState)([]),[f,p]=(0,a.useState)(!1);(0,a.useEffect)(()=>{if(!o)return;let e=!1;return(async()=>{try{let{layouts:t,source:r}=await (0,z.i$)(o.client);if(e)return;(0,R.cY)("showroom.sidebar.list",{count:t.length,source:r}),h(t)}catch(t){if(e)return;(0,R.cY)("showroom.sidebar.list.error",{error:String(t)})}finally{e||p(!0)}})(),()=>{e=!0}},[o]),(0,a.useEffect)(()=>{if(!o)return;let e=e=>{(!e.key||e.key.startsWith("elanous.showroom"))&&(async()=>{try{let{layouts:e}=await (0,z.i$)(o.client);h(e)}catch(e){}})()};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[o]),(0,a.useEffect)(()=>{if(!o)return;let e=o.client.showroomLayoutsEventsUrl();if(!e)return;let t=e=>async()=>{if("hello"!==e){(0,R.cY)("showroom.sidebar.sse.event",{kind:e});try{let{layouts:e}=await (0,z.i$)(o.client);h(e)}catch(e){}}};return(0,$.BX)(e,{events:{hello:t("hello"),upsert:t("upsert"),remove:t("remove")},onError:()=>{},onConstructError:e=>(0,R.cY)("showroom.sidebar.sse.construct-error",{error:String(e)})})},[o]);let b=(0,a.useCallback)(e=>{(0,R.cY)("showroom.sidebar.switch",{name:e}),l.push("/showroom?show=".concat(encodeURIComponent(e))),null==r||r()},[l,r]);return t||!o?null:(0,n.jsxs)("div",{className:"border-t border-sidebar-border/40 px-2 py-3","data-testid":"showroom-sidebar-section",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between px-1 pb-1",children:[(0,n.jsx)("span",{className:"text-[10px] font-medium uppercase tracking-wide text-sidebar-foreground/50",children:"Showrooms"}),(0,n.jsx)("span",{className:"text-[10px] text-sidebar-foreground/40",children:m.length})]}),!f&&0===m.length&&(0,n.jsx)("div",{className:"px-2 py-1 text-[11px] text-sidebar-foreground/40","data-testid":"showroom-sidebar-loading",children:"loading…"}),f&&0===m.length&&(0,n.jsxs)("div",{className:"px-2 py-1 text-[11px] leading-snug text-sidebar-foreground/50","data-testid":"showroom-sidebar-empty",children:["Save a layout in ",(0,n.jsx)("span",{className:"font-medium",children:"/showroom"})," to populate this rail."]}),m.length>0&&(0,n.jsxs)("ul",{className:"space-y-0.5",children:[m.slice(0,8).map(e=>{var t;let r=(t=e.name,!!i&&"/showroom"===i.replace(/\/+$/,"")&&!!u&&u===t);return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>b(e.name),"data-testid":"showroom-sidebar-item-".concat(e.name),className:(0,c.cn)("flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-[12px] transition-colors",r?"bg-primary/15 text-foreground font-semibold ring-1 ring-primary/40":"text-sidebar-foreground/75 hover:bg-sidebar-accent hover:text-sidebar-foreground"),"aria-current":r?"true":void 0,title:"".concat(e.name," — ").concat(e.panels.length," panels"),children:[(0,n.jsx)(P.A,{className:(0,c.cn)("size-3 shrink-0",r?"text-primary":"text-current"),"aria-hidden":!0}),(0,n.jsx)("span",{className:"flex-1 truncate",children:e.name}),(0,n.jsx)("span",{className:"shrink-0 text-[10px] text-sidebar-foreground/40",children:e.panels.length})]})},e.name)}),m.length>8&&(0,n.jsxs)("li",{className:"px-2 py-1 text-[10px] text-sidebar-foreground/40","data-testid":"showroom-sidebar-truncated",children:["+ ",m.length-8," more (open Showroom to browse)"]})]})]})}let U=x.Ue;function O(){let{onNavigate:e,onClose:t,compact:r=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=(0,s.usePathname)(),m=(0,s.useRouter)(),h=function(e){if(!e)return"/";let t=e.replace(/\/+$/,"");return""===t?"/":t}(null!=o?o:"/"),[w,y]=(0,a.useState)(""),j=(0,u.In)(),{showBeta:k}=(0,b.hj)(),N=f(),[E,A]=(0,a.useState)([]);(0,a.useEffect)(()=>{try{var e;let t=JSON.parse(null!=(e=window.localStorage.getItem("elanous.nav.collapsedGroups"))?e:"[]");Array.isArray(t)&&A(x.Hw.filter(e=>t.includes(e.id)).map(e=>e.id))}catch(e){}},[]);let[L,C]=(0,a.useState)({showLabs:!1,showHidden:!1});(0,a.useEffect)(()=>{let e=()=>C({showLabs:(0,v.fG)(x.f4),showHidden:(0,v.fG)(x.vm)});return e(),window.addEventListener(v.OY,e),window.addEventListener("storage",e),()=>{window.removeEventListener(v.OY,e),window.removeEventListener("storage",e)}},[]);let I=(0,x.Ye)(U,L,j,N,{showBeta:k}),P=t=>{let a=(0,x.HW)(t,h,w,U),s=t.icon,o="general"===j&&k&&"/settings"!==t.href&&"beta"===(0,p.dY)(t.href);return(0,n.jsxs)("li",{className:"group/nav relative",children:[(0,n.jsxs)(l(),{href:t.href,"aria-current":a?"page":void 0,onClick:r=>{var n,a;n=t,a=r,null!==n.kind&&"general"!==j&&(a.metaKey||a.ctrlKey||a.shiftKey||a.altKey||(a.preventDefault(),m.push("/workspace?intent=".concat(n.kind)),null==e||e())),r.defaultPrevented||null==e||e()},title:r?"".concat(t.label).concat(o?" \xb7 실험":""," — ").concat(t.hint):t.hint,"aria-label":"".concat(t.label).concat(o?" \xb7 실험":""," — ").concat(t.hint),className:(0,c.cn)("flex items-center rounded-md text-sm transition-colors",r?"justify-center px-1.5 py-2":"gap-3 px-3 py-2",a?"bg-primary/15 text-foreground font-semibold ring-1 ring-primary/40":"text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-foreground"),children:[(0,n.jsx)(s,{className:(0,c.cn)("h-4 w-4 shrink-0",a?"text-primary":"text-current")}),!r&&t.label,!r&&o&&(0,n.jsx)("span",{className:"rounded border border-primary/40 px-1 text-[10px] text-primary",children:"실험"}),!r&&a&&(0,n.jsx)("span",{className:"ml-auto h-1.5 w-1.5 rounded-full bg-primary","aria-hidden":!0})]}),r&&(0,n.jsxs)("span",{role:"tooltip",className:"pointer-events-none absolute left-full top-1/2 z-50 ml-2 -translate-y-1/2 whitespace-nowrap rounded-md border border-border bg-popover px-2 py-1 text-[11px] text-popover-foreground opacity-0 shadow-md transition-opacity group-hover/nav:opacity-100 [@media(pointer:coarse)]:hidden",children:[(0,n.jsx)("span",{className:"font-medium",children:t.label}),o&&(0,n.jsx)("span",{className:"ml-1 text-primary",children:"실험"}),(0,n.jsxs)("span",{className:"ml-1 text-muted-foreground",children:["— ",t.hint]})]})]},t.href)};return(0,n.jsxs)("nav",{className:"flex h-full flex-col",children:[(0,n.jsx)(a.Suspense,{fallback:null,children:(0,n.jsx)(g,{onSearch:y})}),t&&!r&&(0,n.jsxs)("div",{className:"flex items-center justify-between px-3 pt-3 pb-1",children:[(0,n.jsx)("span",{className:"text-[10px] font-medium uppercase tracking-wide text-sidebar-foreground/50",children:"menu"}),(0,n.jsx)("button",{type:"button",onClick:t,"aria-label":"close menu",title:"close menu",className:"rounded-md p-1.5 text-sidebar-foreground/60 hover:bg-sidebar-accent hover:text-sidebar-foreground",children:(0,n.jsx)(i.A,{className:"h-4 w-4"})})]}),(0,n.jsx)("div",{className:(0,c.cn)("flex-1 space-y-2",r?"px-1 py-2":"px-2 py-3"),children:x.Hw.map(t=>{let a=I.main.filter(e=>e.group===t.id);if(0===a.length)return null;let s=t.icon,o=a[0];return(0,n.jsx)("section",{"aria-label":t.label,children:r||1!==a.length?r?(0,n.jsxs)(l(),{href:o.href,title:"".concat(t.label).concat("general"===j&&k&&"/settings"!==o.href&&"beta"===(0,p.dY)(o.href)?" \xb7 실험":""),"aria-label":"".concat(t.label).concat("general"===j&&k&&"/settings"!==o.href&&"beta"===(0,p.dY)(o.href)?" \xb7 실험":""),onClick:()=>null==e?void 0:e(),className:"relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent",children:[(0,n.jsx)(s,{className:"h-4 w-4"}),"general"===j&&k&&"/settings"!==o.href&&"beta"===(0,p.dY)(o.href)&&(0,n.jsx)("span",{"aria-hidden":!0,className:"absolute -right-1 -top-1 rounded bg-primary px-0.5 text-[8px] text-primary-foreground",children:"실험"})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("button",{type:"button",onClick:()=>(e=>{let t=E.includes(e)?E.filter(t=>t!==e):[...E,e];A(t);try{window.localStorage.setItem("elanous.nav.collapsedGroups",JSON.stringify(t))}catch(e){}})(t.id),"aria-expanded":!E.includes(t.id),"aria-controls":"nav-group-".concat(t.id),className:"flex w-full items-center gap-2 rounded-md px-3 py-2 text-left text-xs font-semibold text-sidebar-foreground/80 hover:bg-sidebar-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,n.jsx)(s,{className:"h-4 w-4"}),t.label,(0,n.jsx)(d.A,{"aria-hidden":!0,className:(0,c.cn)("ml-auto h-3.5 w-3.5 transition-transform",E.includes(t.id)&&"-rotate-90")})]}),!E.includes(t.id)&&(0,n.jsx)("ul",{id:"nav-group-".concat(t.id),className:"ml-3 space-y-1 border-l border-sidebar-border pl-2",children:a.map(P)})]}):(0,n.jsx)("ul",{children:P(o)})},t.id)})}),I.labs.length>0&&(0,n.jsx)(T,{label:"Labs",compact:r,children:I.labs.map(P)}),I.hidden.length>0&&(0,n.jsx)(T,{label:"Hidden",compact:r,children:I.hidden.map(P)}),L.showLabs&&(0,p.EX)(j,"/showroom")&&(0,n.jsx)(a.Suspense,{fallback:null,children:(0,n.jsx)(M,{compact:r,onNavigate:e})}),L.showLabs&&(0,p.EX)(j,"/workflows")&&(0,n.jsx)(S,{compact:r})]})}function T(e){let{label:t,compact:r,children:a}=e;return(0,n.jsxs)("div",{className:(0,c.cn)("border-t border-sidebar-border",r?"px-1 py-2":"px-2 py-2"),children:[!r&&(0,n.jsx)("span",{className:"px-3 text-[10px] font-medium uppercase tracking-wide text-sidebar-foreground/50",children:t}),(0,n.jsx)("ul",{className:"mt-1 space-y-1",children:a})]})}var D=r(35622),H=r(94226),W=r(94476),B=r(92988),_=r(85833),q=r(71923),F=r(57040),Z=r(67327),G=r(40828),K=r(17873),Q=r(6164),J=r(76340),X=r(24982),V=r(65962),ee=r(51907),et=r(44614),er=r(72765),en=r(8819);let ea=[{kind:"chat",label:"chat",icon:G.A},{kind:"term",label:"terminal",icon:K.A},{kind:"intake",label:"intake",icon:Q.A},{kind:"tasks",label:"tasks",icon:J.A},{kind:"control",label:"control",icon:V.A},{kind:"settings",label:"settings",icon:W.A}];function es(){let e=(0,et.hA)(),{addTab:t,activateOrAdd:r}=e,[s,o]=(0,a.useState)(!1),[l,i]=(0,a.useState)({top:0,left:0}),d=(0,a.useRef)(null),c=(0,a.useRef)(null);return(0,a.useLayoutEffect)(()=>{var e;if(!s)return;let t=null==(e=d.current)?void 0:e.getBoundingClientRect();t&&i({top:t.bottom+4,left:t.left})},[s]),(0,a.useEffect)(()=>{if(!s)return;let e=e=>{var t,r;let n=e.target;(null==(t=d.current)||!t.contains(n))&&(null!=(r=c.current)&&r.contains(n)||o(!1))};document.addEventListener("mousedown",e);let t=e=>{"Escape"===e.key&&o(!1)};document.addEventListener("keydown",t);let r=()=>o(!1);return window.addEventListener("scroll",r,!0),window.addEventListener("resize",r),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t),window.removeEventListener("scroll",r,!0),window.removeEventListener("resize",r)}},[s]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{ref:d,type:"button","aria-label":"add tab",title:"새 탭 (+)",onClick:()=>o(e=>!e),className:"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-secondary hover:text-foreground",children:(0,n.jsx)(en.A,{className:"h-4 w-4"})}),s&&"undefined"!=typeof document&&(0,er.createPortal)((0,n.jsx)("div",{ref:c,role:"menu",style:{position:"fixed",top:l.top,left:l.left,zIndex:100},className:"w-44 rounded-md border border-border bg-popover py-1 shadow-md",children:ea.map(t=>{let a=t.icon;return(0,n.jsxs)("button",{type:"button",role:"menuitem",onClick:()=>{var n;"chat"===(n=t.kind)?e.openPicker({kind:"addNewChat"}):r(n),o(!1)},className:"flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm hover:bg-secondary",children:[(0,n.jsx)(a,{className:"h-4 w-4 text-muted-foreground"}),(0,n.jsx)("span",{className:"flex-1",children:t.label})]},t.kind)})}),document.body)]})}var eo=r(51903);let el={chat:G.A,term:K.A,intake:Q.A,tasks:J.A,workflows:X.A,control:V.A,settings:W.A};function ei(e){let{open:t,onClose:r}=e,{state:s,activateTab:o,closeTab:l}=(0,et.hA)(),d=(0,eo.ub)(s),u=(0,a.useRef)(null);if((0,a.useEffect)(()=>{if(!t)return;let e=e=>{"Escape"===e.key&&r()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[t,r]),!t)return null;let m=new Map,h=0;for(let e of d)"chat"===e.kind&&(h+=1,m.set(e.id,h));return(0,n.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":"탭 전환",className:"fixed inset-0 z-50 flex flex-col bg-background",children:[(0,n.jsxs)("div",{className:"flex h-9 shrink-0 items-center justify-between border-b border-border px-3",children:[(0,n.jsx)("h2",{className:"text-sm font-medium",children:"탭 전환"}),(0,n.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,n.jsx)(i.A,{className:"h-4 w-4"})})]}),(0,n.jsxs)("div",{ref:u,className:"flex-1 overflow-y-auto p-3 space-y-2",children:[0===d.length&&(0,n.jsx)("p",{className:"text-center text-sm text-muted-foreground py-6",children:"아직 탭이 없습니다."}),d.map(e=>{var t,a;let d=el[e.kind],u=s.activeId===e.id,h="chat"===e.kind&&null!=(t=m.get(e.id))?t:0,f="chat"===e.kind?null!=(a=e.title)?a:"chat#".concat(h):"term"===e.kind?"terminal":"tasks"===e.kind?"tasks":e.kind;return(0,n.jsxs)("div",{className:(0,c.cn)("flex items-center gap-3 rounded-lg border px-3 py-3 text-sm transition-colors",u?"border-primary bg-primary/10":"border-border bg-card hover:bg-secondary"),children:[(0,n.jsx)("span",{className:(0,c.cn)("inline-flex h-2 w-2 shrink-0 rounded-full",u?"bg-primary":"bg-muted-foreground/30"),"aria-hidden":!0}),(0,n.jsx)(d,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),(0,n.jsx)("button",{type:"button",onClick:()=>{o(e.id),r()},className:"flex-1 truncate text-left",children:f}),(0,n.jsx)("button",{type:"button","aria-label":"close ".concat(f),onClick:t=>{t.stopPropagation(),l(e.id)},className:"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-background hover:text-foreground",children:(0,n.jsx)(i.A,{className:"h-3.5 w-3.5"})})]},e.id)})]})]})}let ed={chat:G.A,term:K.A,intake:Q.A,tasks:J.A,workflows:X.A,control:V.A,settings:W.A};function ec(e,t){var r;return"chat"===e.kind?null!=(r=e.title)?r:"chat#".concat(t):"term"===e.kind?"terminal":e.kind}function eu(){var e;let t=(0,et.tg)(),[r,s]=(0,a.useState)(!1);if(!t)return null;let o=(0,eo.ub)(t.state);if(0===o.length)return null;let l=new Map,d=0;for(let e of o)"chat"===e.kind&&(d+=1,l.set(e.id,d));let u=o.find(e=>e.id===t.state.activeId),m=(null==u?void 0:u.kind)==="chat"&&null!=(e=l.get(u.id))?e:0,h=Math.max(0,o.length-!!u);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{role:"tablist","aria-label":"workspace tabs","data-elanous-component":"topbar-workspace-strip",className:"hidden sm:flex min-w-0 flex-1 items-center gap-1 overflow-x-auto px-1",children:[o.map(e=>{var r;let a=ed[e.kind],s=t.state.activeId===e.id,o="chat"===e.kind&&null!=(r=l.get(e.id))?r:0,d=ec(e,o);return(0,n.jsxs)("div",{role:"tab","aria-selected":s,onClick:()=>t.activateTab(e.id),className:(0,c.cn)("group flex shrink-0 items-center gap-1 rounded-md px-1.5 py-0.5 text-[11px] font-medium transition-colors cursor-pointer",s?"bg-primary/15 text-foreground ring-1 ring-primary/40":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:[(0,n.jsx)(a,{className:"h-3 w-3 shrink-0"}),(0,n.jsx)("span",{className:"max-w-[120px] truncate",children:d}),(0,n.jsx)("button",{type:"button","aria-label":"close ".concat(d),onClick:r=>{r.stopPropagation(),t.closeTab(e.id)},className:"ml-0.5 inline-flex h-3.5 w-3.5 items-center justify-center rounded text-muted-foreground/60 opacity-0 transition-opacity hover:bg-background hover:text-foreground group-hover:opacity-100 data-[active=true]:opacity-100","data-active":s?"true":"false",children:(0,n.jsx)(i.A,{className:"h-2.5 w-2.5"})})]},e.id)}),(0,n.jsx)(es,{})]}),(0,n.jsxs)("div",{role:"tablist","aria-label":"workspace tabs (compact)","data-elanous-component":"topbar-workspace-strip-mobile",className:"flex sm:hidden min-w-0 flex-1 items-center gap-1 px-1",children:[u&&(0,n.jsxs)("div",{className:"flex flex-1 min-w-0 items-center gap-1 rounded-md bg-primary/15 px-1.5 py-0.5 text-[11px] font-medium ring-1 ring-primary/40",children:[(()=>{let e=ed[u.kind];return(0,n.jsx)(e,{className:"h-3 w-3 shrink-0"})})(),(0,n.jsx)("span",{className:"flex-1 truncate",children:ec(u,m)}),(0,n.jsx)("button",{type:"button","aria-label":"close",onClick:()=>t.closeTab(u.id),className:"inline-flex h-3.5 w-3.5 items-center justify-center rounded hover:bg-background",children:(0,n.jsx)(i.A,{className:"h-2.5 w-2.5"})})]}),h>0&&(0,n.jsxs)("button",{type:"button","aria-label":"other tabs (".concat(h,")"),onClick:()=>s(!0),className:"inline-flex h-6 shrink-0 items-center gap-0.5 rounded-md px-1.5 text-[11px] text-muted-foreground hover:bg-secondary hover:text-foreground",children:[(0,n.jsx)(ee.A,{className:"h-3 w-3"}),(0,n.jsx)("span",{children:h})]}),(0,n.jsx)(es,{})]}),(0,n.jsx)(ei,{open:r,onClose:()=>s(!1)})]})}var em=r(47006);function eh(e){let{snapshot:t}=e;if("quiet"===t.kind||"loading"===t.kind)return null;if("error"===t.kind)return(0,n.jsx)("span",{role:"alert","data-elanous-component":"topbar-activity","data-activity-kind":"error",title:t.message,className:"max-w-[9rem] shrink-0 truncate rounded px-1.5 py-0.5 text-[10px] text-rose-500 sm:max-w-[16rem]",children:"activity error"});let r=(0,em.Hl)(t);return(0,n.jsxs)(l(),{href:t.run.href,"aria-label":r,title:r,"data-elanous-component":"topbar-activity","data-activity-kind":"active","data-run-id":t.run.runId,className:"flex min-w-0 max-w-[7.5rem] shrink items-center gap-1 rounded-md px-1.5 py-0.5 text-[10px] font-medium text-emerald-600 hover:bg-accent sm:max-w-[18rem]",children:[(0,n.jsx)("span",{className:"h-1.5 w-1.5 shrink-0 rounded-full bg-emerald-500","aria-hidden":!0}),(0,n.jsx)("span",{className:"hidden uppercase tracking-wide sm:inline",children:"LIVE"}),(0,n.jsx)("span",{className:"min-w-0 truncate",children:t.run.runId}),t.run.progressLine&&(0,n.jsx)("span",{className:"hidden min-w-0 truncate text-muted-foreground md:inline",children:t.run.progressLine}),t.extraLiveCount>0&&(0,n.jsxs)("span",{className:"shrink-0 text-muted-foreground",children:["+",t.extraLiveCount]})]})}var ef=r(5358),ep=r(7456);let eb="•••",ex=[[/\b(?:elt|els)_[A-Za-z0-9_-]{8,}/g,eb],[/\b(?:ghp|gho|ghs|ghu|github_pat)_[A-Za-z0-9_]{10,}/g,eb],[/\bsk-(?:ant-|proj-)?[A-Za-z0-9_-]{16,}/g,eb],[/\bxox[abpr]-[A-Za-z0-9-]{10,}/g,eb],[/\b\d{6,}:[A-Za-z0-9_-]{30,}\b/g,eb],[/(Bearer\s+)[A-Za-z0-9._~+/-]{12,}=*/gi,"$1".concat(eb)],[/([?&](?:token|access_token|key|auth|code)=)[^&\s"'<>]+/gi,"$1".concat(eb)],[/\b(?:10|127)\.\d{1,3}\.\d{1,3}\.\d{1,3}(?::\d{2,5})?\b/g,eb],[/\b192\.168\.\d{1,3}\.\d{1,3}(?::\d{2,5})?\b/g,eb],[/\b172\.(?:1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}(?::\d{2,5})?\b/g,eb],[/\b100\.(?:6[4-9]|[7-9]\d|1[01]\d|12[0-7])\.\d{1,3}\.\d{1,3}(?::\d{2,5})?\b/g,eb],[/\b[a-z0-9-]+(?:\.[a-z0-9-]+)*\.ts\.net(?::\d{2,5})?\b/gi,"tailnet-host"],[/\b[a-z0-9-]+\.local(?::\d{2,5})?\b/gi,"local-host"],[/\blocalhost:\d{2,5}\b/gi,"localhost"],[/\/(?:Users|home)\/[^/\s"'<>]+/g,"~"],[/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g,"".concat(eb,"@").concat(eb)]];async function eg(e){let t=Math.max(320,Math.round(window.innerWidth)),r=Math.max(320,Math.round(window.innerHeight)),n=document.body.cloneNode(!0),a=0;for(let e of Array.from(n.querySelectorAll("[data-share-hide], [data-share-capture-ui]"))){let t=document.createElement("span");t.setAttribute("style","display:inline-block;min-width:4em;height:1em;background:#9ca3af;border-radius:3px"),e.replaceWith(t),a++}for(let e of Array.from(n.querySelectorAll("input, textarea")))e.setAttribute("value",""),"TEXTAREA"===e.tagName&&(e.textContent="");let s="";for(let e of Array.from(document.styleSheets))try{for(let t of Array.from(e.cssRules))s+="".concat(t.cssText,"\n")}catch(e){}let{markup:o,hits:l}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],{text:r,hits:n}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=0,n=e;for(let e of t){let t=RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g");n=n.replace(t,()=>(r++,eb))}for(let[e,t]of ex)n=n.replace(e,function(){for(var e,n=arguments.length,a=Array(n),s=0;s<n;s++)a[s]=arguments[s];return r++,t.replace("$1",null!=(e=a[1])?e:"")});let a=(0,ep.dc)([])(n,!1);return a!==n&&r++,{text:a,hits:r}}(e.replace(/<script\b[\s\S]*?<\/script>/gi,"").replace(/<noscript\b[\s\S]*?<\/noscript>/gi,"").replace(/(<input\b[^>]*?\bvalue=)("[^"]*"|'[^']*')/gi,'$1""').replace(/(<textarea\b[^>]*>)[\s\S]*?(<\/textarea>)/gi,"$1$2"),t);return{markup:r,hits:n}}(new XMLSerializer().serializeToString(n),e),i=document.documentElement.className.replace(/[^\w\s-]/g,""),d='<svg xmlns="http://www.w3.org/2000/svg" width="'.concat(t,'" height="').concat(r,'"><foreignObject width="100%" height="100%">')+'<div xmlns="http://www.w3.org/1999/xhtml" class="'.concat(i,'" style="width:').concat(t,"px;height:").concat(r,'px;overflow:hidden">')+"<style>".concat(s.replace(/<\/style/gi,""),"</style>").concat(o,"</div></foreignObject></svg>"),c="data:image/svg+xml;charset=utf-8,".concat(encodeURIComponent(d)),u=new Image;await new Promise((e,t)=>{u.onload=()=>e(),u.onerror=()=>t(Error("render-failed")),u.src=c});let m=Math.min(2,window.devicePixelRatio||1),h=document.createElement("canvas");h.width=Math.round(t*m),h.height=Math.round(r*m);let f=h.getContext("2d");if(!f)throw Error("no-canvas");f.fillStyle=getComputedStyle(document.body).backgroundColor||"#ffffff",f.fillRect(0,0,h.width,h.height),f.scale(m,m),f.drawImage(u,0,0);let p=await new Promise(e=>h.toBlob(e,"image/png"));if(!p)throw Error("encode-failed");return{blob:p,hits:l+a,width:t,height:r}}function ev(){let{config:e}=(0,Y.Q)(),[t,r]=(0,a.useState)(!1),s=async()=>{if(!t){r(!0);try{let t=function(e){let t=new Set,r=e=>{e&&e.trim().length>=4&&t.add(e.trim())};if(r(e.token),r(e.pageHost),e.baseUrl)try{let t=new URL(e.baseUrl);r(t.host),r(t.hostname),r(e.baseUrl.replace(/\/$/,""))}catch(t){r(e.baseUrl)}return[...t].sort((e,t)=>t.length-e.length)}({pageHost:window.location.host,baseUrl:e.baseUrl,token:e.token}),r=await eg(t),n=await fetch("".concat(e.baseUrl.replace(/\/$/,""),"/v1/captures"),{method:"POST",headers:{"content-type":"image/png",...e.token?{authorization:"Bearer ".concat(e.token)}:{}},body:r.blob});if(!n.ok)throw Error(401===n.status?"auth":"http-".concat(n.status));let a=await n.json();(0,R.cY)("pwa.share-capture.uploaded",{hits:r.hits,width:r.width,height:r.height}),Z.oR.success("공유용 캡처를 저장했습니다 — 가린 항목 ".concat(r.hits,"개"),{description:"데몬 captures/".concat(a.id,".png \xb7 올리기 전에 한 번 더 확인해 주세요")})}catch(t){let e=t instanceof Error?t.message:"unknown";(0,R.cY)("pwa.share-capture.failed",{reason:e}),Z.oR.error("auth"===e?"저장하지 못했습니다 — 연결 토큰이 필요합니다(설정 › 데몬 연결)":"이 화면은 아직 캡처하지 못했습니다(beta) — 다른 브라우저에서 다시 시도해 주세요")}finally{r(!1)}}};return(0,n.jsx)("button",{type:"button","data-share-capture-ui":!0,onClick:()=>{s()},disabled:t,"aria-label":"공유용 캡처",title:"공유용 캡처 (beta) — 주소\xb7토큰을 가린 사진을 데몬에 저장",className:"rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-50",children:(0,n.jsx)(ef.A,{className:"h-4 w-4"})})}let ew="elanous.pwa.wakeLockOn";function ey(){let e=!(arguments.length>0)||void 0===arguments[0]||arguments[0],[t,r]=(0,a.useState)(!1),n=function(e){let[t,r]=(0,a.useState)({supported:"undefined"!=typeof navigator&&"wakeLock"in navigator,held:!1,error:null}),n=(0,a.useRef)(null),s=(0,a.useRef)(e);return s.current=e,(0,a.useEffect)(()=>{if("undefined"==typeof navigator)return;let t=navigator.wakeLock;if(!t)return void r(e=>({...e,supported:!1}));let a=async()=>{if(s.current&&(!n.current||n.current.released))try{let e=await t.request("screen");n.current=e,r({supported:!0,held:!0,error:null}),(0,R.cY)("webterm.wake-lock.acquired"),e.addEventListener("release",()=>{n.current=null,r(e=>({...e,held:!1})),(0,R.cY)("webterm.wake-lock.auto-released")})}catch(t){let e=t instanceof Error?t.message:String(t);r({supported:!0,held:!1,error:e}),(0,R.cY)("webterm.wake-lock.acquire-failed",{reason:e})}},o=async()=>{let e=n.current;if(e&&!e.released){try{await e.release(),(0,R.cY)("webterm.wake-lock.released")}catch(e){}n.current=null,r(e=>({...e,held:!1}))}};e?a():o();let l=()=>{"visible"===document.visibilityState&&s.current&&a()};return document.addEventListener("visibilitychange",l),()=>{document.removeEventListener("visibilitychange",l),o()}},[e]),t}(e&&t);return(0,a.useEffect)(()=>{if(e)try{"1"===window.localStorage.getItem(ew)&&r(!0)}catch(e){}},[e]),{on:t,status:n,toggle:()=>{r(e=>{let t=!e;try{window.localStorage.setItem(ew,t?"1":"0")}catch(e){}return(0,R.cY)("pwa.topbar.wake-lock.toggle",{next:t}),t})}}}function ej(e){let{onToggleSidebar:t,sidebarOpen:r,activity:s,onCompactView:o,sheetMode:d=!1,wakeControl:u}=e,{sessionId:m,config:h}=(0,Y.Q)(),{theme:f,setTheme:p}=(0,F.D)(),[b,x]=(0,a.useState)(d),[g,v]=(0,a.useState)(!1),w=ey(!u),{on:y,status:j,toggle:k}=null!=u?u:w;(0,a.useEffect)(()=>{if(!o)return;let e=()=>v(window.innerWidth<=q.u);return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[o]);let N=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(!b||d)return;let e=e=>{N.current&&(N.current.contains(e.target)||x(!1))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[b,d]);let E=async()=>{if(m)try{await navigator.clipboard.writeText(m),Z.oR.success("Session id copied"),(0,R.cY)("pwa.topbar.session-copy",{sessionId:m})}catch(e){Z.oR.error("Copy failed"),(0,R.cY)("pwa.topbar.session-copy-error",{err:String(e)})}};return(0,n.jsxs)("header",{className:d?"flex flex-col gap-2 text-xs":"flex h-9 shrink-0 items-center gap-1 border-b border-border bg-background px-2 text-xs",children:[!d&&(0,n.jsxs)("button",{type:"button",onClick:t,"aria-label":r?"close menu":"open menu",title:r?"close menu":"open menu",className:"flex shrink-0 items-center gap-1.5 rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground",children:[r?(0,n.jsx)(i.A,{className:"h-4 w-4"}):(0,n.jsx)(D.A,{className:"h-4 w-4"}),(0,n.jsx)("span",{className:"hidden text-[11px] font-medium leading-none sm:inline",children:r?"닫기":"메뉴"})]}),d?(0,n.jsx)("div",{className:"w-full",children:(0,n.jsx)(eu,{})}):(0,n.jsx)(eu,{}),s&&(0,n.jsx)(eh,{snapshot:s}),(0,n.jsxs)("div",{className:d?"flex flex-wrap items-center gap-2":"ml-auto flex items-center gap-1",children:[o&&g&&(0,n.jsx)("button",{type:"button",onClick:o,className:"rounded-md px-2 py-1 text-muted-foreground hover:bg-accent hover:text-foreground",children:"간소하게 보기"}),(0,n.jsx)(ev,{}),(0,n.jsx)(l(),{href:"/","aria-label":"voice",title:"voice (HTTPS Tailscale Serve 필요)",className:"rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground",onClick:()=>(0,R.cY)("pwa.topbar.voice-link"),children:(0,n.jsx)(H.A,{className:"h-4 w-4"})}),(0,n.jsxs)("div",{ref:N,className:d?"w-full":"relative",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>x(e=>!e),"aria-expanded":d?b:void 0,"aria-label":"settings",title:"session ".concat(m?m.slice(0,8):"—"," \xb7 theme ").concat(f),className:(0,c.cn)("rounded-md p-1.5 hover:bg-accent",d&&"flex items-center",b?"bg-accent text-foreground":"text-muted-foreground hover:text-foreground"),children:[(0,n.jsx)(W.A,{className:"h-4 w-4"}),d&&(0,n.jsx)("span",{className:"ml-1",children:"설정"})]}),b&&(0,n.jsxs)("div",{className:d?"w-full rounded-md border border-border bg-popover p-2":"absolute right-0 top-full z-50 mt-1 min-w-[240px] rounded-md border border-border bg-popover p-2 shadow-md",children:[(0,n.jsxs)("div",{className:"mb-2 border-b border-border pb-2",children:[(0,n.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-muted-foreground",children:"session"}),(0,n.jsxs)("button",{type:"button",onClick:E,className:"flex w-full items-center justify-between rounded border border-border bg-card px-2 py-1 font-mono text-[11px] hover:bg-secondary",title:"click to copy",children:[(0,n.jsx)("span",{className:"truncate",children:m||"— (not connected)"}),(0,n.jsx)(B.A,{className:"ml-2 h-3 w-3 shrink-0"})]}),h.provider&&(0,n.jsxs)("div",{className:"mt-1 text-[11px] text-muted-foreground",children:["provider: ",(0,n.jsx)("span",{className:"font-medium text-foreground",children:h.provider})]})]}),j.supported&&(0,n.jsxs)("div",{className:"mb-2 border-b border-border pb-2",children:[(0,n.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-muted-foreground",children:"screen"}),(0,n.jsxs)("button",{type:"button",onClick:k,className:(0,c.cn)("flex w-full items-center justify-between rounded-sm px-2 py-1 text-xs hover:bg-accent",y&&"bg-accent text-accent-foreground"),title:y?"화면 깨움 해제":"화면 깨움 유지",children:[(0,n.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,n.jsx)(_.A,{className:(0,c.cn)("h-3.5 w-3.5",y&&"text-amber-500"),"aria-hidden":!0}),"Wake Lock"]}),(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground",children:j.held?"held":y?"requested":"off"})]}),j.error&&(0,n.jsx)("p",{className:"mt-1 truncate text-[10px] text-rose-500",title:j.error,children:j.error})]}),(0,n.jsxs)("div",{className:"mb-1",children:[(0,n.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-muted-foreground",children:"theme"}),(0,n.jsx)("ul",{className:"max-h-56 overflow-auto",children:F.z.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",className:(0,c.cn)("flex w-full items-center justify-between rounded-sm px-2 py-1 text-xs hover:bg-accent",e===f&&"bg-accent text-accent-foreground"),onClick:()=>{p(e),(0,R.cY)("pwa.topbar.theme",{theme:e})},children:[(0,n.jsx)("span",{className:"truncate",children:e}),e===f&&(0,n.jsx)("span",{className:"ml-2 text-[10px]",children:"✓"})]})},e))})]}),(0,n.jsx)("div",{className:"mt-2 border-t border-border pt-2",children:(0,n.jsx)(l(),{href:"/settings",className:"block rounded px-2 py-1 text-[11px] text-muted-foreground hover:bg-accent hover:text-foreground",onClick:()=>x(!1),children:"full settings →"})})]})]})]})]})}var ek=r(46586);function eN(e){var t,r;let{onToggleSidebar:o,sidebarOpen:l,activity:d,setWide:c,wakeControl:u}=e,[m,h]=(0,a.useState)(!1),f=ey(!u),p=(0,a.useRef)(null),b=(0,a.useRef)(null),g=(0,s.usePathname)(),v=(0,et.tg)(),w=v&&(0,eo.ub)(v.state).find(e=>e.id===v.state.activeId),y=(null!=g?g:"/").replace(/\/+$/,"")||"/",j=(null==w?void 0:w.kind)==="chat"?null!=(r=w.title)?r:"채팅":(null==w?void 0:w.kind)==="term"?"터미널":null==w?void 0:w.kind,[k,N]=(0,a.useState)(""),E=null==(t=x.Ue.find(e=>(0,x.HW)(e,y,k,x.Ue)))?void 0:t.label;return(0,a.useEffect)(()=>{if(!m)return;let e=b.current;if(!e)return;let t=()=>Array.from(e.querySelectorAll('button:not(:disabled), a[href], [tabindex]:not([tabindex="-1"])')).filter(e=>e.getClientRects().length>0);e.focus();let r=r=>{if("Escape"===r.key){r.preventDefault(),h(!1);return}if("Tab"!==r.key)return;let n=t();if(0===n.length){r.preventDefault(),e.focus();return}let a=n[0],s=n[n.length-1];r.shiftKey&&(document.activeElement===a||document.activeElement===e||!e.contains(document.activeElement))?(r.preventDefault(),s.focus()):r.shiftKey||document.activeElement!==s&&e.contains(document.activeElement)||(r.preventDefault(),a.focus())},n=r=>{var n;e.contains(r.target)||(null!=(n=t()[0])?n:e).focus()};return document.addEventListener("keydown",r,!0),document.addEventListener("focusin",n),()=>{var e;document.removeEventListener("keydown",r,!0),document.removeEventListener("focusin",n),null==(e=p.current)||e.focus()}},[m]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("header",{className:"flex h-10 max-h-11 shrink-0 items-center gap-2 border-b border-border bg-background px-2 text-sm",children:[(0,n.jsx)("button",{type:"button",onClick:o,"aria-label":l?"close menu":"open menu",className:"rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground",children:l?(0,n.jsx)(i.A,{className:"h-4 w-4"}):(0,n.jsx)(D.A,{className:"h-4 w-4"})}),(0,n.jsx)("span",{className:"min-w-0 flex-1 truncate font-medium",children:"/workspace"===y&&j?j:null!=E?E:"elanous"}),(0,n.jsx)("button",{ref:p,type:"button",onClick:()=>h(!0),"aria-label":"더 보기","aria-expanded":m,"aria-controls":"compact-topbar-sheet",className:"rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground",children:(0,n.jsx)(ek.A,{className:"h-4 w-4"})})]}),m&&(0,n.jsxs)("div",{className:"fixed inset-0 z-50",children:[(0,n.jsx)("button",{type:"button","aria-label":"시트 닫기",className:"absolute inset-0 bg-black/40",onClick:()=>h(!1)}),(0,n.jsxs)("div",{ref:b,id:"compact-topbar-sheet",role:"dialog","aria-modal":"true","aria-label":"더 보기",tabIndex:-1,className:"absolute inset-x-0 bottom-0 max-h-[85dvh] overflow-y-auto rounded-t-xl border border-border bg-background p-4 shadow-lg",children:[(0,n.jsxs)("div",{className:"mb-2 flex items-center justify-between",children:[(0,n.jsx)("span",{className:"font-medium",children:"더 보기"}),(0,n.jsx)("button",{type:"button","aria-label":"시트 닫기",onClick:()=>h(!1),className:"rounded p-2",children:(0,n.jsx)(i.A,{className:"h-4 w-4"})})]}),(0,n.jsx)(ej,{sheetMode:!0,onToggleSidebar:o,sidebarOpen:l,activity:d,wakeControl:null!=u?u:f}),(0,n.jsx)("button",{type:"button",className:"mt-3 w-full rounded-md border border-border px-3 py-2 text-left text-sm hover:bg-accent",onClick:()=>{h(!1),c(!0)},children:"넓게 보기"})]})]})]})}function eE(){var e,t;let r=(0,s.usePathname)(),o=(0,u.In)(),{showBeta:d}=(0,b.hj)(),c=f(),[m,h]=(0,a.useState)({showLabs:!1,showHidden:!1}),[g,w]=(0,a.useState)(null),y=(0,a.useRef)(null),j=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=()=>h({showLabs:(0,v.fG)(x.f4),showHidden:(0,v.fG)(x.vm)});return e(),window.addEventListener(v.OY,e),window.addEventListener("storage",e),()=>{window.removeEventListener(v.OY,e),window.removeEventListener("storage",e)}},[]),(0,a.useEffect)(()=>{var e;if(!g)return;null==(e=j.current)||e.focus();let t=e=>{if("Escape"===e.key){e.preventDefault(),w(null);return}if("Tab"!==e.key||!j.current)return;let t=Array.from(j.current.querySelectorAll("a[href], button:not(:disabled)"));if(!t.length)return;let r=t[0],n=t[t.length-1];e.shiftKey&&(document.activeElement===r||document.activeElement===j.current)?(e.preventDefault(),n.focus()):e.shiftKey||document.activeElement!==n||(e.preventDefault(),r.focus())},r=e=>{j.current&&!j.current.contains(e.target)&&j.current.focus()};return document.addEventListener("keydown",t),document.addEventListener("focusin",r),()=>{var e;document.removeEventListener("keydown",t),document.removeEventListener("focusin",r),null==(e=y.current)||e.focus()}},[g]);let k=(0,x.Ye)(x.Ue,m,o,c,{showBeta:d}),N=new Set([...k.main,...k.labs,...k.hidden]),E=x.Ue.filter(e=>N.has(e)),S=x.Hw.map(e=>({...e,items:E.filter(t=>t.group===e.id)})).filter(e=>e.items.length>0),A=S.filter(e=>e.bottomTab),L=S.filter(e=>!e.bottomTab).sort((e,t)=>Number("ops"===t.id)-Number("ops"===e.id)),C=(null!=r?r:"/").replace(/\/+$/,"")||"/",I=e=>{var t;return C===e.href||"/"!==e.href&&C.startsWith("".concat(e.href,"/"))||(null!=(t=e.activeAlso)?t:[]).some(e=>C===e||C.startsWith("".concat(e,"/")))},P=S.find(e=>e.items.some(I)),Y="more"===g?L:S.filter(e=>e.id===g);return(0,a.useEffect)(()=>{g&&!Y.length&&w(null)},[g,Y.length]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("nav",{"aria-label":"아래 탭",className:"h-[calc(3.5rem+env(safe-area-inset-bottom))] shrink-0 border-t border-border bg-background pb-[env(safe-area-inset-bottom)]",children:(0,n.jsxs)("div",{className:"flex h-full items-stretch",children:[A.map(e=>{let t=e.icon,r=(null==P?void 0:P.id)===e.id,a="flex min-w-0 flex-1 flex-col items-center justify-center gap-0.5 text-xs ".concat(r?"font-semibold text-primary":"text-muted-foreground");return 1===e.items.length?(0,n.jsxs)(l(),{href:e.items[0].href,"aria-label":e.label,"aria-current":r?"page":void 0,className:a,children:[(0,n.jsx)(t,{"aria-hidden":!0,className:"h-5 w-5"}),(0,n.jsx)("span",{children:e.label}),"general"===o&&d&&"/settings"!==e.items[0].href&&"beta"===(0,p.dY)(e.items[0].href)&&(0,n.jsx)("span",{className:"text-[10px] text-primary",children:"실험"})]},e.id):(0,n.jsxs)("button",{type:"button","aria-label":e.label,"aria-expanded":g===e.id,"aria-controls":"mobile-nav-sheet",onClick:t=>{y.current=t.currentTarget,w(e.id)},className:a,children:[(0,n.jsx)(t,{"aria-hidden":!0,className:"h-5 w-5"}),(0,n.jsx)("span",{children:e.label})]},e.id)}),(0,n.jsxs)("button",{type:"button","aria-label":"더보기","aria-expanded":"more"===g,"aria-controls":"mobile-nav-sheet",onClick:e=>{y.current=e.currentTarget,w("more")},className:"flex min-w-0 flex-1 flex-col items-center justify-center gap-0.5 text-xs ".concat(P&&!P.bottomTab?"font-semibold text-primary":"text-muted-foreground"),children:[(0,n.jsx)(ek.A,{"aria-hidden":!0,className:"h-5 w-5"}),(0,n.jsx)("span",{children:"더보기"})]})]})}),g&&Y.length>0&&(0,n.jsxs)("div",{className:"fixed inset-0 z-50",children:[(0,n.jsx)("button",{type:"button","aria-label":"메뉴 닫기",className:"absolute inset-0 bg-black/40",onClick:()=>w(null)}),(0,n.jsxs)("div",{ref:j,id:"mobile-nav-sheet",role:"dialog","aria-modal":"true","aria-label":"more"===g?"더보기":null==(e=S.find(e=>e.id===g))?void 0:e.label,tabIndex:-1,className:"absolute inset-x-0 bottom-0 max-h-[85dvh] overflow-y-auto rounded-t-xl border border-border bg-background px-4 pt-3 pb-[calc(1rem+env(safe-area-inset-bottom))] shadow-lg",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between",children:[(0,n.jsx)("span",{className:"font-semibold",children:"more"===g?"더보기":null==(t=S.find(e=>e.id===g))?void 0:t.label}),(0,n.jsx)("button",{type:"button","aria-label":"메뉴 닫기",onClick:()=>w(null),className:"rounded-md p-2",children:(0,n.jsx)(i.A,{"aria-hidden":!0,className:"h-5 w-5"})})]}),Y.map(e=>(0,n.jsxs)("section",{"aria-label":e.label,className:"mt-2",children:["more"===g&&e.items.length>1&&(0,n.jsx)("h2",{className:"px-2 py-1 text-xs font-semibold text-muted-foreground",children:e.label}),e.items.map(e=>{let t=e.icon,r="general"===o&&d&&"/settings"!==e.href&&"beta"===(0,p.dY)(e.href);return(0,n.jsxs)(l(),{href:e.href,"aria-current":I(e)?"page":void 0,onClick:()=>w(null),className:"flex items-center gap-3 rounded-md px-3 py-3 text-sm hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,n.jsx)(t,{"aria-hidden":!0,className:"h-4 w-4"}),e.label,r&&(0,n.jsx)("span",{className:"rounded border border-primary/40 px-1 text-[10px] text-primary",children:"실험"})]},e.href)})]},e.id))]})]})]})}var eS=r(89709),eA=r(59587),eL=r(99426),eC=r(11986);let eI="elanous.pwa.installBanner.dismissedAt";function eP(){try{return window.localStorage}catch(e){return null}}function eY(e){let t=eP();if(t)try{t.setItem(eI,String(e))}catch(e){}}function ez(){return(0,n.jsx)(a.Suspense,{fallback:null,children:(0,n.jsx)(eR,{})})}function eR(){let[e,t]=(0,a.useState)(!1),[r,o]=(0,a.useState)("unsupported"),[l,d]=(0,a.useState)(null),c=(0,s.usePathname)(),{compact:u}=(0,q.K)(),m=(0,eC.$5)(),h=(0,s.useSearchParams)(),f=null==h?void 0:h.get("capture"),p=null==h?void 0:h.get("demo"),b=(0,a.useRef)(!1),x=(0,a.useRef)("unsupported"),g=e=>{var r,n;let a=null;try{a=window.localStorage.getItem("elanous.inside.demo")}catch(e){}let s=(n={now:Date.now(),standalone:function(){let e=!0===window.navigator.standalone,t=!1;try{var r,n,a;t=(null==(n=(a=window).matchMedia)||null==(r=n.call(a,"(display-mode: standalone)"))?void 0:r.matches)===!0}catch(e){}return e||t}(),platform:e,dismissedAt:function(){let e=eP();if(!e)return null;let t=e.getItem(eI);if(null===t)return null;let r=Number(t);return Number.isFinite(r)?r:null}(),quiet:null!=(r=window.location)&&!!r.href&&function(e,t){let r=new URL(e);if("public"===r.searchParams.get("capture"))return!0;let n=r.pathname.replace(/\/+$/,"");if("/inside"!==n&&"/app/inside"!==n)return!1;let a=r.searchParams.get("demo");return null!==a?"1"===a:"1"===t}(window.location.href,a)}).quiet?{show:!1,reason:"quiet"}:n.standalone?{show:!1,reason:"standalone"}:"unsupported"===n.platform?{show:!1,reason:"unsupported"}:null!==n.dismissedAt&&n.now-n.dismissedAt<6048e5?{show:!1,reason:"recently-dismissed"}:{show:!0,reason:"show"};return t(s.show&&!b.current),s};(0,a.useEffect)(()=>{let e=e=>{e.preventDefault(),d(e),x.current="beforeInstallPromptCapable",o(x.current);let t=g(x.current);(0,R.cY)("pwa.install-banner.beforeinstallprompt",{decision:t})};window.addEventListener("beforeinstallprompt",e);let r=function(e,t){if(t)return"beforeInstallPromptCapable";if("string"!=typeof e||0===e.length)return"unsupported";let r=/iPad|iPhone|iPod/.test(e),n=/Safari/.test(e)&&!/CriOS|FxiOS|EdgiOS/.test(e);return r&&n?"iosSafari":"unsupported"}(navigator.userAgent,!1);x.current=r,o(r);let n=g(r);(0,R.cY)("pwa.install-banner.mount",{platform:r,decision:n});let a=()=>{b.current=!0,t(!1),(0,R.cY)("pwa.install-banner.appinstalled")},s=()=>{g(x.current)};return window.addEventListener("appinstalled",a),window.addEventListener("elanous:inside-demo",s),()=>{window.removeEventListener("beforeinstallprompt",e),window.removeEventListener("appinstalled",a),window.removeEventListener("elanous:inside-demo",s)}},[]),(0,a.useEffect)(()=>{g(x.current)},[c,f,p]);let v=async()=>{if(l)try{await l.prompt();let e=await l.userChoice;(0,R.cY)("pwa.install-banner.userChoice",{outcome:e.outcome}),"dismissed"===e.outcome&&(eY(Date.now()),t(!1))}catch(e){(0,R.cY)("pwa.install-banner.prompt-error",{reason:String(e)})}finally{d(null)}};return!e||m||"/chat"===c&&u?null:(0,n.jsx)("div",{role:"dialog","aria-label":"Install elanous to home screen","data-testid":"install-banner",className:"shrink-0 border-t border-border bg-card/95 px-4 py-3 shadow-lg backdrop-blur",children:(0,n.jsxs)("div",{className:"mx-auto flex max-w-2xl items-start gap-3",children:[(0,n.jsx)("div",{className:"mt-0.5 inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-primary/30 bg-primary/10 text-primary",children:(0,n.jsx)(eA.A,{className:"h-4 w-4"})}),(0,n.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,n.jsx)("p",{className:"text-sm font-medium",children:"elanous 를 홈 화면에 추가하세요"}),"iosSafari"===r?(0,n.jsxs)("p",{className:"mt-1 text-[12px] leading-relaxed text-muted-foreground",children:[(0,n.jsx)(eL.A,{className:"inline-block h-3.5 w-3.5 align-text-bottom"})," 공유 버튼 →",(0,n.jsx)("span",{className:"mx-1 rounded bg-muted px-1 font-mono text-[11px]",children:"홈 화면에 추가"}),"로 PWA 로 사용. 알림 \xb7 카메라 \xb7 백그라운드 모두 활성화."]}):(0,n.jsx)("p",{className:"mt-1 text-[12px] leading-relaxed text-muted-foreground",children:"한 번의 클릭으로 PWA 설치 — 알림 \xb7 백그라운드 turn 보장."})]}),(0,n.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:["beforeInstallPromptCapable"===r&&l&&(0,n.jsx)("button",{type:"button",onClick:()=>{v()},className:"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90","data-testid":"install-banner-install",children:"설치"}),(0,n.jsx)("button",{type:"button",onClick:()=>{t(!1),eY(Date.now()),(0,R.cY)("pwa.install-banner.dismiss")},"aria-label":"dismiss install banner","data-testid":"install-banner-dismiss",className:"inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground",children:(0,n.jsx)(i.A,{className:"h-4 w-4"})})]})]})})}var e$=r(65650),eM=r(57147);function eU(){let e=(0,s.usePathname)(),t=(0,e$._r)(),r=null==e||t.isError||t.isPending||t.isLoading?null:(0,eM.C)(t.data,e);return r?(0,n.jsxs)("div",{role:"status","data-testid":"setup-mode-banner",className:"flex items-center justify-between gap-3 border-b border-border bg-muted px-3 py-1.5 text-xs text-foreground",children:[(0,n.jsx)("span",{children:r}),(0,n.jsx)(l(),{href:"/setup",className:"shrink-0 font-semibold underline underline-offset-2",children:"/setup"})]}):null}var eO=r(18068);function eT(){let[e,t]=(0,a.useState)(!1);return((0,a.useEffect)(()=>(0,eO.dJ)(()=>t(!0)),[]),e)?(0,n.jsxs)("div",{role:"alert","data-testid":"auth-required-banner",className:"flex items-center justify-between gap-3 border-b border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-foreground",children:[(0,n.jsx)("span",{children:"이 기기는 아직 데몬에 연결되지 않았습니다(인증 필요). 연결된 기기의 설정 › 연결 토큰 만들기 에서 토큰을 만들어, 이 기기의 설정 › 데몬 연결 › 연결 토큰 칸에 붙여 넣으세요."}),(0,n.jsx)(l(),{href:"/settings",className:"shrink-0 font-semibold underline underline-offset-2",children:"/settings"}),(0,n.jsx)("button",{type:"button","aria-label":"연결 안내 닫기",onClick:()=>{(0,eO.SI)(),t(!1)},className:"shrink-0 rounded px-2 py-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring",children:"닫기"})]}):null}let eD=null;function eH(){let{confirm:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:t}=(0,Y.Q)(),[r,s]=(0,a.useState)([]),[o,l]=(0,a.useState)(!1),[i,d]=(0,a.useState)(!1),[c,u]=(0,a.useState)(""),m=(0,a.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!e&&eD&&Date.now()-eD.at<6e5)return void s(eD.items);try{let e=await t.fetchResponse("/v1/skills/problems"),r=e.ok?await e.json():{},n=Array.isArray(r.items)?r.items:[];eD={at:Date.now(),items:n},s(n)}catch(e){s([])}},[t]);if((0,a.useEffect)(()=>{m()},[m]),!r.length&&!c)return null;let h=r.filter(e=>e.fixable);async function f(){if(!(null!=e?e:e=>window.confirm(e))("다른 도구의 스킬 파일입니다. 고칠 수 있는 것만 고칠까요? (고치기 전 원본은 남겨 둡니다)"))return;d(!0);let r=0;for(let e of h)try{(await t.fetchResponse("/v1/skills/problems/repair",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:e.id})})).ok&&(r+=1)}catch(e){}d(!1),u("".concat(r,"개를 고쳤습니다.")),await m(!0)}return(0,n.jsxs)("div",{role:"status","data-testid":"skill-problems-banner",className:"border-b border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-foreground",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[r.length>0?(0,n.jsx)("span",{children:"스킬 ".concat(r.length,"개를 읽지 못했습니다.")}):(0,n.jsx)("span",{children:c}),h.length>0&&(0,n.jsx)("button",{type:"button",disabled:i,onClick:()=>{f()},className:"rounded border px-2 py-0.5 font-medium disabled:opacity-50",children:"고치기"}),r.some(e=>!e.fixable)&&(0,n.jsx)("button",{type:"button",onClick:()=>l(e=>!e),className:"underline underline-offset-2",children:o?"접기":"왜 못 고치나"}),r.length>0&&c&&(0,n.jsx)("span",{className:"text-muted-foreground",children:c})]}),o&&(0,n.jsx)("ul",{className:"mt-1 space-y-0.5 text-xs text-muted-foreground",children:r.filter(e=>!e.fixable).map(e=>{var t;return(0,n.jsxs)("li",{className:"break-words",children:["\xb7 ",e.name," — ",null!=(t=e.hint)?t:"파일을 직접 확인해 주세요."]},e.id)})})]})}let eW="elanous.pwa.sidebarOpen";function eB(e){let{children:t,activity:r}=e,[o,l]=(0,a.useState)(!1),{compact:i,setWide:d}=(0,q.K)(),c=(0,s.usePathname)(),u=i&&"/chat"===c,m=ey(),h=(0,eS.DE)(),f=null!=r?r:h,p=(0,s.usePathname)(),b=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=function(e,t,r,n){var a;let s=function(e,t){var r,n;let a=(null!=(r=e.split(/[?#]/)[0])?r:"/").replace(/\/+$/,"")||"/",s=null;for(let e of t){let t=e.href.split("?")[0].replace(/\/+$/,"")||"/";("/"===t?"/"===a:a===t||a.startsWith("".concat(t,"/")))&&(!s||t.length>s.href.length)&&(s={...e,href:t})}return s?{tab:s.href,visibility:null!=(n=s.visibility)?n:"public"}:{tab:"other",visibility:"other"}}(t,n);return e&&e.tab===s.tab?null:{record:{tab:s.tab,visibility:s.visibility,from:null!=(a=null==e?void 0:e.tab)?a:null,dwellMs:e?Math.max(0,r-e.at):null},next:{tab:s.tab,at:r}}}(b.current,null!=p?p:"/",Date.now(),x.Ue);e&&(b.current=e.next,(0,R.cY)("pwa.nav.visit",e.record))},[p]),(0,a.useEffect)(()=>{let e=()=>{let e=b.current;"hidden"===document.visibilityState&&e&&((0,R.cY)("pwa.nav.leave",{tab:e.tab,dwellMs:Math.max(0,Date.now()-e.at)}),b.current={tab:e.tab,at:1/0})},t=()=>{"visible"===document.visibilityState&&b.current&&!Number.isFinite(b.current.at)&&(b.current={tab:b.current.tab,at:Date.now()})};return document.addEventListener("visibilitychange",e),document.addEventListener("visibilitychange",t),()=>{document.removeEventListener("visibilitychange",e),document.removeEventListener("visibilitychange",t)}},[]),(0,a.useEffect)(()=>{"1"===window.localStorage.getItem(eW)&&l(!0)},[]);let g=()=>{l(e=>{let t=!e;return window.localStorage.setItem(eW,t?"1":"0"),t})},v=()=>{l(!1),window.localStorage.setItem(eW,"0")};return(0,n.jsx)(et.$M,{children:(0,n.jsxs)("div",{className:"flex h-screen w-full flex-col bg-background text-foreground",children:[!u&&(0,n.jsx)(eT,{}),!u&&(0,n.jsx)(eU,{}),!u&&(0,n.jsx)(eH,{}),!u&&(i?(0,n.jsx)(eN,{onToggleSidebar:g,sidebarOpen:o,activity:f,setWide:d,wakeControl:m}):(0,n.jsx)(ej,{onToggleSidebar:g,sidebarOpen:o,activity:f,onCompactView:()=>d(!1),wakeControl:m})),(0,n.jsxs)("div",{className:"flex flex-1 min-h-0",children:[o?(0,n.jsx)("aside",{className:"hidden md:flex md:w-56 md:flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground",children:(0,n.jsx)(O,{onNavigate:v,onClose:v})}):(0,n.jsx)("aside",{className:"hidden md:flex md:w-10 md:flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground",children:(0,n.jsx)(O,{onNavigate:v,compact:!0})}),o&&!u&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{type:"button","aria-label":"close menu",className:"fixed inset-0 z-30 bg-black/40 md:hidden",onClick:v}),(0,n.jsx)("aside",{className:i?"fixed left-0 top-10 z-40 h-[calc(100vh-2.5rem)] w-56 border-r border-sidebar-border bg-sidebar text-sidebar-foreground md:hidden":"fixed left-0 top-9 z-40 h-[calc(100vh-2.25rem)] w-56 border-r border-sidebar-border bg-sidebar text-sidebar-foreground md:hidden",children:(0,n.jsx)(O,{onNavigate:v,onClose:v})})]}),(0,n.jsx)("main",{className:"flex-1 overflow-auto min-w-0",children:t})]}),(0,n.jsx)(ez,{}),i&&(0,n.jsx)(eE,{})]})})}},97479:(e,t,r)=>{"use strict";r.d(t,{GC:()=>a,In:()=>d,OG:()=>l});var n=r(46124);let a="elanous.pwa.role",s="elanous:pwa-role";function o(){try{let e=window.localStorage.getItem(a);if("owner"===e||"contributor"===e||"general"===e)return e}catch(e){}return"general"}function l(e){try{window.localStorage.setItem(a,e)}catch(e){}"function"==typeof window.dispatchEvent&&window.dispatchEvent(new Event(s))}function i(e){if("function"!=typeof window.addEventListener)return()=>{};window.addEventListener(s,e);let t=t=>{(t.key===a||null===t.key)&&e()};return window.addEventListener("storage",t),()=>{window.removeEventListener(s,e),window.removeEventListener("storage",t)}}function d(){return(0,n.useSyncExternalStore)(i,o,()=>"general")}},98651:()=>{}},e=>{e.O(0,[7840,421,211,3324,3558,7327,1501,1612,9103,8060,9247,2699,5977,1986,8695,2463,2196,7358],()=>e(e.s=17115)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3141],{782:(e,t,a)=>{Promise.resolve().then(a.bind(a,66847))},3704:(e,t,a)=>{"use strict";a.d(t,{A:()=>d});var n=a(46124);let r=function(){for(var e=arguments.length,t=Array(e),a=0;a<e;a++)t[a]=arguments[a];return t.filter((e,t,a)=>!!e&&""!==e.trim()&&a.indexOf(e)===t).join(" ").trim()},l=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,a)=>a?a.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var s={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let i=(0,n.createContext)({}),o=(0,n.forwardRef)((e,t)=>{var a,l,o;let{color:d,size:c,strokeWidth:u,absoluteStrokeWidth:x,className:m="",children:h,iconNode:p,...g}=e,{size:f=24,strokeWidth:v=2,absoluteStrokeWidth:b=!1,color:j="currentColor",className:N=""}=null!=(a=(0,n.useContext)(i))?a:{},w=(null!=x?x:b)?24*Number(null!=u?u:v)/Number(null!=c?c:f):null!=u?u:v;return(0,n.createElement)("svg",{ref:t,...s,width:null!=(l=null!=c?c:f)?l:s.width,height:null!=(o=null!=c?c:f)?o:s.height,stroke:null!=d?d:j,strokeWidth:w,className:r("lucide",N,m),...!h&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(g)&&{"aria-hidden":"true"},...g},[...p.map(e=>{let[t,a]=e;return(0,n.createElement)(t,a)}),...Array.isArray(h)?h:[h]])}),d=(e,t)=>{let a=(0,n.forwardRef)((a,s)=>{let{className:i,...d}=a;return(0,n.createElement)(o,{ref:s,iconNode:t,className:r("lucide-".concat(l(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),i),...d})});return a.displayName=l(e),a}},46044:(e,t,a)=>{"use strict";a.d(t,{A:()=>n});let n=(0,a(3704).A)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]])},51706:(e,t,a)=>{"use strict";a.d(t,{A:()=>n});let n=(0,a(3704).A)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]])},66847:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>I});var n=a(55539),r=a(46124),l=a(21501),s=a(46044),i=a(51706),o=a(94306),d=a(34885),c=a(16241),u=a(21108),x=a(7456),m=a(97479),h=a(44373);let p={PLAN:"text-sky-600 dark:text-sky-400",ROUTE:"text-violet-600 dark:text-violet-400",VERIFY:"text-amber-600 dark:text-amber-400",HEAL:"text-emerald-600 dark:text-emerald-400",ESCALATE:"text-rose-600 dark:text-rose-400",SHIP:"text-green-700 dark:text-green-400 font-semibold"};function g(e){let{board:t,lines:a,mode:r,onSelectRun:l,selectedRunId:s,role:i="owner"}=e,o="max"===r,d="owner"===i,u=t.gauges,{snapshot:x}=t,m=d?0:t.stream.filter(e=>null!=e.why&&(0,c.Yu)(e.why)).length;return(0,n.jsxs)("div",{className:(0,h.cn)("space-y-4",o&&"live-max"),"data-live-mode":r,children:[(0,n.jsxs)("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-3 lg:grid-cols-6",children:[(0,n.jsx)(v,{label:"LIVE",hint:"도는 런",value:String(u.live),tone:u.live>0?"live":"idle",max:o}),(0,n.jsx)(v,{label:"DECISIONS/MIN",hint:"판단 ".concat(u.decisions,"건"),value:String(u.decisionsPerMin),max:o}),(0,n.jsx)(v,{label:"SHIPPED",hint:"병합\xb7PR",value:String(u.shipped),tone:"ok",max:o}),(0,n.jsx)(v,{label:"SELF-HEAL",hint:u.selfHealRuns?"수리 런 ".concat(u.selfHealRuns):"수리 런 없음",value:null===u.selfHealRate?"—":"".concat(u.selfHealRate,"%"),max:o}),(0,n.jsx)(v,{label:"BURN",hint:"토큰/분",value:f(u.burnTokensPerMin),max:o}),(0,n.jsx)(v,{label:"BLOCKED",hint:"막힌 런",value:String(x.counters.blocked),tone:x.counters.blocked?"bad":"idle",max:o})]}),(0,n.jsxs)("section",{className:"space-y-2","aria-label":"런",children:[(0,n.jsxs)("h2",{className:"text-sm font-medium",children:["런 ",(0,n.jsxs)("span",{className:"text-xs text-muted-foreground",children:["최근 ",x.windowMinutes,"분 \xb7 ",x.runs.length]})]}),0===x.runs.length?(0,n.jsx)("p",{className:"rounded-md border border-dashed p-4 text-sm text-muted-foreground","data-live-empty":!0,children:"지금 이 창에 런 신호가 없습니다 — 텔레그램이나 Intake 로 한 줄 보내면 여기에 런이 뜹니다."}):(0,n.jsx)("ul",{className:"space-y-1.5",children:x.runs.slice(0,12).map(e=>(0,n.jsx)(b,{run:e,round:t.rounds[e.runId],max:o,selected:e.runId===s,onSelect:l,owner:d},e.runId))})]}),(0,n.jsxs)("div",{className:"grid gap-4 lg:grid-cols-5",children:[(0,n.jsxs)("section",{className:"space-y-2 lg:col-span-3","aria-label":"판단 스트림",children:[(0,n.jsxs)("h2",{className:"flex flex-wrap items-center gap-2 text-sm font-medium",children:["판단 스트림",c.jg.map(e=>(0,n.jsx)("span",{className:(0,h.cn)("text-[11px] lg:text-[10px] font-mono",p[e]),children:e},e))]}),0===t.stream.length?(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"이 창에 판단 신호가 없습니다."}):(0,n.jsx)("ul",{className:"max-h-80 space-y-1 overflow-auto rounded-md border p-2 font-mono text-[11px]","data-live-stream":!0,children:t.stream.slice(0,40).map((e,t)=>(0,n.jsxs)("li",{className:(0,h.cn)("leading-relaxed",o&&0===t&&"live-line-in",o&&"SHIP"===e.kind&&"live-ship"),children:[(0,n.jsxs)("span",{className:"text-muted-foreground",children:[(0,n.jsx)("span",{title:e.ts,children:(0,c.qo)(e.ts)})," "]}),(0,n.jsxs)("span",{className:p[e.kind],children:["[",e.kind,"]"]})," ",d?e.what:(0,c.hS)(e.what.replace(/run-[0-9a-f]{8}-[^\s]*/gi,""),i),e.why&&(0,n.jsxs)("span",{className:"text-muted-foreground",children:[" \xb7 왜: ",(0,c.hS)(e.why,i)]}),e.purpose&&(0,n.jsxs)("span",{className:"text-muted-foreground",children:[" \xb7 목적: ",e.purpose]}),e.target&&(0,n.jsxs)("span",{className:"text-muted-foreground",children:[" → ",e.target]})]},"".concat(e.ts,"-").concat(t)))})]}),(0,n.jsxs)("section",{className:"space-y-2 lg:col-span-2","aria-label":"성적표",children:[(0,n.jsx)("h2",{className:"text-sm font-medium",children:"모델 성적표"}),0===t.scorecard.length?(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"이 창에 모델 요청이 없습니다."}):(0,n.jsxs)("table",{className:"w-full text-[11px]",children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{className:"text-muted-foreground",children:[(0,n.jsx)("th",{className:"text-left font-normal",children:"모델"}),(0,n.jsx)("th",{className:"text-right font-normal",children:"요청"}),(0,n.jsx)("th",{className:"text-right font-normal",children:"토큰"}),(0,n.jsx)("th",{className:"text-right font-normal",children:"과금"})]})}),(0,n.jsx)("tbody",{children:t.scorecard.slice(0,8).map(e=>{var t;return(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{className:"truncate",children:e.model}),(0,n.jsx)("td",{className:"text-right tabular-nums",children:e.requests}),(0,n.jsx)("td",{className:"text-right tabular-nums",children:f(e.tokens)}),(0,n.jsx)("td",{className:"text-right text-muted-foreground",children:null!=(t=e.billing)?t:"—"})]},e.model)})})]}),(0,n.jsx)("h2",{className:"pt-2 text-sm font-medium",children:"리뷰 판정"}),(0,n.jsx)(j,{items:x.reviewVerdicts,max:o})]})]}),(0,n.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[d?(0,n.jsxs)("section",{className:"space-y-2","aria-label":"흐르는 로그",children:[(0,n.jsx)("h2",{className:"text-sm font-medium",children:"흐르는 로그"}),(0,n.jsx)("pre",{className:"max-h-60 overflow-auto rounded-md border bg-muted/30 p-2 text-[11px] leading-relaxed","data-live-log":!0,children:a.slice(0,60).join("\n")||"—"})]}):m>0?(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","data-live-folded-errors":!0,children:["오류 ",m,"건 접힘"]}):null,(0,n.jsxs)("section",{className:"space-y-2","aria-label":"빈 칸 표",children:[(0,n.jsxs)("h2",{className:"text-sm font-medium",children:["빈 칸 표 ",(0,n.jsx)("span",{className:"text-xs text-muted-foreground",children:"판단 로그에 없는 칸"})]}),0===t.missing.length?(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"빈 칸 없음."}):(0,n.jsx)("table",{className:"w-full text-[11px]","data-live-missing":!0,children:(0,n.jsx)("tbody",{children:t.missing.slice(0,10).map(e=>(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{className:"font-mono",children:e.key}),(0,n.jsx)("td",{className:"text-right tabular-nums",children:e.count}),(0,n.jsx)("td",{className:"pl-2 text-muted-foreground",children:e.lacks.join(" \xb7 ")})]},e.key))})})]})]})]})}function f(e){return e>=1e6?"".concat((e/1e6).toFixed(1),"M"):e>=1e3?"".concat((e/1e3).toFixed(e>=1e5?0:1),"k"):String(e)}function v(e){let{label:t,hint:a,value:r,tone:l="idle",max:s}=e;return(0,n.jsxs)("div",{className:(0,h.cn)("rounded-lg border p-3","live"===l&&"border-primary/50","bad"===l&&"border-error/50","ok"===l&&"border-green-600/40",s&&"live-gauge",s&&"live"===l&&"live-glow"),children:[(0,n.jsx)("div",{className:"font-mono text-[11px] lg:text-[10px] tracking-wider text-muted-foreground",children:t}),(0,n.jsx)("div",{className:(0,h.cn)("text-2xl font-semibold tabular-nums",s&&"live-count"),"data-live-gauge":t,children:r}),(0,n.jsx)("div",{className:"text-[11px] lg:text-[10px] text-muted-foreground",children:a})]})}function b(e){let{run:t,round:a,max:r,selected:l,onSelect:s,owner:i}=e;return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button","data-live-run":t.runId,onClick:()=>null==s?void 0:s(t.runId),className:(0,h.cn)("flex w-full items-center gap-3 rounded-md border px-3 py-2 text-left text-xs hover:bg-muted/40",l&&"ring-1 ring-primary"),children:[(0,n.jsx)("span",{className:"w-24 shrink-0 truncate font-mono text-[11px] text-muted-foreground",children:i?t.runId.replace(/^run-/,"").slice(0,8):"런"}),(0,n.jsx)("span",{className:"flex flex-1 gap-1","aria-label":"단계",children:c.lV.map(e=>{let a=t.stages[e],l=t.current===e;return(0,n.jsx)("span",{title:"".concat(c.fQ[e]," \xb7 ").concat(null!=a?a:"신호 없음"),"data-stage":e,"data-tone":null!=a?a:"none",className:(0,h.cn)("h-2 flex-1 rounded-full bg-muted","info"===a&&"bg-primary/60","ok"===a&&"bg-green-600","bad"===a&&"bg-error",r&&l&&"bad"!==a&&"live-pulse",r&&l&&"bad"===a&&"live-pulse-bad")},e)})}),(0,n.jsx)("span",{className:"w-14 shrink-0 text-right font-mono text-[11px] lg:text-[10px] text-muted-foreground",children:a?"R ".concat(a,"/3"):""}),(0,n.jsx)("span",{className:"w-24 shrink-0 text-right text-[11px]",children:t.blocked?(0,n.jsx)("span",{className:"text-error",children:"막힘"}):"ok"===t.stages.land?(0,n.jsxs)("span",{className:"text-green-700",children:["착지",t.pr?" #".concat(t.pr):""]}):t.current?c.fQ[t.current]:""})]})})}function j(e){let{items:t,max:a}=e,r=Math.max(1,...t.map(e=>e.count));return 0===t.length?(0,n.jsx)("div",{className:"text-[11px] text-muted-foreground",children:"—"}):(0,n.jsx)("ul",{className:"space-y-1",children:t.slice(0,6).map(e=>(0,n.jsxs)("li",{className:"flex items-center gap-2 text-[11px]",children:[(0,n.jsx)("span",{className:"w-24 shrink-0 truncate",children:e.name}),(0,n.jsx)("span",{className:"h-1.5 flex-1 rounded-full bg-muted",children:(0,n.jsx)("span",{className:(0,h.cn)("block h-1.5 rounded-full bg-primary/70",a&&"transition-[width] duration-700"),style:{width:"".concat(e.count/r*100,"%")}})}),(0,n.jsx)("span",{className:"w-8 text-right tabular-nums",children:e.count})]},e.name))})}var N=a(89578),w=a(43422);let y=[15,60,360,1440],k="@active";function S(){return(0,o.Qj)()?(0,n.jsx)(E,{}):(0,n.jsxs)("div",{className:"mx-auto max-w-2xl space-y-2 p-6",children:[(0,n.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Live"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Connect to a NEXUS daemon to watch runs live."})]})}function E(){var e,t,a,h,p,f;let v=(0,m.In)(),[b,j]=(0,r.useState)("practical"),[S,E]=(0,r.useState)(null),[I,C]=(0,r.useState)("all"),[L,R]=(0,r.useState)(!1);(0,r.useEffect)(()=>{try{window.localStorage.removeItem("elanous.live.mode")}catch(e){}},[]),(0,r.useEffect)(()=>{if(!S)return;let e=setTimeout(()=>{j("practical"),E(null)},Math.max(0,S-Date.now()));return()=>clearTimeout(e)},[S]);let H=(0,o.M1)(),[D,P]=(0,r.useState)(null),X=e=>{e.on?(j("max"),C(e.scope&&"all"!==e.scope?"run":"all"),E(e.until?Date.parse(e.until):Date.now()+18e5)):(j("practical"),E(null))};(0,r.useEffect)(()=>{let e=!0;return H.getLiveDetail().then(t=>{e&&X(t)}).catch(()=>{}),()=>{e=!1}},[H]);let q=e=>{R(!1),P(null);let t="run"===e&&z?z:"all";H.setLiveDetail({scope:t,ttlMin:30,by:"pwa-live"}).then(X).catch(e=>P(e instanceof Error?e.message:String(e)))},[O,U]=(0,r.useState)(60),[_,B]=(0,r.useState)(""),T=(0,r.useRef)(!1);(0,r.useEffect)(()=>{"max"!==b||T.current||(T.current=!0,B(k),U(1440)),"max"!==b&&(T.current=!1)},[b]);let[z,F]=(0,r.useState)(null),{logs:W,runs:K,instances:V}=(0,d.HI)({store:_||void 0,windowMinutes:O}),[Q,Y]=(0,r.useState)(()=>Date.now());(0,r.useEffect)(()=>{Y(Date.now())},[W.dataUpdatedAt]);let[Z,G]=(0,r.useState)(!1);(0,r.useEffect)(()=>{"public"===new URLSearchParams(window.location.search).get("capture")&&G(!0)},[]);let $=null!=(h=null==(e=W.data)?void 0:e.logs)?h:M,J=(0,r.useMemo)(()=>Z?(0,x.yR)($):$,[$,Z]),ee=(0,l.I)({queryKey:["live","shipped",O],queryFn:()=>H.getLiveShipped("".concat(O,"m")),refetchInterval:6e4}),et=(0,r.useMemo)(()=>{var e,t,a;let n=(0,c.Hc)(J,null!=(a=null==(e=K.data)?void 0:e.entries)?a:[],{now:Q,windowMinutes:O}),r=null==(t=ee.data)?void 0:t.merged;if("number"!=typeof r)return n;let l=(0,u.NZ)(J).length;return{...n,gauges:{...n.gauges,shipped:r,selfHealRuns:l,selfHealRate:r>0?Math.round(l/r*100):null}}},[J,K.data,Q,O,ee.data]),ea=O>0?Math.round(J.length/O*10)/10:0,en=Math.round(JSON.stringify(J).length/1024),er=(0,r.useMemo)(()=>J.filter(e=>{var t;return!z||(null==(t=e.data)?void 0:t.runId)===z}).map(e=>(0,c.BP)(e)),[J,z]),el=(null!=(p=null==(t=V.data)?void 0:t.instances)?p:[]).filter(e=>!1!==e.dbExists&&!e.current);return(0,n.jsxs)("div",{className:"mx-auto ".concat("max"===b?"max-w-none space-y-2 p-2":"max-w-6xl space-y-4 p-4 sm:p-6"),children:[(0,n.jsx)("style",{children:A}),(0,n.jsxs)("header",{className:"flex flex-wrap items-center gap-3 ".concat("max"===b?"justify-end":"justify-between"),children:[(0,n.jsxs)("div",{className:"max"===b?"hidden":"",children:[(0,n.jsxs)("h1",{className:"flex items-center gap-2 text-xl font-semibold tracking-tight",children:[(0,n.jsx)(s.A,{className:"h-5 w-5","aria-hidden":!0})," Live"]}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"하니스 런이 판단하고 기획하는 신호 — 보이는 수는 전부 진짜다."})]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[(0,n.jsx)("select",{"aria-label":"시간 창",value:O,onChange:e=>U(Number(e.target.value)),className:"rounded-md border bg-background px-2 py-1",children:y.map(e=>(0,n.jsx)("option",{value:e,children:e<60?"".concat(e,"분"):"".concat(e/60,"시간")},e))}),(0,n.jsxs)("select",{"aria-label":"신호 출처",value:_,onChange:e=>B(e.target.value),className:"max-w-48 rounded-md border bg-background px-2 py-1",children:[(0,n.jsx)("option",{value:"",children:"이 인스턴스"}),(0,n.jsx)("option",{value:k,children:"전체(연합 \xb7 최근 24시간에 쓰인 우주)"}),el.map(e=>(0,n.jsx)("option",{value:e.name,children:e.name},e.name))]}),(0,n.jsx)("button",{type:"button","data-elanous-action":"live-public-capture","aria-pressed":Z,onClick:()=>G(e=>!e),title:"녹화\xb7스크린샷용 — 계정 이름 → account-N \xb7 크레딧\xb7USD 숨김 \xb7 홈 경로 가림",className:"rounded-md border px-2 py-1 ".concat(Z?"border-emerald-500 text-emerald-600 dark:text-emerald-300":"hover:bg-muted"),children:Z?"● 공개 캡처 켜짐":"공개 캡처"}),"max"===b?(0,n.jsxs)("button",{type:"button","data-elanous-action":"live-max-off",onClick:()=>{P(null),H.setLiveDetail({scope:"all",ttlMin:0,by:"pwa-live"}).then(X).catch(e=>P(e instanceof Error?e.message:String(e))),j("practical"),E(null)},className:"inline-flex items-center gap-1 rounded-md border border-primary px-2 py-1 text-primary hover:bg-muted",children:[(0,n.jsx)(i.A,{className:"h-3.5 w-3.5","aria-hidden":!0})," 화려함 MAX 켜짐 \xb7 끄기"]}):(0,n.jsxs)("button",{type:"button","data-elanous-action":"live-max-on",onClick:()=>R(!0),className:"inline-flex items-center gap-1 rounded-md border px-2 py-1 hover:bg-muted",children:[(0,n.jsx)(i.A,{className:"h-3.5 w-3.5","aria-hidden":!0})," 화려함 MAX"]})]})]}),L&&(0,n.jsxs)("div",{role:"dialog","aria-label":"화려함 MAX 켜기",className:"space-y-2 rounded-md border border-primary/50 bg-primary/5 p-3 text-sm","data-live-max-confirm":!0,children:[(0,n.jsx)("p",{className:"font-medium",children:"화려함 MAX 를 켤까요?"}),(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["마케팅(시연\xb7녹화)과 상세 런 디버깅용입니다. 켜면 하니스가 판단마다 \xab왜\xb7목적\xb7보낸 곳\xbb을 추가로 기록합니다(부하가 듭니다) — 30분 뒤 자동으로 꺼지고, 다른 기기에서도 같은 상태로 보입니다. 지금 이 화면이 받는 신호: 분당 ",ea,"건 \xb7 응답 약 ",en,"KB."]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-2 text-xs",children:[(0,n.jsx)("button",{type:"button","data-elanous-action":"live-max-all",onClick:()=>q("all"),className:"rounded-md border px-2 py-1 hover:bg-muted",children:"전체로 켜기"}),(0,n.jsx)("button",{type:"button","data-elanous-action":"live-max-run",disabled:!z,onClick:()=>q("run"),className:"rounded-md border px-2 py-1 hover:bg-muted disabled:opacity-50",children:z?"이 런만 켜기":"이 런만 켜기(먼저 런을 고르세요)"}),(0,n.jsx)("button",{type:"button",onClick:()=>R(!1),className:"rounded-md px-2 py-1 text-muted-foreground hover:bg-muted",children:"취소"})]})]}),D&&(0,n.jsxs)("p",{className:"rounded-md bg-error/10 p-2 text-xs text-error",children:["MAX 스위치를 못 바꿨다: ",D]}),"max"===b&&(0,n.jsxs)("p",{className:"rounded-md border border-primary/40 px-3 py-1 text-[11px] lg:text-[10px] text-muted-foreground","data-live-cost-badge":!0,children:["화려함 MAX \xb7 범위 ","run"===I&&z?"런 ".concat(z.replace(/^run-/,"").slice(0,8)):"전체"," \xb7 받는 신호 분당 ",ea,"건 \xb7 응답 약 ",en,"KB",S?" \xb7 ".concat(Math.max(0,Math.round((S-Q)/6e4)),"분 뒤 자동 꺼짐"):""," \xb7 하니스 판단 이벤트 ",et.emitted,"건"]}),W.error?(0,n.jsxs)("p",{className:"rounded-md bg-error/10 p-3 text-sm text-error",children:["신호를 못 읽었다: ",W.error instanceof Error?W.error.message:String(W.error)]}):null,z&&(0,n.jsx)(w.RT,{runId:z,run:null!=(f=et.snapshot.runs.find(e=>e.runId===z))?f:null,lines:er,onClose:()=>F(null)}),"max"===b?(0,n.jsx)(N.xl,{board:et,rows:J,windowMinutes:O,sourceLabel:_===k?"federated":_||"this instance",shippedSource:"number"==typeof(null==(a=ee.data)?void 0:a.merged)?"github":"log",publicCapture:Z,role:v,onSelectRun:e=>F(t=>t===e?null:e)}):(0,n.jsx)(g,{board:et,lines:er,mode:b,role:v,selectedRunId:z,onSelectRun:e=>F(t=>t===e?null:e)}),(0,n.jsxs)("p",{className:"text-[11px] text-muted-foreground ".concat("max"===b?"hidden":""),children:["갱신 5초 \xb7 출처 ",(0,n.jsx)("code",{children:"/v1/logs"})," \xb7 ",(0,n.jsx)("code",{children:"/v1/harness/runs"})," \xb7 비밀처럼 보이는 조각은 가린다."]})]})}let M=[],A="\n@keyframes live-pulse { 0%,100% { opacity: 1; box-shadow: 0 0 0 0 rgba(99,102,241,0) } 50% { opacity: .55; box-shadow: 0 0 10px 2px rgba(99,102,241,.55) } }\n@keyframes live-pulse-bad { 0%,100% { opacity: 1 } 50% { opacity: .4; box-shadow: 0 0 10px 2px rgba(239,68,68,.6) } }\n@keyframes live-glow { 0%,100% { box-shadow: 0 0 0 0 rgba(99,102,241,0) } 50% { box-shadow: 0 0 18px 2px rgba(99,102,241,.35) } }\n@keyframes live-line-in { from { transform: translateY(-6px); opacity: 0 } to { transform: none; opacity: 1 } }\n@keyframes live-ship { 0% { background: rgba(34,197,94,.35) } 100% { background: transparent } }\n.live-max .live-pulse { animation: live-pulse 1.4s ease-in-out infinite }\n.live-max .live-pulse-bad { animation: live-pulse-bad 1s ease-in-out infinite }\n.live-max .live-glow { animation: live-glow 2.4s ease-in-out infinite }\n.live-max .live-line-in { animation: live-line-in .45s ease-out }\n.live-max .live-ship { animation: live-ship 2.4s ease-out; font-size: 12px }\n.live-max .live-gauge { background: radial-gradient(120% 120% at 0% 0%, rgba(99,102,241,.10), transparent 60%) }\n.live-max .live-count { text-shadow: 0 0 12px rgba(99,102,241,.45) }\n.live-stage { background: radial-gradient(120% 90% at 50% 0%, rgba(79,70,229,.25), rgba(2,6,23,.98) 60%), #020617; box-shadow: inset 0 0 0 1px rgba(99,102,241,.25) }\n.live-stage .live-line-in { animation: live-line-in .45s ease-out }\n@keyframes live-v5-marquee { from { transform: translateX(0) } to { transform: translateX(-50%) } }\n@keyframes live-v5-blink { 0%,100% { opacity: 1 } 50% { opacity: .45 } }\n@keyframes live-v5-hot { 0%,100% { box-shadow: 0 0 14px #a78bfa55, inset 0 0 14px #a78bfa22 } 50% { box-shadow: 0 0 26px #a78bfa99, inset 0 0 22px #a78bfa44 } }\n.live-v5-marquee { animation: live-v5-marquee linear infinite }\n.live-v5-blink { animation: live-v5-blink 1.6s ease-in-out infinite }\n.live-v5-hot { animation: live-v5-hot 1.8s ease-in-out infinite }\n@media (prefers-reduced-motion: reduce) { .live-max *, .live-v5 * { animation: none !important; transition: none !important } }\n";function I(){return(0,n.jsx)(S,{})}},97479:(e,t,a)=>{"use strict";a.d(t,{GC:()=>r,In:()=>d,OG:()=>i});var n=a(46124);let r="elanous.pwa.role",l="elanous:pwa-role";function s(){try{let e=window.localStorage.getItem(r);if("owner"===e||"contributor"===e||"general"===e)return e}catch(e){}return"general"}function i(e){try{window.localStorage.setItem(r,e)}catch(e){}"function"==typeof window.dispatchEvent&&window.dispatchEvent(new Event(l))}function o(e){if("function"!=typeof window.addEventListener)return()=>{};window.addEventListener(l,e);let t=t=>{(t.key===r||null===t.key)&&e()};return window.addEventListener("storage",t),()=>{window.removeEventListener(l,e),window.removeEventListener("storage",t)}}function d(){return(0,n.useSyncExternalStore)(o,s,()=>"general")}}},e=>{e.O(0,[211,3324,3558,1501,5360,2463,2196,7358],()=>e(e.s=782)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[125],{30212:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>T});var a=n(55539),r=n(46124),l=n(58603),s=n(21501),o=n(94306);let i=new Set(["fail","failed","error","blocked","rejected","aborted","unconvergeable","timeout"]);function d(e,t,n){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:900,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:4e3,l=e[t],s=e[t+1];if(!l||!s)return a/n;let o=Date.parse(s.at)-Date.parse(l.at);return(Number.isFinite(o)?Math.min(r,Math.max(a,o/60)):a)/Math.max(1,n)}function c(e){let t=Date.parse(e);return Number.isFinite(t)?new Date(t+324e5).toISOString().slice(11,19):"—"}function u(e){if(null===e||!Number.isFinite(e)||e<0)return"—";if(e<1e3)return"".concat(Math.round(e),"ms");let t=Math.round(e/1e3);if(t<60)return"".concat(t,"초");let n=Math.floor(t/60);return n<60?"".concat(n,"분 ").concat(t%60,"초"):"".concat(Math.floor(n/60),"시간 ").concat(n%60,"분")}var p=n(88928),m=n(69280);n(71588),n(34188);var x=n(81663),h=n(41778);let f="group:",b=e=>e.startsWith(f);function g(e){let t=new Map;for(let n of e.nodes){let e="string"==typeof n.group?n.group.trim():"";e&&t.set(n.node_id,e)}return t}let v={pending:"var(--border, #94a3b8)",running:"#f59e0b",passed:"var(--chart-2, #16a34a)",failed:"var(--destructive, #ef4444)"},y={pending:"대기",running:"도는 중",passed:"통과",failed:"실패"},j={agent:"#3b82f6",gate:"#f59e0b",git:"#10b981",judge:"#a855f7",observe:"#06b6d4",hitl:"#f43f5e",subgraph:"#8b5cf6"},w={pending:"var(--border, #cbd5e1)",running:"#f59e0b",passed:"var(--chart-2, #16a34a)",failed:"var(--destructive, #ef4444)"},N={pending:"대기",running:"도는 중",passed:"통과",failed:"실패"},k={pending:"workflow-node-status",running:"workflow-node-status workflow-node-status-running",passed:"workflow-node-status workflow-node-status-done",failed:"workflow-node-status workflow-node-status-failed"},M=[1,4,16],I={live:function(e){var t;let{data:n}=e;return(0,a.jsxs)("div",{"data-testid":"live-node-".concat(n.label),"data-state":n.state,className:"relative rounded-lg border-2 bg-surface px-3 py-2 shadow-sm transition-opacity duration-300 ".concat(k[n.state]," ").concat("pending"===n.state?n.unrecorded?"opacity-35":"opacity-60":""),style:{width:x.E,height:n.height,borderColor:w[n.state],borderLeft:"5px solid ".concat(null!=(t=j[n.kind])?t:"#64748b"),outline:n.focused?"2px solid var(--accent, #8b5cf6)":void 0,outlineOffset:3},children:[(0,a.jsx)(p.h7,{id:"in",type:"target",position:m.yX.Left,className:"!pointer-events-none !opacity-0"}),(0,a.jsxs)("div",{className:"flex items-center gap-1 text-[11px] text-text-tertiary",children:[(0,a.jsx)("span",{children:"subgraph"===n.kind?"묶음 \xb7 눌러서 펼치기":n.kind}),n.entry&&(0,a.jsx)("span",{className:"rounded bg-success/15 px-1 text-success",children:"시작"}),n.terminal&&(0,a.jsx)("span",{className:"rounded bg-accent/15 px-1 text-accent",children:"끝"}),(0,a.jsx)("span",{className:"ml-auto font-medium",style:{color:w[n.state]},children:n.unrecorded?"기록 없음":N[n.state]})]}),(0,a.jsx)("div",{className:"truncate font-mono text-sm font-semibold text-text-primary",children:b(n.label)?"▣ ".concat(n.label.slice(f.length)):n.label}),(0,a.jsxs)("div",{className:"truncate text-[11px] text-text-tertiary",title:n.recipe,children:[n.recipe," \xb7 최대 ",n.maxVisits,"회"]}),n.visits>1&&(0,a.jsxs)("span",{"data-testid":"visit-badge-".concat(n.label),className:"absolute -right-2 -top-2 rounded-full bg-amber-500 px-1.5 text-xs font-bold text-white shadow",children:["\xd7",n.visits]}),(0,a.jsx)(p.h7,{id:"out",type:"source",position:m.yX.Right,className:"!pointer-events-none !opacity-0"})]})},groupBox:function(e){let{data:t}=e,n=v[t.state];return(0,a.jsx)("div",{"data-testid":"group-box-".concat(t.group),"data-state":t.state,className:"pointer-events-none rounded-xl border-2 border-dashed ".concat(t.unrecorded?"opacity-60":""),style:{width:t.width,height:t.height,borderColor:n,background:"color-mix(in srgb, ".concat(n," 6%, transparent)")},children:(0,a.jsxs)("div",{className:"pointer-events-auto flex items-center gap-2 px-2.5 py-1 text-xs",children:[(0,a.jsx)("span",{className:"font-mono font-semibold text-text-primary",children:t.group}),(0,a.jsx)("span",{className:"text-[11px]",style:{color:n},children:t.unrecorded?"기록 없음":y[t.state]}),(0,a.jsxs)("span",{className:"text-[11px] text-text-tertiary",children:["노드 ",t.memberCount]}),t.onCollapse&&(0,a.jsx)("button",{type:"button",onClick:e=>{var n;e.stopPropagation(),null==(n=t.onCollapse)||n.call(t,t.group)},className:"nodrag ml-auto rounded border border-border bg-background px-1.5 text-[11px] text-text-secondary",children:"접기"})]})})}},C={live:function(e){let{id:t,data:n,markerEnd:r}=e;if(!(null==n?void 0:n.route))return null;let{route:l}=n,s=h.Bu[l.family],o="back"===l.kind;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(p.tE,{id:t,path:l.path,markerEnd:r,style:{stroke:s,strokeWidth:n.active?4:n.taken?3:1.5,opacity:n.active||n.taken?1:.22,transition:"opacity 300ms, stroke-width 300ms",...o?{strokeDasharray:"6 4"}:{}}}),n.active&&(0,a.jsxs)("g",{"data-testid":"edge-token-".concat(l.from,"-").concat(l.to),children:[(0,a.jsx)("circle",{r:7,fill:s,opacity:.25,children:(0,a.jsx)("animateMotion",{dur:"".concat(n.tokenMs,"ms"),fill:"freeze",path:l.path})}),(0,a.jsx)("circle",{r:4.5,fill:s,stroke:"var(--background, #fff)",strokeWidth:1.5,children:(0,a.jsx)("animateMotion",{dur:"".concat(n.tokenMs,"ms"),fill:"freeze",path:l.path})})]},n.tokenKey),l.label&&(0,a.jsx)(p.rV,{children:(0,a.jsx)("div",{className:"nodrag nopan pointer-events-none absolute whitespace-nowrap rounded-full border px-1.5 font-mono text-[11px] leading-4",style:{transform:"translate(-50%, -50%) translate(".concat(l.label.x,"px, ").concat(l.label.y,"px)"),width:l.label.width,textAlign:"center",borderColor:s,color:s,background:"var(--background, #fff)",opacity:n.active||n.taken?1:.35,fontWeight:n.active?700:500},children:l.label.text})})]})}};function S(e){var t,n,l,m,h,v;let{runId:y,initialFolded:j=!1}=e,w=(0,o.M1)(),N=(0,s.I)({queryKey:["harness-run-traversal",y],queryFn:()=>w.getHarnessRunTraversal(y),refetchInterval:e=>{var t;return(null==(t=e.state.data)?void 0:t.status)==="running"&&4e3}}),k=N.data,S=(0,s.I)({queryKey:["run-graph",null==k?void 0:k.graphId],queryFn:()=>w.getRunGraph(k.graphId),enabled:!!(null==k?void 0:k.graphId),retry:!1,staleTime:6e4}),_=(0,r.useMemo)(()=>{var e;return null!=(e=null==k?void 0:k.steps)?e:[]},[k]),E=(0,r.useMemo)(()=>{var e;if(!k)return null;let t=S.data;return t?function(e,t){let n=new Set(e.nodes.map(e=>e.node_id)),a=[...new Set(t.map(e=>e.node))].filter(e=>!n.has(e)),r=t=>e.edges.filter(e=>e.from===t).flatMap(e=>e.map?Object.values(e.map):e.to?[e.to]:[]),l=[];for(let e=1;e<t.length;e+=1){let n=t[e-1].node,a=t[e].node;r(n).includes(a)||l.some(e=>e.from===n&&e.to===a)||l.push({from:n,to:a})}return 0===a.length&&0===l.length?e:{...e,nodes:[...e.nodes,...a.map(e=>({node_id:e,kind:"agent",recipe:"원장에서 본 노드(선언 밖)",max_visits:t.filter(t=>t.node===e).length}))],edges:[...e.edges,...l]}}(t,_):S.isLoading&&k.graphId?null:function(e,t){var n,a,r;let l=[...new Set(t.map(e=>e.node))],s=new Map;for(let e=1;e<t.length;e+=1){let r=t[e-1],l=null!=(n=s.get(r.node))?n:{},o=null!=(a=r.outcome)?a:"pass";Object.values(l).includes(t[e].node)||(l[l[o]?"".concat(o,"\xb7").concat(t[e].node):o]=t[e].node),s.set(r.node,l)}return{id:e,source:"core",editable:!1,entry_node:null!=(r=l[0])?r:"",terminal_nodes:t.length?[t.at(-1).node]:[],nodes:l.map(e=>({node_id:e,kind:"agent",recipe:"원장에서 본 노드",max_visits:t.filter(t=>t.node===e).length})),edges:[...s.entries()].map(e=>{let[t,n]=e;return{from:t,on:"outcome",map:n}})}}(null!=(e=k.graphId)?e:k.runId,_)},[k,S.data,S.isLoading,_]),[T,O]=(0,r.useState)(()=>new Set),R=(0,r.useMemo)(()=>E?[...new Set(g(E).values())]:[],[E]),F=(0,r.useMemo)(()=>E?g(E):new Map,[E]),D=(0,r.useRef)(!1);(0,r.useEffect)(()=>{j&&!D.current&&0!==R.length&&(D.current=!0,O(new Set(R)))},[j,R]);let V=(0,r.useMemo)(()=>E?function(e,t){let n=g(e),a=e=>{let a=n.get(e);return a&&t.has(a)?"".concat(f).concat(a):e};if(![...n.values()].some(e=>t.has(e)))return{graph:e,resolve:a};let r=[],l=new Set;for(let t of e.nodes){let s=a(t.node_id);if(l.has(s))continue;if(l.add(s),s===t.node_id){r.push(t);continue}let o=n.get(t.node_id),i=e.nodes.filter(e=>n.get(e.node_id)===o);r.push({node_id:s,kind:"subgraph",recipe:"묶음 \xb7 노드 ".concat(i.length,"개"),max_visits:Math.max(...i.map(e=>e.max_visits)),group:o})}let s=[];for(let t of e.edges){let e=a(t.from);if(t.map){let n={};for(let[r,l]of Object.entries(t.map)){let t=a(l);t!==e&&(n[r]=t)}Object.keys(n).length&&s.push({from:e,...t.on?{on:t.on}:{},map:n})}else if(t.to){let n=a(t.to);n!==e&&s.push({from:e,to:n})}}let o=[];for(let e of s){let t=o.find(t=>t.from===e.from&&!!t.map==!!e.map&&(e.map||t.to===e.to));if(!t){o.push(e.map?{...e,map:{...e.map}}:e);continue}if(e.map&&t.map)for(let[n,a]of Object.entries(e.map))n in t.map?t.map[n]===a||Object.values(t.map).includes(a)||(t.map["".concat(n,"\xb7").concat(a.replace(f,""))]=a):t.map[n]=a}let i=a(e.entry_node),d=[...new Set(e.terminal_nodes.map(a))];return{graph:{...e,entry_node:i,terminal_nodes:d,nodes:r,edges:o},resolve:a}}(E,T):null,[E,T]),z=(0,r.useMemo)(()=>V?(0,x.h)(V.graph):null,[V]),K=(0,r.useMemo)(()=>V?_.map(e=>({...e,node:V.resolve(e.node)})):_,[V,_]),L=(0,r.useMemo)(()=>{var e;return null!=(e=null==z?void 0:z.edges.map(e=>({id:e.id,from:e.source,to:e.target,outcomes:e.data.route.outcomes})))?e:[]},[z]),Z=(null==k?void 0:k.status)==="running",[q,A]=(0,r.useState)(null),W=null!=q?q:Z?"live":"replay",[B,P]=(0,r.useState)(-1),[H,G]=(0,r.useState)(!1),[X,$]=(0,r.useState)(!1),[Q,U]=(0,r.useState)(4),[J,Y]=(0,r.useState)(null),[ee,et]=(0,r.useState)(!0),en=(0,r.useRef)(null),ea=(0,r.useRef)(null),[er,el]=(0,r.useState)(0),es=(0,r.useRef)(!1);(0,r.useEffect)(()=>{k&&!es.current&&0!==_.length&&(es.current=!0,"running"===k.status?(P(_.length-1),G(null===_.at(-1).outcome)):(P(0),G(!0),$(!0)))},[k,_]),(0,r.useEffect)(()=>{"live"===W&&0!==_.length&&(P(_.length-1),G(null===_.at(-1).outcome))},[W,_]),(0,r.useEffect)(()=>{if("replay"!==W||!X||0===_.length)return;let e=d(_,B,Q),t=window.setTimeout(()=>G(!1),e/2),n=window.setTimeout(()=>{if(B>=_.length-1)return void $(!1);P(e=>e+1),G(!0)},e);return()=>{window.clearTimeout(t),window.clearTimeout(n)}},[W,X,B,Q,_]);let eo=(0,r.useMemo)(()=>new Set(K.map(e=>e.node)),[K]),ei=(0,r.useMemo)(()=>{var e;return function(e,t,n,a){let r=arguments.length>4&&void 0!==arguments[4]&&arguments[4],l=Object.fromEntries(e.map(e=>[e,"pending"])),s={},o=new Set,d=null,c=Math.min(a,n.length-1);for(let e=0;e<=c;e+=1){var u,p;let a=n[e];if(s[a.node]=(null!=(u=s[a.node])?u:0)+1,l[a.node]=e===c&&r||null===(p=a.outcome)?"running":i.has(p.toLowerCase())?"failed":"passed",e>0){let r=n[e-1],l=function(e,t,n,a){var r;let l=e.filter(e=>e.from===t&&e.to===a);return 0===l.length?null:null!=(r=l.find(e=>null!==n&&e.outcomes.includes(n)))?r:l[0]}(t,r.node,r.outcome,a.node);l&&(o.add(l.id),e===c&&(d=l.id))}}return{nodeState:l,visits:s,takenEdges:o,activeEdge:d,cursor:c}}(null!=(e=null==z?void 0:z.nodes.map(e=>e.id))?e:[],L,K,B,H)},[z,L,K,B,H]),ed=(0,r.useCallback)(e=>O(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),[]),ec="replay"===W?Math.max(250,.6*d(_,Math.max(0,B-1),Q)):1200,eu=(0,r.useMemo)(()=>{if(!z)return[];let e=z.nodes.map(e=>{var t,n;return{...e,type:"live",zIndex:1,data:{...e.data,state:null!=(t=ei.nodeState[e.id])?t:"pending",visits:null!=(n=ei.visits[e.id])?n:0,focused:J===e.id,unrecorded:!Z&&!eo.has(e.id)}}});return[...(function(e,t){let n=new Map;for(let r of e){var a;let e=t.get(r.id);!e||b(r.id)||n.set(e,[...null!=(a=n.get(e))?a:[],r])}return[...n.entries()].map(e=>{let[t,n]=e,a=Math.min(...n.map(e=>e.position.x)),r=Math.min(...n.map(e=>e.position.y)),l=Math.max(...n.map(e=>e.position.x+e.width)),s=Math.max(...n.map(e=>e.position.y+e.height));return{id:"box:".concat(t),group:t,members:n.map(e=>e.id),x:a-18,y:r-18-26,width:l-a+36,height:s-r+36+26}})})(z.nodes.map(e=>({id:e.id,position:e.position,width:x.E,height:e.data.height})),F).map(e=>{var t;return{id:e.id,type:"groupBox",position:{x:e.x,y:e.y},zIndex:0,selectable:!1,draggable:!1,focusable:!1,data:{group:e.group,memberCount:e.members.length,width:e.width,height:e.height,onCollapse:ed,state:(t=e.members.map(e=>{var t;return null!=(t=ei.nodeState[e])?t:"pending"})).includes("running")?"running":t.includes("failed")?"failed":t.includes("passed")?"passed":"pending",unrecorded:!Z&&e.members.every(e=>!eo.has(e))}}}),...e]},[z,ei,J,Z,eo,F,ed]),ep=(0,r.useMemo)(()=>{var e;return null!=(e=null==z?void 0:z.edges.map(e=>({...e,type:"live",data:{...e.data,taken:ei.takenEdges.has(e.id),active:ei.activeEdge===e.id,tokenKey:"".concat(e.id,":").concat(ei.cursor),tokenMs:ec}})))?e:[]},[z,ei,ec]),em=(0,r.useCallback)(e=>{Y(e);let t=en.current;t&&(e?t.fitView({nodes:[{id:e}],duration:600,maxZoom:1.4,padding:.6}):t.fitView({duration:600,padding:.08,minZoom:.5}))},[]),ex=null!=(n=null==(t=K[B])?void 0:t.node)?n:null;(0,r.useEffect)(()=>{var e,t;if(!ee||J||!ex||!z)return;let n=z.nodes.find(e=>e.id===ex),a=en.current;if(!n||!a)return;let r=Math.min(1,Math.max(.78,(null!=(t=null==(e=ea.current)?void 0:e.clientWidth)?t:1e3)/900));a.setCenter(n.position.x+x.E/2,n.position.y+n.data.height/2,{zoom:r,duration:400})},[ee,J,ex,z,er]);let eh="replay"===W&&!X&&_.length>0&&B===_.length-1;(0,r.useEffect)(()=>{var e,t;if(!eh||!ee||J||(null!=(t=null==(e=ea.current)?void 0:e.clientWidth)?t:1e3)<700)return;let n=window.setTimeout(()=>{var e;null==(e=en.current)||e.fitView({nodes:[...eo].map(e=>({id:e})),duration:800,padding:.08,minZoom:.5})},1200);return()=>window.clearTimeout(n)},[eh,ee,J,eo]);let ef=e=>{A("replay"),$(!1),P(e),G(!1)};if(N.isLoading)return(0,a.jsx)("p",{className:"p-4 text-sm text-text-tertiary",children:"런 원장을 읽는 중…"});if(N.isError||!k)return(0,a.jsxs)("p",{role:"alert",className:"p-4 text-sm text-error",children:["이 런의 원장을 읽지 못했습니다 (",y,")."]});let eb=J?_.map((e,t)=>({step:e,index:t})).filter(e=>{var t;let{step:n}=e;return(null!=(t=null==V?void 0:V.resolve(n.node))?t:n.node)===J}):[],eg=B>=0?_[B]:void 0;return(0,a.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col gap-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)("span",{className:"rounded-full px-2 py-0.5 text-xs font-semibold ".concat(Z?"bg-amber-500/15 text-amber-600 dark:text-amber-400":"completed"===k.status?"bg-success/15 text-success":"bg-error/15 text-error"),children:function(e){switch(e){case"running":return"● 도는 중";case"completed":return"완료";case"failed":return"실패";case"abandoned":return"버려짐";case"cancelled":return"취소됨";default:return e}}(k.status)}),(0,a.jsx)("h2",{className:"order-first min-w-0 basis-full truncate text-sm font-semibold text-text-primary sm:order-none sm:basis-0 sm:flex-1",title:null!=(l=k.title)?l:void 0,children:null!=(m=k.title)?m:k.runId}),null!==k.prNumber&&(0,a.jsxs)("span",{className:"text-xs text-text-secondary",children:["PR #",k.prNumber]}),(0,a.jsxs)("span",{className:"font-mono text-[11px] text-text-tertiary",children:[k.runId.slice(0,12)," \xb7 ",null!=(h=k.graphId)?h:"그래프 모름",k.substrate?" \xb7 ".concat(k.substrate):""]})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[(0,a.jsxs)("div",{role:"group","aria-label":"보기",className:"flex overflow-hidden rounded border border-border",children:[(0,a.jsx)("button",{type:"button",disabled:!Z,onClick:()=>{A("live"),$(!1)},className:"px-2 py-1 ".concat("live"===W?"bg-primary text-primary-foreground":""," disabled:opacity-40"),children:"● 라이브"}),(0,a.jsx)("button",{type:"button",onClick:()=>{A("replay")},className:"px-2 py-1 ".concat("replay"===W?"bg-primary text-primary-foreground":""),children:"리플레이"})]}),"replay"===W&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("button",{type:"button","aria-label":X?"일시정지":"재생",onClick:()=>{!X&&B>=_.length-1&&(P(0),G(!0)),$(!X)},className:"rounded border border-border px-2.5 py-1 font-semibold",children:X?"⏸ 일시정지":"▶ 재생"}),(0,a.jsx)("button",{type:"button",onClick:()=>{P(0),G(!0),$(!1)},className:"rounded border border-border px-2 py-1",children:"처음"}),(0,a.jsx)("div",{role:"group","aria-label":"속도",className:"flex overflow-hidden rounded border border-border",children:M.map(e=>(0,a.jsxs)("button",{type:"button",onClick:()=>U(e),"aria-pressed":Q===e,className:"px-2 py-1 ".concat(Q===e?"bg-accent/20 font-semibold text-text-primary":"text-text-secondary"),children:[e,"\xd7"]},e))}),(0,a.jsx)("input",{type:"range","aria-label":"재생 위치",min:0,max:Math.max(0,_.length-1),value:Math.max(0,B),onChange:e=>ef(Number(e.target.value)),className:"min-w-[120px] flex-1"})]}),(0,a.jsxs)("span",{className:"text-text-tertiary",children:[Math.max(0,B+1),"/",_.length," 단계",eg?" \xb7 ".concat(eg.node," \xd7").concat(eg.visit):""]}),(0,a.jsx)("button",{type:"button",onClick:()=>{et(!1),em(null)},className:"rounded border border-border px-2 py-1",children:"전체 보기"}),(0,a.jsx)("button",{type:"button","aria-pressed":ee,onClick:()=>{et(!ee),Y(null)},className:"rounded border px-2 py-1 ".concat(ee?"border-primary text-primary":"border-border"),children:"카메라 따라가기"}),R.length>0&&(0,a.jsx)("button",{type:"button","data-testid":"toggle-units",onClick:()=>{Y(null),O(T.size===R.length?new Set:new Set(R))},className:"rounded border border-border px-2 py-1",children:T.size===R.length?"묶음 펼치기 (통합 보기)":"묶음 접기"})]}),(0,a.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col gap-3 lg:flex-row",children:[(0,a.jsxs)("section",{ref:ea,"aria-label":"실행 그래프",className:"relative h-[60dvh] min-h-[340px] min-w-0 overflow-hidden rounded-lg border border-border bg-surface lg:h-[calc(100dvh-230px)] lg:min-h-[520px] lg:flex-1",children:[0===_.length&&(0,a.jsx)("p",{className:"absolute left-3 top-3 z-10 text-xs text-text-tertiary",children:"아직 노드에 들어가지 않았습니다(원장에 `pipeline-node-entry` 없음)."}),z&&(0,a.jsxs)(p.Gc,{nodes:eu,edges:ep,nodeTypes:I,edgeTypes:C,onInit:e=>{en.current=e,el(e=>e+1)},onNodeClick:(e,t)=>{if("groupBox"!==t.type){if(b(t.id)){var n;let e=null!=(n=t.data.group)?n:t.id.slice(6);ed(e),Y(null),window.setTimeout(()=>{var t;null==(t=en.current)||t.fitView({nodes:[{id:"box:".concat(e)}],duration:600,maxZoom:1.4,padding:.2})},80);return}em(J===t.id?null:t.id)}},onPaneClick:()=>{J&&em(null)},fitView:!0,fitViewOptions:{padding:.08,minZoom:.5},minZoom:.2,maxZoom:2,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,edgesFocusable:!1,deleteKeyCode:null,proOptions:{hideAttribution:!0},className:"!bg-surface",children:[(0,a.jsx)(p.VS,{}),(0,a.jsx)(p.H2,{showInteractive:!1})]},"".concat(null!=(v=null==E?void 0:E.id)?v:"graph",":").concat([...T].sort().join(","))),J&&(0,a.jsxs)("div",{"data-testid":"node-detail",className:"absolute bottom-3 left-3 right-3 z-10 max-h-[45%] overflow-y-auto rounded-lg border border-border bg-background/95 p-3 text-xs shadow-lg backdrop-blur sm:right-auto sm:w-[320px]",children:[(0,a.jsxs)("div",{className:"mb-1 flex items-center gap-2",children:[(0,a.jsx)("span",{className:"font-mono text-sm font-semibold text-text-primary",children:J}),(0,a.jsxs)("span",{className:"text-text-tertiary",children:["방문 ",eb.length,"회"]}),(0,a.jsx)("button",{type:"button",onClick:()=>em(null),className:"ml-auto rounded border border-border px-1.5",children:"닫기"})]}),0===eb.length&&(0,a.jsx)("p",{className:"text-text-tertiary",children:Z?"아직 이 노드에 들어가지 않았습니다.":"기록 없음 — 이 런의 원장에 이 노드의 사건이 없습니다."}),(0,a.jsx)("ul",{className:"space-y-1",children:eb.map(e=>{var t;let{step:n,index:r}=e;return(0,a.jsx)("li",{children:(0,a.jsxs)("button",{type:"button",onClick:()=>ef(r),className:"w-full rounded px-1 py-0.5 text-left hover:bg-surface-elevated",children:[(0,a.jsx)("span",{className:"font-mono text-text-secondary",children:c(n.at)})," ",(0,a.jsxs)("span",{className:"font-semibold",children:["\xd7",n.visit]})," ",(0,a.jsx)("span",{className:"fail"===n.outcome?"text-error":null===n.outcome?"text-amber-500":"text-success",children:null!=(t=n.outcome)?t:"도는 중"})," ",(0,a.jsx)("span",{className:"text-text-tertiary",children:u(n.durationMs)}),n.detail&&(0,a.jsx)("span",{className:"block text-text-secondary",children:n.detail})]})},r)})})]})]}),(0,a.jsxs)("aside",{"aria-label":"실행 타임라인",className:"max-h-[420px] overflow-y-auto rounded-lg border border-border bg-surface lg:max-h-[calc(100dvh-230px)] lg:w-[340px] lg:shrink-0",children:[(0,a.jsx)("h3",{className:"sticky top-0 border-b border-border bg-surface px-3 py-2 text-xs font-semibold",children:"타임라인 (KST)"}),(0,a.jsx)("ol",{children:_.map((e,t)=>{var n,r;let l=t>B,s=t===B;return(0,a.jsx)("li",{children:(0,a.jsxs)("button",{type:"button",onClick:()=>{var n;ef(t),em(null!=(n=null==V?void 0:V.resolve(e.node))?n:e.node)},"data-testid":"timeline-step-".concat(t),className:"grid w-full grid-cols-[64px_1fr_auto] items-baseline gap-x-2 border-b border-border/60 px-3 py-1.5 text-left text-xs transition-opacity ".concat(l?"opacity-35":""," ").concat(s?"bg-accent/10":"hover:bg-surface-elevated"),children:[(0,a.jsx)("span",{className:"font-mono text-text-tertiary",children:c(e.at)}),(0,a.jsxs)("span",{className:"font-mono font-semibold text-text-primary",children:[e.node,e.visit>1?" \xd7".concat(e.visit):""]}),(0,a.jsx)("span",{className:"fail"===e.outcome?"text-error":null===e.outcome?"text-amber-500":"text-success",children:null===e.outcome?"도는 중":"fail"===e.outcome?"실패":"통과"}),(0,a.jsx)("span",{className:"text-[11px] text-text-tertiary",children:u(e.durationMs)}),(0,a.jsx)("span",{className:"col-span-2 truncate text-[11px] text-text-secondary",title:null!=(n=e.detail)?n:void 0,children:null!=(r=e.detail)?r:""})]})},t)})})]})]})]})}function _(){return(0,o.Qj)()?(0,a.jsx)(E,{}):(0,a.jsxs)("div",{className:"mx-auto max-w-2xl space-y-2 p-6",children:[(0,a.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"런 장면"}),(0,a.jsx)("p",{className:"text-sm text-text-secondary",children:"데몬에 연결되면 하니스 런 하나가 도는 장면을 그립니다."})]})}function E(){var e;let t=(0,o.M1)(),n=(0,l.useRouter)(),i=(0,l.useSearchParams)(),d=(null==(e=i.get("run"))?void 0:e.trim())||null,u=(0,r.useMemo)(()=>Date.now()-864e5,[]),p=(0,s.I)({queryKey:["harness-runs-since",u],queryFn:()=>t.getHarnessRunsSince(u),refetchInterval:3e4}),m=(0,r.useMemo)(()=>{var e,t;return p.data?function(e,t){let n=e=>(function(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:60,a=(null!=(t=null==e?void 0:e.split("\n").map(e=>e.trim()).find(Boolean))?t:"").replace(/\s*\[truncated[^\]]*\]\s*$/,"").replace(/(?:~|\.{0,2})?\/?(?:[\w.@-]+\/)+([\w.@-]+)/g,"$1");return a.length>n?"".concat(a.slice(0,n-1),"…"):a})(e),a=[...e].sort((e,t)=>{var n,a;return Date.parse(null!=(n=t.lastActivityTimestamp)?n:"")-Date.parse(null!=(a=e.lastActivityTimestamp)?a:"")||0}).map(e=>{var t;return{runId:e.runId,label:n(e.objective)||e.runId,live:!0,at:null!=(t=e.lastActivityTimestamp)?t:null}}),r=new Set(a.map(e=>e.runId));return[...a,...t.filter(e=>!r.has(e.runId)).map(e=>({runId:e.runId,label:n(e.objective)||e.runId,live:!1,at:e.endedAt}))]}(null!=(e=p.data.entries)?e:[],null!=(t=p.data.finished)?t:[]):[]},[p.data]),x=e=>n.replace("/live-run/?run=".concat(encodeURIComponent(e)));return(0,a.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto p-4",children:[(0,a.jsxs)("header",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)("h1",{className:"text-base font-semibold text-text-primary",children:"런 장면"}),(0,a.jsx)("span",{className:"text-xs text-text-tertiary",children:"하니스 런 하나가 실제로 밟은 노드\xb7간선 (라이브 \xb7 리플레이)"}),(0,a.jsxs)("label",{className:"flex w-full min-w-0 items-center gap-1 text-xs text-text-secondary sm:ml-auto sm:w-auto sm:min-w-[320px]",children:[(0,a.jsx)("span",{className:"shrink-0",children:"런"}),(0,a.jsxs)("select",{"aria-label":"런 고르기",value:null!=d?d:"",onChange:e=>{e.target.value&&x(e.target.value)},className:"min-w-0 flex-1 rounded border border-border bg-background px-2 py-1 text-xs text-text-primary",children:[(0,a.jsx)("option",{value:"",children:p.isLoading?"불러오는 중…":m.length?"런을 고르세요":"최근 24시간 런 없음"}),d&&!m.some(e=>e.runId===d)&&(0,a.jsx)("option",{value:d,children:d}),m.some(e=>e.live)&&(0,a.jsx)("optgroup",{label:"도는 중",children:m.filter(e=>e.live).map(e=>(0,a.jsxs)("option",{value:e.runId,children:["● ",e.label]},e.runId))}),m.some(e=>!e.live)&&(0,a.jsx)("optgroup",{label:"끝난 런 (최근 24시간)",children:m.filter(e=>!e.live).map(e=>(0,a.jsxs)("option",{value:e.runId,children:[e.at?"".concat(c(e.at).slice(0,5)," \xb7 "):"",e.label]},e.runId))})]})]})]}),p.isError&&(0,a.jsx)("p",{role:"status",className:"text-xs text-warning",children:"런 목록을 읽지 못했습니다 — 주소에 ?run=<runId> 를 주면 그 런은 그대로 그립니다."}),d?(0,a.jsx)(S,{runId:d,initialFolded:"folded"===i.get("units")},d):(0,a.jsx)("ul",{className:"grid gap-2 sm:grid-cols-2",children:m.slice(0,12).map(e=>(0,a.jsx)("li",{children:(0,a.jsxs)("button",{type:"button",onClick:()=>x(e.runId),className:"w-full rounded-lg border border-border bg-surface p-3 text-left hover:bg-surface-elevated",children:[(0,a.jsx)("span",{className:"text-xs font-semibold ".concat(e.live?"text-amber-500":"text-text-tertiary"),children:e.live?"● 도는 중":"끝남 ".concat(e.at?c(e.at):"")}),(0,a.jsx)("span",{className:"mt-1 block truncate text-sm text-text-primary",children:e.label}),(0,a.jsx)("span",{className:"block font-mono text-[11px] text-text-tertiary",children:e.runId})]})},e.runId))})]})}function T(){return(0,a.jsx)(r.Suspense,{fallback:(0,a.jsx)("p",{className:"p-4 text-sm",children:"런 장면을 불러오는 중…"}),children:(0,a.jsx)(_,{})})}},41126:(e,t,n)=>{Promise.resolve().then(n.bind(n,30212))}},e=>{e.O(0,[2551,4723,9182,3324,1501,2743,2549,7175,8857,2463,2196,7358],()=>e(e.s=41126)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9902],{1736:(e,r,s)=>{"use strict";s.d(r,{r:()=>d});var t=s(55539),l=s(3558),a=s.n(l);let n=[{key:"autopilot",href:"/autopilot",num:"①",label:"미션",sub:"Autopilot"},{key:"tasks",href:"/tasks",num:"②",label:"작업",sub:"Tasks"},{key:"scheduler",href:"/scheduler",num:"③",label:"스케줄",sub:"Schedules"}];function d(e){let{active:r}=e;return(0,t.jsxs)("nav",{"aria-label":"Mission Fabric 파이프라인","data-testid":"fabric-stage-header",className:"flex flex-wrap items-center gap-1 text-xs",children:[(0,t.jsx)("span",{className:"mr-1 text-muted-foreground",children:"Missions"}),n.map((e,s)=>(0,t.jsxs)("span",{className:"flex items-center gap-1",children:[(0,t.jsxs)(a(),{href:e.href,"aria-current":e.key===r?"page":void 0,className:["rounded px-2 py-1 ring-1 transition-colors",e.key===r?"bg-primary/15 font-medium text-foreground ring-primary/40":"text-muted-foreground ring-border hover:bg-muted hover:text-foreground"].join(" "),children:[(0,t.jsx)("span",{className:"mr-1",children:e.num}),e.label,(0,t.jsx)("span",{className:"ml-1 text-[10px] opacity-70",children:e.sub})]}),s<n.length-1&&(0,t.jsx)("span",{className:"text-muted-foreground/50","aria-hidden":!0,children:"→"})]},e.key))]})}},15917:(e,r,s)=>{Promise.resolve().then(s.bind(s,51974))},51974:(e,r,s)=>{"use strict";s.d(r,{LoopsView:()=>j});var t=s(55539),l=s(3558),a=s.n(l),n=s(58603),d=s(1736),i=s(42489),c=s(46124),o=s(15151),x=s(42006);let u={"살아 있음":"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30",늦음:"bg-red-500/15 text-red-300 ring-red-500/30",실패:"bg-red-500/15 text-red-300 ring-red-500/30",꺼짐:"bg-muted text-muted-foreground ring-border","판정 불가":"bg-muted text-muted-foreground ring-border"};function m(e){let{value:r}=e;return(0,t.jsx)("span",{"data-loop-verdict":r,className:"inline-flex shrink-0 rounded-full px-2 py-0.5 text-xs font-semibold ring-1 ".concat(u[r]),children:r})}function h(e){let{rows:r,state:s}=e;return"loading"===s?(0,t.jsx)("p",{role:"status",className:"text-sm text-muted-foreground",children:"루프 현황을 읽는 중…"}):"error"===s?(0,t.jsx)("p",{role:"alert",className:"text-sm text-red-300",children:"루프 현황을 읽지 못했습니다. 일부 레지스트리 조회가 실패했습니다. 데몬 연결을 확인하세요."}):r.length?(0,t.jsxs)("div",{className:"rounded-xl border border-border bg-card",children:[(0,t.jsxs)("table",{className:"hidden w-full table-fixed text-left text-sm md:table",children:[(0,t.jsx)("thead",{className:"border-b border-border text-muted-foreground",children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{scope:"col",className:"w-1/4 px-4 py-3",children:"루프 \xb7 층"}),(0,t.jsx)("th",{scope:"col",className:"px-4 py-3",children:"주인(자리)"}),(0,t.jsx)("th",{scope:"col",className:"px-4 py-3",children:"모드"}),(0,t.jsx)("th",{scope:"col",className:"px-4 py-3",children:"마지막 실행 시각"}),(0,t.jsx)("th",{scope:"col",className:"px-4 py-3",children:"판정"})]})}),(0,t.jsx)("tbody",{children:r.map(e=>{var r;return(0,t.jsxs)("tr",{className:"border-b border-border/60 last:border-0","data-loop-id":e.id,children:[(0,t.jsxs)("th",{scope:"row",className:"break-words px-4 py-3 font-medium",children:[e.name,(0,t.jsx)("span",{className:"block text-xs font-normal text-muted-foreground",children:e.layer})]}),(0,t.jsx)("td",{className:"px-4 py-3",children:e.owner}),(0,t.jsx)("td",{className:"px-4 py-3",children:e.mode}),(0,t.jsx)("td",{className:"px-4 py-3",children:(0,t.jsx)("time",{dateTime:null!=(r=e.lastRun)?r:void 0,children:e.lastRun?new Date(e.lastRun).toLocaleString("ko-KR"):"기록 없음"})}),(0,t.jsx)("td",{className:"px-4 py-3",children:(0,t.jsx)(m,{value:e.verdict})})]},e.id)})})]}),(0,t.jsx)("ul",{className:"divide-y divide-border/60 md:hidden",children:r.map(e=>{var r;return(0,t.jsxs)("li",{className:"min-w-0 px-3 py-3","data-loop-id":e.id,children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,t.jsx)("strong",{className:"min-w-0 truncate text-sm",title:e.name,children:e.name}),(0,t.jsx)(m,{value:e.verdict})]}),(0,t.jsxs)("div",{className:"mt-1 flex flex-wrap gap-x-2 text-xs text-muted-foreground",children:[(0,t.jsx)("span",{children:e.layer}),(0,t.jsxs)("span",{children:["\xb7 ",e.owner]}),(0,t.jsxs)("span",{children:["\xb7 ",e.mode]}),(0,t.jsxs)("time",{dateTime:null!=(r=e.lastRun)?r:void 0,children:["\xb7 ",e.lastRun?new Date(e.lastRun).toLocaleString("ko-KR"):"기록 없음"]})]})]},e.id)})})]}):(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"등록된 루프\xb7크론이 없습니다."})}function p(){var e,r;let{client:s}=(0,o.Q)(),[l,n]=(0,c.useState)(null);(0,c.useEffect)(()=>{let e=(0,x.Pz)(e=>s.fetchJson(e),e=>{let{rows:r,state:t}=e;return n({client:s,rows:r,state:t})});e.refresh();let r=window.setInterval(()=>void e.refresh(),3e4);return()=>{e.dispose(),window.clearInterval(r)}},[s]);let i=(null==l?void 0:l.client)===s?l:null;return(0,t.jsxs)("main",{className:"mx-auto max-w-[1200px] space-y-5 p-4",children:[(0,t.jsx)(d.r,{active:"scheduler"}),(0,t.jsxs)("header",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("h1",{className:"text-xl font-semibold",children:"루프 현황"}),(0,t.jsx)("span",{className:"rounded-full border border-border px-2 py-0.5 text-xs text-muted-foreground",children:"beta \xb7 운영용"})]}),(0,t.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:"데몬의 루프\xb7크론 레지스트리 \xb7 늦음은 마지막 실행 후 주기의 2배 초과"})]}),(0,t.jsx)(a(),{href:"/scheduler",className:"rounded-lg border border-border px-3 py-2 text-sm hover:bg-accent",children:"전체 스케줄 →"})]}),(0,t.jsx)(h,{rows:null!=(e=null==i?void 0:i.rows)?e:[],state:null!=(r=null==i?void 0:i.state)?r:"loading"})]})}var f=s(99974);function b(){return(0,t.jsxs)("main",{className:"mx-auto min-w-0 max-w-[1400px] space-y-4 p-4",children:[(0,t.jsx)(d.r,{active:"scheduler"}),(0,t.jsxs)("header",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("h1",{className:"text-xl font-semibold",children:"루프 상호작용"}),(0,t.jsx)("span",{className:"rounded-full border border-border px-2 py-0.5 text-xs text-muted-foreground",children:"beta \xb7 운영용"})]}),(0,t.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:"자리\xb7루프\xb7런 사이에 오간 실제 사건 \xb7 새 사건이 들어오면 다시 읽습니다"})]}),(0,t.jsx)(a(),{href:"/loops",className:"rounded-lg border border-border px-3 py-2 text-sm hover:bg-accent",children:"루프 현황 →"})]}),(0,t.jsx)("div",{className:"min-w-0 rounded-2xl bg-[#0c1828] text-[#f1f5fa]",children:(0,t.jsx)(i.p1,{initialMode:"map"})})]})}function j(){let e=(0,n.useSearchParams)();return"interact"===(0,f.F)(e)?(0,t.jsx)(b,{}):(0,t.jsx)(p,{})}},69370:(e,r,s)=>{"use strict";s.d(r,{BX:()=>l});let t=new Map;function l(e,r){var s,l;let a=t.get(e);if(!a){let l;try{l=new EventSource(e)}catch(e){return null==(s=r.onConstructError)||s.call(r,e),()=>{}}let n={source:l,subscribers:new Set};l.onmessage=e=>{var r,s;for(let t of[...n.subscribers])null==(r=(s=t.handlers).onMessage)||r.call(s,e)},l.onerror=e=>{var r,s;for(let t of[...n.subscribers])null==(r=(s=t.handlers).onError)||r.call(s,e)},t.set(e,n),a=n}let n=a,d=[];for(let[e,s]of Object.entries(null!=(l=r.events)?l:{})){let r=e=>{s(e)};n.source.addEventListener(e,r),d.push([e,r])}let i={handlers:r};n.subscribers.add(i);let c=!1;return()=>{if(!c){for(let[e,r]of(c=!0,d))try{n.source.removeEventListener(e,r)}catch(e){}if(n.subscribers.delete(i),0===n.subscribers.size){try{n.source.close()}catch(e){}t.get(e)===n&&t.delete(e)}}}}},99974:(e,r,s)=>{"use strict";s.d(r,{D:()=>t,F:()=>l});let t="/loops?view=interact";function l(e){return(null==e?void 0:e.get("view"))==="interact"?"interact":"status"}}},e=>{e.O(0,[2551,9182,3558,2743,2549,8060,9247,5755,2489,2463,2196,7358],()=>e(e.s=15917)),_N_E=e.O()}]);
|