elanous 0.2.18 → 0.2.20
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-30dff22c9e1f3073.js → 1307-77fad80cf54477c6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1612-f60c0c93ec773f81.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2116-6429c188eb846ab8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/224-e7be8f762fe74986.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2489-ff55a35b202c0f94.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2549-89c518a4c8ed4d00.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3857-995ea9f5ef33d71e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4144-fad095b48a1862ee.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5755-ea7ed88eb956f47b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5977-94ed6f78e9814b2b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7748-6e51bfe927019f5c.js +25 -0
- package/apps/pwa/out/_next/static/chunks/8401-35e94e9091f5eb8d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9247-c1753a059e7bac08.js +1 -0
- package/apps/pwa/out/_next/static/chunks/a9f2b54d-33c0689b70ed8cf3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/{page-d92f7ee3994e84c7.js → page-c855c24de7db74fe.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-4733c967b56a4277.js → page-85b316bb4235980b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/board/{page-d22fd849cc22f104.js → page-9b2b26a33cb2cd42.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-bb742f995c6769e7.js → page-c9955fde67b1bcb5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/{page-02b073a2ac793b83.js → page-7a852956c74015a3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-c5a5c621be0e04ae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/{page-8a9b3594bc23289b.js → page-4ba4abe096b6c2a8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-575d4a8b4f7becb2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/{page-308111abadf35670.js → page-f5d56ff5f45ad164.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-2260e9eef0357421.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/{page-5d97b2901e0d1ea6.js → page-7c058069c5e7fa63.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-dc5da0b8a2edb8a4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/{page-8c3d8e63ae2e1c98.js → page-466bf0ee16ad1432.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/field/{page-9b72a07d424701c6.js → page-a23bc71713bcc08f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-ed4a6f799f005d09.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/{page-a572f58cd3ca5864.js → page-9cd565005b93aca6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-55f0f40c6db95f15.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/{page-be5ea965a07fbc41.js → page-474cb5888ea0e8f3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-35bfec2e631d3eae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/{page-fa244bd146a00ae8.js → page-9ca21f9ad3208a61.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-44d56d6391965a6a.js → page-f9ccb1b1adbea14d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-83a700d4c754d802.js → page-ec102c9b8b691e37.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/{not-found-7b3170f374f77b9d.js → not-found-a9c2cfa8dda922a5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-6da35144878feb6d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-f6055495e9ed7ea8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-25204694fa9984a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-a60e035f151d84d3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-189c587f36874538.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-c56634bde705a65d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/{page-1467047104141297.js → page-db03ae3589a81c9e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-4a6463b97f0ad94f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/{page-102310930791197a.js → page-75bffecc9aa1004e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-a8d2fe0c669e0de4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/{page-6ed0b73bae8351d8.js → page-31d5b875760bb62d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-c26fa10aac6c21c4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/{page-43336055451f6e37.js → page-68793c6e10331d66.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/share/{page-3cc47dca0922ab9a.js → page-46d5201d2207a511.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/{page-a77ee355a2304ff0.js → page-d81c07a7b4f618ae.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/{page-b17cd46cf0e9b8cf.js → page-be1c4e8697f22360.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-cf0a4b4abead71ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-a4717e2c4bf7a28f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/{page-7bf54c9bb9274af8.js → page-0fd895fab9b62c1b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-8b6c1454a8e8f306.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-c6e4364d9de8f717.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-0acc8e198f7b0dfb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/{page-134da468538baf48.js → page-34882c84f84021c5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-0506a1e0e4bdb2f5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{webpack-c2782b330447ffb6.js → webpack-c260571513bf43c2.js} +1 -1
- package/apps/pwa/out/_next/static/css/{e99e3cff94ced78a.css → 599369d853c61df7.css} +1 -1
- package/apps/pwa/out/_next/static/css/c23d959d3ee15e57.css +1 -0
- package/apps/pwa/out/_next/static/css/d3427996da11e480.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 +16 -15
- 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 +16 -15
- 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/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +24 -23
- 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/demo/editor-recipes.yaml +22 -0
- package/graphs/ops/guardian.yaml +26 -0
- package/graphs/ops/recipes.yaml +3 -0
- package/graphs/retro/daily.yaml +25 -0
- package/graphs/retro/recipes.yaml +24 -0
- package/package.json +1 -1
- package/scripts/ask-marker-check.ts +3 -1
- package/scripts/coord-channel-watch.sh +2 -2
- package/scripts/discord-seat-probe.ts +3 -1
- package/scripts/land-global-checks.ts +89 -0
- package/scripts/lib/pch-regress-map.ts +24 -0
- package/scripts/morning-report.ts +18 -4
- package/scripts/pch-regress.ts +88 -0
- package/scripts/release-loop/gate-diff.ts +18 -0
- package/scripts/release-loop/gate-node.ts +628 -65
- package/scripts/release-loop/gate-partial.ts +106 -0
- package/scripts/release-loop/gate-timing.ts +229 -0
- package/scripts/release-loop/preflight.ts +6 -4
- package/scripts/release-loop/publish-window.ts +141 -0
- package/scripts/release-loop/release-docs.ts +1 -4
- package/scripts/release-loop/release-universe.ts +38 -0
- package/scripts/release-loop/resume-release.ts +67 -5
- package/scripts/release-loop/shard-plan.ts +65 -0
- package/scripts/release-loop/unattended-release.ts +12 -2
- package/scripts/release-story/draft.ts +5 -1
- package/scripts/retro/shadow-compare.ts +71 -0
- package/scripts/rhythm/daily.ts +6 -1
- package/scripts/video/scene-table.ts +159 -0
- package/src/acp/core-turn-bridge.ts +39 -2
- package/src/agent-mission/driver.ts +34 -6
- package/src/autopilot/build/llm-conflict-merge.ts +132 -7
- package/src/autopilot/build/merge-intent.ts +135 -7
- package/src/away/presence.ts +40 -0
- package/src/away/release-watch.ts +272 -0
- package/src/chat/index.ts +2 -1
- package/src/chat/short-question.ts +3 -40
- package/src/cli/away-cli.ts +68 -0
- package/src/cli/config-drift.ts +513 -0
- package/src/cli/guardian-cli.ts +49 -0
- package/src/cli/intake-cli.ts +13 -7
- package/src/cli/log-event-names.ts +5 -0
- package/src/cli/pod-cli.ts +5 -1
- package/src/cli/pr-cli.ts +20 -0
- package/src/cli/pty-drive-cli.ts +14 -3
- package/src/cli/release-cli.ts +52 -12
- package/src/cli/retro-cli.ts +78 -0
- package/src/cli/setup-cli.ts +31 -1
- package/src/cli/tasks-cli.ts +193 -14
- package/src/context-bus/context-now-public.ts +1 -1
- package/src/context-bus/context-now-surfaces.ts +16 -6
- package/src/context-bus/context-now.ts +97 -3
- package/src/core-turn/short-question.ts +100 -0
- package/src/dashboard/dashboard-status-lines.ts +24 -4
- package/src/dashboard/index.ts +50 -5
- package/src/dashboard/input/slash-executor.ts +6 -2
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +68 -40
- package/src/dashboard/slash-runtime/decide-slash.ts +60 -0
- package/src/dashboard/slash-runtime/help-from-registry.ts +62 -23
- package/src/dashboard/slash-runtime/help-groups.ts +44 -0
- package/src/dashboard/slash-runtime/model-choices.ts +125 -0
- package/src/domains/guardian-tick.ts +138 -0
- package/src/domains/outbound-alert.ts +44 -13
- package/src/domains/outbound-log-probe.ts +6 -1
- package/src/domains/schedule-registry.ts +23 -0
- package/src/domains/telegram-kind-route.ts +39 -0
- package/src/domains/watch-default-scheduler.ts +95 -0
- package/src/esc-abort-gate.ts +44 -0
- package/src/graph-runner/graph-run-api.ts +205 -0
- package/src/graph-runner/runner.ts +36 -6
- package/src/harness/harness-cli-command.ts +420 -51
- package/src/harness/harness-queue.ts +315 -25
- package/src/harness/harness-salvage-cli.ts +140 -0
- package/src/harness/harness-worktree-add.ts +68 -0
- package/src/harness/ledger-write-guard.ts +6 -16
- package/src/hq/fence-outcomes.ts +63 -0
- package/src/hq/fence-wrapper.ts +33 -0
- package/src/hq/hq.ts +17 -2
- package/src/index.ts +118 -6
- package/src/instance/test-write-guard-spy-first.fixture.ts +13 -0
- package/src/instance/test-write-guard.ts +200 -0
- package/src/intake-plane/digest.ts +39 -15
- package/src/intake-plane/harness-target.ts +4 -3
- package/src/intake-plane/intake-sources.ts +1 -0
- package/src/intake-plane/items.ts +1 -0
- package/src/loops/orchestrator/degradation.ts +57 -0
- package/src/loops/orchestrator/finish-rate.ts +33 -3
- package/src/loops/orchestrator/tick.ts +166 -45
- package/src/maturity/feature-maturity.ts +6 -4
- package/src/maturity/tui-slash-maturity.ts +1 -0
- package/src/mss/logging/log-store.ts +3 -0
- package/src/nexus/api/graph-kinds.ts +10 -4
- package/src/nexus/api/graphs-api.ts +178 -6
- package/src/nexus/api/http-server.ts +54 -8
- package/src/nexus/api/loop-edges.ts +292 -17
- package/src/nexus/api/ops-api.ts +112 -29
- package/src/nexus/api/ops-board-route.ts +48 -0
- package/src/nexus/index.ts +7 -0
- package/src/onboarding/entry-hints.ts +5 -0
- package/src/onboarding.ts +24 -6
- package/src/release-loop/checklist.ts +2 -0
- package/src/release-loop/feature-store.ts +68 -18
- package/src/release-loop/gate-shards.ts +158 -0
- package/src/release-loop/light-rc.ts +173 -0
- package/src/release-loop/placement.ts +51 -17
- package/src/release-loop/release-schedule.ts +6 -2
- package/src/release-loop/rubric.ts +57 -1
- package/src/retro/daily.ts +372 -0
- package/src/seat-loop/op-decide.ts +173 -0
- package/src/seat-loop/seat-loop.ts +60 -3
- package/src/seat-loop/seat-report.ts +58 -3
- package/src/self-dev/ask-launch-flow.ts +5 -4
- package/src/self-dev/ask-launch-io.ts +49 -1
- package/src/self-dev/ask-path-candidates.ts +40 -2
- package/src/self-dev/dev-cli.ts +36 -0
- package/src/self-dev/draft-sweep.ts +371 -16
- package/src/self-dev/draft-triage-rules.ts +19 -4
- package/src/self-dev/orchestrate.ts +1 -0
- package/src/self-dev/pr-preview.ts +247 -0
- package/src/self-dev/shard-run.ts +23 -7
- package/src/self-implement/blocked-draft-policy.ts +101 -0
- package/src/self-implement/execution-clarification.ts +11 -0
- package/src/self-implement/gate-cli.ts +29 -8
- package/src/self-implement/gate-env-retry.ts +83 -0
- package/src/self-implement/goal-author-clarification.ts +88 -13
- package/src/self-implement/goal-clarification-escalation.ts +2 -0
- package/src/self-implement/orchestrator.ts +220 -6
- package/src/self-implement/run-stop.ts +123 -0
- package/src/self-implement/run-ttl.ts +258 -0
- package/src/self-implement/salvage-branches.ts +254 -0
- package/src/self-implement/salvage-retention.ts +123 -0
- package/src/self-implement/seams.ts +4 -0
- package/src/self-implement/self-implement-cli.ts +2 -0
- package/src/self-implement/sibling-resync.ts +223 -0
- package/src/self-implement/stop-autoheal.ts +204 -0
- package/src/task-agent/actions.ts +63 -2
- package/src/task-agent/board.ts +132 -0
- package/src/task-agent/card-evidence.ts +292 -0
- package/src/task-agent/completion-evidence.ts +126 -0
- package/src/task-agent/judge.ts +25 -0
- package/src/task-agent/live-moves.ts +276 -0
- package/src/task-agent/mission.ts +33 -7
- package/src/task-agent/shadow.ts +192 -15
- package/src/task-agent/task-hand.ts +124 -17
- package/src/task-orchestrator/surfaces/pod-command-job.ts +82 -8
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +4 -0
- package/src/task-orchestrator/surfaces/pod-install-slots.ts +89 -0
- package/src/task-orchestrator/surfaces/pod-lease.ts +233 -21
- package/src/task-orchestrator/surfaces/pod-pool.ts +155 -34
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +21 -5
- package/src/telegram-away-command.ts +38 -0
- package/src/telegram-commands.ts +52 -0
- package/src/telegram-report-log-probe.ts +21 -0
- package/src/telegram-report.ts +27 -3
- package/src/testing/real-cli-spawn.ts +106 -0
- package/src/tui-client/dashboard-session.ts +1 -0
- package/src/user-config.ts +190 -5
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/224-798346143007ff65.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3857-4f936cdb30322aa6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4144-a0041c8dc3be57ac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4554-5761612531d0146b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5977-a11f37254196b659.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5994-ae92c0de046ab9ba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8401-8615a660c84cdb03.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8868-10a3a4440fb0ccd8.js +0 -25
- package/apps/pwa/out/_next/static/chunks/9247-269e4464cc4b491c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/a9f2b54d-7865aba0f4d2ee49.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-60c3da708f9a0ccc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-a0eb02638b1e6f31.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-6eaf7bac37830c21.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-c39554c321576982.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-bd5d586429167fea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-59b7834d497c2255.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-c130b63862437814.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-5f23d0c66a3b4793.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-a3c58f5c72a5f3f9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-a2c4625596f8d69c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-0e9099531d239f11.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-e8e1ecaea7cd71d2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-a1b7ffed710a93e0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-2da6f9b8a38c6978.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-f331e38fefc00393.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-44d5f767491692bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-61553851aa606146.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-a1f585e154e61c59.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-5150ef17b5383a57.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b9d8ce70792c1672.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-a5a3de231f2cc7d5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-31ac4afa2dcd915c.js +0 -1
- package/apps/pwa/out/_next/static/css/7fa358fec7da7c47.css +0 -1
- /package/apps/pwa/out/_next/static/{P6YTVgzuZz5oTZhY4Din_ → Bam1YziK2iH9bN4K0utGk}/_buildManifest.js +0 -0
- /package/apps/pwa/out/_next/static/{P6YTVgzuZz5oTZhY4Din_ → Bam1YziK2iH9bN4K0utGk}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3857],{12958:(e,t,n)=>{n.d(t,{a:()=>o});var r=n(55539),a=n(46124),l=n(74780);let s=e=>JSON.stringify([e.graphId,e.runId]);function o(e){let{client:t,approvals:n,onDecided:o,onPendingChange:i}=e,c=(0,a.useMemo)(()=>(0,l.ll)({client:t}),[t]),[d,u]=(0,a.useState)([]),[m,h]=(0,a.useState)({}),[p,f]=(0,a.useState)(null),[g,x]=(0,a.useState)(""),b=(0,a.useRef)(0),v=n.map(s).join("|");function y(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:m;u(e),i(n.filter(n=>!t[s(n)]&&e.some(e=>s(e)===s(n))).length)}async function w(e,t){let r=s(e);if(p||m[r]||!n.some(e=>s(e)===r)||!d.some(e=>s(e)===r))return;let a=b.current;f(r),x("");try{if(await c.decide(e.graphId,e.runId,t),b.current!==a)return;let n={...m,[r]:t};h(n),y(d,n),o();let l=await c.list();b.current===a&&y(l.items,n)}catch(e){b.current===a&&x((0,l.LP)(e,"decide"))}finally{b.current===a&&f(null)}}return((0,a.useEffect)(()=>{let e=++b.current;return(u([]),x(""),v)?(c.list().then(t=>{b.current===e&&y(t.items)}).catch(t=>{b.current===e&&x((0,l.LP)(t,"list"))}),()=>{b.current+=1}):(i(0),()=>{b.current+=1})},[c,v]),0===n.length)?null:(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)("h3",{className:"font-semibold",children:"게시 승인"}),g&&(0,r.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:g}),(0,r.jsx)("ul",{className:"space-y-2",children:n.map(e=>{let t=s(e),n=d.some(e=>s(e)===t);return(0,r.jsxs)("li",{className:"rounded-lg border border-border bg-background px-4 py-3 text-sm",children:[(0,r.jsx)("p",{children:e.message}),m[t]?(0,r.jsx)("p",{className:"mt-2 text-muted-foreground",children:"approved"===m[t]?"승인됨":"보류됨"}):n?(0,r.jsxs)("div",{className:"mt-2 flex gap-2",children:[(0,r.jsx)("button",{type:"button",disabled:null!==p,onClick:()=>void w(e,"approved"),className:"rounded-lg bg-primary px-3 py-1 text-primary-foreground disabled:opacity-50",children:"승인"}),(0,r.jsx)("button",{type:"button",disabled:null!==p,onClick:()=>void w(e,"rejected"),className:"rounded-lg border border-border px-3 py-1 disabled:opacity-50",children:"보류"})]}):(0,r.jsx)("p",{className:"mt-2 text-muted-foreground",children:"대기 중인 승인이 아닙니다."})]},t)})})]})}},43537:(e,t,n)=>{function r(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function a(e){return"string"==typeof e}function l(e){return a(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function s(e){return r(e)&&a(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&a(e.summary)}function o(e){return r(e)&&a(e.runId)&&a(e.status)&&a(e.startedAt)&&(null===e.version||a(e.version))&&Array.isArray(e.path)&&e.path.every(a)&&Array.isArray(e.nodes)&&e.nodes.every(s)}function i(e){return r(e)&&a(e.id)&&a(e.title)&&a(e.status)&&(void 0===e.owner||a(e.owner))&&a(e.updatedAt)&&(void 0===e.evidence||a(e.evidence))}n.d(t,{HG:()=>g,Kh:()=>f,Nn:()=>h,oc:()=>p});let c=e=>Number.isInteger(e)&&e>=0;function d(e){return r(e)&&a(e.id)&&a(e.title)&&(null===e.open||c(e.open))&&(null===e.landed||c(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&a(e.id)&&a(e.title)))}function u(e){return r(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||a(e.role))&&(null===e.now||r(e.now)&&a(e.now.text)&&a(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>r(e)&&c(e.pr)&&a(e.title)&&a(e.at)&&(null===e.checklistId||a(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&a(e.id)&&a(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||c(e.pendingDecisions))&&(null===e.checklist||r(e.checklist)&&["green","yellow","red","done"].every(t=>c(e.checklist[t])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(d))}async function m(e,t,n){try{let r=await e.fetchResponse(t,{method:"GET"});if(403===r.status)return{kind:"forbidden"};if(!r.ok)return{kind:"error",status:r.status};let a=n(await r.json());return null===a?{kind:"error",status:r.status}:{kind:"ready",data:a}}catch(e){return{kind:"error",status:0}}}function h(e,t){return m(e,"/v1/ops/seats".concat(t?"?date=".concat(encodeURIComponent(t)):""),e=>r(e)&&a(e.date)&&Array.isArray(e.seats)&&e.seats.every(u)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function p(e,t){return m(e,"/v1/ops/release/runs".concat(t?"?version=".concat(encodeURIComponent(t)):""),e=>Array.isArray(e)&&e.every(o)?e:null)}function f(e,t,n){return m(e,"/v1/ops/release/runs/".concat(encodeURIComponent(t),"/nodes/").concat(encodeURIComponent(n),"/log"),e=>r(e)&&a(e.log)?{log:e.log}:null)}function g(e,t){return m(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(t)),e=>{var t,n,s,o;if(!(r(e)&&a(e.version)&&(void 0===e.codename||a(e.codename))&&Array.isArray(e.items)&&e.items.every(i)&&["green","yellow","red","done"].every(t=>void 0===e[t]||Number.isInteger(e[t])&&e[t]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(a))&&(void 0===e.byOwner||r(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let c={green:0,yellow:0,red:0,done:0};for(let t of e.items)t.status in c&&c[t.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:r(e.schedule)&&l(e.schedule.cutAt)&&(null===e.schedule.landBy||l(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(t=e.green)?t:c.green,yellow:null!=(n=e.yellow)?n:c.yellow,red:null!=(s=e.red)?s:c.red,done:null!=(o=e.done)?o:c.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}},53857:(e,t,n)=>{n.d(t,{ChatPanel:()=>e4});var r=n(55539),a=n(46124),l=n(92156),s=n(94226),o=n(16190),i=n(46586),c=n(3558),d=n.n(c),u=n(71923),m=n(15151),h=n(43537),p=n(37768);function f(){let{client:e}=(0,m.Q)(),[t,n]=(0,a.useState)([]);if((0,a.useEffect)(()=>{if("undefined"==typeof document)return;let t=!0,r=!1,a=async()=>{if(!t||r||document.hidden)return;r=!0;let a=new Intl.DateTimeFormat("sv-SE",{timeZone:"Asia/Seoul"}).format(new Date),l=await (0,h.Nn)(e,a);r=!1,t&&n((0,p.z)("ready"===l.kind?l.data:null,Date.now()))};n([]),a();let l=globalThis.setInterval(()=>{a()},6e4),s=()=>{document.hidden||a()};return document.addEventListener("visibilitychange",s),()=>{t=!1,globalThis.clearInterval(l),document.removeEventListener("visibilitychange",s)}},[e]),0===t.length)return null;let l=t.map(e=>{let{seat:t,text:n,ago:r}=e;return"".concat(t," ").concat(n," \xb7 ").concat(r)}).join(" | ");return(0,r.jsx)("div",{role:"status","aria-label":"지금 자리들이 하는 일",title:l,className:"h-8 min-h-8 min-w-0 shrink-0 overflow-hidden text-ellipsis whitespace-nowrap border-b border-border bg-background px-3 text-xs leading-8 text-muted-foreground",children:t.map((e,t)=>{let{seat:n,text:a,ago:l}=e;return(0,r.jsxs)("span",{children:[t>0&&" | ",n," ",a," \xb7 ",l]},n)})})}var g=n(3180),x=n(72215);function b(){let{client:e}=(0,m.Q)(),[t,n]=(0,a.useState)(!1),[l,s]=(0,a.useState)(!1),[o,i]=(0,a.useState)(""),c=(0,a.useRef)(!1),d=(0,a.useRef)(0),u=(0,a.useRef)(!1);(0,a.useEffect)(()=>(n("speechSynthesis"in window&&"undefined"!=typeof SpeechSynthesisUtterance),()=>{d.current++,u.current&&"speechSynthesis"in window&&window.speechSynthesis.cancel()}),[]);let h=async()=>{if(c.current||!t)return;c.current=!0;let n=++d.current;s(!0),i(""),u.current&&window.speechSynthesis.cancel(),u.current=!1;try{let t=await e.fetchResponse("/v1/context/now?format=voice",{method:"GET"});if(!t.ok)throw Error("HTTP ".concat(t.status));let r=await t.json();if(!r||"object"!=typeof r||!("text"in r)||"string"!=typeof r.text||!r.text.trim())throw Error("invalid voice summary");if(n!==d.current)return;let a=new SpeechSynthesisUtterance(r.text);a.lang="ko-KR",a.onend=()=>{n===d.current&&(u.current=!1)},a.onerror=()=>{n===d.current&&(u.current=!1)},u.current=!0,window.speechSynthesis.speak(a),(0,x.cY)("chat.now.speak",{outcome:"spoken"})}catch(e){if(n!==d.current)return;u.current=!1,i("지금 상황을 읽지 못했습니다. 다시 시도해 주세요."),(0,x.cY)("chat.now.speak",{outcome:"error",reason:String(e)})}finally{n===d.current&&(c.current=!1,s(!1))}};return(0,r.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:[(0,r.jsxs)("button",{type:"button","data-elanous-action":"chat-now-speak","aria-label":"지금 상황 듣기",title:t?"지금 상황 두 문장 듣기":"이 브라우저는 음성 읽기를 지원하지 않습니다",disabled:!t||l,onClick:()=>void h(),className:"inline-flex min-h-9 items-center gap-1.5 rounded-full border border-border bg-background px-3 text-xs font-medium text-foreground hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",children:[(0,r.jsx)(g.A,{className:"h-4 w-4","aria-hidden":"true"}),(0,r.jsx)("span",{children:"지금 상황 듣기"})]}),o&&(0,r.jsx)("span",{role:"alert",className:"text-xs text-rose-600",children:o})]})}var v=n(12958),y=n(74780);function w(){let{mobileOpen:e,onCount:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:n}=(0,m.Q)(),l=(0,a.useMemo)(()=>(0,y.ll)({client:n}),[n]),[s,o]=(0,a.useState)({client:n,items:[],pending:0,expanded:!1}),i=(0,a.useRef)(n);i.current=n;let c=(0,a.useRef)(!1),d=(0,a.useRef)(0),u=s.client===n?s:null,h=(0,a.useCallback)(async()=>{if(!c.current||i.current!==n||"undefined"!=typeof document&&document.hidden)return;let e=++d.current;try{let t=await l.list();if(!c.current||i.current!==n||d.current!==e)return;o(r=>i.current===n&&d.current===e?{client:n,items:t.items,pending:t.items.length,expanded:t.items.length>0&&r.client===n&&r.expanded}:r)}catch(t){if(!c.current||i.current!==n||d.current!==e)return;o(t=>i.current===n&&d.current===e?{client:n,items:[],pending:0,expanded:!1}:t)}},[l,n]);if((0,a.useEffect)(()=>{c.current=!0,o({client:n,items:[],pending:0,expanded:!1}),h();let e=globalThis.setInterval(()=>{h()},3e4),t=()=>{document.hidden||h()};return"undefined"!=typeof document&&document.addEventListener("visibilitychange",t),()=>{c.current=!1,d.current+=1,globalThis.clearInterval(e),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",t)}},[n,h]),(0,a.useEffect)(()=>{var e,t;(0,x.cY)("chat.approvals",{pending:null!=(e=null==u?void 0:u.pending)?e:0,expanded:null!=(t=null==u?void 0:u.expanded)&&t})},[null==u?void 0:u.pending,null==u?void 0:u.expanded]),(0,a.useEffect)(()=>{var e;null==t||t(null!=(e=null==u?void 0:u.pending)?e:0)},[t,null==u?void 0:u.pending]),!(null==u?void 0:u.pending)||t&&!e)return null;let p=(0,r.jsx)(v.a,{client:n,approvals:u.items,onDecided:()=>{h()},onPendingChange:e=>{i.current===n&&o(t=>t.client===n?{...t,pending:e,...0===e?{items:[],expanded:!1}:{}}:t)}});return t?(0,r.jsx)("div",{id:"chat-approvals-panel",className:"max-h-[min(50vh,24rem)] overflow-y-auto border-b border-border p-3",children:p}):(0,r.jsxs)("div",{className:"shrink-0 border-b border-border bg-background px-3 py-1.5 text-sm",children:[(0,r.jsxs)("button",{type:"button","aria-expanded":u.expanded,"aria-controls":"chat-approvals-panel",onClick:()=>o(e=>e.client===n?{...e,expanded:!e.expanded}:e),className:"rounded-full border border-border bg-muted px-3 py-1 font-medium text-foreground hover:bg-muted/70",children:["승인 대기 ",u.pending]}),u.expanded&&(0,r.jsx)("div",{id:"chat-approvals-panel",className:"mt-2 max-h-[min(50vh,24rem)] overflow-y-auto rounded-lg border border-border p-3",children:p})]})}var j=n(33626);function k(){var e;let{mobileOpen:t,onCount:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:l}=(0,m.Q)(),[s,o]=(0,a.useState)({client:l,items:[],expanded:!1,decided:{},busy:null}),i=(0,a.useRef)(l);i.current=l;let c=(0,a.useRef)(!1),d=(0,a.useRef)(0),u=(0,a.useRef)(null),h=s.client===l?s:null,p=(0,a.useCallback)(async()=>{if(!c.current||i.current!==l||"undefined"!=typeof document&&document.hidden)return;let e=++d.current;try{let t=await (0,j.q)(l);if(!c.current||i.current!==l||d.current!==e)return;o(e=>e.client===l?{...e,items:[...t,...e.items.filter(n=>e.decided[n.id]&&!t.some(e=>e.id===n.id))],expanded:e.expanded&&(t.length>0||e.items.some(t=>e.decided[t.id]))}:e)}catch(t){if(!c.current||i.current!==l||d.current!==e)return;o(e=>e.client===l?{...e,items:[],expanded:!1}:e)}},[l]);(0,a.useEffect)(()=>{c.current=!0,u.current=null,o({client:l,items:[],expanded:!1,decided:{},busy:null}),p();let e=globalThis.setInterval(()=>{p()},3e4),t=()=>{document.hidden||p()};return"undefined"!=typeof document&&document.addEventListener("visibilitychange",t),()=>{c.current=!1,u.current=null,d.current+=1,globalThis.clearInterval(e),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",t)}},[l,p]);let f=async(e,t)=>{if(!u.current&&!s.busy&&!s.decided[e.id]){u.current=e.id,o(t=>t.client===l?{...t,busy:e.id}:t);try{if(await (0,j.L)(l,e.id,t.id),!c.current||i.current!==l)return;u.current=null,o(n=>n.client===l?{...n,busy:null,decided:{...n.decided,[e.id]:t.label}}:n),await p()}catch(e){c.current&&i.current===l&&(u.current=null,o(e=>e.client===l?{...e,busy:null}:e))}}},g=null!=(e=null==h?void 0:h.items.filter(e=>!h.decided[e.id]).length)?e:0;if((0,a.useEffect)(()=>{null==n||n(g)},[n,g]),!h||!g&&!(h.expanded&&h.items.some(e=>h.decided[e.id]))||n&&!t)return null;let x=(0,r.jsx)("ul",{id:"chat-decisions-panel",className:"mt-2 max-h-[min(50vh,24rem)] space-y-2 overflow-y-auto rounded-lg border border-border p-3",children:h.items.map(e=>(0,r.jsxs)("li",{className:"rounded-lg border border-border p-3",children:[(0,r.jsx)("h3",{className:"font-semibold",children:e.title}),(0,r.jsx)("p",{className:"truncate text-muted-foreground",title:e.situation,children:e.situation}),h.decided[e.id]?(0,r.jsxs)("p",{role:"status",children:["결정함 — ",h.decided[e.id]]}):(0,r.jsx)("div",{className:"mt-2 flex flex-wrap gap-2",children:e.options.map(t=>(0,r.jsxs)("button",{type:"button",disabled:!!h.busy,onClick:()=>{f(e,t)},className:"rounded-md border border-border px-2 py-1 hover:bg-muted disabled:opacity-50",children:[t.label,"option"in e.recommendation&&e.recommendation.option===t.id&&(0,r.jsx)("span",{className:"ml-1 text-primary",children:"추천"})]},t.id))})]},e.id))});return n?x:(0,r.jsxs)("div",{className:"shrink-0 border-b border-border bg-background px-3 py-1.5 text-sm",children:[(0,r.jsxs)("button",{type:"button","aria-expanded":h.expanded,"aria-controls":"chat-decisions-panel",onClick:()=>o(e=>e.client===l?{...e,expanded:!e.expanded}:e),className:"rounded-full border border-border bg-muted px-3 py-1 font-medium text-foreground hover:bg-muted/70",children:["대표 결정 ",g]}),h.expanded&&x]})}function N(e){let{activity:t,decisions:n,menu:a}=e,l="active"===t.kind?t.run.progressLine||t.run.runId:"quiet"===t.kind?"없음":"loading"===t.kind?"확인 중":"확인 불가";return(0,r.jsxs)("div",{"data-elanous-mobile-chat-status":"",role:"status",className:"flex h-10 min-h-10 min-w-0 items-center gap-3 border-b border-border bg-background px-3 text-xs",children:[(0,r.jsxs)("span",{className:"min-w-0 flex-1 truncate",title:l,children:["지금 도는 일 \xb7 ",l]}),(0,r.jsxs)("span",{className:"shrink-0",children:["대기 결정 \xb7 ",null!=n?n:"—"]}),a]})}var S=n(73426),C=n(9851);function I(e){let{queue:t,onRemove:n,onClear:a}=e;return 0===t.length?null:(0,r.jsxs)("div",{className:"flex shrink-0 flex-wrap items-center gap-1.5 border-t border-border bg-background px-3 py-2","aria-label":"보낼 차례",children:[t.map((e,t)=>(0,r.jsxs)("span",{className:"inline-flex max-w-full items-center gap-1 rounded-full border border-border bg-muted px-2 py-1 text-xs",children:[(0,r.jsxs)("span",{className:"max-w-[160px] truncate",title:e.text,children:[t+1," \xb7 ",Array.from(e.text).slice(0,20).join("")]}),(0,r.jsx)("button",{type:"button",onClick:()=>n(e.id),"aria-label":"".concat(t+1,"번 지우기"),className:"rounded-full px-1 hover:bg-background",children:"\xd7"})]},e.id)),(0,r.jsx)("button",{type:"button",onClick:a,className:"rounded px-2 py-1 text-xs text-muted-foreground hover:bg-muted",children:"모두 지우기"})]})}function A(e){let t={files:[],tooLarge:0,tooMany:0};for(let n of e)n.file.size>0x1400000?t.tooLarge+=1:t.files.length>=10?t.tooMany+=1:t.files.push(n);return t}function E(e){return!!(e&&Array.from(e.types).includes("Files"))}function R(){return(0,r.jsx)("div",{role:"status","aria-label":"여기에 놓으면 첨부","data-elanous-chat-drop-overlay":"",className:"pointer-events-none absolute inset-0 z-30 flex items-center justify-center bg-background/80 backdrop-blur-sm",children:(0,r.jsxs)("div",{className:"mx-4 rounded-2xl border-2 border-dashed border-primary/60 bg-card/90 px-8 py-6 text-center shadow-lg",children:[(0,r.jsx)("p",{className:"text-lg font-semibold text-foreground",children:"여기에 놓으면 첨부"}),(0,r.jsxs)("p",{className:"mt-2 text-sm text-muted-foreground",children:["파일 ",10,"개까지 \xb7 큰 파일은 빠집니다"]})]})})}function D(e,t,n){if("drop"===t||"end"===t||!n)return{visible:!1,depth:0};let r="enter"===t?e.depth+1:Math.max(0,e.depth-1);return{visible:r>0,depth:r}}var q=n(64667),T=n(3155),L=n(25503);class U{list(){return this.client.fetchJson("/v1/projects")}create(e){return this.client.fetchJson("/v1/projects",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({name:e})})}assign(e,t){return this.client.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(e)),{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({projectId:t})})}constructor(e){this.client=e}}let O="elanous.chat.projectSelection",F="elanous-chat-pending-projects-changed",M="elanous-chat-projects-changed";function P(){window.dispatchEvent(new Event(M))}let Y="elanous.chat.pendingProjects";function _(){try{var e;let t=JSON.parse(null!=(e=localStorage.getItem(Y))?e:"{}");if(t&&"object"==typeof t&&!Array.isArray(t))return Object.fromEntries(Object.entries(t).filter(e=>{let[t,n]=e;return t&&"string"==typeof n&&n}))}catch(e){}return{}}function J(e){try{localStorage.setItem(Y,JSON.stringify(e))}catch(e){return!1}return window.dispatchEvent(new Event(F)),!0}function z(e){let{projects:t,selection:n,onChange:l,onCreate:s}=e,[o,i]=(0,a.useState)(!1),[c,d]=(0,a.useState)(""),[u,m]=(0,a.useState)(!1);return(0,r.jsxs)("div",{className:"space-y-2",children:[0===t.length&&!o&&(0,r.jsx)("button",{type:"button",onClick:()=>i(!0),className:"text-sm text-muted-foreground hover:text-foreground",children:"+ 프로젝트 만들기"}),t.length>0&&(0,r.jsxs)("select",{"aria-label":"프로젝트 바꾸기",value:n,onChange:e=>{if("create"===e.target.value)return void i(!0);l(e.target.value)},className:"w-full rounded-lg border border-border bg-background px-3 py-2 text-sm",children:[(0,r.jsx)("option",{value:"all",children:"모든 대화"}),(0,r.jsx)("option",{value:"none",children:"받은 대화(프로젝트 없음)"}),t.map(e=>(0,r.jsx)("option",{value:e.id,children:e.name},e.id)),(0,r.jsx)("option",{value:"create",children:"+ 프로젝트 만들기"})]}),o&&(0,r.jsxs)("form",{onSubmit:e=>{e.preventDefault();let t=c.trim();t&&s(t).then(()=>{i(!1),d(""),m(!1)}).catch(()=>m(!0))},className:"flex gap-2",children:[(0,r.jsx)("input",{"aria-label":"프로젝트 이름",autoFocus:!0,value:c,maxLength:80,onChange:e=>d(e.target.value),className:"min-w-0 flex-1 rounded-lg border border-border bg-background px-2 py-1 text-sm"}),(0,r.jsx)("button",{type:"submit",className:"rounded-lg border border-border px-2 text-sm",children:"만들기"}),u&&(0,r.jsx)("span",{role:"alert",children:"프로젝트를 만들지 못했습니다"})]})]})}function $(e){var t,n;let{compact:l=!1}=e,{client:s,sessionId:o}=(0,m.Q)(),i=(0,L.t)(),[c,d]=(0,a.useState)([]),[u,h]=(0,a.useState)(!0),[p,f]=(0,a.useState)(!1),[g,x]=(0,a.useState)(0),[b,v]=(0,a.useState)(!1),[y,w]=(0,a.useState)(null),[j,k]=(0,a.useState)(!1),[N,S]=(0,a.useState)(!0),[C,I]=(0,a.useState)([]),[A,E]=(0,a.useState)(0),[R,D]=(0,a.useState)(null),q=(0,a.useRef)(null),O=(0,a.useRef)(null),Y=(0,a.useRef)(null),z=(0,a.useRef)(new Set),$=!!(o&&C.includes(o)),Q=(0,a.useRef)(null),G=(0,a.useRef)(o);G.current=o;let[B,K]=(0,a.useState)(""),[H,W]=(0,a.useState)(!1),[Z,V]=(0,a.useState)("");(0,a.useEffect)(()=>{let e=!0,t=0;d([]),f(!1);let n=()=>{let n=++t;h(!0),new U(s).list().then(r=>{let{projects:a}=r;e&&n===t&&(d(null!=a?a:[]),f(!1))}).catch(()=>{e&&n===t&&f(!0)}).finally(()=>{e&&n===t&&h(!1)})};return n(),window.addEventListener(M,n),()=>{e=!1,window.removeEventListener(M,n)}},[s,g]),(0,a.useEffect)(()=>{let e=!0;return(S(!0),D(null),k(!1),Q.current=null,w(null),o)?(s.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(o),"?ifExists=1")).then(t=>{var n,r,a,l;e&&(k(!!t.meta),Q.current=null!=(r=null==(n=t.meta)?void 0:n.projectId)?r:null,z.current.has(o)||w(t.meta?null!=(a=t.meta.projectId)?a:null:null!=(l=_()[o])?l:null),D(o),S(!1))}).catch(()=>{e&&(D(null),K("프로젝트를 확인하지 못했습니다"),S(!1))}),()=>{e=!1}):void S(!1)},[s,o,A]),(0,a.useEffect)(()=>{K(""),W(!1),q.current=null,Y.current=null},[o]),(0,a.useEffect)(()=>{if(!o)return;let e=()=>{let e=_()[o];e&&(Y.current=null),z.current.has(o)||(R===o&&j&&e!==Q.current?E(e=>e+1):R===o&&w(null!=e?e:null))};return window.addEventListener(F,e),()=>window.removeEventListener(F,e)},[o,R,j]),(0,a.useEffect)(()=>{o&&R===o&&!j&&!$&&q.current!==o&&i.some(e=>e.id===o)&&(q.current=o,D(null),E(e=>e+1))},[o,R,j,$,i]),(0,a.useEffect)(()=>{if(!o||!j||N||$)return;let e=_()[o];!e||z.current.has(o)||O.current===o||Y.current==="".concat(o,":").concat(e)||(O.current=o,new U(s).assign(o,e).then(()=>{G.current===o&&(Q.current=e);let t=_();t[o]===e&&(delete t[o],J(t),G.current!==o||z.current.has(o)||w(e)),(0,T.hG)(s).forceRefresh()}).catch(()=>{Y.current="".concat(o,":").concat(e);let t=_();t[o]===e&&(delete t[o],J(t)),G.current===o&&(w(Q.current),K("프로젝트를 바꾸지 못했습니다"))}).finally(()=>{O.current=null}))},[s,o,j,N,$,A]);let X=async function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!o||R!==o||N||p&&!t||z.current.has(o)||O.current===o)return!1;z.current.add(o),I(e=>[...e,o]),K("");try{if(j){await new U(s).assign(o,e),G.current===o&&(Q.current=e),(0,T.hG)(s).forceRefresh();let t=_();t[o]&&(delete t[o],J(t))}else{let t=_();if(e?t[o]=e:delete t[o],!J(t))throw Error("pending project storage unavailable")}return G.current===o&&w(e),!0}catch(e){return G.current===o&&K("프로젝트를 바꾸지 못했습니다"),!1}finally{z.current.delete(o),I(e=>e.filter(e=>e!==o))}},ee=y?null!=(n=null==(t=c.find(e=>e.id===y))?void 0:t.name)?n:"알 수 없는 프로젝트":"프로젝트 없음";return(0,r.jsxs)("div",{className:l?"relative flex min-w-0 items-center gap-1.5 text-xs":"flex min-w-0 items-center gap-1.5 text-xs",children:[(0,r.jsx)("label",{htmlFor:"chat-current-project",className:l?"sr-only":"shrink-0 text-muted-foreground",children:"프로젝트"}),(0,r.jsxs)("select",{id:"chat-current-project","aria-label":"현재 대화 프로젝트",title:o&&R===o&&!N?"현재 프로젝트: ".concat(ee):"프로젝트 확인 중…",value:o&&R===o&&!N?null!=y?y:"":"loading",disabled:!o||R!==o||N||u||$||O.current===o||p,onChange:e=>{if("create"===e.target.value){u||p||W(!0);return}X(e.target.value||null)},className:"".concat(l?"w-20 max-w-[24vw]":"max-w-36"," min-w-0 truncate rounded-md border border-border bg-background px-2 py-1 text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring"),children:[(!o||R!==o||N)&&(0,r.jsx)("option",{value:"loading",children:"프로젝트 확인 중…"}),(0,r.jsx)("option",{value:"",children:"프로젝트 없음"}),y&&!c.some(e=>e.id===y)&&(0,r.jsx)("option",{value:y,children:"알 수 없는 프로젝트"}),c.map(e=>(0,r.jsx)("option",{value:e.id,children:e.name},e.id)),l&&(0,r.jsx)("option",{value:"create",children:"+ 프로젝트 만들기"})]}),!l&&(0,r.jsx)("button",{type:"button","aria-label":"프로젝트 만들기",title:"프로젝트 만들기",disabled:!o||R!==o||N||u||$||p,onClick:()=>W(e=>!e),className:"shrink-0 rounded px-1 hover:bg-muted",children:"+"}),H&&(0,r.jsxs)("form",{onSubmit:e=>{e.preventDefault();let t=Z.trim();!t||!o||R!==o||N||u||p||$||b||(v(!0),K(""),new U(s).create(t).then(async e=>{let{project:t}=e;d(e=>[...e,t]);let n=await X(t.id,!0);P(),n&&(W(!1),V(""))}).catch(()=>K("프로젝트를 만들지 못했습니다")).finally(()=>v(!1)))},className:l?"absolute right-0 top-full z-50 mt-1 flex items-center gap-1 rounded-lg border border-border bg-popover p-2 shadow-lg":"flex min-w-0 items-center gap-1",children:[(0,r.jsx)("input",{"aria-label":"새 프로젝트 이름",autoFocus:!0,maxLength:80,value:Z,onChange:e=>V(e.target.value),className:"w-24 rounded border border-border bg-background px-1 py-1"}),(0,r.jsx)("button",{type:"submit",disabled:$||b||!o||R!==o||u||p,className:"rounded border border-border px-1",children:"만들기"})]}),(o&&R!==o&&!N||p)&&(0,r.jsx)("button",{type:"button","aria-label":"프로젝트 다시 확인",onClick:()=>{K(""),E(e=>e+1),p&&x(e=>e+1)},className:"rounded border border-border px-1",children:"다시 시도"}),(B||p)&&(0,r.jsx)("span",{role:"alert",className:"text-destructive",children:B||"프로젝트 목록을 불러오지 못했습니다"})]})}var Q=n(44373),G=n(8114);function B(e){let{segmentKey:t,value:n,glyph:a}=e,l=function(e){var t;let n=/(\d{1,3})\s*%/.exec(e);if(!n)return null;let r=Number.parseInt(null!=(t=n[1])?t:"",10);return Number.isFinite(r)?Math.max(0,Math.min(100,r)):null}(n);if(null===l)return(0,r.jsxs)("span",{"data-elanous-hud-key":t,"data-elanous-hud-gauge":"false",className:"inline-flex items-center gap-1 font-mono text-[11px] text-muted-foreground",children:[a?(0,r.jsx)("span",{"aria-hidden":"true",children:a}):null,(0,r.jsx)("span",{children:n})]});let{bar:s,text:o}=l>=80?{bar:"bg-pink-400",text:"text-pink-300"}:l>=60?{bar:"bg-amber-400",text:"text-amber-300"}:{bar:"bg-emerald-500",text:"text-emerald-300"};return(0,r.jsxs)("span",{"data-elanous-hud-key":t,"data-elanous-hud-gauge":"true","data-elanous-hud-percent":String(l),className:"inline-flex items-center gap-1.5 font-mono text-[11px]",children:[a?(0,r.jsx)("span",{"aria-hidden":"true",className:"text-muted-foreground",children:a}):null,(0,r.jsx)("span",{role:"progressbar","aria-valuenow":l,"aria-valuemin":0,"aria-valuemax":100,"aria-label":"".concat(t," ").concat(l,"%"),className:"relative h-2 w-20 overflow-hidden rounded bg-muted/30",children:(0,r.jsx)("span",{"aria-hidden":"true",style:{width:"".concat(l,"%")},className:(0,Q.cn)("block h-full",s)})}),(0,r.jsx)("span",{className:(0,Q.cn)("tabular-nums",o),children:n})]})}let K=new Set(["variant","workspace","model","token-gauge","ctx","agent-activity","agents"]),H=new Set(["token-gauge","ctx"]),W={normal:"text-foreground",warn:"text-amber-300",danger:"text-pink-300",success:"text-emerald-300",info:"text-sky-300",muted:"text-muted-foreground"};function Z(e){var t,n;let{segment:a}=e;if(H.has(a.key))return(0,r.jsx)(B,{segmentKey:a.key,value:a.value,...void 0!==a.glyph?{glyph:a.glyph}:{}});let l=a.tone?W[a.tone]:W.normal;return(0,r.jsxs)("span",{"data-elanous-hud-key":a.key,"data-elanous-hud-tone":null!=(t=a.tone)?t:"normal","data-elanous-hud-priority":String(null!=(n=a.priority)?n:50),className:(0,Q.cn)("inline-flex items-center gap-1 font-mono text-[11px]",l),children:[a.glyph?(0,r.jsx)("span",{"aria-hidden":"true",children:a.glyph}):null,(0,r.jsx)("span",{children:a.value})]})}function V(e){let{segments:t,row:n,className:a}=e;return 0===t.length?null:(0,r.jsx)("div",{"data-elanous-hud-row":n,className:(0,Q.cn)("flex flex-wrap items-center gap-x-3 gap-y-1",a),children:t.map((e,t)=>(0,r.jsxs)("span",{className:"flex items-center gap-x-3",children:[t>0?(0,r.jsx)("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"\xb7"}):null,(0,r.jsx)(Z,{segment:e})]},e.key))})}function X(e){let{segments:t}=e;if(0===t.length)return null;let{top:n,bottom:a}=function(e){let t=[],n=[];for(let r of e)K.has(r.key)?t.push(r):n.push(r);return{top:t,bottom:n}}(t);return(0,r.jsxs)("div",{"data-elanous-hud":"strip",role:"status","aria-label":"HUD status",className:"flex flex-col gap-0.5 border-b border-border/40 bg-muted/10 px-3 py-1.5",children:[(0,r.jsx)(V,{segments:n,row:"top"}),(0,r.jsx)(V,{segments:a,row:"bottom",className:"hidden sm:flex"})]})}let ee=[];function et(){return ee}function en(){let e=(0,a.useSyncExternalStore)(G.er,G.Wl,et);return(0,r.jsx)(X,{segments:e})}function er(e,t){if("string"!=typeof e)return t;let n=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-](\d{2}):(\d{2}))$/.exec(e);if(!n)return t;let[,r,a,l,s,o,i,c,d]=n,u=Number(r),m=Number(a),h=Number(l),p=[31,u%4==0&&(u%100!=0||u%400==0)?29:28,31,30,31,30,31,31,30,31,30,31][m-1];if(h<1||void 0===p||h>p||Number(s)>23||Number(o)>59||Number(i)>59||void 0!==c&&(Number(c)>23||Number(d)>59))return t;let f=Date.parse(e);return Number.isFinite(f)?f:t}var ea=n(5997),el=n(65194),es=n(67903),eo=n(36898),ei=n(56360),ec=n(76573),ed=n(75342),eu=n(14222);let em={idle:"음성 대기",connecting:"데몬 연결 중…",listening:"듣는 중",processing:"생각 중…",speaking:"말하는 중",error:"음성 오류"},eh={idle:"마이크를 켜서 대화를 시작하세요.",connecting:"잠시만 기다려주세요.",listening:"문장이 끝나면 자동으로 전송됩니다.",processing:"서버가 응답을 생성하는 중입니다.",speaking:"음성 응답을 재생하는 중입니다.",error:"아래 메시지를 확인하고 다시 시도하세요."},ep={idle:"bg-slate-400",connecting:"bg-amber-500",listening:"bg-emerald-500",processing:"bg-sky-500",speaking:"bg-fuchsia-500",error:"bg-rose-600"};function ef(e){let{active:t,phase:n,errorMsg:a,onToggle:l,ttsSupported:i=!1,ttsMuted:c=!1,onTtsToggle:d,onInterrupt:u}=e,m="speaking"===n&&"function"==typeof u;return(0,r.jsxs)("div",{"data-elanous-voice-overlay":!0,"aria-hidden":!t,className:(0,Q.cn)("pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300",t?"pointer-events-auto opacity-100":"opacity-0"),children:[(0,r.jsx)("div",{className:"absolute inset-0 bg-background/60 backdrop-blur-md"}),(0,r.jsxs)("div",{className:"relative mx-4 flex w-full max-w-sm flex-col items-center gap-5 rounded-xl border border-border bg-card px-6 py-7 text-center shadow-xl",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 text-sm",children:[(0,r.jsx)("span",{className:(0,Q.cn)("h-2.5 w-2.5 rounded-full",ep[n],("listening"===n||"speaking"===n||"connecting"===n)&&"animate-pulse"),"aria-hidden":!0}),(0,r.jsx)("span",{className:"font-medium tracking-wide",children:em[n]})]}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:eh[n]}),(0,r.jsx)("button",{type:"button",onClick:m?u:l,"data-elanous-action":m?"voice-overlay-interrupt":"voice-overlay-toggle",className:(0,Q.cn)("inline-flex h-16 w-16 items-center justify-center rounded-full text-white transition-colors",m?"bg-amber-500 hover:bg-amber-400 animate-pulse":"connecting"===n||"processing"===n?"bg-sky-500 hover:bg-sky-400":"error"===n?"bg-rose-600 hover:bg-rose-500":"bg-rose-500 hover:bg-rose-400"),"aria-label":m?"끼어들기":"마이크 끄기",children:m?(0,r.jsx)(ei.A,{className:"h-7 w-7"}):"connecting"===n||"processing"===n?(0,r.jsx)(ec.A,{className:"h-7 w-7 animate-spin"}):"error"===n?(0,r.jsx)(ed.A,{className:"h-7 w-7"}):(0,r.jsx)(s.A,{className:"h-7 w-7"})}),a&&(0,r.jsx)("p",{className:"max-w-xs text-xs text-rose-500",children:a}),(0,r.jsxs)("div",{className:"flex items-center gap-4",children:[i&&d&&(0,r.jsxs)("button",{type:"button",onClick:d,"data-elanous-action":"voice-overlay-tts-toggle",className:"inline-flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground","aria-label":c?"음성 응답 켜기":"음성 응답 끄기","aria-pressed":!c,children:[c?(0,r.jsx)(eu.A,{className:"h-3.5 w-3.5"}):(0,r.jsx)(g.A,{className:"h-3.5 w-3.5"}),(0,r.jsx)("span",{children:c?"음성 응답 OFF":"음성 응답 ON"})]}),(0,r.jsxs)("button",{type:"button",onClick:l,className:"inline-flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground","aria-label":"음성 닫고 텍스트로 돌아가기",children:[(0,r.jsx)(o.A,{className:"h-3.5 w-3.5"}),(0,r.jsx)("span",{children:"음성 끄기"})]})]})]})]})}function eg(e){let{open:t,onClose:n,lines:l}=e,[s,o]=(0,a.useState)(""),i=(0,a.useMemo)(()=>{if(!s.trim())return null;try{return RegExp(s,"i")}catch(e){return null}},[s]),c=(0,a.useMemo)(()=>s.trim().toLowerCase(),[s]),d=(0,a.useMemo)(()=>{let e=l.length>200?l.slice(l.length-200):l;return i?e.filter(e=>i.test(e.category)||i.test(e.event)):c?e.filter(e=>e.category.toLowerCase().includes(c)||e.event.toLowerCase().includes(c)):e},[l,i,c]);return(0,r.jsx)("div",{"data-elanous-debug-tap-drawer":t?"open":"closed",className:(0,Q.cn)("fixed bottom-0 left-0 right-0 z-50 transition-transform duration-200 ease-out","pointer-events-none",t?"translate-y-0":"translate-y-full"),role:"region","aria-label":"Debug Tap Drawer","aria-hidden":!t,children:(0,r.jsxs)("div",{className:(0,Q.cn)("pointer-events-auto mx-auto flex max-h-[60vh] w-full max-w-[1100px] flex-col","rounded-t-md border border-b-0 border-border bg-card shadow-xl"),children:[(0,r.jsxs)("header",{className:"flex items-center justify-between gap-2 border-b border-border/60 px-3 py-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:"Debug Tap"}),(0,r.jsxs)("span",{className:"text-[10px] text-muted-foreground/70","data-elanous-debug-tap-count":d.length,"data-elanous-debug-tap-total":l.length,children:[d.length,"/",l.length]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("input",{type:"text",placeholder:"regex filter…",value:s,onChange:e=>o(e.target.value),spellCheck:!1,autoComplete:"off",className:(0,Q.cn)("w-40 rounded border border-border bg-background px-2 py-1 text-[11px] font-mono","focus:outline-none focus:ring-1 focus:ring-primary"),"data-elanous-debug-tap-filter":"","aria-label":"Filter debug lines"}),(0,r.jsx)("button",{type:"button",onClick:n,className:"rounded px-2 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground","aria-label":"Close debug drawer","data-elanous-debug-tap-close":"",children:"✕"})]})]}),(0,r.jsx)("ul",{className:"flex-1 overflow-y-auto px-3 py-2 text-[11px] font-mono","data-elanous-debug-tap-list":"",children:0===d.length?(0,r.jsx)("li",{className:"italic text-muted-foreground/60",children:0===l.length?"(no debug lines yet)":"(no matches for filter)"}):d.map((e,t)=>(0,r.jsx)(ex,{line:e},"".concat(e.loggedAt,"-").concat(e.seq,"-").concat(t)))})]})})}function ex(e){let{line:t}=e,n=new Date(t.loggedAt).toISOString().slice(11,23);return(0,r.jsxs)("li",{"data-elanous-debug-tap-line":"","data-elanous-category":t.category,"data-elanous-event":t.event,className:"py-0.5",children:[(0,r.jsxs)("span",{className:"text-muted-foreground/70",children:["[",n,"]"]})," ",(0,r.jsxs)("span",{className:"text-amber-400",children:["[",t.category,"]"]})," ",(0,r.jsx)("span",{className:"text-foreground",children:t.event}),void 0!==t.data&&(0,r.jsxs)("details",{className:"ml-4 text-muted-foreground",children:[(0,r.jsx)("summary",{className:"cursor-pointer select-none text-[10px]",children:"data"}),(0,r.jsx)("pre",{className:"m-0 mt-1 whitespace-pre-wrap break-all text-[10px] text-muted-foreground/80",children:function(e){try{return JSON.stringify(e,null,2)}catch(t){return String(e)}}(t.data)})]})]})}var eb=n(60516),ev=n(56974),ey=n(87969),ew=n(25042),ej=n(9734),ek=n(30158),eN=n(2021);let eS="Other";function eC(e){let{request:t,onSubmit:n,onCancel:a,onChatAboutThis:l}=e;return(0,r.jsx)(ew.lG,{open:null!==t,onOpenChange:e=>{e||a()},children:(0,r.jsx)(ew.Cf,{className:"max-w-2xl",children:t?(0,r.jsx)(eI,{request:t,onSubmit:n,onCancel:a,onChatAboutThis:l}):null})})}function eI(e){let{request:t,onSubmit:n,onCancel:l,onChatAboutThis:s}=e,[o,i]=(0,a.useState)(()=>Object.fromEntries(t.questions.map(e=>[e.id,new Set]))),[c,d]=(0,a.useState)({}),[u,m]=(0,a.useState)({}),h=1===t.questions.length?t.questions[0].header:"Pick options",p=(0,a.useMemo)(()=>{for(let n of t.questions){var e;let t=null!=(e=o[n.id])?e:new Set,r=eR(n,o,u);if(0===t.size&&!r)return!1}return!0},[t.questions,o,u]);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(ew.c7,{children:[(0,r.jsx)(ew.L3,{children:h}),1===t.questions.length?(0,r.jsx)(ew.rr,{children:t.questions[0].question}):(0,r.jsxs)(ew.rr,{children:[t.questions.length," questions"]})]}),(0,r.jsx)(eN.F,{className:"max-h-[60vh] pr-2",children:(0,r.jsx)("div",{className:"flex flex-col gap-6 py-2",children:t.questions.map(e=>{var t;return(0,r.jsx)(eA,{question:e,isSelected:t=>{var n,r,a;return n=e.id,null!=(a=null==(r=o[n])?void 0:r.has(t))&&a},onToggle:t=>{i(n=>{var r;let a={...n},l=new Set(null!=(r=a[e.id])?r:[]);return e.multiSelect?l.has(t)?l.delete(t):l.add(t):(l.clear(),l.add(t),m(t=>({...t,[e.id]:!1}))),a[e.id]=l,a})},otherActive:eR(e,o,u),onToggleOther:()=>{e.multiSelect?m(t=>{var n;return{...t,[e.id]:!(null!=(n=t[e.id])&&n)}}):i(t=>{let n={...t};return n[e.id]=new Set([eS]),n})},otherText:null!=(t=c[e.id])?t:"",onOtherText:t=>d(n=>({...n,[e.id]:t}))},e.id)})})}),(0,r.jsxs)(ew.Es,{className:"flex-wrap gap-2 sm:justify-between",children:[(0,r.jsx)(ej.$,{variant:"ghost",onClick:s,"aria-label":"Chat about this",children:"\uD83D\uDCAC Chat about this"}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(ej.$,{variant:"outline",onClick:l,children:"Cancel"}),(0,r.jsx)(ej.$,{onClick:function(){let e={},r={};for(let n of t.questions){var a,l;let t=Array.from(null!=(a=o[n.id])?a:[]);if(eR(n,o,u)&&!t.includes(eS)&&t.push(eS),0!==t.length&&(n.multiSelect?e[n.id]=t:e[n.id]=t[0],t.includes(eS))){let e=(null!=(l=c[n.id])?l:"").trim();e.length>0&&(r[n.id]=e)}}let s={answers:e};Object.keys(r).length>0&&(s.otherText=r),n(s)},disabled:!p,children:"Submit"})]})]})]})}function eA(e){var t,n;let{question:a}=e;return(0,r.jsxs)("section",{className:"flex flex-col gap-2",children:[""!==e.question.id?(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"rounded-full bg-primary/15 px-2 py-0.5 text-xs font-medium text-primary",children:a.header}),a.multiSelect?(0,r.jsx)("span",{className:"text-xs text-muted-foreground",children:"multi-select"}):null]}):null,(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[a.options.map(t=>{var n;return(0,r.jsx)(eE,{multi:null!=(n=a.multiSelect)&&n,option:t,selected:e.isSelected(t.label),onToggle:()=>e.onToggle(t.label)},t.label)}),null==(t=a.includeOther)||t?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(eE,{multi:null!=(n=a.multiSelect)&&n,option:{label:"Other",description:"Type your own response"},selected:e.otherActive,onToggle:e.onToggleOther}),e.otherActive?(0,r.jsx)(ek.p,{value:e.otherText,onChange:t=>e.onOtherText(t.target.value),placeholder:"Type your own response","aria-label":"Other response",className:"ml-8"}):null]}):null]})]})}function eE(e){let{multi:t,option:n,selected:a,onToggle:l}=e;return(0,r.jsxs)("button",{type:"button",role:t?"checkbox":"radio","aria-checked":a,onClick:l,className:"\n flex items-start gap-3 rounded-md border p-3 text-left\n transition-colors\n ".concat(a?"border-primary bg-primary/10":"border-border hover:bg-muted/40","\n "),children:[(0,r.jsx)("span",{className:"mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center ".concat(t?"rounded":"rounded-full"," border ").concat(a?"border-primary bg-primary text-primary-foreground":"border-muted-foreground/40"),"aria-hidden":"true",children:a?t?"✓":"●":null}),(0,r.jsxs)("span",{className:"flex flex-col gap-0.5",children:[(0,r.jsx)("span",{className:"font-medium",children:n.label}),(0,r.jsx)("span",{className:"text-sm text-muted-foreground",children:n.description}),n.preview?(0,r.jsx)("span",{className:"mt-1 rounded bg-muted/40 px-2 py-1 text-xs font-mono text-muted-foreground",children:n.preview}):null]})]})}function eR(e,t,n){var r,a,l;return e.multiSelect?null!=(a=n[e.id])&&a:null!=(l=null==(r=t[e.id])?void 0:r.has(eS))&&l}function eD(e){if(void 0===e)return"";if("string"==typeof e)return e;try{var t;return null!=(t=JSON.stringify(e,null,2))?t:""}catch(e){return""}}function eq(e){let{request:t,receivedAt:n,onChoose:l,onCancel:s}=e,[o,i]=(0,a.useState)(()=>Date.now());(0,a.useEffect)(()=>{if(!t)return;i(Date.now());let e=setInterval(()=>i(Date.now()),1e3);return()=>clearInterval(e)},[t]);let c=t?eD(t.toolCall.rawInput):"",d=t?function(e){if(e&&"object"==typeof e&&!Array.isArray(e)){for(let t of["file_path","filePath","path","command","cmd"])if("string"==typeof e[t])return e[t].slice(0,80)}return eD(e).replace(/\s+/g," ").slice(0,80)}(t.toolCall.rawInput):"",u=Math.max(0,Math.ceil((n+6e4-o)/1e3));return(0,r.jsx)(ew.lG,{open:null!==t,onOpenChange:e=>{!e&&t&&s(t)},children:(0,r.jsx)(ew.Cf,{className:"max-w-lg",children:t&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(ew.c7,{children:[(0,r.jsx)(ew.L3,{children:"이 작업을 실행할까요?"}),(0,r.jsxs)(ew.rr,{children:["도구: ",t.toolCall.title]})]}),d&&(0,r.jsx)("p",{className:"truncate font-mono text-sm",title:d,children:d}),c&&(0,r.jsxs)("details",{className:"text-sm",children:[(0,r.jsx)("summary",{className:"cursor-pointer",children:"자세히"}),(0,r.jsx)("pre",{className:"mt-2 max-h-48 overflow-auto whitespace-pre-wrap break-all rounded bg-muted p-2",children:c})]}),(0,r.jsxs)("p",{className:"text-xs text-muted-foreground","aria-live":"off",children:["남은 시간: ",u,"초"]}),(0,r.jsxs)(ew.Es,{className:"flex-wrap gap-2",children:[(0,r.jsx)(ej.$,{onClick:()=>l(t,"allow_once"),children:"이번만 허용"}),(0,r.jsx)(ej.$,{variant:"outline",onClick:()=>l(t,"allow_always"),children:"이 도구는 항상 허용"}),(0,r.jsx)(ej.$,{variant:"outline",onClick:()=>l(t,"reject_once"),children:"거절"})]})]})})})}let eT={outcome:{outcome:"cancelled"}},eL=["allow_once","allow_always","reject_once","reject_always"],eU="unverified";var eO=n(60750),eF=n(67327);function eM(e,t){var n;return"error"!==t.kind?null:null!=(n=function(e){if(!e||"object"!=typeof e)return null;let{error:t,message:n,holder:r}=e;return"turn_busy"!==t?null:{message:"string"==typeof n?n:"This session is currently receiving input. Please try again when that turn finishes.",holder:"string"==typeof r&&r.trim()?r:null}}(t.payload))?n:e}var eP=n(61897);function eY(e){return"string"==typeof e.mediaType&&e.mediaType.toLowerCase().startsWith("image/")}async function e_(e,t){let n=e.downloadUrl.startsWith("http")?e.downloadUrl:"".concat(t.baseUrl.replace(/\/$/,"")).concat(e.downloadUrl),r={};t.token&&(r.authorization="Bearer ".concat(t.token));let a=await fetch(n,{headers:r});if(!a.ok)throw Error("fetch attachment ".concat(e.id," failed: ").concat(a.status));return function(e){let t=new Uint8Array(e),n="";for(let e=0;e<t.length;e+=32768)n+=String.fromCharCode(...t.subarray(e,e+32768));return btoa(n)}(await a.arrayBuffer())}async function eJ(e,t,n){if(0===t.length)return null;let r=[];for(let a of(e.length>0&&r.push({type:"text",text:e}),t))if(eY(a))try{let e=await e_(a,n);r.push({type:"image",mimeType:a.mediaType,data:e})}catch(t){let e=t instanceof Error?t.message:String(t);r.push({type:"text",text:"[image fetch failed: ".concat(a.filename," — ").concat(e,"]")})}else r.push({type:"resource_link",uri:a.path?"file://".concat(a.path):a.downloadUrl,mimeType:a.mediaType,name:a.filename});return r}let ez="elanous.pwa.pendingCardFollowups";function e$(e,t){try{var n;let r=JSON.parse(null!=(n=e.getItem(ez))?n:"[]");if(!Array.isArray(r))return[];return r.filter(e=>!!e&&"object"==typeof e&&"string"==typeof e.sessionId&&e.sessionId.length>0&&"string"==typeof e.id&&e.id.length>0&&"number"==typeof e.startedAt&&Number.isFinite(e.startedAt)&&e.startedAt<=t&&t-e.startedAt<9e5)}catch(e){return[]}}function eQ(e,t){try{t.length?e.setItem(ez,JSON.stringify(t)):e.removeItem(ez)}catch(e){}}function eG(){try{return window.localStorage}catch(e){return}}async function eB(e,t,n,r){let a=await e.fetchResponse("/v1/card-followup",{...r?{signal:r}:{},method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({attachmentId:t,...void 0===n?{}:{context:n}})});if(!a.ok)throw Error("card followup start failed: ".concat(a.status));let l=await a.json();if("string"!=typeof l.id||!l.id)throw Error("card followup start returned no id");return l.id}async function eK(e,t){let n,{intervalMs:r=3e3,signal:a,onStatus:l,startedAt:s}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=void 0===s?6e5:Math.max(0,s+9e5-Date.now()),i=Date.now()+o,c={status:"failed"},d=new AbortController,u=a?AbortSignal.any([a,d.signal]):d.signal,m=!1,h=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((n,r)=>{let l;if(u.aborted){var s;r(null!=(s=null==a?void 0:a.reason)?s:Error("aborted"));return}let o="undefined"==typeof document?void 0:document,i=()=>{clearTimeout(l),null==o||o.removeEventListener("visibilitychange",c),u.removeEventListener("abort",d)},c=()=>{(null==o?void 0:o.visibilityState)!=="hidden"&&(i(),n())},d=()=>{var e;i(),r(null!=(e=null==a?void 0:a.reason)?e:Error("aborted"))};l=setTimeout(()=>{i(),n()},e),t&&(null==o||o.addEventListener("visibilitychange",c)),u.addEventListener("abort",d,{once:!0})})},p=async()=>{for(;Date.now()<i;){var n,s;if(null==a?void 0:a.aborted)throw null!=(n=a.reason)?n:Error("aborted");if("undefined"!=typeof document&&"hidden"===document.visibilityState){await h(i-Date.now(),!0);continue}let o=await e.fetchResponse("/v1/card-followup/".concat(encodeURIComponent(t)),{signal:u});if(!o.ok)throw Error("card followup poll failed: ".concat(o.status));let d=await o.json();if(null==a?void 0:a.aborted)throw null!=(s=a.reason)?s:Error("aborted");if(m)return c;if(null==l||l(d.status),"done"===d.status||"not-card"===d.status||"failed"===d.status)return d;await h(Math.min(Math.max(0,r),Math.max(0,i-Date.now())))}return null==l||l("failed"),c};try{return await Promise.race([p(),new Promise(e=>{n=setTimeout(()=>{m=!0,d.abort(),null==l||l("failed"),e(c)},o)})])}finally{clearTimeout(n)}}function eH(){var e,t;let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{compact:c}=(0,u.K)(),[h,p]=(0,a.useState)(!1),[g,v]=(0,a.useState)(!1),[y,j]=(0,a.useState)(0),[T,L]=(0,a.useState)(0),U=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(!h)return;let e=e=>{U.current&&U.current.contains(e.target)||p(!1)},t=e=>{"Escape"===e.key&&p(!1)};return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t)}},[h]),(0,a.useEffect)(()=>{c||p(!1)},[c]);let{client:O,config:F,sessionId:M,setSessionId:P}=(0,m.Q)(),[Y,_]=(0,a.useState)([]),[J,z]=(0,a.useState)(),[B,K]=(0,a.useState)(!1),[H,W]=(0,a.useState)([]),Z=(0,a.useRef)([]),V=(0,a.useRef)(M),X=(0,a.useRef)(M),ee=(0,a.useRef)(null),et=(0,a.useRef)(0),ei=(0,a.useRef)(0),ec=(0,a.useRef)(!1),[ed,eu]=(0,a.useState)(null),em=V.current!==M&&ee.current!==M?[]:H;(0,a.useLayoutEffect)(()=>{X.current=M,V.current!==M&&(ee.current!==M&&(et.current++,Z.current=[],W([]),_([]),eS.current&&K(!1)),V.current=M,ee.current=null)},[M]);let eh=e=>{Z.current=e,W(e)},[ep,ex]=(0,a.useState)(null),[ew,ej]=(0,a.useState)(null),[ek,eN]=(0,a.useState)([]),eS=(0,a.useRef)(null),eI=(0,a.useRef)(null);(0,a.useEffect)(()=>()=>{var e;eI.current!==X.current&&(null==(e=eS.current)||e.abort())},[M]),(0,a.useEffect)(()=>()=>{var e;null==(e=eS.current)||e.abort()},[]);let[eA,eE]=(0,a.useState)({visible:!1,depth:0});(0,a.useEffect)(()=>{let e=()=>eE(e=>D(e,"end",!1));return window.addEventListener("dragend",e),()=>window.removeEventListener("dragend",e)},[]);let eR=(0,a.useRef)(!1),eD=(0,a.useRef)(null),e_=(0,a.useRef)(null),[ez,eH]=(0,a.useState)(null),eW=(0,a.useMemo)(()=>{try{let e=new URLSearchParams(window.location.search);return"on"===e.get("debug-tap")}catch(e){return!1}},[]),[eZ,eV]=(0,a.useState)(eW),eX=(0,a.useMemo)(()=>{let e=[];for(let t of Y)if(Array.isArray(t.blocks)){for(let n of t.blocks)if("debug_session"===n.kind)for(let t of n.lines)e.push({seq:t.seq,category:t.category,event:t.event,...void 0!==t.data?{data:t.data}:{},loggedAt:t.loggedAt})}return e},[Y]),e0=(0,a.useRef)(async()=>{}),e1=(0,a.useRef)(!1);e1.current=B;let e2=(0,a.useRef)(async()=>{}),e3=O.voiceWsUrl(),e5=(0,a.useCallback)(e=>{let t=e.trim();if(t){if(e1.current)return void(0,x.cY)("chat.voice.skip-pending",{len:t.length});(0,x.cY)("chat.voice.auto-send",{len:t.length}),e0.current(t)}},[]),e4=(0,ev.sS)({wsUrl:e3,...F.token?{token:F.token}:{},onTranscript:e5}),e6=!!F.baseUrl;e2.current=()=>e4.toggle();let[e8,e7]=(0,a.useState)(!1),e9=(0,ey.$)({enabled:e4.active&&!e8,language:"ko-KR"}),te=(0,a.useCallback)(()=>{null==ew||ew.abort(),(0,x.cY)("webterm.chat.stop",{had:!!ew})},[ew]);(0,a.useEffect)(()=>{if(!ew)return;let e=e=>{var t;if("Escape"!==e.key)return;let n=e.target,r=null==n||null==(t=n.tagName)?void 0:t.toLowerCase();"input"===r||"textarea"===r||null!=n&&n.isContentEditable||(e.preventDefault(),te())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[ew,te]),(0,a.useEffect)(()=>{let e=e=>{"m"===e.key.toLowerCase()&&e.shiftKey&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),(0,x.cY)("chat.voice.shortcut.toggle"),e2.current())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]);let tt=(0,a.useCallback)(e=>{eN(t=>[...t,...e]),(0,x.cY)("webterm.chat.attach.queue",{added:e.length,filenames:e.map(e=>e.filename)})},[]),tn=async e=>{let{files:t,tooLarge:n,tooMany:r}=e;if(n&&eF.oR.error("".concat(n," files exceed the 20 MB attachment limit")),r&&eF.oR.error("".concat(r," files exceed the 10-file attachment limit")),0===t.length)return;if(!F.baseUrl)return void eF.oR.error("Daemon URL 미설정 — Settings 에서 입력");let a=await (0,eP.K)(t,{baseUrl:F.baseUrl,...F.token?{token:F.token}:{}}),l=a.filter(e=>e.ok).map(e=>e.meta),s=a.filter(e=>!e.ok);l.length&&(tt(l),eF.oR.success(1===l.length?"\uD83D\uDCCE ".concat(l[0].filename):"\uD83D\uDCCE ".concat(l.length," files attached"))),s.length&&eF.oR.error(1===s.length?"업로드 실패: ".concat(s[0].reason.slice(0,80)):"".concat(s.length," 파일 업로드 실패"))};(0,a.useEffect)(()=>{try{let e=window.sessionStorage.getItem("elanous.pwa.shareAttachments");if(!e)return;window.sessionStorage.removeItem("elanous.pwa.shareAttachments");let t=JSON.parse(e);if(!Array.isArray(t)||0===t.length)return;eN(e=>[...e,...t]);let n=1===t.length?"1 file shared from another app":"".concat(t.length," files shared from another app");eF.oR.success(n),(0,x.cY)("pwa.chat.share-attachments.consume",{count:t.length})}catch(e){(0,x.cY)("pwa.chat.share-attachments.parse-failed",{reason:e instanceof Error?e.message:String(e)})}},[]),(0,a.useEffect)(()=>{if(!M)return;let e=!0;return(async()=>{try{let t=await O.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(M),"?ifExists=1"));if(!e||!(null==t?void 0:t.messages)||0===t.messages.length)return;_(e=>e.some(e=>!e.id.startsWith("m-card-resume-"))?e:[...function(e,t){let n,r,a=[],l=[];for(let o of e){var s;if("tool"===o.role){for(let e of(0===l.length&&(r=o.ts),function(e,t){let n,r=function(e,t){var n,r;let a,l=String(null!=(n=e.toolName)?n:"");try{a=JSON.parse(String(null!=(r=e.toolResult)?r:""))}catch(e){a=void 0}let s=a&&"object"==typeof a&&!Array.isArray(a)?a:void 0,o=null==s?void 0:s._meta,i=o&&"object"==typeof o&&!Array.isArray(o)?o.ui:void 0,c=i&&"object"==typeof i&&!Array.isArray(i)?i.resourceUri:void 0,d=null==s?void 0:s["ui/resourceUri"],u="string"==typeof c?c:"string"==typeof d?d:void 0;return void 0!==u&&""!==u.trim()?{kind:"mcp_app",toolId:t,toolName:l,screenUrl:u,...void 0!==a?{toolResult:a}:{}}:{kind:"tool_use",id:t,name:l,status:"done",...void 0!==s&&void 0!==e.toolArgs?{args:{raw:String(e.toolArgs)}}:{}}}(e,t);try{var a;n=JSON.parse(String(null!=(a=e.toolResult)?a:""))}catch(e){n=void 0}let l=(0,G.uS)(n).map(e=>({kind:"image",...e})),s=[];return(0,G.ki)(s,null!=n?n:e.toolResult),[...l,r,...s]}(o,"restore-tool-".concat(l.length,"-").concat(a.length))))"image"===e.kind&&l.some(t=>"image"===t.kind&&t.src===e.src)||l.push(e);continue}if("user"!==o.role&&"assistant"!==o.role)continue;let e=String(null!=(s=o.content)?s:""),i=String(null!=e?e:"").split("\n").filter(e=>!/^\[tool_(use|result)\]$/.test(e.trim())).join("\n"),c="assistant"===o.role?"assistant":"user";if(""===i.trim()){l.length>0&&"assistant"===c&&(a.push({id:"restore-".concat(a.length),role:c,text:"",blocks:l,timestamp:er(r,t+a.length)}),l=[],r=void 0);continue}let d=i!==e,u=void 0!==n&&n.role===c&&n.text===i&&(d||n.wasStripped)&&0===l.length;if(n={role:c,text:i,wasStripped:d},u)continue;let m=l.length>0&&"assistant"===c?[...l,{kind:"text",text:i}]:void 0,h=er(void 0!==m?r:o.ts,t+a.length);void 0!==m&&(l=[],r=void 0),a.push({id:"restore-".concat(a.length),role:c,text:i,...void 0!==m?{blocks:m}:{},timestamp:h})}return l.length>0&&a.push({id:"restore-".concat(a.length),role:"assistant",text:"",blocks:l,timestamp:er(r,t+a.length)}),a}(t.messages,Date.now()),...e])}catch(e){}})(),()=>{e=!1}},[M,O]);let tr=(0,a.useCallback)(e=>{eN(t=>t.filter(t=>t.id!==e))},[]),ta={client:O,sessionId:M,provider:F.provider,setSessionId:P,daemon:{baseUrl:F.baseUrl,...F.token?{token:F.token}:{}},messages:Y},tl=e=>{_(t=>[...t,e])},ts=async(e,t,n,r,a)=>{var l;let s=await eK(O,e,{signal:r.signal,...void 0===a?{}:{startedAt:a},onStatus:e=>(0,x.cY)("pwa.chat.card-followup",{phase:"poll",status:e})});if(r.signal.aborted||X.current!==t)return"terminal";let o=eG();return(o&&function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Date.now();eQ(e,e$(e,r).filter(e=>e.sessionId!==t||e.id!==n))}(o,t,e),"not-card"===s.status)?(_(e=>e.filter(e=>e.id!==n)),(0,x.cY)("pwa.chat.card-followup",{phase:"fallback",status:s.status}),"not-card"):("done"===s.status&&(null==(l=s.replies)?void 0:l.length)===3&&s.replies.every(e=>"string"==typeof e)?(_(e=>[...e.filter(e=>e.id!==n),...s.replies.map((e,t)=>({id:"".concat(n,"-").concat(t),role:"assistant",text:e,timestamp:Date.now(),meta:{provider:F.provider}}))]),(0,x.cY)("pwa.chat.card-followup",{phase:"complete",status:"done"})):(_(e=>e.map(e=>e.id===n?{...e,text:"명함 정리에 실패했습니다 — 다시 보내 주세요"}:e)),(0,x.cY)("pwa.chat.card-followup",{phase:"complete",status:"failed"})),"terminal")};(0,a.useEffect)(()=>{if(!M)return;let e=eG();if(!e)return;let t=(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now(),r=e$(e,n);return eQ(e,r),r.filter(e=>e.sessionId===t)})(e,M).map(e=>{let{id:t,startedAt:n}=e,r=new AbortController,a="m-card-resume-".concat(t);return _(e=>e.some(e=>e.id===a)?e:[...e,{id:a,role:"assistant",text:"명함 읽는 중… 조사 중…",timestamp:n,meta:{provider:F.provider}}]),ts(t,M,a,r,n).catch(()=>{r.signal.aborted||X.current!==M||_(e=>e.map(e=>e.id===a?{...e,text:"명함 정리에 실패했습니다 — 다시 보내 주세요"}:e))}),r});return()=>{t.forEach(e=>e.abort())}},[O,M]);let to=async function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];ex(e=>eM(e,{kind:"turn-begin"})),(0,x.cY)("webterm.chat.input",{len:e.length,attachCount:ek.length});let r=t?[]:ek;t||eN([]);let a=t?{ok:!1}:function(e,t){if(1!==t.length||!t[0]||!eY(t[0])||!t[0].id)return{ok:!1};let n=e.trim();if(!n)return{ok:!0,attachmentId:t[0].id};let r=n.replace(/메일\s*초안/g,"메일초안").split(/[\s,]+/).filter(Boolean);return!r.length||r.some(e=>!/^(?:명함|전략|메일초안|crm)$/i.test(e))?{ok:!1}:{ok:!0,attachmentId:t[0].id,context:n}}(e,r),l=!1;if(a.ok){let t=X.current;if(!t){var s;ee.current=t=(0,ea.f6)(),X.current=t,null==(s=n.onSessionAdopt)||s.call(n,t),P(t)}let o=new AbortController;eS.current=o,eI.current=t,l=!0,e.length>0&&tl((0,G.tw)(e)),tl((0,G.$Q)("\uD83D\uDCCE attached: ".concat(r.map(e=>e.filename).join(", "))));let i="m-card-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6));tl({id:i,role:"assistant",text:"명함 읽는 중… 조사 중…",timestamp:Date.now(),meta:{provider:F.provider}}),K(!0),(0,x.cY)("pwa.chat.card-followup",{phase:"start",status:"judging"});try{let e=await eB(O,a.attachmentId,a.context,o.signal);if(o.signal.aborted||X.current!==t)return;let n=eG(),r=Date.now();n&&function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now(),r=e$(e,n).filter(e=>e.sessionId!==t.sessionId||e.id!==t.id);if(!t.sessionId||!t.id||!Number.isFinite(t.startedAt)||t.startedAt>n||n-t.startedAt>=9e5)return eQ(e,r);eQ(e,[...r,t])}(n,{sessionId:t,id:e,startedAt:r});let l=await ts(e,t,i,o,r);if("terminal"===l||o.signal.aborted||X.current!==t)return}catch(e){if(o.signal.aborted||X.current!==t)return;_(e=>e.map(e=>e.id===i?{...e,text:"명함 정리에 실패했습니다 — 다시 보내 주세요"}:e)),(0,x.cY)("pwa.chat.card-followup",{phase:"complete",status:"failed"});return}finally{eS.current===o&&(eS.current=null),o.signal.aborted||X.current!==t||(K(!1),ex(e=>eM(e,{kind:"turn-end"})))}}let o=r.filter(eY),i=r.filter(e=>!eY(e)),c=function(e){if(!e)return!0;let t=e.toLowerCase();return!!("auto"===t||t.startsWith("anthropic")||"anthropic"===t||t.startsWith("codex")||"openai-codex"===t||t.startsWith("openai")||"openai"===t||t.startsWith("gemini")||"gemini"===t||t.startsWith("grok")||"grok"===t||t.startsWith("local"))}(F.provider),d=o.length>0&&c;o.length>0&&!c&&eF.oR.warning("이 모델은 이미지 입력을 지원하지 않습니다 — ".concat(o.length,"개 이미지가 무시됩니다. (vision 모델로 전환 후 재첨부)"));let u=i.map(e=>e.path?"[attached] ".concat(e.path):"").filter(e=>e.length>0),m=u.length>0?"".concat(u.join("\n"),"\n\n").concat(e).trimEnd():e,h=null;if(d&&F.baseUrl)try{h=await eJ(m,o,{baseUrl:F.baseUrl,token:F.token})}catch(t){let e=t instanceof Error?t.message:String(t);(0,x.cY)("webterm.chat.attach.contentblock.error",{msg:e}),eF.oR.error("이미지 첨부 변환 실패 — 텍스트만 전송: ".concat(e)),h=null}!l&&(e.length>0&&tl((0,G.tw)(e)),r.length>0&&tl((0,G.$Q)("\uD83D\uDCCE attached: ".concat(r.map(e=>e.filename).join(", ")))));let p=e?await (0,G.yN)(e,ta):null;if(p){if("__CLEAR__"===p.text)_([]);else{let e=(0,G.$Q)(p.text);p.harnessAsk&&(e.blocks=[{kind:"harness_ask",acceptanceId:p.harnessAsk.acceptanceId}]),tl(e)}p.newSessionId&&(et.current++,eh([]),V.current=p.newSessionId,X.current=p.newSessionId,P(p.newSessionId));return}if(!F.baseUrl)return void tl((0,G.$Q)("error: daemon baseUrl not configured. Visit /settings."));K(!0),eR.current=!0;let f="m-stream-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6));tl({id:f,role:"assistant",text:"",timestamp:Date.now(),meta:{provider:F.provider}});let g=new AbortController;ej(g);let b=0,v=e_.current,y=!!(v&&M&&F.baseUrl),w=null;(0,x.cY)("webterm.chat.runturn.path",{useAcpPath:y,hasAcp:!!v,hasSession:!!M});let j=e=>{_(t=>t.map(t=>t.id===f?{...t,text:e}:t)),e.length>b&&(e9.pushText(e.slice(b)),b=e.length)},k=e=>{_(t=>t.map(t=>t.id===f?{...t,blocks:e}:t))};try{y&&(w=O.connectAcp({sessionId:M}));let{message:e,newSessionId:t}=y?await (0,G.py)(w,m,{...ta,sessionId:await w.ready||M},{signal:g.signal,...h?{userContent:h}:{},onPartial:j,onPartialBlocks:k}):await (0,G.HD)(m,ta,{signal:g.signal,...h?{userContent:h}:{},...eZ?{debugTap:!0}:{},onPartial:j,onPartialBlocks:k,onError:e=>ex(t=>eM(t,{kind:"error",payload:e}))});ex(e=>eM(e,{kind:"turn-end"})),_(t=>t.map(t=>t.id===f?e:t)),t&&t!==M&&X.current===M&&(ee.current=t,X.current=t,P(t)),e9.flush()}catch(n){let e=g.signal.aborted,t=n instanceof Error?n.message:String(n);e9.cancel(),e?(_(e=>e.map(e=>e.id===f?{...e,meta:{...e.meta,stopReason:"aborted"}}:e)),(0,x.cY)("webterm.chat.runturn.stream.abort",{reason:t})):(_(e=>e.filter(e=>e.id!==f)),tl((0,G.$Q)("error: ".concat(t))),eF.oR.error("chat failed: ".concat(t)),(0,x.cY)("webterm.chat.runturn.error",{reason:t,useAcpPath:y}))}finally{null==w||w.close(),K(!1),ej(null),eR.current=!1}},ti=async function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(ec.current||!t&&Z.current.length>0){var n,r;if(!t&&(ek.length>0||/^[\s]*[:/]/.test(e))){eF.oR.info("답이 끝난 뒤 보내 주세요"),z(t=>{var n;return{text:e,id:(null!=(n=null==t?void 0:t.id)?n:0)+1}});return}let a=(n=Z.current,(r={id:++ei.current,text:e}).text.trim()?n.length>=5?{queue:[...n],error:"줄이 찼습니다"}:{queue:[...n,{...r,text:r.text.trim()}]}:{queue:[...n]});a.error?(eF.oR.info(a.error),z(t=>{var n;return{text:e,id:(null!=(n=null==t?void 0:t.id)?n:0)+1}})):eh(a.queue);return}ec.current=!0;let a=et.current,l=X.current;try{await to(e,t)}finally{ec.current=!1,a!==et.current&&(0,x.cY)("webterm.chat.queue.session-changed",{turnSessionId:l,currentSessionId:X.current}),eu({generation:et.current,sessionId:X.current})}};(0,a.useEffect)(()=>{var e;if(ec.current||0===Z.current.length||!ed||ed.generation!==et.current||ed.sessionId!==M)return;let{entry:t,queue:n}={entry:(e=Z.current)[0],queue:e.slice(1)};t&&(eh(n),e0.current(t.text,!0))},[ed]),e0.current=ti,(0,a.useEffect)(()=>{ex(e=>eM(e,{kind:"session-change"}))},[M]),(0,a.useEffect)(()=>{if(!M||!F.baseUrl)return;let e=(0,G.lY)(O,M,{isLocalTurnInFlight:()=>eR.current,provider:F.provider,onPlaceholder:e=>{let{sessionId:t}=e;ex(e=>eM(e,{kind:"turn-begin"}));let n="m-obs-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),r={id:n,role:"assistant",text:"",timestamp:Date.now(),meta:{provider:F.provider}};return(0,x.cY)("webterm.chat.observer.placeholder",{id:n,turnSessionId:t}),_(e=>[...e,r]),eD.current=n,n},onPartialBlocks:(e,t)=>{_(n=>n.map(n=>n.id===e?{...n,blocks:t}:n))},onFinalize:(e,t)=>{ex(e=>eM(e,{kind:"turn-end"})),_(n=>n.map(n=>n.id===e?t:n)),eD.current===e&&(eD.current=null)},onError:(e,t)=>{ex(e=>eM(e,{kind:"error",payload:t})),(0,x.cY)("webterm.chat.observer.error",{placeholderId:e,error:t.error}),_(n=>n.map(n=>n.id===e?{...n,meta:{...n.meta,stopReason:t.error}}:n)),eD.current===e&&(eD.current=null)}});return()=>{e()}},[O,M,F.baseUrl,F.provider]),(0,a.useEffect)(()=>{if(!M||!F.baseUrl)return;let e=O.subscribeChatFeedbackEvents(M,{agentStatus:{onFeedback:e=>{_(t=>{if(0===t.length)return t;for(let n=t.length-1;n>=0;n--){if("assistant"!==t[n].role)continue;let r=t[n],a=Array.isArray(r.blocks)?[...r.blocks]:[];if("applied"!==(0,eb.K4)(a,e))break;let l={...r,blocks:a};return[...t.slice(0,n),l,...t.slice(n+1)]}return t})},onError:e=>{(0,x.cY)("webterm.agent-status.error",e)}},hudSegment:{onFeedback:e=>(0,G.Ju)(e),onError:e=>{(0,x.cY)("webterm.hud-segment.error",e)}}});return()=>{e()}},[O,M,F.baseUrl]),(0,a.useEffect)(()=>{if(!M||!F.baseUrl)return;let e=null;try{e=O.connectAcp({sessionId:M,onSession:e=>{if(e&&e!==M){var t;(0,x.cY)("webterm.chat.acp.session-adopt",{previous:M,issued:e}),X.current===M&&(ee.current=e,X.current=e,null==(t=n.onSessionAdopt)||t.call(n,e),P(e))}}})}catch(e){(0,x.cY)("webterm.chat.acp.connect-failed",{reason:String(e)});return}e_.current=e,eH(e);let t=e;(0,x.x8)(async e=>{let n=JSON.parse(e);return await t.send("elanous/debug-logs/ingest",{records:n.records}),!0});let r=(0,G.ZH)(e,M,{isLocalTurnInFlight:()=>eR.current,isRemoteSseTurnInFlight:()=>null!==eD.current,onPlaceholder:e=>{let{sessionId:t}=e;ex(e=>eM(e,{kind:"turn-begin"}));let n="m-acp-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),r={id:n,role:"assistant",text:"",timestamp:Date.now(),meta:{provider:F.provider}};return(0,x.cY)("webterm.chat.acp.foreign-placeholder",{id:n,turnSessionId:t}),_(e=>[...e,r]),n},onPartialBlocks:(e,t)=>{let n=t.find(e=>"text"===e.kind),r=t.some(e=>"image"===e.kind||"tool_use"===e.kind);_(a=>a.map(a=>a.id===e?{...a,...n?{text:n.text}:{},...r?{blocks:t}:{}}:a))},onFinalize:e=>{(0,x.cY)("webterm.chat.acp.foreign-finalize",{placeholderId:e})}});return()=>{r(),(0,x.x8)(null);try{null==e||e.close()}catch(e){}e_.current===e&&(e_.current=null),eH(null)}},[O,M,F.baseUrl,F.provider]);let tc=function(e){var t;let{acp:n,onComposerPrefill:r}=e,[l,s]=(0,a.useState)(null),o=(0,a.useRef)(null),i=(0,a.useCallback)(e=>{o.current=e,s(e)},[]),c=(0,a.useCallback)(e=>{let t=o.current;t&&(t.resolve(e),i(null))},[i]);(0,a.useEffect)(()=>{if(!n)return;let e=n.onRequest("elanous/ask/request",async e=>{let t=function(e){if(!e||"object"!=typeof e||"string"!=typeof e.id||!e.id||!e.request||"object"!=typeof e.request)return null;let t=e.request;return Array.isArray(t.questions)&&0!==t.questions.length?{id:e.id,request:e.request}:null}(e);if(!t)return{answers:{},cancelled:!0};let n=o.current;return n&&n.resolve({answers:{},cancelled:!0}),await new Promise(e=>{i({request:t.request,resolve:e,askId:t.id})})}),t=n.on("sessionUpdate",()=>{}),r=n.onAny(e=>{var t;if("elanous/ask/cancel"!==e.method||void 0!==e.id)return;let n=(t=e.params)&&"object"==typeof t&&"string"==typeof t.id&&t.id?{id:t.id,..."string"==typeof t.reason?{reason:t.reason}:{}}:null;if(!n)return;let r=o.current;r&&r.askId===n.id&&c({answers:{},cancelled:!0})});return()=>{e(),t(),r();let n=o.current;n&&(n.resolve({answers:{},cancelled:!0}),o.current=null)}},[n,i,c]);let d=(0,a.useCallback)(e=>{c(e)},[c]),u=(0,a.useCallback)(()=>{c({answers:{},cancelled:!0})},[c]),m=(0,a.useCallback)(()=>{let e=o.current;e&&r&&r(e.request),c({answers:{},cancelled:!0})},[c,r]);return{pendingRequest:null!=(t=null==l?void 0:l.request)?t:null,submit:d,cancel:u,chatAboutThis:m}}({acp:ez,onComposerPrefill:e=>{let t=e.questions[0];if(!t)return;let n="[ Q: ".concat(t.question.trim()," ]\n\n");(0,el.vn)(n),z(e=>{var t;return{text:n,id:(null!=(t=null==e?void 0:e.id)?t:0)+1}}),eF.oR.info("\uD83D\uDCAC 입력 영역에 질문 prefill 됨 (Chat about this)")}}),td=function(e){var t,n;let{acp:r,sessionId:l}=e,[s,o]=(0,a.useState)(null),i=(0,a.useRef)(null),c=(0,a.useRef)(l);c.current=l;let d=(0,a.useCallback)((e,t,n)=>{let r=i.current;r&&(!n||r.request===n)&&(i.current=null,clearTimeout(r.timer),o(null),(0,x.cY)("pwa.tool-approval.".concat("cancelled"===t?"cancelled":"decided"),{tool:eU,choice:t}),r.resolve(e))},[]);(0,a.useEffect)(()=>{if(!r)return;let e=r.onRequest("session/request_permission",e=>{let t=function(e){try{if(!e||"object"!=typeof e)return null;let t=e.toolCall;if(!t||"object"!=typeof t||"string"!=typeof e.sessionId||!e.sessionId||"string"!=typeof t.toolCallId||!t.toolCallId||"string"!=typeof t.title||!t.title||!Array.isArray(e.options))return null;let n=e.options.map(e=>{if(!e||"object"!=typeof e||"string"!=typeof e.optionId||!e.optionId||"string"!=typeof e.kind||!eL.includes(e.kind))throw Error("invalid option");return{optionId:e.optionId,kind:e.kind}});if(new Set(n.map(e=>e.optionId)).size!==n.length||new Set(n.map(e=>e.kind)).size!==n.length||["allow_once","allow_always","reject_once"].some(e=>!n.some(t=>t.kind===e)))return null;return{sessionId:e.sessionId,toolCall:{toolCallId:t.toolCallId,title:t.title,...void 0!==t.rawInput?{rawInput:t.rawInput}:{}},options:n}}catch(e){return null}}(e);return t&&t.sessionId===c.current?((0,x.cY)("pwa.tool-approval.requested",{tool:eU,choice:null}),d(eT,"cancelled"),new Promise(e=>{let n={request:t,receivedAt:Date.now(),resolve:e,timer:setTimeout(()=>{i.current===n&&d(eT,"cancelled")},6e4)};i.current=n,o(n)})):((0,x.cY)("pwa.tool-approval.cancelled",{tool:eU,choice:"cancelled"}),eT)}),t="function"==typeof r.onState?r.onState(e=>{("CLOSED"===e||"FAILED"===e)&&d(eT,"cancelled")}):()=>{};return()=>{e(),t(),d(eT,"cancelled")}},[r,d]),(0,a.useEffect)(()=>{i.current&&i.current.request.sessionId!==l&&d(eT,"cancelled")},[l,d]);let u=(0,a.useCallback)((e,t)=>{var n;if((null==(n=i.current)?void 0:n.request)!==e)return;let r=e.options.find(e=>e.kind===t);r&&d({outcome:{outcome:"selected",optionId:r.optionId}},t,e)},[d]),m=(0,a.useCallback)(e=>d(eT,"cancelled",e),[d]);return{pendingRequest:null!=(t=null==s?void 0:s.request)?t:null,receivedAt:null!=(n=null==s?void 0:s.receivedAt)?n:0,choose:u,cancel:m}}({acp:ez,sessionId:M}),tu=(0,r.jsxs)("button",{type:"button",onClick:()=>void e4.toggle(),disabled:!e6,title:e6?null!=(e=e4.errorMsg)?e:eO.g[e4.phase]:"daemon URL 미설정 — Settings 에서 Base URL 입력","data-elanous-action":"chat-voice-toggle",className:(0,Q.cn)("inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium transition-colors",e4.active?"border-rose-500/40 bg-rose-500/10 text-rose-600 hover:bg-rose-500/20":"border-border bg-background text-foreground hover:bg-muted",!e6&&"cursor-not-allowed opacity-50"),children:[(0,r.jsx)("span",{className:(0,Q.cn)("h-2 w-2 rounded-full",eO.x[e4.phase],("listening"===e4.phase||"speaking"===e4.phase)&&"animate-pulse"),"aria-hidden":!0}),e4.active?(0,r.jsx)(s.A,{className:"h-3.5 w-3.5"}):(0,r.jsx)(o.A,{className:"h-3.5 w-3.5"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:eO.g[e4.phase]})]});return(0,r.jsxs)("div",{className:"relative flex h-full flex-col",onPaste:e=>{let t=function(e,t){if(!e)return A([]);let n=[];if(e.items.length>0)for(let t of Array.from(e.items)){if("file"!==t.kind)continue;let e=t.getAsFile();e&&n.push(e)}else n.push(...Array.from(e.files));return A(n.map(e=>({file:e,filename:e.name||"paste-".concat(t,".png")})))}(e.clipboardData,Date.now());(0!==t.files.length||0!==t.tooLarge||0!==t.tooMany)&&(e.preventDefault(),tn(t))},onDragEnter:e=>{eE(t=>D(t,"enter",E(e.dataTransfer)))},onDragLeave:e=>{eE(t=>D(t,"leave",E(e.dataTransfer)))},onDragOver:e=>{E(e.dataTransfer)&&e.preventDefault()},onDrop:e=>{var t;eE(t=>D(t,"drop",E(e.dataTransfer)));let n=A((t=e.dataTransfer)?Array.from(t.files,e=>({file:e,filename:e.name})):[]);(0!==n.files.length||0!==n.tooLarge||0!==n.tooMany)&&(e.preventDefault(),tn(n))},children:[eA.visible&&(0,r.jsx)(R,{}),n.mobileSimple&&c&&(0,r.jsx)(N,{activity:null!=(t=n.mobileActivity)?t:{kind:"loading"},decisions:T,menu:(0,r.jsxs)("div",{ref:U,className:"relative shrink-0",children:[(0,r.jsx)("button",{type:"button","aria-label":"채팅 메뉴","aria-expanded":h,"aria-controls":"chat-mobile-menu",onClick:()=>p(e=>!e),className:"rounded-lg p-1 hover:bg-muted",children:(0,r.jsx)(i.A,{className:"h-5 w-5","aria-hidden":"true"})}),h&&(0,r.jsxs)("div",{id:"chat-mobile-menu",className:"absolute right-0 top-full z-50 mt-2 flex max-h-[70dvh] w-[min(19rem,calc(100vw-1rem))] flex-col gap-2 overflow-y-auto rounded-lg border border-border bg-popover p-3 shadow-lg",children:[(0,r.jsxs)("nav",{"aria-label":"채팅 이동",className:"flex gap-3 text-sm",children:[(0,r.jsx)(d(),{href:"/",className:"rounded px-2 py-1 hover:bg-muted",children:"홈"}),(0,r.jsx)(d(),{href:"/workspace",className:"rounded px-2 py-1 hover:bg-muted",children:"워크스페이스"}),(0,r.jsx)(d(),{href:"/settings",className:"rounded px-2 py-1 hover:bg-muted",children:"설정"})]}),n.conversationButton,(0,r.jsx)(q.Qh,{sessionId:M,...n.onAttachRequest?{onAttachRequest:n.onAttachRequest}:{},...n.onForgetRequest?{onForgetRequest:n.onForgetRequest}:{}}),(0,r.jsx)($,{compact:!0}),(0,r.jsx)(b,{}),(0,r.jsx)(l.vG,{children:(0,r.jsx)(es.rm,{})}),(0,r.jsx)(l.vG,{children:(0,r.jsx)(eo.D,{})}),tu]})]})}),c&&!n.mobileSimple?(0,r.jsxs)("div",{"data-elanous-chat-compact-header":"",className:"flex h-11 max-h-11 min-w-0 shrink-0 items-center gap-2 border-b border-border bg-background px-3 whitespace-nowrap",children:[n.leading&&(0,r.jsx)("div",{className:"shrink-0",children:n.leading}),(0,r.jsx)("div",{className:"min-w-0 flex-1 [&>div]:min-w-0 [&>div]:max-w-full [&>div>div:first-child]:min-w-0 [&>div>div:first-child]:max-w-full [&>div>div:first-child]:overflow-hidden [&>div>div:first-child>span:last-child]:shrink-0 [&>div>div:first-child_span]:min-w-0 [&>div>div:first-child_span]:truncate [&>div>div[role=menu]]:max-w-[calc(100vw-4rem)]",children:(0,r.jsx)(q.Qh,{sessionId:M,...n.onAttachRequest?{onAttachRequest:n.onAttachRequest}:{},...n.onForgetRequest?{onForgetRequest:n.onForgetRequest}:{}})}),(0,r.jsx)("div",{className:"min-w-0 shrink-0",children:(0,r.jsx)($,{compact:!0})}),(0,r.jsx)(b,{}),(0,r.jsxs)("div",{ref:U,className:"relative shrink-0",children:[(0,r.jsx)("button",{type:"button","aria-label":"채팅 더보기","aria-expanded":h,"aria-controls":"chat-header-more",onClick:()=>p(e=>!e),className:"inline-flex h-8 w-8 items-center justify-center rounded-lg hover:bg-muted",children:(0,r.jsx)(i.A,{className:"h-5 w-5","aria-hidden":"true"})}),h&&(0,r.jsxs)("div",{id:"chat-header-more",className:"absolute right-0 top-full z-50 mt-1 flex max-w-[calc(100vw-1.5rem)] flex-col gap-2 rounded-lg border border-border bg-popover p-3 shadow-lg",children:[(0,r.jsx)(l.vG,{children:(0,r.jsx)(es.rm,{})}),(0,r.jsx)(l.vG,{children:(0,r.jsx)(eo.D,{})}),tu]})]})]}):n.mobileSimple&&c?null:(0,r.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-3 border-b border-border bg-background px-4 py-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(q.Qh,{sessionId:M,...n.onAttachRequest?{onAttachRequest:n.onAttachRequest}:{},...n.onForgetRequest?{onForgetRequest:n.onForgetRequest}:{}}),(0,r.jsx)(l.vG,{children:(0,r.jsx)(es.rm,{})}),(0,r.jsx)(l.vG,{children:(0,r.jsx)(eo.D,{})})]}),(0,r.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,r.jsx)($,{}),(0,r.jsx)(b,{}),tu]})]}),!(n.mobileSimple&&c)&&(0,r.jsx)(f,{}),n.mobileSimple&&c&&y+T>0&&(0,r.jsx)("div",{className:"shrink-0 px-3 py-1.5",children:(0,r.jsxs)("button",{type:"button","aria-expanded":g,"aria-controls":"chat-mobile-actions",onClick:()=>v(e=>!e),className:"rounded-full border border-border bg-muted px-3 py-1 text-xs font-medium",children:["승인\xb7결정 ",y+T]})}),n.mobileSimple&&c?(0,r.jsxs)("div",{id:"chat-mobile-actions",children:[(0,r.jsx)(w,{mobileOpen:g,onCount:j}),(0,r.jsx)(k,{mobileOpen:g,onCount:L})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(w,{}),(0,r.jsx)(k,{})]}),!(n.mobileSimple&&c)&&(0,r.jsx)(en,{}),(0,r.jsxs)("div",{className:"relative flex flex-1 min-h-0 flex-col",children:[(0,r.jsx)(S.D,{messages:Y,pending:B,mobileSimple:!!(n.mobileSimple&&c),...n.tabId?{tabId:n.tabId}:{}}),ep&&(0,r.jsxs)("div",{role:"alert",className:"mx-4 mb-3 flex shrink-0 items-start justify-between gap-3 rounded-md border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-foreground","data-elanous-turn-busy-banner":"",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"font-medium",children:"이 대화는 지금 응답 중입니다"}),(0,r.jsx)("p",{className:"text-muted-foreground",children:ep.message}),(0,r.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:ep.holder?"Current input holder: ".concat(ep.holder):"The current input holder is not available."})]}),(0,r.jsx)("button",{type:"button",onClick:()=>ex(null),className:"rounded px-2 py-1 text-xs text-muted-foreground hover:bg-amber-500/10 hover:text-foreground","aria-label":"응답 중 알림 닫기",children:"Dismiss"})]}),(0,r.jsx)(ef,{active:e4.active,phase:e4.phase,errorMsg:e4.errorMsg,onToggle:()=>void e4.toggle(),ttsSupported:e9.supported,ttsMuted:e8,onTtsToggle:()=>e7(e=>!e),onInterrupt:()=>{try{e9.cancel()}catch(e){}e4.interrupt()}})]}),B&&ew&&(0,r.jsxs)("div",{className:"flex shrink-0 items-center justify-end gap-2 border-t border-border bg-muted/30 px-4 py-1.5 text-xs",children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"streaming…"}),(0,r.jsx)("button",{type:"button",onClick:te,className:"rounded border border-border bg-background px-2 py-0.5 font-mono hover:bg-muted","data-elanous-action":"chat-stop",title:"Stop the running turn (Esc)",children:"Stop ⎋"})]}),(0,r.jsx)(I,{queue:em,onRemove:e=>{var t;return eh((t=Z.current,t.filter(t=>t.id!==e)))},onClear:()=>eh([])}),(0,r.jsx)(C.V,{onSubmit:ti,prefill:J,attachments:ek,onAttached:tt,onRemoveAttachment:tr,voice:{active:e4.active,phase:e4.phase,dotColor:eO.x[e4.phase],phaseLabel:eO.g[e4.phase],disabled:!e6,onToggle:()=>void e4.toggle()},...n.tabId?{tabId:n.tabId}:{},onListFiles:ez&&M?async e=>{var t,n;let r=await ez.send("elanous/fs/list",{sessionId:M,query:e,limit:50}),a=(null!=(t=r.entries)?t:[]).filter(e=>"string"==typeof(null==e?void 0:e.name)&&"boolean"==typeof(null==e?void 0:e.isDir)&&"string"==typeof(null==e?void 0:e.relPath)).map(e=>({name:e.name,isDir:e.isDir,relPath:e.relPath}));return{cwd:null!=(n=r.cwd)?n:"",entries:a}}:void 0,onListSkills:ez&&M?async e=>{var t;return{entries:(null!=(t=(await ez.send("elanous/skills/list",{sessionId:M,query:e})).entries)?t:[]).filter(e=>"string"==typeof(null==e?void 0:e.name)&&"string"==typeof(null==e?void 0:e.description)).map(e=>({name:e.name,description:e.description}))}}:void 0}),eW&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(eg,{open:eZ,onClose:()=>eV(!1),lines:eX}),!eZ&&(0,r.jsxs)("button",{type:"button",onClick:()=>eV(!0),"data-elanous-debug-tap-reopen":"",className:(0,Q.cn)("fixed bottom-3 right-3 z-40 rounded-full border border-border bg-card px-3 py-1.5","text-[11px] font-mono text-muted-foreground shadow hover:bg-muted hover:text-foreground"),"aria-label":"Reopen debug drawer",title:"Reopen Debug Tap drawer",children:["⌁ debug (",eX.length,")"]})]}),(0,r.jsx)(eC,{request:tc.pendingRequest,onSubmit:tc.submit,onCancel:tc.cancel,onChatAboutThis:tc.chatAboutThis}),(0,r.jsx)(eq,{request:td.pendingRequest,receivedAt:td.receivedAt,onChoose:td.choose,onCancel:td.cancel})]})}var eW=n(8819),eZ=n(21383);function eV(e,t){var n,r;return(null==t?void 0:t.trim())||(null==(r=e.lastMsgPreview)||null==(n=r.trim().split(/\r?\n/)[0])?void 0:n.trim())||"대화"}function eX(e,t){try{"undefined"!=typeof localStorage&&localStorage.setItem(e,t)}catch(e){}}function e0(e){let{onSelect:t}=e,n=(0,m.Q)(),l=(0,L.t)({activePoll:!0}),[s,o]=(0,a.useState)({}),[i,c]=(0,a.useState)(""),[d,u]=(0,a.useState)([]),[h,p]=(0,a.useState)("all"),[f,g]=(0,a.useState)([]),[x,b]=(0,a.useState)(_);(0,a.useEffect)(()=>{let e=()=>{b(_()),j({})};return window.addEventListener(F,e),()=>window.removeEventListener(F,e)},[]);let[v,y]=(0,a.useState)({}),[w,j]=(0,a.useState)({}),k=(0,a.useRef)(new Set),N=e=>{let t=e(_());J(t),b(t)};(0,a.useEffect)(()=>{var e;p(null!=(e=function(e){try{return"undefined"==typeof localStorage?null:localStorage.getItem(e)}catch(e){return null}}(O))?e:"all");let t=!0,r=0,a=()=>{let e=++r;new U(n.client).list().then(n=>{var a;t&&e===r&&u(null!=(a=n.projects)?a:[])}).catch(()=>{})};return a(),window.addEventListener(M,a),()=>{t=!1,window.removeEventListener(M,a)}},[n.client]),(0,a.useEffect)(()=>{let e=!0,t=d.length>0&&"all"!==h&&"none"!==h?"?projectId=".concat(encodeURIComponent(h)):"";return n.client.fetchJson("/v1/sessions/store".concat(t)).then(t=>{var n;if(!e)return;let r=null!=(n=t.sessions)?n:[];g(r),o(Object.fromEntries(r.map(e=>[e.id,e.title])))}).catch(()=>{}),()=>{e=!1}},[n.client,l,d,h]),(0,a.useEffect)(()=>{let e=Object.keys(x).filter(e=>l.some(t=>t.id===e)&&!f.some(t=>t.id===e));if(0===e.length)return;let t=!0;for(let r of e)n.client.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(r),"?ifExists=1")).then(e=>{t&&e.meta&&g(t=>t.some(e=>e.id===r)?t:[...t,e.meta])}).catch(()=>{});return()=>{t=!1}},[f,n.client,x,l]),(0,a.useEffect)(()=>{for(let[e,t]of Object.entries(x)){if(e===n.sessionId||w[e]===t||!l.some(t=>t.id===e)||k.current.has(e))continue;let r=f.find(t=>t.id===e);if(r&&_()[e]===t){if(r.projectId===t||v[e]===t){N(t=>{let n={...t};return delete n[e],n});continue}k.current.add(e),new U(n.client).assign(e,t).then(()=>{y(n=>({...n,[e]:t})),g(n=>n.map(n=>n.id===e?{...n,projectId:t}:n)),_()[e]===t&&N(t=>{let n={...t};return delete n[e],n})}).catch(()=>{j(n=>({...n,[e]:t})),_()[e]===t&&N(t=>{let n={...t};return delete n[e],n})}).finally(()=>{k.current.delete(e)})}}},[v,w,f,n.client,n.sessionId,x,l]);let S=d.some(e=>e.id===h)||"none"===h?h:"all",C=0===d.length||"all"===S?l:l.filter(e=>x[e.id]?x[e.id]===S:"none"===S?!f.some(t=>t.id===e.id&&t.projectId)&&!v[e.id]:v[e.id]===S||f.some(t=>t.id===e.id&&t.projectId===S)),I=[...C].filter(e=>{var t;return"".concat(eV(e,s[e.id])," ").concat(null!=(t=e.lastMsgPreview)?t:"").toLocaleLowerCase().includes(i.trim().toLocaleLowerCase())}).sort((e,t)=>Date.parse(t.lastTurnAt)-Date.parse(e.lastTurnAt)),A=()=>{let e=(0,ea.Zr)();d.length>0&&"all"!==S&&"none"!==S&&N(t=>({...t,[e]:S})),n.setSessionId(e),null==t||t()};return(0,r.jsxs)("nav",{"aria-label":"대화 목록",className:"flex h-full min-h-0 flex-col bg-background",children:[(0,r.jsxs)("div",{className:"shrink-0 space-y-3 border-b border-border p-3",children:[(0,r.jsx)(z,{projects:d,selection:S,onChange:e=>{p(e),eX(O,e)},onCreate:async e=>{let{project:t}=await new U(n.client).create(e);u(e=>[...e,t]),p(t.id),eX(O,t.id),P()}}),(0,r.jsxs)("button",{type:"button",onClick:A,className:"flex w-full items-center gap-2 rounded-lg bg-primary px-3 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90",children:[(0,r.jsx)(eW.A,{className:"h-4 w-4","aria-hidden":"true"})," 새 대화"]}),(0,r.jsxs)("label",{className:"flex items-center gap-2 rounded-lg border border-border bg-muted/30 px-2.5 py-2 focus-within:ring-2 focus-within:ring-ring",children:[(0,r.jsx)(eZ.A,{className:"h-4 w-4 shrink-0 text-muted-foreground","aria-hidden":"true"}),(0,r.jsx)("input",{"aria-label":"대화 검색",type:"search",value:i,onChange:e=>c(e.target.value),placeholder:"대화 검색",className:"min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground"})]})]}),(0,r.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto p-2",children:0===C.length?(0,r.jsxs)("div",{className:"space-y-3 px-2 py-8 text-center text-sm text-muted-foreground",children:[(0,r.jsx)("p",{children:"아직 대화가 없습니다"}),(0,r.jsx)("button",{type:"button",onClick:A,className:"rounded-lg border border-border px-3 py-2 text-foreground hover:bg-muted",children:"+ 새 대화"})]}):0===I.length?(0,r.jsx)("p",{className:"px-2 py-8 text-center text-sm text-muted-foreground",children:"검색 결과가 없습니다"}):(0,r.jsx)("ul",{className:"space-y-1",children:I.map(e=>(0,r.jsx)("li",{children:(0,r.jsxs)("button",{type:"button","aria-current":n.sessionId===e.id?"page":void 0,onClick:()=>{P(),n.setSessionId(e.id),null==t||t()},className:"w-full rounded-lg px-3 py-2.5 text-left transition-colors ".concat(n.sessionId===e.id?"bg-primary/10 text-primary ring-1 ring-inset ring-primary/25":"text-foreground hover:bg-muted"),children:[(0,r.jsx)("span",{className:"block truncate text-sm font-medium",children:eV(e,s[e.id])}),(0,r.jsxs)("span",{className:"mt-1 block truncate text-xs text-muted-foreground",children:[function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now(),n=Date.parse(e);if(!Number.isFinite(n))return"";let r=Math.max(0,Math.floor((t-n)/6e4));if(r<1)return"방금 전";if(r<60)return"".concat(r,"분 전");let a=Math.floor(r/60);if(a<24)return"".concat(a,"시간 전");let l=Math.floor(a/24);return l<7?"".concat(l,"일 전"):new Date(n).toLocaleDateString()}(e.lastTurnAt)," \xb7 ",e.msgCount,"개 메시지"]})]})},e.id))})})]})}var e1=n(35622),e2=n(69147),e3=n(44614),e5=n(89709);function e4(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{compact:n}=(0,u.K)(),l=!!t.mobileSimple&&n,s=(0,e5.DE)(),o=(0,e3.tg)(),{client:i,sessionId:c,setSessionId:d}=(0,m.Q)(),[h,p]=(0,a.useState)(c||"default"),[f,g]=(0,a.useState)(!1);(0,a.useEffect)(()=>{if(!f)return;let e=e=>{"Escape"===e.key&&g(!1)};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[f]);let x=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(x.current===c){x.current=null;return}x.current=null,p(c||"default")},[c]);let b=(0,a.useRef)(t.sessionId),v=(0,a.useRef)(c),y=null!=(e=null==o?void 0:o.state.activeId)?e:null;(0,a.useEffect)(()=>{let e=t.sessionId;if(o&&t.tabId&&e&&c){var n,r;let a=function(e){if(!e.isActive||e.tabSessionId===e.daemonSessionId)return"none";let t=e.prevTabSessionId!==e.tabSessionId,n=e.prevDaemonSessionId!==e.daemonSessionId;return t||!n?"adopt-tab":"record-global"}({isActive:y===t.tabId,tabSessionId:e,daemonSessionId:c,prevTabSessionId:null!=(n=b.current)?n:e,prevDaemonSessionId:null!=(r=v.current)?r:c});"adopt-tab"===a?d(e):"record-global"===a&&o.updateChatTab(t.tabId,{sessionId:c})}b.current=t.sessionId,v.current=c},[o,y,t.tabId,t.sessionId,c,d]);let w=o&&t.tabId?()=>o.openPicker({kind:"attachToTab",tabId:t.tabId}):void 0,j=o&&t.sessionId?async()=>{let e=(0,T.hG)(i);await e.forget(t.sessionId)}:void 0,k=(0,r.jsx)("button",{type:"button",onClick:()=>g(!0),"aria-label":"대화 목록","aria-expanded":f,"aria-controls":"chat-conversation-drawer",className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-lg hover:bg-muted",children:(0,r.jsx)(e1.A,{className:"h-4 w-4","aria-hidden":"true"})}),N=(0,r.jsx)(eH,{onSessionAdopt:e=>{x.current=e},...t.showConversationList&&n&&!l?{leading:k}:{},...l?{mobileSimple:l,mobileActivity:s,conversationButton:k}:{},...w?{onAttachRequest:w}:{},...j?{onForgetRequest:j}:{},...t.tabId?{tabId:t.tabId}:{}},h);return t.showConversationList?(0,r.jsxs)("div",{className:"flex h-full min-h-0 min-w-0",children:[(0,r.jsx)("aside",{className:n?"hidden":"hidden h-full w-[260px] shrink-0 border-r border-border md:block",children:(0,r.jsx)(e0,{})}),(0,r.jsxs)("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col",children:[!n&&(0,r.jsx)("div",{className:"shrink-0 border-b border-border bg-background px-3 py-2 md:hidden",children:(0,r.jsxs)("button",{type:"button",onClick:()=>g(!0),"aria-label":"대화 목록","aria-expanded":f,"aria-controls":"chat-conversation-drawer",className:"inline-flex items-center gap-2 rounded-lg px-2 py-1.5 text-sm font-medium hover:bg-muted",children:[(0,r.jsx)(e1.A,{className:"h-4 w-4","aria-hidden":"true"})," 대화 목록"]})}),(0,r.jsx)("div",{className:"min-h-0 min-w-0 flex-1",children:N})]}),f&&(0,r.jsxs)("div",{className:n?"fixed inset-0 z-50":"fixed inset-0 z-50 md:hidden",children:[(0,r.jsx)("button",{type:"button","aria-label":"대화 목록 닫기",onClick:()=>g(!1),className:"absolute inset-0 bg-black/50"}),(0,r.jsxs)("aside",{id:"chat-conversation-drawer",role:"dialog","aria-modal":"true","aria-label":"대화 목록",className:"relative h-full w-[min(260px,85vw)] bg-background shadow-xl",children:[(0,r.jsx)("button",{type:"button","aria-label":"대화 목록 닫기",onClick:()=>g(!1),className:"absolute right-2 top-2 z-10 rounded p-1 hover:bg-muted",children:(0,r.jsx)(e2.A,{className:"h-4 w-4"})}),(0,r.jsx)(e0,{onSelect:()=>g(!1)})]})]})]}):N}},74780:(e,t,n)=>{function r(e){return{slides:e.slides.map(e=>{let{image:t,caption:n,include:r}=e;return{image:t,caption:n,include:r}}),caption:{hook:e.caption.hook,body:e.caption.body},hashtags:[...e.hashtags],cover:{text:e.cover.text,sub:e.cover.sub},location:e.location}}n.d(t,{$Y:()=>s,LP:()=>i,Mz:()=>r,ll:()=>d,rH:()=>o});class a extends Error{constructor(e,t){super(t),this.status=e,this.name="GraphApprovalsApiError"}}let l={list:"목록을 보려면",decide:"승인하려면",save:"초안을 저장하려면"},s="/app/settings/#bearer-token";function o(e){return e instanceof a&&(401===e.status||403===e.status)}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"decide";return e instanceof a?401===e.status||403===e.status?"".concat(l[t]," 이 기기를 데몬에 연결해야 합니다 — 설정 › 데몬 연결 › 연결 토큰 칸에 토큰을 넣어 주세요."):404===e.status?"이 실행을 찾지 못했습니다. 목록을 다시 확인해 주세요.":409===e.status?"이미 결정된 실행입니다. 목록을 다시 확인해 주세요.":400===e.status?"결정 내용을 확인한 뒤 다시 시도해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요.":e instanceof TypeError?"서버에 연결하지 못했습니다. 연결 상태를 확인해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요."}let c="/v1/graph-approvals";function d(e){var t,n;let r=(null!=(t=e.baseUrl)?t:"").replace(/\/+$/,""),l=null!=(n=e.fetchImpl)?n:fetch;async function s(t,n){let s={...n,headers:{"content-type":"application/json",...e.authHeader?{authorization:e.authHeader}:{}}},o=e.client?await e.client.fetchResponse(t,s):await l("".concat(r).concat(t),s),i=await o.json().catch(()=>null);if(!o.ok){let e=i&&"object"==typeof i&&"error"in i&&"string"==typeof i.error?i.error:"request-failed";throw new a(o.status,e)}return i}return{list:()=>s(c),decide:(e,t,n)=>s("".concat(c,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t)),{method:"POST",body:JSON.stringify({decision:n})}),saveFeedDraft:(e,t,n)=>s("".concat(c,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t),"/feed-draft"),{method:"PUT",body:JSON.stringify(n)}),feedMedia:async(t,n,s)=>{let o="".concat(c,"/").concat(encodeURIComponent(t),"/").concat(encodeURIComponent(n),"/media?path=").concat(encodeURIComponent(s)),i={headers:e.authHeader?{authorization:e.authHeader}:{}},d=e.client?await e.client.fetchResponse(o,i):await l("".concat(r).concat(o),i);if(!d.ok)throw new a(d.status,"media-failed");return d.blob()}}}}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4144],{2555:(e,t,n)=>{function r(e){let t=e.trim();if(/^\/harness(?:[ \t]|$)/.test(t)){let e=t.slice(8).trim();return/[\r\n]/.test(e)?null:e}return/^하니스로\s/.test(t)?e:null}function o(e){switch(e){case"accepted":return"접수됨";case"flow-settled":return"골 저작 끝";case"launch-started":return"런 도는 중";case"launch-settled":return"런 끝";case"launch-failed":return"발사 실패";default:return"알 수 없는 단계"}}function i(e){return"launch-settled"===e||"launch-failed"===e}n.d(t,{SK:()=>o,dz:()=>r,rr:()=>i})},3155:(e,t,n)=>{n.d(t,{C5:()=>a,hG:()=>c});var r=n(23660),o=n(72215);let i=new Set(["cli","pwa","tg","dc"]);function a(e){var t;let n;e.origin&&i.has(e.origin)?n=e.origin:"telegram"===e.source?n="tg":"cli"===e.source&&(n="cli");let r=(null!=(t=e.preview)?t:"").trim();return{id:e.id,msgCount:e.messageCount,lastTurnAt:e.updatedAt,...r?{lastMsgPreview:r}:{},...n?{origin:n}:{}}}class s{list(){return this.cache}start(){!this.disposed&&(this.timer||(this.scheduleTimer(),this.openEventStream(),this.forceRefresh()))}stop(){this.timer&&(clearInterval(this.timer),this.timer=null,this.currentIntervalMs=null),this.closeEventStream()}dispose(){this.disposed=!0,this.stop(),this.listeners.clear()}enterActive(){this.activeCount+=1,this.scheduleTimer();let e=!1;return()=>{e||(e=!0,this.activeCount=Math.max(0,this.activeCount-1),this.scheduleTimer())}}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}forceRefresh(){if(this.inFlight)return this.inFlight;let e=this.fetchAndStore().finally(()=>{this.inFlight=null});return this.inFlight=e,e}async forget(e){(0,o.cY)("webterm.sessions.forget",{sessionId:e}),await this.api.delete(e),await this.forceRefresh()}scheduleTimer(){if(this.disposed)return;let e=this.activeCount>0?this.opts.activeIntervalMs:this.opts.idleIntervalMs;this.currentIntervalMs===e&&this.timer||(this.timer&&(clearInterval(this.timer),this.timer=null),this.currentIntervalMs=e,this.timer=setInterval(()=>{this.forceRefresh()},e))}openEventStream(){if(this.es||this.disposed||"undefined"==typeof EventSource)return;let e=this.client.sessionStoreEventsUrl();if(e)try{let t=new EventSource(e),n=()=>{this.sseDebounce&&clearTimeout(this.sseDebounce),this.sseDebounce=setTimeout(()=>{this.forceRefresh()},500)};t.addEventListener("session.created",n),t.addEventListener("session.updated",n),t.onmessage=n,this.es=t}catch(e){this.es=null}}closeEventStream(){var e;this.sseDebounce&&(clearTimeout(this.sseDebounce),this.sseDebounce=null),null==(e=this.es)||e.close(),this.es=null}async fetchAndStore(){try{let e=await this.api.list(),t=(Array.isArray(null==e?void 0:e.sessions)?e.sessions:[]).map(a);if(function(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){let r=e[n],o=t[n];if(r.id!==o.id||r.msgCount!==o.msgCount||r.lastTurnAt!==o.lastTurnAt||r.lastMsgPreview!==o.lastMsgPreview||r.origin!==o.origin)return!1}return!0}(this.cache,t))return;for(let e of(this.cache=t,this.listeners))try{e()}catch(e){}}catch(e){(0,o.cY)("webterm.sessions.fetch.error",{err:String(e)})}}constructor(e,t={activeIntervalMs:1e4,idleIntervalMs:6e4}){this.client=e,this.opts=t,this.cache=[],this.listeners=new Set,this.activeCount=0,this.timer=null,this.currentIntervalMs=null,this.inFlight=null,this.es=null,this.sseDebounce=null,this.disposed=!1,this.api=new r.jU(e)}}let l=null;function c(e){if(l&&l.client===e)return l.svc;l&&l.svc.dispose();let t=new s(e);return l={client:e,svc:t},t.start(),t}},8114:(e,t,n)=>{n.d(t,{bK:()=>ey,Ju:()=>es,yN:()=>eE,Wl:()=>eo,FM:()=>eC,uS:()=>G,$Q:()=>eM,tw:()=>ej,ki:()=>ec,ZH:()=>eD,py:()=>eR,lY:()=>eU,HD:()=>eP,er:()=>ei});var r=n(73532),o=n(81969),i=n(37768);let a={OP:"COO",MK:"CMO",TC:"CTO",UX:"CXO"},s="[A-Za-z0-9_-]{1,39}",l={seat:RegExp("^elanous://seat-loop/(?:OP|MK|TC|UX)/\\d{4}-\\d{2}-\\d{2}#\\d+$"),event:new RegExp("^elanous://context/event/".concat(s,"$")),cell:new RegExp("^elanous://release/\\d+\\.\\d+\\.\\d+/checklist#".concat(s,"$")),decision:new RegExp("^elanous://decisions/".concat(s,"$"))};function c(e,t){if(!l[e].test(t))return!1;let n="seat"===e?t.replace(/\/seat-loop\/(?:OP|MK|TC|UX)\//,"/seat-loop/seat/"):t;return(0,o.t)(n)===n}function u(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function d(e){if(!u(e)||"string"!=typeof e.source)return!1;switch(e.kind){case"version":return"string"==typeof e.version;case"cell":return"string"==typeof e.version&&"string"==typeof e.id&&"string"==typeof e.title&&"string"==typeof e.status&&(null===e.owner||"string"==typeof e.owner);case"decision":return"string"==typeof e.id&&"string"==typeof e.title&&"string"==typeof e.status&&(null===e.dueAt||"string"==typeof e.dueAt);case"seat":return"string"==typeof e.seat&&"string"==typeof e.at&&"string"==typeof e.status&&(null===e.id||"string"==typeof e.id)&&(null===e.title||"string"==typeof e.title);default:return!1}}function p(e){return u(e)&&"string"==typeof e.at&&"string"==typeof e.kind&&"string"==typeof e.summary&&"string"==typeof e.source}function f(e){return Array.from((0,o.t)(e).trim()).slice(0,30).join("")}function h(e,t){var n,r;return Number.isFinite(Date.parse(e))&&null!=(r=null==(n=(0,i.z)({date:"",seats:[{seat:"TC",now:{text:"출처",at:e},landed:null,blocked:null,pendingDecisions:null,checklist:null}]},t)[0])?void 0:n.ago)?r:null}function m(e,t){if(!(u(e)&&"string"==typeof e.at&&(null===e.topic||"string"==typeof e.topic)&&Array.isArray(e.facts)&&e.facts.every(d)&&Array.isArray(e.events)&&e.events.every(p)&&Array.isArray(e.guide)&&e.guide.every(e=>"string"==typeof e)))return null;let n=e.facts.filter(e=>"seat"===e.kind).sort((e,t)=>t.at.localeCompare(e.at)).filter(e=>Object.hasOwn(a,e.seat)&&c("seat",e.source)).map(e=>({label:(0,o.t)("".concat(a[e.seat]," 자리 루프").concat(e.title?" \xb7 ".concat(f(e.title)):"")),ago:h(e.at,t),source:e.source})),r=e.events.filter(e=>c("event",e.source)).sort((e,t)=>t.at.localeCompare(e.at)).map(e=>({label:(0,o.t)("조율 채널 \xb7 ".concat(f(e.summary))),ago:h(e.at,t),source:e.source}));return[...n,...r,...e.facts.filter(e=>"cell"===e.kind&&c("cell",e.source)).map(e=>({label:(0,o.t)("".concat(e.version," 체크리스트 ").concat(e.id)),ago:null,source:e.source})),...e.facts.filter(e=>"decision"===e.kind&&"open"===e.status&&c("decision",e.source)).map(e=>({label:(0,o.t)("결정 대기 ".concat(e.id)),ago:null,source:e.source}))].slice(0,6)}var g=n(60516),y=n(59318),v=n(5997);async function k(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{var r,o;let i=await e.fork(t,n);if(i.ok&&i.id)return{kind:"forked",id:i.id};if(!i.ok&&("not_found"===i.error||/^HTTP 404(?=\s|:|$)/.test(null!=(r=i.error)?r:"")))return{kind:"empty"};return{kind:"error",error:(null!=(o=i.error)?o:"Fork failed").split(/\r?\n/,1)[0]}}catch(t){if((null==t?void 0:t.status)===404)return{kind:"empty"};let e=t instanceof Error?t.message:String(t);if("not_found"===e||/^HTTP 404(?=\s|:|$)/.test(e))return{kind:"empty"};return{kind:"error",error:e.split(/\r?\n/,1)[0]}}}var b=n(23660),w=n(72215),x=n(65238);function I(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0&&e<=100?e:null}function A(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0&&e<=100?Math.round(e):null}function S(e){return e.replace(/[\u0000-\u001f\u007f-\u009f\u2028\u2029]+/g," ").trim()}function T(e){return e.ok&&Array.isArray(e.rows)?e.rows.map(e=>"".concat(S(e.provider)," ").concat(S(e.account)," \xb7 ").concat(function(e){var t,n,r,o,i,a,s;let l=(null==(t=e.subscription)?void 0:t.status)==="available"?A(e.subscription.remainingPercent):null;if(null!==l)return"남은 ".concat(l,"%").concat(function(e){if("number"!=typeof e||!Number.isFinite(e)||e<0)return"";let t=Math.ceil(e/6e4);return t<60?" \xb7 ".concat(t,"분 뒤 초기화"):t<1440?" \xb7 ".concat(Math.ceil(t/60),"시간 뒤 초기화"):" \xb7 ".concat(Math.ceil(t/1440),"일 뒤 초기화")}(null==(n=e.subscription)?void 0:n.resetsInMs));let c=(null==(r=e.credits)?void 0:r.status)==="ok"?A(e.credits.usedPercent):null;if(null!==c)return"사용 ".concat(c,"%");let u=null!=(s=null!=(a=null==(o=e.subscription)?void 0:o.reason)?a:null==(i=e.credits)?void 0:i.reason)?s:"정보 없음";return"못 읽음(".concat(S(u).slice(0,40),")")}(e))):[]}var C=n(82068),E=n(53060);let P={codex:"balanced",luna:"budget",terra:"better",sol:"best",sonnet:"better",opus:"best",grok:"better"},j=[...E.Ql,...Object.keys(P)].join(" \xb7 "),M=["low","medium","high"];function U(e,t){if("model"===e){if(!t.length)return{kind:"model"};let e=t[0].toLowerCase(),n=(0,E.mp)(e)?e:Object.hasOwn(P,e)?P[e]:void 0;return 1===t.length&&n?{kind:"model",tier:n}:{kind:"model",invalid:!0}}return"reasoning"===e?t.length?1===t.length&&M.includes(t[0])?{kind:"reasoning",level:t[0]}:{kind:"reasoning",invalid:!0}:{kind:"reasoning"}:t.length?1===t.length&&"next"===t[0]?{kind:"provider",action:"next"}:2===t.length&&"use"===t[0]?{kind:"provider",action:"use",name:t[1]}:{kind:"provider",action:"show",invalid:!0}:{kind:"provider",action:"show"}}async function R(e){try{return(await e.client.fetchJson("/v1/setup/llm-providers")).activeProvider||e.provider}catch(t){return e.provider}}async function D(e,t){var n,r,o,i,a,s,l;if("model"===e.kind){if(e.invalid)return"쓸 수 있는 값: ".concat(j);if(!e.tier){let e=t.daemon?null==(r=await (0,C.me)(t.daemon))?void 0:r.llm:void 0;return e?"현재 모델: ".concat(e," \xb7 ").concat((0,E.f7)(await R(t),e).model," \xb7 쓸 수 있는 값: ").concat(j):"현재 모델: 확인할 수 없음 \xb7 쓸 수 있는 값: ".concat(j)}if(!(null==(n=t.daemon)?void 0:n.baseUrl)||"synced"!==await (0,C.tM)(t.daemon,e.tier))return"모델 설정을 저장하지 못했습니다 — 데몬 연결을 확인하세요";let o=await R(t);return"모델: ".concat((0,E.f7)(o,e.tier).model,"(으)로 바꿨습니다")}if("reasoning"===e.kind){if(e.invalid)return"쓸 수 있는 값: ".concat(M.join(" \xb7 "));if(e.level)return"추론 강도는 설정 화면에서 바꾸세요";let n=t.daemon?null==(o=await (0,C.me)(t.daemon))?void 0:o.llm:void 0;return n?"현재 추론 단계: 확인할 수 없음 \xb7 모델 티어 기본값: ".concat(null!=(i=(0,E.f7)(await R(t),n).reasoningLevel)?i:"off"," \xb7 추론 강도는 설정 화면에서 바꾸세요"):"현재 추론 단계: 확인할 수 없음 \xb7 추론 강도는 설정 화면에서 바꾸세요"}if(e.invalid)return"쓸 수 있는 값: next \xb7 use <이름>";try{let n=await t.client.fetchJson("/v1/setup/llm-providers"),r=(null!=(s=n.providers)?s:[]).filter(e=>"apiKey"===e.flow&&e.hasSavedKey||"auto"===e.flow),o=r.map(e=>e.provider).join(" \xb7 ");if("show"===e.action)return"현재 프로바이더: ".concat(n.activeProvider||"(없음)"," \xb7 쓸 수 있는 값: ").concat(o||"(없음)");let i="next"===e.action?r[(r.findIndex(e=>e.provider===n.activeProvider)+1)%r.length]:r.find(t=>t.provider===e.name);if(!i)return"쓸 수 있는 값: ".concat(o||"(없음)");if("next"===e.action&&i.provider===n.activeProvider)return"현재 프로바이더: ".concat(n.activeProvider);let c=await t.client.fetchJson("/v1/setup/llm-provider",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({provider:i.provider})});return(null==c?void 0:c.error)?"프로바이더 전환 실패: ".concat(c.error):"프로바이더: ".concat(null!=(l=null==c||null==(a=c.active)?void 0:a.provider)?l:i.provider,"(으)로 바꿨습니다")}catch(e){return"프로바이더 상태를 읽거나 저장하지 못했습니다 — 데몬 연결을 확인하세요"}}var _=n(3155);let O="쓰는 법: /resume <id 앞자리> (4자 이상)",N="대화 목록을 못 읽었습니다",z="elanous-session-";function L(e){return e.startsWith(z)?e.slice(z.length):e}function Y(e,t){return"sessions"===e?{kind:"sessions",count:1===t.length&&/^[1-9]\d*$/.test(t[0])?Math.min(Number(t[0]),30):10}:{kind:"resume",...1===t.length&&t[0].length>=4?{prefix:t[0]}:{}}}function F(e,t){let n=L(e),r=n.toLowerCase(),o=8;for(let n of t){if(n.id===e)continue;let t=L(n.id).toLowerCase(),i=0;for(;i<r.length&&i<t.length&&r[i]===t[i];)i++;o=Math.max(o,i+1)}return n.slice(0,o)}async function B(e,t){if("resume"===e.kind&&!e.prefix)return{text:O};try{let n=await new b.jU(t.client).list();if(!n.ok||!Array.isArray(n.sessions))return{text:N};let r=n.sessions.map(_.C5);return"sessions"===e.kind?{text:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Date.now(),o=[...e].sort((e,t)=>(Date.parse(t.lastTurnAt)||0)-(Date.parse(e.lastTurnAt)||0)).slice(0,n);return[...0===o.length?["대화가 없습니다"]:o.map(n=>{var o;return"".concat(F(n.id,e)).concat(n.id===t?" (지금)":""," \xb7 ").concat(n.msgCount,"개 \xb7 ").concat((0,b.KW)(n.lastTurnAt,r)," \xb7 ").concat((null!=(o=n.lastMsgPreview)?o:"").slice(0,40))}),"이어가기: /resume <앞자리>"].join("\n")}(r,t.sessionId,e.count)}:function(e,t,n){let r=L(e).toLowerCase();if(r.length<4)return{text:O};let o=t.filter(e=>L(e.id).toLowerCase().startsWith(r));if(0===o.length)return{text:"그런 대화가 없습니다 — /sessions 로 목록"};if(o.length>1)return{text:"".concat(o.map(e=>F(e.id,t)).join(" \xb7 "),"\n더 길게 쳐 주세요")};let i=o[0].id;return i===n?{text:"이미 이 대화입니다"}:{newSessionId:i,text:"".concat(F(i,t)," 대화로 옮겼습니다")}}(e.prefix,r,t.sessionId)}catch(e){return{text:N}}}let J=e=>"elanous:chat:persona:".concat(e);function W(e,t){return t.getItem(J(e))||void 0}async function K(e,t,n,r){if(1===e.length&&"-"===e[0])return r.removeItem(J(t)),"이 대화의 페르소나를 뺐습니다";if(e.length>1&&"-"===e[0])return"쓰는 법: /persona [이름|-]";try{var o;if(0===e.length){let e=await n.fetchJson("/v1/personas");if(!Array.isArray(e.personas))return"페르소나 목록을 읽지 못했습니다";let o=W(t,r);return"페르소나: ".concat(e.personas.map(e=>"".concat(e.displayName," (").concat(e.personaId,")").concat(e.personaId===o?" (지금)":"")).join(" \xb7 ")||"없음","\n고르기: /persona <이름> \xb7 빼기: /persona -")}let i=e.join(" "),a=await n.fetchJson("/v1/personas/".concat(encodeURIComponent(i)));if(!(null==(o=a.persona)?void 0:o.personaId))return"그런 페르소나가 없습니다: ".concat(i);return r.setItem(J(t),a.persona.personaId),"".concat(a.persona.displayName," 페르소나를 이 대화에 골랐습니다")}catch(t){if(e.length>0&&t instanceof Error&&t.message.includes("404"))return"그런 페르소나가 없습니다: ".concat(e.join(" "));return"페르소나 목록을 읽지 못했습니다"}}var $=n(2555),Z=n(23196);async function q(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(!(null==e?void 0:e.baseUrl))return{kind:"failed",error:"데몬 연결이 없습니다"};let{intervalMs:o=3e3,timeoutMs:i=6e5,sleep:a=e=>new Promise(t=>setTimeout(t,e)),fetch:s=globalThis.fetch}=r,l="".concat(e.baseUrl.replace(/\/$/,""),"/v1/skills/exec"),c={"content-type":"application/json",...e.token?{authorization:"Bearer ".concat(e.token)}:{}},u=Date.now()+i,d=async(e,t,n)=>{let r,o=u-Date.now();if(o<=0)throw Error("timeout");let i=new AbortController,a=setTimeout(()=>i.abort(),o);try{r=await s(e,{...t,signal:i.signal})}catch(e){if(i.signal.aborted)throw Error("timeout");throw e}finally{clearTimeout(a)}if(!r.ok||void 0!==n&&r.status!==n)throw Error("HTTP ".concat(r.status));return r.json()};try{let r=await d(l,{method:"POST",headers:c,body:JSON.stringify({skill:t,task:n})},202);if(!r||"object"!=typeof r||!("id"in r)||"string"!=typeof r.id||!r.id)throw Error("잘못된 응답");for(;;){if(Date.now()>=u)return{kind:"failed",error:"timeout"};let t=await d("".concat(l,"/").concat(encodeURIComponent(r.id)),{headers:e.token?{authorization:"Bearer ".concat(e.token)}:{}});if(!t||"object"!=typeof t||!("status"in t))throw Error("잘못된 응답");if("done"===t.status&&"ok"in t&&"boolean"==typeof t.ok&&"output"in t&&"string"==typeof t.output)return{kind:"done",ok:t.ok,output:t.output};if("rejected"===t.status)return{kind:"rejected"};if("failed"===t.status)return{kind:"failed",error:"error"in t&&"string"==typeof t.error?t.error:"잘못된 응답"};if("running"!==t.status)throw Error("잘못된 응답");let n=u-Date.now();if(n<=0)return{kind:"failed",error:"timeout"};await a(Math.min(o,n))}}catch(e){return{kind:"failed",error:e instanceof Error?e.message:String(e)}}}let H=/^https?:\/\/[^\s"']+\.(png|jpe?g|webp|gif)(\?[^\s"']*)?$/i,V=/https?:\/\/[^\s"'<>)\]]+?\.(?:png|jpe?g|webp|gif)(?:\?[^\s"'<>)\]]*)?/gi;function X(e){var t,n;let r=null==(t=(null!=(n=e.split("?")[0])?n:"").split(".").pop())?void 0:t.toLowerCase();return"jpg"===r||"jpeg"===r?"image/jpeg":"webp"===r?"image/webp":"gif"===r?"image/gif":"image/png"}function G(e){if(!e||"object"!=typeof e||Array.isArray(e))return[];let t=new Set,n=[],r=[],o=(e,i)=>{if(i>4||null===e)return;if(Array.isArray(e)){for(let t of e)o(t,i+1);return}if("object"!=typeof e)return;let a="string"==typeof e.uri?e.uri:e.result_url;if("string"==typeof a&&H.test(a)&&!t.has(a)){t.add(a);let r="string"==typeof e.description?e.description:"string"==typeof e.name?e.name:void 0;n.push({src:a,mediaType:X(a),...r?{alt:r}:{}})}for(let[t,n]of Object.entries(e)){if("string"==typeof n&&("output"===t||"text"===t)){r.push(n);continue}o(n,i+1)}};for(let i of(o(e,0),r))for(let e of i.matchAll(V)){let r=e[0];t.has(r)||(t.add(r),n.push({src:r,mediaType:X(r)}))}return n}function Q(e){return"undefined"==typeof localStorage?void 0:W(e,localStorage)}let ee=new Map,et=new Set,en=[],er=!1;function eo(){return er&&(en=Array.from(ee.values()).sort((e,t)=>{var n,r;return(null!=(n=e.priority)?n:50)-(null!=(r=t.priority)?r:50)}),er=!1),en}function ei(e){return et.add(e),()=>{et.delete(e)}}function ea(e){return"hud.segment"===e.kind&&("applied"===(0,g.VQ)(ee,e)&&function(){for(let e of(er=!0,et))try{e()}catch(e){(0,w.cY)("chat-runtime.hud.subscriber-error",e)}}(),!0)}function es(e){ea(e)}let el=/^\[elanous\/feedback\/[a-zA-Z]+\] /;function ec(e,t){let n=(0,r.h)(t);return!(!n||e.some(e=>"text"===e.kind&&e.text===n))&&(e.push({kind:"text",text:n}),!0)}function eu(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return;let n=(Array.isArray(e.content)?e.content:[]).filter(e=>null!==e&&"object"==typeof e&&!Array.isArray(e)&&"resource"===e.type).map(e=>e.resource).find(e=>{var n;return!(null===e||"object"!=typeof e||Array.isArray(e))&&e.uri===t&&"string"==typeof(n=e.mimeType)&&"text/html"===n.split(";")[0].trim().toLowerCase()&&"string"==typeof e.text});if(!n)return;let r=n._meta,o=r&&"object"==typeof r&&!Array.isArray(r)?r.ui:void 0,i=o&&"object"==typeof o&&!Array.isArray(o)?o.csp:void 0,a=i&&"object"==typeof i&&!Array.isArray(i)?i.connectDomains:void 0,s=i&&"object"==typeof i&&!Array.isArray(i)?i.resourceDomains:void 0,l=Array.isArray(a)?a.filter(e=>"string"==typeof e):void 0,c=Array.isArray(s)?s.filter(e=>"string"==typeof e):void 0;return{html:n.text,...l?{connectDomains:l}:{},...c?{resourceDomains:c}:{}}}let ed="예산 상태를 읽지 못했습니다",ep="elanous:wish:pending:";function ef(e){if(!/^[0-9a-f-]{36}$/.test(e))return;let t=localStorage.getItem("".concat(ep).concat(e));if(!t)return;let n=JSON.parse(t);if(n&&"object"==typeof n&&n.id===e&&"string"==typeof n.baseUrl&&"string"==typeof n.sessionId&&"string"==typeof n.text&&"string"==typeof n.ref&&n.ref.startsWith("".concat(n.sessionId,":"))&&n.ref.endsWith(":".concat(e)))return{id:e,baseUrl:n.baseUrl,sessionId:n.sessionId,text:n.text,ref:n.ref}}async function eh(e,t){if(!(null==e?void 0:e.baseUrl))return null;try{let n=await fetch("".concat(e.baseUrl.replace(/\/$/,"")).concat(t),{headers:e.token?{authorization:"Bearer ".concat(e.token)}:{}});return n.ok?await n.json():null}catch(e){return null}}async function em(e){let t=await eh(e,"/v1/usage");if(t&&"object"==typeof t&&"ok"in t&&!0===t.ok&&"rows"in t&&Array.isArray(t.rows))return t}async function eg(e,t){let[n,r]=await Promise.all([eh(e,"/v1/setup/llm-providers"),(null==e?void 0:e.baseUrl)?(0,C.me)(e):null]),o=n&&"object"==typeof n&&"activeProvider"in n&&"string"==typeof n.activeProvider&&n.activeProvider?n.activeProvider:t;return{provider:o,...n&&(0,E.D9)(o)&&(null==r?void 0:r.llm)?{model:(0,E.f7)(o,r.llm).model}:{}}}let ey=[{name:"help",description:"이 도움말 보기"},{name:"session",description:"현재 대화 ID 보기"},{name:"remaining",description:"계정별 남은 양과 초기화 시각 보기"},{name:"status",description:"현재 대화\xb7모델\xb7데몬 판\xb7남은 양 보기"},{name:"fork",description:"현재 대화를 복사해 새 대화로 분기"},{name:"rewind",description:"N개 사용자 턴 이전으로 분기 (/rewind N)"},{name:"undo",description:"마지막 사용자 턴 이전으로 분기"},{name:"budget",description:"이번 달 지출과 알림 기준 보기"},{name:"history",description:"최근 N개 로컬 대화 요약 (기본 10개, 역할: 앞 80자)"},{name:"clear",description:"로컬 대화 기록 지우기"},{name:"sessions",description:"최근 대화 목록 보기 (/sessions [N])"},{name:"resume",description:"대화 이어가기 (/resume <id 앞자리>)"},{name:"persona",description:"이 대화의 페르소나 보기\xb7고르기\xb7빼기 (/persona [이름|-])"},{name:"model",description:"모델 티어 보기\xb7바꾸기 (/model <티어|별칭>)"},{name:"reasoning",description:"추론 단계 보기\xb7설정 안내 (/reasoning <low|medium|high>)"},{name:"provider",description:"프로바이더 보기\xb7바꾸기 (/provider next|use <이름>)"},{name:"wish",description:"소원을 카드로 남기기 (:wish <소원 한 줄> \xb7 :wish --pending \xb7 :wish --retry <작업 ID>)"},{name:"run-skill",description:"이름을 댄 스킬 하나 바로 실행 (/run-skill <이름> <할 일>)"}],ev=["help","session","fork","budget","history","clear","wish"],ek=["메타 명령(:이름 또는 /이름) (Meta commands):",...ey.map(e=>{let{name:t,description:n}=e;return" ".concat(ev.includes(t)?":":"/").concat(t.padEnd(16)).concat(n)})].join("\n"),eb=new Set(["help","?","resume","clear","cls","status","st","now","wish","remaining","setup","quit","q","exit","run-skill","rs","run","ad","design","design-check","local","ll","session","sess","persona","fork","rewind","mission","resume-turn","context","ctx","paste","sync","s","plugin","plugins","widget","widgets","log","loops","memory","mem","export","delta","diffs","theme","debug","rebind","api-allow","api","prompt","prompts","history","hist","inputs","research","rsh","harness","plan","chat","dashboard","dash","telegram","tg","tablet","surface","term","terminal","claude","codex","gemini","acp","conv","handoff","agent-room","showroom","sr","reply","capture","inject","relay","lane","control","default","qc","voice-chat","vc","auto-tts","tts","autotts","directive"]),ew={m:"model",r:"reasoning",think:"reasoning",p:"provider",rs:"run-skill",run:"run-skill"},ex=new Set([...eb].filter(e=>"harness"!==e&&!Object.hasOwn(ew,e)&&!ey.some(t=>t.name===e))),eI=ev.filter(e=>"wish"!==e).map(e=>"/".concat(e)).join(" ");async function eA(e,t,n){var r;let o=(null!=(r=n.messages)?r:[]).filter(e=>"user"===e.role).length,i=(t,r)=>((0,w.cY)("webterm.chat.fork",{command:e,outcome:t,sessionId:n.sessionId}),{text:r});if("fork"===e&&t.length>0)return i("invalid","쓰는 법: /fork");if("undo"===e&&t.length>0)return i("invalid","쓰는 법: /undo");if("rewind"===e&&(1!==t.length||!/^[1-9]\d*$/.test(t[0])))return i("invalid","쓰는 법: /rewind N (양의 정수)");let a="undo"===e?1:"rewind"===e?Number(t[0]):0;if("fork"!==e&&(!Number.isSafeInteger(a)||a>o))return i("out-of-range","되돌릴 사용자 턴이 부족합니다 (".concat(o,"개)"));let s=await k(new b.jU(n.client),n.sessionId,"fork"===e?{}:{beforeUser:o-a+1});if("error"===s.kind)return i("error","대화 분기 실패 — ".concat(s.error));if("empty"===s.kind&&"fork"!==e)return i("empty","저장된 대화가 없어 되돌릴 수 없습니다");let l="forked"===s.kind?s.id:(0,v.Zr)();return(0,w.cY)("webterm.chat.fork",{command:e,outcome:"empty"===s.kind?"empty":"forked",sessionId:n.sessionId,newSessionId:l,..."fork"===e?{}:{beforeUser:o-a+1}}),{text:"fork"===e?"forked → new session ".concat(l):"".concat(a,"개 사용자 턴 이전으로 분기했습니다 → ").concat(l),newSessionId:l}}async function eS(e,t){if(!e)return{text:"무엇을 맡길까요? /harness <한 줄>"};try{let{acceptanceId:n}=await (0,Z.ZJ)(t.client,e);return{text:"하니스 접수 \xb7 ".concat(n.slice(0,8)),harnessAsk:{acceptanceId:n}}}catch(t){let e=(t instanceof Error?t.message:String(t)).split(/\r?\n/,1)[0].slice(0,200);return{text:"하니스 접수 실패 — ".concat(e)}}}let eT={":help":async()=>({text:ek}),":session":async(e,t)=>({text:"session = ".concat(t.sessionId)}),":remaining":async(e,t)=>{let n=await em(t.daemon),r=n?T(n):[],o=void 0!==n;return(0,w.cY)("webterm.chat.status",{cmd:"remaining",rows:r.length,ok:o}),{text:o?r.length?r.join("\n"):"등록된 계정이 없습니다":"남은 양을 읽지 못했습니다"}},":status":async(e,t)=>{let[n,r,o]=await Promise.all([eh(t.daemon,"/v1/health"),em(t.daemon),eg(t.daemon,t.provider)]),i=n&&"object"==typeof n&&"nexusVersion"in n&&"string"==typeof n.nexusVersion?n.nexusVersion:void 0,a=r?T(r):[];return(0,w.cY)("webterm.chat.status",{cmd:"status",rows:a.length,ok:!!i||void 0!==r}),{text:function(e){let{sessionId:t,provider:n,model:r,version:o,usage:i}=e,a=(null==i?void 0:i.ok)&&Array.isArray(i.rows)?i.rows:[],s=e=>{var t,n;let r=(null==(t=e.subscription)?void 0:t.status)==="available"?I(e.subscription.remainingPercent):null;if(null!==r)return r;let o=(null==(n=e.credits)?void 0:n.status)==="ok"?I(e.credits.usedPercent):null;return null===o?null:100-o},l=a.reduce((e,t)=>{let n=s(t),r=e?s(e):null;return null!==n&&(null===r||n<r)?t:e},void 0),c=l?T({ok:!0,rows:[l]})[0]:a.length?T({ok:!0,rows:[a[0]]})[0]:(null==i?void 0:i.ok)&&Array.isArray(i.rows)?"등록된 계정이 없습니다":"남은 양을 읽지 못했습니다";return["대화: ".concat(t.slice(0,8)),"모델: ".concat(n,"/").concat(r||"미확인"),"데몬 판: ".concat(null!=o?o:"확인할 수 없음"),"남은 양: ".concat(c)].join("\n")}({sessionId:t.sessionId,...o,...i?{version:i}:{},...r?{usage:r}:{}})}},":fork":async()=>{let e=(0,v.Zr)();return{text:"forked → new session ".concat(e),newSessionId:e}},":rewind":async(e,t)=>eA("rewind",e,t),":undo":async(e,t)=>eA("undo",e,t),":budget":async(e,t)=>{let n=t.daemon;if(!(null==n?void 0:n.baseUrl))return{text:ed};let r=await (0,x.gh)(n);return r?{text:function(e){let t=Number.isFinite(e.monthSoFarUsd)?e.monthSoFarUsd:0;return"budget ".concat(e.monthYYYYMM,": $").concat(t.toFixed(2)," \xb7 알림 ").concat(e.notifyAtPct,"%")}(r)}:{text:ed}},":history":async(e,t)=>{var n;let r=Number(e[0]),o=Number.isFinite(r)&&r>0?Math.floor(r):10;return{text:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;return 0===e.length?"아직 대화가 없습니다":e.slice(Math.max(0,e.length-t)).map(e=>"".concat(e.role,": ").concat(e.text.slice(0,80))).join("\n")}(null!=(n=t.messages)?n:[],o)}},":clear":async()=>({text:"__CLEAR__"}),":sessions":async(e,t)=>B(Y("sessions",e),t),":resume":async(e,t)=>B(Y("resume",e),t),":persona":async(e,t)=>({text:await K(e,t.sessionId,t.client,localStorage)}),":model":async(e,t)=>({text:await D(U("model",e),t)}),":reasoning":async(e,t)=>({text:await D(U("reasoning",e),t)}),":provider":async(e,t)=>({text:await D(U("provider",e),t)}),":wish":async(e,t)=>{let n,r=e.join(" ").trim();if(!r)return{text:":wish <소원 한 줄>"};let o=t.daemon;if(!(null==o?void 0:o.baseUrl))return{text:"소원 카드 저장 실패 — 데몬 연결이 없습니다"};let i=o.baseUrl.replace(/\/$/,"");try{if("--pending"===r){let e=function(e,t){let n=[];for(let r=0;r<localStorage.length;r++){let o=localStorage.key(r);if(null==o?void 0:o.startsWith(ep))try{let r=ef(o.slice(ep.length));(null==r?void 0:r.baseUrl)===e&&r.sessionId===t&&n.push(r)}catch(e){}}return n}(i,t.sessionId);return{text:e.length?e.map(e=>{let{id:t,text:n}=e;return"".concat(t," — ").concat(n)}).join("\n"):"재시도할 소원이 없습니다"}}if(r.startsWith("--retry ")){let e=r.slice(8).trim(),o=ef(e);if(!o||o.baseUrl!==i||o.sessionId!==t.sessionId)return{text:"소원 카드 저장 실패 — 재시도할 작업을 찾을 수 없습니다"};n=o}else{let e=crypto.randomUUID();n={id:e,baseUrl:i,sessionId:t.sessionId,text:r,ref:"".concat(t.sessionId,":").concat(Date.now(),":").concat(e)},localStorage.setItem("".concat(ep).concat(e),JSON.stringify(n))}}catch(e){return{text:"소원 카드 저장 실패 — 작업 보존 불가: ".concat(e instanceof Error?e.message:String(e))}}try{let e=await fetch("".concat(i,"/v1/task-cards/wish"),{method:"POST",headers:{"content-type":"application/json",...o.token?{authorization:"Bearer ".concat(o.token)}:{}},body:JSON.stringify({text:n.text,ref:n.ref,sessionId:n.sessionId})});if(!e.ok)throw Error("HTTP ".concat(e.status));let t=await e.json();if(!t||"object"!=typeof t||!("title"in t)||"string"!=typeof t.title)throw Error("잘못된 응답");return localStorage.removeItem("".concat(ep).concat(n.id)),{text:"소원 카드로 남겼습니다 — ".concat(t.title)}}catch(e){return{text:"소원 카드 저장 실패 — ".concat(e instanceof Error?e.message:String(e)," \xb7 재시도: :wish --retry ").concat(n.id)}}},":run-skill":async(e,t)=>{if(e.length<2)return{text:"쓰는 법: /run-skill <이름> <할 일>"};let n=e[0],r=e.slice(1).join(" "),o=await q(t.daemon,n,r);if((0,w.cY)("webterm.chat.run-skill",{skill:n,kind:o.kind}),"rejected"===o.kind)return{text:"이 스킬은 바로 실행할 수 없습니다 — 대화로 \xab".concat(n," 으로 …\xbb 라고 부탁해 보세요")};if("failed"===o.kind)return{text:"스킬 실행을 확인하지 못했습니다(".concat(o.error,")")};let i=o.output.length>8e3?"".concat(o.output.slice(0,8e3),"… (잘림)"):o.output;return{text:o.ok?i:"스킬이 실패했습니다\n".concat(i)}}};function eC(e){let t=e.trimStart();if(t.startsWith(":"))return!0;if(!t.startsWith("/")||t.length<2||/\s/.test(t[1]))return!1;let[n]=t.split(/\s+/);return!n.slice(1).includes("/")}async function eE(e,t){let n=e.trim(),r=(0,$.dz)(e);if(null!==r&&!n.startsWith("/"))return eS(r,t);if(!n.startsWith(":")&&!n.startsWith("/"))return null;let[o,...i]=n.split(/\s+/);if(o.startsWith("/")&&!eC(e))return null;if("/harness"===o&&null===r)return{text:"무엇을 맡길까요? /harness <한 줄>"};let a=o.startsWith("/"),s=a?":".concat(o.slice(1)):o,l=a&&Object.hasOwn(ew,o.slice(1))?ew[o.slice(1)]:o.slice(1),c=":".concat(l),u=!a&&":provider"===c&&i.length>0&&"next"!==i[0]&&"use"!==i[0],d=a&&":fork"===c?(e,t)=>eA("fork",e,t):!u&&Object.hasOwn(eT,c)?eT[c]:void 0;if(!d){if(a){let e=ex.has(o.slice(1));return(0,w.cY)("webterm.chat.meta-command",{cmd:s,outcome:e?"unsupported-tui":"unknown"}),{text:e?"".concat(o," 은 PWA 채팅에서 아직 안 됩니다 — 지금 되는 명령: ").concat(eI):"모르는 명령입니다: ".concat(o," — /help 로 목록 보기")}}return(0,w.cY)("webterm.chat.meta-command",{cmd:s,outcome:"unknown"}),{text:"unknown meta command: ".concat(o)}}return(0,w.cY)("webterm.chat.meta-command",{cmd:s,outcome:"ok"}),d(i,t)}async function eP(e,t){var n,r,o;let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,w.cY)("webterm.chat.runturn.stream.start",{sessionId:t.sessionId,provider:t.provider,len:e.length,contentBlocks:null!=(r=null==(n=i.userContent)?void 0:n.length)?r:0});let a=[],s=-1,l=0,c=0,u=0,d=0,p=()=>a.map(e=>({...e})),f=e=>{(0,w.cY)("webterm.chat.runturn.stream.end",{stopReason:e.stopReason,sessionId:e.sessionId,...void 0!==e.error?{error:e.error}:{},images:l,tools:c,mcpApps:u,feedback:d})},h=Q(t.sessionId),y=await t.client.promptStream({sessionId:t.sessionId||void 0,userText:e,...i.userContent&&i.userContent.length>0?{userContent:i.userContent}:{},provider:t.provider||void 0,...h?{personaId:h}:{}},{onError:i.onError,onTextDelta:e=>{var t,n;let{full:r}=e;-1===s?(s=a.length,a.push({kind:"text",text:r})):a[s]={kind:"text",text:r},null==(t=i.onPartial)||t.call(i,r),null==(n=i.onPartialBlocks)||n.call(i,p())},onImageBlock:e=>{var t;let{src:n,mediaType:r,alt:o}=e;l+=1,a.push(void 0!==o?{kind:"image",src:n,mediaType:r,alt:o}:{kind:"image",src:n,mediaType:r}),null==(t=i.onPartialBlocks)||t.call(i,p())},onFeedback:e=>{if(!ea(e)&&"applied"===(0,g.K4)(a,e)){var t;d+=1,null==(t=i.onPartialBlocks)||t.call(i,p())}},onToolCall:e=>{var t;let{id:n,name:r,args:o}=e;c+=1,a.push({kind:"tool_use",id:n,name:r,status:"running",startedAt:Date.now(),args:o}),null==(t=i.onPartialBlocks)||t.call(i,p())},onToolResult:e=>{var t;let{id:n,name:r,ok:o,summary:s,rawOutput:l,resourceUri:d}=e,f=a.findIndex(e=>"tool_use"===e.kind&&e.id===n),h=o?"done":"error",g="context_now"===r?m(l,Date.now()):null;if(-1===f)c+=1,a.push({kind:"tool_use",id:n,name:r,status:h,startedAt:Date.now(),endedAt:Date.now(),...void 0!==s?{summary:s}:{},...null!==g?{sources:g}:{}});else{let e={...a[f],status:h,endedAt:Date.now(),...void 0!==s?{summary:s}:{},...null!==g?{sources:g}:{}};null===g&&delete e.sources,a[f]=e}if(ec(a,l),"string"==typeof d&&d.trim().length>0){u+=1;let e=eu(l,d);a.push({kind:"mcp_app",toolId:n,toolName:r,screenUrl:d,...void 0!==l?{toolResult:l}:{},...e||{},...void 0!==s?{fallbackText:s}:{}})}null==(t=i.onPartialBlocks)||t.call(i,p())},...i.signal?{signal:i.signal}:{},...!0===i.debugTap?{debugTap:!0}:{}}).catch(e=>{var t;throw f({stopReason:(null==(t=i.signal)?void 0:t.aborted)===!0?"aborted":"error",error:e instanceof Error?e.message:String(e)}),e});f({stopReason:y.stopReason,sessionId:y.sessionId}),-1!==s&&y.text&&(a[s]={kind:"text",text:y.text});let v=l>0||c>0||u>0||d>0;return{message:{id:"m-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"assistant",text:null!=(o=y.text)?o:"",timestamp:Date.now(),meta:{provider:t.provider,stopReason:y.stopReason},...v?{blocks:p()}:{}},newSessionId:y.sessionId!==t.sessionId?y.sessionId:void 0}}function ej(e,t){return{id:"u-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"user",text:e,timestamp:Date.now(),...t?{terminalId:t}:{}}}function eM(e,t){return{id:"meta-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"meta",text:e,timestamp:Date.now(),...t?{terminalId:t}:{}}}function eU(e,t,n){let r=null,o=[],i=-1,a=0,s=0,l=0,c=0,u=!1,d=()=>{r=null,o.length=0,i=-1,a=0,s=0,l=0,c=0,u=!1},p=()=>o.map(e=>({...e}));return e.subscribeChatEvents(t,{onTurnBegin:e=>{var t;if(d(),null==(t=n.isLocalTurnInFlight)?void 0:t.call(n)){u=!0;return}let o=n.onPlaceholder({sessionId:e.sessionId});if(null===o){u=!0;return}r=o},onTextDelta:e=>{let{full:t}=e;u||null===r||(-1===i?(i=o.length,o.push({kind:"text",text:t})):o[i]={kind:"text",text:t},n.onPartialBlocks(r,p()))},onImageBlock:e=>{let{src:t,mediaType:i,alt:s}=e;u||null===r||(a+=1,o.push(void 0!==s?{kind:"image",src:t,mediaType:i,alt:s}:{kind:"image",src:t,mediaType:i}),n.onPartialBlocks(r,p()))},onFeedback:e=>{ea(e)||u||null===r||"applied"===(0,g.K4)(o,e)&&(c+=1,n.onPartialBlocks(r,p()))},onToolCall:e=>{let{id:t,name:i,args:a}=e;u||null===r||(s+=1,o.push({kind:"tool_use",id:t,name:i,status:"running",startedAt:Date.now(),args:a}),n.onPartialBlocks(r,p()))},onToolResult:e=>{let{id:t,name:i,ok:a,summary:c,rawOutput:d,resourceUri:f}=e;if(u||null===r)return;let h=o.findIndex(e=>"tool_use"===e.kind&&e.id===t),g=a?"done":"error",y="context_now"===i?m(d,Date.now()):null;if(-1===h)s+=1,o.push({kind:"tool_use",id:t,name:i,status:g,startedAt:Date.now(),endedAt:Date.now(),...void 0!==c?{summary:c}:{},...null!==y?{sources:y}:{}});else{let e={...o[h],status:g,endedAt:Date.now(),...void 0!==c?{summary:c}:{},...null!==y?{sources:y}:{}};null===y&&delete e.sources,o[h]=e}if(ec(o,d),"string"==typeof f&&f.trim().length>0){l+=1;let e=eu(d,f);o.push({kind:"mcp_app",toolId:t,toolName:i,screenUrl:f,...void 0!==d?{toolResult:d}:{},...e||{},...void 0!==c?{fallbackText:c}:{}})}n.onPartialBlocks(r,p())},onTurnEnd:e=>{var f;if(u||null===r){(0,w.cY)("webterm.chat.runturn.observer.end",{sessionId:t,stopReason:e.stopReason,dropped:!0,reason:u?"dropped-turn":"no-placeholder"}),d();return}-1!==i&&e.text&&(o[i]={kind:"text",text:e.text});let h=a>0||s>0||l>0||c>0;(0,w.cY)("webterm.chat.runturn.observer.end",{sessionId:t,stopReason:e.stopReason,dropped:!1,images:a,tools:s,mcpApps:l,feedback:c});let m={id:"m-obs-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"assistant",text:null!=(f=e.text)?f:"",timestamp:Date.now(),meta:{...n.provider?{provider:n.provider}:{},stopReason:e.stopReason},...h?{blocks:p()}:{}};n.onFinalize(r,m),d()},onError:e=>{null!==r&&n.onError&&n.onError(r,e),d()}})}async function eR(e,t,n){var r,o;let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=n.sessionId;if(!a)throw Error("runChatTurnAcp: sessionId required (daemon handshake first)");let s=[],l=-1,c=0,u=0,d=0,p="",f=-1,h="",m=0,v=0,k=0,b=()=>{if(-1===f)return!1;let e=s[f];return!e.done&&(s[f]={...e,done:!0},!0)},x=()=>s.map(e=>({...e})),I=e.on("sessionUpdate",e=>{var t,n,r,o,w,I,A,S,T,C;let E=e.params;if(!E||E.sessionId!==a)return;let P=E.update;if(P){if("agent_message_chunk"===P.sessionUpdate){let e=P.content;if((null==e?void 0:e.type)==="text"&&"string"==typeof e.text&&e.text.length>0){let r=e.text;p+=r,-1===l?(b(),l=s.length,s.push({kind:"text",text:p})):s[l]={kind:"text",text:p},null==(t=i.onPartial)||t.call(i,p),null==(n=i.onPartialBlocks)||n.call(i,x())}else if((null==e?void 0:e.type)==="image"&&"string"==typeof e.data&&"string"==typeof e.mimeType){c+=1;let t={kind:"image",src:e.data,mediaType:e.mimeType};"string"==typeof e.uri&&(t.alt=e.uri),b(),s.push(t),null==(r=i.onPartialBlocks)||r.call(i,x())}}else if("agent_thought_chunk"===P.sessionUpdate){let e=P.content;if((null==e?void 0:e.type)==="text"&&"string"==typeof e.text&&e.text.length>0){let t=function(e){let t=e.split("\n"),n=t[0];if(!n)return null;let r=/^\[elanous\/feedback\/([a-zA-Z]+)\] (.+)$/.exec(n);if(!r||"emit"!==r[1])return null;let o=[];for(let e=1;e<t.length;e+=1){let n=t[e];if(/^<<elanous-feedback-end /.test(n))break;o.push(n)}try{let e=JSON.parse(o.join("\n"));return(0,y.L)(e)?{method:"emit",payload:e}:null}catch(e){return null}}(e.text);if(t){ea(t.payload)||"applied"===(0,g.K4)(s,t.payload)&&(v+=1,null==(w=i.onPartialBlocks)||w.call(i,x()));return}if(el.test(e.text)){k+=1;return}if(h+=e.text,-1===f)m+=1,f=s.length,s.push({kind:"agent_thinking",blockId:"acp-thought-".concat(a),msg:h,done:!1});else{let e=s[f];s[f]={...e,msg:h}}null==(o=i.onPartialBlocks)||o.call(i,x())}}else if("tool_call"===P.sessionUpdate&&"string"==typeof P.toolCallId)u+=1,s.push({kind:"tool_use",id:P.toolCallId,name:null!=(A=P.title)?A:"",status:"running",startedAt:Date.now(),...P.rawInput?{args:P.rawInput}:{}}),null==(I=i.onPartialBlocks)||I.call(i,x());else if("tool_call_update"===P.sessionUpdate&&"string"==typeof P.toolCallId){let e=s.findIndex(e=>"tool_use"===e.kind&&e.id===P.toolCallId),t="completed"===P.status?"done":"error";if(-1===e)u+=1,s.push({kind:"tool_use",id:P.toolCallId,name:null!=(T=P.title)?T:"",status:t,startedAt:Date.now(),endedAt:Date.now(),...P.title?{summary:P.title}:{}});else{let n=s[e];s[e]={...n,status:t,endedAt:Date.now(),...P.title?{summary:P.title}:{}}}for(let e of(ec(s,P.rawOutput),G(P.rawOutput)))s.some(t=>"image"===t.kind&&t.src===e.src)||(c+=1,s.push({kind:"image",...e}));let n=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return;let t=e._meta,n=t&&"object"==typeof t&&!Array.isArray(t)?t.ui:void 0,r=n&&"object"==typeof n&&!Array.isArray(n)?n.resourceUri:void 0;if("string"==typeof r&&r.trim().length>0)return r;let o=e["ui/resourceUri"];return"string"==typeof o&&o.trim().length>0?o:void 0}(P.rawOutput);if(n){d+=1;let e=eu(P.rawOutput,n);s.push({kind:"mcp_app",toolId:P.toolCallId,toolName:null!=(C=P.title)?C:"",screenUrl:n,...void 0!==P.rawOutput?{toolResult:P.rawOutput}:{},...e||{},...P.title?{fallbackText:P.title}:{}})}null==(S=i.onPartialBlocks)||S.call(i,x())}}}),A=()=>{e.send("session/cancel",{sessionId:a}).catch(()=>{})},S=i.signal;if(S){if(S.aborted)throw I(),Error("aborted");S.addEventListener("abort",A,{once:!0})}let T=i.userContent&&i.userContent.length>0?i.userContent:[{type:"text",text:t}];(0,w.cY)("webterm.chat.runturn.acp.start",{sessionId:a,provider:n.provider,len:t.length,blocks:T.length});let C=e=>{(0,w.cY)("webterm.chat.runturn.acp.end",{sessionId:a,stopReason:e.stopReason,...void 0!==e.error?{error:e.error}:{},textLen:p.length,images:c,tools:u,mcpApps:d,thoughts:m,feedbackEnvelopes:k})};try{let t=Q(a),o=await e.send("session/prompt",{sessionId:a,prompt:T,...t?{_meta:{elanous:{pwaPersonaId:t}}}:{}}),i=null!=(r=null==o?void 0:o.stopReason)?r:"end_turn";b(),C({stopReason:i});let s=c>0||u>0||d>0||m>0||v>0;return{message:{id:"m-acp-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"assistant",text:p,timestamp:Date.now(),meta:{provider:n.provider,stopReason:i},...s?{blocks:x()}:{}}}}catch(e){throw C({stopReason:(null==S?void 0:S.aborted)===!0?"aborted":"error",error:e instanceof Error?e.message:String(e)}),e}finally{b()&&(null==(o=i.onPartialBlocks)||o.call(i,x())),S&&S.removeEventListener("abort",A),I()}}function eD(e,t,n){var r;let o=null!=(r=n.idleFinalizeMs)?r:3e3,i=null,a=[],s=-1,l=0,c=0,u=null,d=()=>{if(null!==i)return!0;let e=n.onPlaceholder({sessionId:t});return null!==e&&(i=e,(0,w.cY)("webterm.chat.acp.foreign-turn.start",{id:e}),!0)},p=e.on("sessionUpdate",e=>{var r,p,f,h;if((null==(r=n.isLocalTurnInFlight)?void 0:r.call(n))||(null==(p=n.isRemoteSseTurnInFlight)?void 0:p.call(n)))return;let m=e.params;if(!m||m.sessionId!==t)return;let g=m.update;if(!g)return;let y=!1;if("agent_message_chunk"===g.sessionUpdate){let e=g.content;if((null==e?void 0:e.type)==="text"&&"string"==typeof e.text&&e.text.length>0){if(!d())return;let t=e.text;if(-1===s)s=a.length,a.push({kind:"text",text:t});else{let e=a[s];a[s]={kind:"text",text:e.text+t}}y=!0}else if((null==e?void 0:e.type)==="image"&&"string"==typeof e.data&&"string"==typeof e.mimeType){if(!d())return;l+=1;let t={kind:"image",src:e.data,mediaType:e.mimeType};"string"==typeof e.uri&&(t.alt=e.uri),a.push(t),y=!0}}else if("tool_call"===g.sessionUpdate&&"string"==typeof g.toolCallId){if(!d())return;c+=1,a.push({kind:"tool_use",id:g.toolCallId,name:null!=(f=g.title)?f:"",status:"running",startedAt:Date.now(),...g.rawInput?{args:g.rawInput}:{}}),y=!0}else if("tool_call_update"===g.sessionUpdate&&"string"==typeof g.toolCallId){if(!d())return;let e=a.findIndex(e=>"tool_use"===e.kind&&e.id===g.toolCallId),t="completed"===g.status?"done":"error";if(-1===e)c+=1,a.push({kind:"tool_use",id:g.toolCallId,name:null!=(h=g.title)?h:"",status:t,startedAt:Date.now(),endedAt:Date.now(),...g.title?{summary:g.title}:{}});else{let n=a[e];a[e]={...n,status:t,endedAt:Date.now(),...g.title?{summary:g.title}:{}}}y=!0}y&&null!==i&&(n.onPartialBlocks(i,a.map(e=>({...e}))),u&&clearTimeout(u),u=setTimeout(()=>{let e=i;if(e&&(0,w.cY)("webterm.chat.acp.foreign-turn.end",{id:e,images:l,tools:c}),u&&(clearTimeout(u),u=null),i=null,a=[],s=-1,l=0,c=0,e&&n.onFinalize)try{n.onFinalize(e)}catch(e){(0,w.cY)("webterm.chat.acp.finalize.error",{reason:String(e)})}},o))});return()=>{p(),u&&(clearTimeout(u),u=null)}}Object.defineProperty(eT,":harness",{value:async(e,t)=>eS(e.join(" "),t)})},23196:(e,t,n)=>{n.d(t,{Gm:()=>u,IH:()=>i,PM:()=>l,ZJ:()=>s,cE:()=>o,dy:()=>c,qI:()=>a,sg:()=>d});let r=/https?:\/\/[^\s<>"']+/g;function o(e){return e.slice(0,40)}async function i(e,t){let n=function(e){var t;let n=null!=(t=e.match(r))?t:[];return 0===n.length?[{text:e}]:n.map(e=>({url:e}))}(t),o=await e.fetchJson("/v1/intake-ledger/items",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({items:n,source:"pwa"})});return{ids:o.ids,added:o.added,merged:o.merged}}function a(e,t,n,r){return e.fetchJson("/v1/task-cards/wish",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t,sessionId:n,ref:r})})}async function s(e,t){return{acceptanceId:(await e.fetchJson("/v1/harness/ask",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t})})).acceptanceId}}function l(e,t){return e.fetchJson("/v1/harness/ask-status?acceptanceId=".concat(encodeURIComponent(t)))}function c(e,t){return e.fetchJson("/v1/harness/run-events?runId=".concat(encodeURIComponent(t)))}function u(e,t){return e.fetchJson("/v1/intake-ledger/items/".concat(encodeURIComponent(t)))}function d(e,t,n){return e.fetchJson("/v1/intake/route",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t,consent:"route",source:"pwa",...(null==n?void 0:n.classify)!==void 0?{classify:n.classify}:{}})})}},23660:(e,t,n)=>{n.d(t,{KW:()=>i,jU:()=>r,nj:()=>o});class r{async list(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.client.fetchJson("/v1/sessions/store".concat(e?"?includeEmpty=1":""))}async transcript(e){return this.client.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(e)))}async fork(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.client.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(e),"/fork"),{method:"POST",...void 0!==t.beforeUser?{headers:{"content-type":"application/json"},body:JSON.stringify({beforeUser:t.beforeUser})}:{}})}async delete(e){return this.client.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(e)),{method:"DELETE"})}constructor(e){this.client=e}}function o(e,t){let n=t.trim().toLowerCase();if(!n)return{kind:"none"};let r=e.filter(e=>e.id.toLowerCase().startsWith(n));return 1===r.length?{kind:"one",id:r[0].id}:0===r.length?{kind:"none"}:{kind:"ambiguous",count:r.length}}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now(),n=Date.parse(e);if(!Number.isFinite(n))return"";let r=Math.max(0,Math.floor((t-n)/1e3));return r<30?"방금":r<3600?"".concat(Math.floor(r/60),"분 전"):r<86400?"".concat(Math.floor(r/3600),"시간 전"):"".concat(Math.floor(r/86400),"일 전")}},37100:(e,t,n)=>{n.d(t,{z:()=>g});var r=n(55539),o=n(46124),i=n(76573),a=n(94226),s=n(69147),l=n(96395),c=n(67327),u=n(15151),d=n(72215),p=n(52079);function f(){var e,t;if("undefined"==typeof globalThis)return null;let n=globalThis;return null!=(t=null!=(e=n.SpeechRecognition)?e:n.webkitSpeechRecognition)?t:null}async function h(e){var t,n;let r=e.transcript.trim();if(!r)return{ok:!1,status:0,reason:"empty transcript"};let o=e.baseUrl.replace(/\/$/,"");if(!o)return{ok:!1,status:0,reason:"baseUrl not configured"};let i=null!=(t=e.fetchImpl)?t:"undefined"!=typeof fetch?fetch:null;if(!i)return{ok:!1,status:0,reason:"fetch unavailable"};try{let t=await i("".concat(o,"/v1/intake"),{method:"POST",headers:{"content-type":"application/json",...e.token?{authorization:"Bearer ".concat(e.token)}:{}},body:JSON.stringify(function(e){let t={text:e.transcript.trim(),actor:"pwa-voice",channelContext:{kind:"pwa-voice"}};return e.intakeId&&(t.intakeId=e.intakeId),t}({transcript:r,...e.intakeId?{intakeId:e.intakeId}:{}}))});if(!t.ok){let e=await t.text().catch(()=>"");return{ok:!1,status:t.status,reason:e||"HTTP ".concat(t.status)}}let a=await t.json().catch(()=>({}));return{ok:!0,intakeId:null!=(n=a.intakeId)?n:""}}catch(e){return{ok:!1,status:0,reason:String(e instanceof Error?e.message:e)}}}function m(e){let{phase:t,transcript:n,onTranscriptChange:o,error:c,apiAvailable:u,onPressStart:d,onPressEnd:p,onConfirm:f,onCancel:h}=e,m="recording"===t,g="submitting"===t;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{type:"button",onPointerDown:u?d:void 0,onPointerUp:u?p:void 0,onPointerLeave:m?p:void 0,disabled:!u||g,"aria-label":u?"음성 메모 (길게 누르기)":"음성 메모 (브라우저 미지원)",title:u?"길게 눌러 녹음 → intake 저장":"브라우저가 Web Speech API 미지원","data-testid":"showroom-voice-button","data-phase":t,className:"rounded p-1.5 transition disabled:cursor-not-allowed disabled:opacity-50 ".concat(m?"animate-pulse bg-red-500 text-white":"text-muted-foreground hover:bg-accent hover:text-foreground"),children:g?(0,r.jsx)(i.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,r.jsx)(a.A,{className:"h-3.5 w-3.5"})}),("review"===t||"submitting"===t)&&(0,r.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":"Voice intake review","data-testid":"showroom-voice-modal",className:"fixed inset-0 z-40 flex items-center justify-center bg-black/40 p-4 backdrop-blur-sm",children:(0,r.jsxs)("div",{className:"flex w-[min(calc(100vw-2rem),28rem)] flex-col gap-3 rounded-2xl border border-zinc-200 bg-white p-4 shadow-2xl dark:border-zinc-800 dark:bg-zinc-900",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-sm font-medium text-zinc-900 dark:text-zinc-100",children:"음성 메모 검토"}),(0,r.jsx)("button",{type:"button",onClick:h,disabled:g,"aria-label":"cancel","data-testid":"showroom-voice-cancel",className:"rounded p-1 text-zinc-500 hover:bg-zinc-100 disabled:opacity-50 dark:text-zinc-400 dark:hover:bg-zinc-800",children:(0,r.jsx)(s.A,{className:"h-4 w-4"})})]}),(0,r.jsx)("textarea",{value:n,onChange:e=>o(e.target.value),disabled:g,placeholder:"(녹음된 텍스트가 비어있습니다)",rows:4,"data-testid":"showroom-voice-transcript",className:"rounded border border-zinc-300 bg-white px-2 py-1.5 text-sm text-zinc-900 disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-100"}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:h,disabled:g,"data-testid":"showroom-voice-discard",className:"flex-1 rounded-lg border border-zinc-300 bg-white px-3 py-1.5 text-sm font-medium text-zinc-800 transition hover:bg-zinc-100 disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700",children:"버리기"}),(0,r.jsx)("button",{type:"button",onClick:f,disabled:g||0===n.trim().length,"data-testid":"showroom-voice-confirm",className:"flex-1 rounded-lg border border-emerald-500 bg-emerald-500 px-3 py-1.5 text-sm font-semibold text-white transition hover:bg-emerald-600 disabled:cursor-not-allowed disabled:opacity-50",children:(0,r.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,r.jsx)(l.A,{className:"h-3.5 w-3.5"}),"Intake 저장"]})})]}),c&&(0,r.jsx)("div",{role:"alert","data-testid":"showroom-voice-error",className:"text-xs text-red-600 dark:text-red-400",children:c})]})})]})}function g(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];let{config:e}=(0,u.Q)(),[t,n]=(0,o.useState)("idle"),[i,a]=(0,o.useState)(""),[s,l]=(0,o.useState)(null),g=(0,o.useRef)(null),[y,v]=(0,o.useState)(!0);(0,o.useEffect)(()=>{v(null!==f())},[]);let k=()=>{n("idle"),a(""),l(null),g.current=null},b=async()=>{var t;if(0===i.trim().length)return;if(!e.baseUrl)return void l("Daemon URL 미설정 — Settings 에서 입력");n("submitting"),l(null),(0,d.cY)("showroom.voice.submit",{len:i.trim().length});let r=await h({baseUrl:e.baseUrl,...e.token?{token:e.token}:{},transcript:i});if(!r.ok){l("intake 실패: ".concat(r.reason)),n("review"),(0,d.cY)("showroom.voice.error",{status:r.status});return}c.oR.success("\uD83D\uDCE5 음성 메모 저장됨 \xb7 intake ".concat(r.intakeId||"(id 없음)")),(0,d.cY)("showroom.voice.ok",{intakeId:r.intakeId}),p.K.emit({surface:"pwa",intent:{layer:"utterance",kind:"pwa.utterance.voice_send",target:{kind:"intake",id:null!=(t=r.intakeId)?t:"(unknown)"},value:{transcriptLen:i.trim().length}},...r.intakeId?{context:{active_workflow_run_id:r.intakeId}}:{}}),k()};return(0,r.jsx)(m,{phase:t,transcript:i,onTranscriptChange:a,error:s,apiAvailable:y,onPressStart:()=>{if("idle"!==t)return;l(null),a(""),(0,d.cY)("showroom.voice.press-start",{});let e=function(){var e,t,n;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=null!=(e=r.recognitionImpl)?e:f();if(!o)return null;let i=new o;i.lang=null!=(t=r.lang)?t:"ko-KR",i.interimResults=!0,i.continuous=!0;let a="",s=!0,l=null,c=new Promise(e=>{l=e});i.onresult=e=>{var t;let n="";for(let t=0;t<e.results.length;t+=1){let r=e.results[t];if(!r)continue;let o=r[0];o&&(n+=o.transcript)}a=n,null==(t=r.onUpdate)||t.call(r,n)},i.onerror=e=>{var t;null==(t=r.onError)||t.call(r,{code:e.error,message:e.message})},i.onend=()=>{s=!1,l&&(l(a),l=null)};try{i.start()}catch(e){return null==(n=r.onError)||n.call(r,{code:"start-failed",message:String(e)}),null}return{get transcript(){return a},get active(){return s},async stop(){try{i.stop()}catch(e){}return c},async abort(){try{i.abort()}catch(e){}return c}}}({lang:"ko-KR",onUpdate:e=>a(e),onError:e=>{l("음성 인식 오류: ".concat(e.code)),(0,d.cY)("showroom.voice.recog-error",{code:e.code,message:e.message})}});if(!e)return void l("Web Speech API 미사용 — 브라우저가 미지원");g.current=e,n("recording")},onPressEnd:()=>{if("recording"!==t)return;let e=g.current;if(!e)return void n("idle");(0,d.cY)("showroom.voice.press-end",{}),e.stop().then(e=>{if(a(e),0===e.trim().length)return void k();n("review")})},onConfirm:()=>{b()},onCancel:k})}},37768:(e,t,n)=>{n.d(t,{z:()=>i});var r=n(40385);let o=[{id:"OP",seat:"COO"},{id:"MK",seat:"CMO"},{id:"TC",seat:"CTO"},{id:"UX",seat:"CXO"}];function i(e,t){return e?o.flatMap(n=>{var o;let{id:i,seat:a}=n,s=null==(o=e.seats.find(e=>e.seat===i))?void 0:o.now;if(!s)return[];let l=Array.from((0,r.q)(s.text)).slice(0,24).join("");if(!l)return[];let c=Math.max(0,Math.floor((t-Date.parse(s.at))/6e4));return[{seat:a,text:l,ago:c<1?"방금":c<60?"".concat(c,"분 전"):c<1440?"".concat(Math.floor(c/60),"시간 전"):"하루 넘음"}]}):[]}},40385:(e,t,n)=>{n.d(t,{g:()=>s,q:()=>a});var r=n(81969);let o=[{id:"OP",seat:"COO"},{id:"MK",seat:"CMO"},{id:"TC",seat:"CTO"},{id:"UX",seat:"CXO"}];function i(e){return(0,r.t)(e.replace(/\s+/g," ")).trim()}function a(e){var t;let n=e.split("\n"),r=(e,t)=>{let n=e.trim();return t&&(n=(n=n.replace(/^\*\*\[[^\]]+\]\*\*\s*/,"")).replace(/^(?:📌\S*\s*)?\d{4}-\d{2}-\d{2}\s+\d{1,2}:\d{2}\s*KST\s*/,"")),i(n=(n=(n=(n=(n=(n=n.replace(/^→\s*(?:[A-Z]{1,4}|전원|전체)(?=\s|·|$)(?:\s*·\s*(?:[A-Z]{1,4}|전원|전체)(?=\s|·|$))*\s*(?:·)?\s*/u,"")).replace(/^—\s*/,"")).replace(/^[-*]\s+/,"").replace(/\*\*|`|__/g,"").replace(/^#+\s*/,"").trim()).replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,"")).replace(RegExp("^(?:\\p{Extended_Pictographic}\\uFE0F?)+\\s*","u"),"")).replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,""))},o=r(null!=(t=n[0])?t:"",!0);if(o)return o;let a=n.slice(1).find(e=>e.trim());return a?r(a,!1):""}function s(e,t){var n;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now();return{seats:o.map(t=>{var n;let{id:r,seat:o}=t,i=null==e?void 0:e.seats.find(e=>e.seat===r);return{seat:o,now:(null==i?void 0:i.now)&&Array.from(a(i.now.text)).slice(0,40).join("")||"못 읽음",landedToday:(null==i?void 0:i.landed)==null?"못 읽음":i.landed.length,blocked:(null==i?void 0:i.blocked)==null?"못 읽음":i.blocked.length,decisionsWaiting:null!=(n=null==i?void 0:i.pendingDecisions)?n:"못 읽음"}}),runs:(null!=(n=null==t?void 0:t.entries)?n:[]).filter(e=>"running"===e.status).sort((e,t)=>{var n,r;return(Date.parse(null!=(n=t.lastActivityTimestamp)?n:"")||0)-(Date.parse(null!=(r=e.lastActivityTimestamp)?r:"")||0)}).slice(0,6).map(e=>{var t;let n=Date.parse(null!=(t=e.lastActivityTimestamp)?t:"");return{id6:function(e){let t=e.replace(/^run-/i,"");return/^[a-z0-9]{6}/i.test(t)&&i(t.slice(0,6))||"못 읽음"}(e.runId),stage:i(e.lastPhase||e.status)||"못 읽음",elapsedSec:Number.isFinite(n)?Math.max(0,Math.floor((r-n)/1e3)):"못 읽음"}})}}},51564:(e,t,n)=>{n.d(t,{Si:()=>a,cK:()=>i});var r=n(46124),o=n(72215);function i(){var e,t,n,r;let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=null!=(e=o.threshold)?e:.04,a=null!=(t=o.speakingThresholdMultiplier)?t:2,s=null!=(n=o.sustainMs)?n:150,l=null!=(r=o.frameMs)?r:20,c=Math.max(1,Math.ceil(s/l)),u=Math.max(1,Math.ceil(500/l)),d=0,p=0,f=!1,h=!1,m=()=>h?i*a:i;return{push(e){if(function(e){if(e.byteLength<2)return 0;let t=e.byteLength>>1,n=new Int16Array(e.buffer,e.byteOffset,t),r=0;for(let e=0;e<t;e+=1){let t=n[e]/32768;r+=t*t}return Math.sqrt(r/t)}(e)>=m()){if(d+=1,p=0,!f&&d>=c)return f=!0,!0}else d=0,p+=1,f&&p>=u&&(f=!1);return!1},reset(){d=0,p=0,f=!1},setSpeakingActive(e){h!==e&&(h=e,d=0,p=0)},effectiveThreshold:m}}function a(e){var t,n;let i=(0,r.useRef)(e.enabled);i.current=e.enabled;let a=(0,r.useRef)(e.onActivate);a.current=e.onActivate;let s=null!=(t=e.thresholdMs)?t:250,l=null==(n=e.ignoreFocusedInput)||n;(0,r.useEffect)(()=>{let e=null,t=!1,n=n=>{!(!i.current||"Space"!==n.code&&" "!==n.key||n.repeat||l&&function(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return"INPUT"===t||"TEXTAREA"===t||e.isContentEditable}(n.target))&&(t||(t=!0,e=setTimeout(()=>{t&&((0,o.cY)("voice.barge-in.spacebar-longpress",{ms:s}),a.current(n))},s)))},r=n=>{(!n||"Space"===n.code||" "===n.key)&&(t=!1,e&&(clearTimeout(e),e=null))};return window.addEventListener("keydown",n),window.addEventListener("keyup",r),window.addEventListener("blur",()=>r()),()=>{e&&clearTimeout(e),window.removeEventListener("keydown",n),window.removeEventListener("keyup",r),window.removeEventListener("blur",()=>r())}},[s,l])}},52079:(e,t,n)=>{n.d(t,{K:()=>r}),n(46124);let r={emit:async function(e){return{ok:!1,reason:"not-configured"}}}},56974:(e,t,n)=>{n.d(t,{sS:()=>f});var r=n(46124),o=n(72215);async function i(e){let t=new Blob(["\nclass ElanousCaptureProcessor extends AudioWorkletProcessor {\n constructor(opts) {\n super();\n const o = opts.processorOptions || {};\n this.targetHz = o.targetHz | 0 || 16000;\n this.frameBytes = o.frameBytes | 0 || 640;\n // int16 → 2 bytes per sample\n this.frameSamples = this.frameBytes >> 1;\n this.outBuf = new Int16Array(this.frameSamples);\n this.outIdx = 0;\n this.ratio = sampleRate / this.targetHz;\n this.acc = 0;\n }\n process(inputs) {\n const input = inputs[0];\n if (!input || !input[0]) return true;\n const ch0 = input[0];\n for (let i = 0; i < ch0.length; i++) {\n this.acc += 1;\n if (this.acc < this.ratio) continue;\n this.acc -= this.ratio;\n const v = Math.max(-1, Math.min(1, ch0[i]));\n this.outBuf[this.outIdx++] = v < 0 ? Math.round(v * 0x8000) : Math.round(v * 0x7fff);\n if (this.outIdx >= this.frameSamples) {\n const copy = new Int16Array(this.outBuf);\n this.port.postMessage(copy.buffer, [copy.buffer]);\n this.outBuf = new Int16Array(this.frameSamples);\n this.outIdx = 0;\n }\n }\n return true;\n }\n}\nregisterProcessor('elanous-capture', ElanousCaptureProcessor);\n"],{type:"application/javascript"}),n=URL.createObjectURL(t);try{await e.audioWorklet.addModule(n)}finally{URL.revokeObjectURL(n)}}async function a(e){var t,n,r,a;let s=null!=(t=e.targetSampleRateHz)?t:16e3,l=null!=(n=e.framePcmBytes)?n:640,c=null,u=null,d=null,p=null,f=null;(0,o.cY)("voice.capture.start",{targetHz:s,frameBytes:l});try{(0,o.cY)("voice.capture.gum-request",{hasMediaDevices:"undefined"!=typeof navigator&&!!navigator.mediaDevices,hasGetUserMedia:"undefined"!=typeof navigator&&"function"==typeof(null==(r=navigator.mediaDevices)?void 0:r.getUserMedia)}),c=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,channelCount:1}}),(0,o.cY)("voice.capture.gum-ok",{tracks:c.getTracks().map(e=>({kind:e.kind,label:e.label,state:e.readyState}))}),u=new AudioContext,(0,o.cY)("voice.capture.audiocontext",{sampleRate:u.sampleRate,state:u.state}),await i(u),(0,o.cY)("voice.capture.worklet-loaded"),(d=new AudioWorkletNode(u,"elanous-capture",{processorOptions:{targetHz:s,frameBytes:l}})).port.onmessage=t=>{e.onFrame(new Uint8Array(t.data))},p=u.createMediaStreamSource(c),(f=u.createGain()).gain.value=1,p.connect(f),f.connect(d),(0,o.cY)("voice.capture.wired",{hasGain:!0})}catch(n){let t=n instanceof Error?n:Error(String(n));throw(0,o.cY)("voice.capture.error",{name:t.name,message:t.message}),null==(a=e.onError)||a.call(e,t),c&&c.getTracks().forEach(e=>e.stop()),u&&await u.close(),t}let h=!1;return{async stop(){if(!h){h=!0;try{null==p||p.disconnect()}catch(e){}try{null==f||f.disconnect()}catch(e){}try{null==d||d.disconnect()}catch(e){}try{null==c||c.getTracks().forEach(e=>e.stop())}catch(e){}try{await (null==u?void 0:u.close())}catch(e){}}},setMicGain(e){if(!f||!u)return;let t=Number.isFinite(e)?Math.max(0,Math.min(1,e)):1;try{let e=u.currentTime;f.gain.cancelScheduledValues(e),f.gain.setValueAtTime(f.gain.value,e),f.gain.linearRampToValueAtTime(t,e+.005),(0,o.cY)("voice.mic.duck.set",{gain:t})}catch(e){try{f.gain.value=t}catch(e){}(0,o.cY)("voice.mic.duck.fallback",{gain:t,err:e instanceof Error?e.message:String(e)})}}}}let s={UPSTREAM_PCM:1,UPSTREAM_FINALIZE:2,UPSTREAM_HELLO:3,UPSTREAM_INTERRUPT:4,DOWNSTREAM_PCM:129,DOWNSTREAM_STATE:130,DOWNSTREAM_ERROR:131,DOWNSTREAM_TRANSCRIPT:132};function l(e,t){let n=new ArrayBuffer(4+t.byteLength),r=new DataView(n);return r.setUint8(0,e),r.setUint8(1,0),r.setUint16(2,0,!1),new Uint8Array(n,4).set(t),n}function c(e){return JSON.parse(new TextDecoder().decode(e))}var u=n(51564),d=n(79689);function p(e){return"speaking"===e?.5:1}function f(e){let[t,n]=(0,r.useState)("idle"),[i,f]=(0,r.useState)(null),[h,m]=(0,r.useState)(!1),g=(0,r.useRef)(null),y=(0,r.useRef)(null),v=(0,r.useRef)(null),k=(0,r.useRef)(e.onTranscript);(0,r.useEffect)(()=>{k.current=e.onTranscript},[e.onTranscript]);let b=(0,r.useRef)(e.onSpeechActivity);(0,r.useEffect)(()=>{b.current=e.onSpeechActivity},[e.onSpeechActivity]);let w=(0,r.useRef)(null);if(null===w.current){let e=(0,d.lu)();w.current=(0,u.cK)({speakingThresholdMultiplier:e.speakingThresholdMultiplier})}let x=(0,r.useRef)("idle"),I=(0,r.useCallback)(e=>{var t,r;let o=x.current;if(x.current=e,null==(t=w.current)||t.setSpeakingActive("speaking"===e),p(o)!==p(e))try{null==(r=g.current)||r.setMicGain(p(e))}catch(e){}n(e)},[]),A=(0,r.useCallback)(async()=>{var e,t,n;try{null==(e=v.current)||e.close()}catch(e){}try{await (null==(t=g.current)?void 0:t.stop())}catch(e){}try{await (null==(n=y.current)?void 0:n.close())}catch(e){}g.current=null,y.current=null,v.current=null},[]);(0,r.useEffect)(()=>()=>{A()},[A]);let S=(0,r.useCallback)(async()=>{f(null),I("connecting");try{let t=function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=null!=(e=t.inputSampleRateHz)?e:24e3,r=new AudioContext,o=0,i=[];function a(){for(let e of i){try{e.stop()}catch(e){}try{e.disconnect()}catch(e){}}i=[],o=r.currentTime}async function s(){a();try{await r.close()}catch(e){}}return{enqueue:function(e){try{let t=e.byteLength>>1,a=new DataView(e.buffer,e.byteOffset,e.byteLength),s=new Float32Array(t);for(let e=0;e<t;e++){let t=a.getInt16(2*e,!0);s[e]=t<0?t/32768:t/32767}let l=r.createBuffer(1,t,n);l.copyToChannel(s,0);let c=r.createBufferSource();c.buffer=l,c.connect(r.destination);let u=r.currentTime,d=Math.max(u,o);c.start(d),o=d+l.duration,i.push(c),c.onended=()=>{i=i.filter(e=>e!==c)}}catch(e){var a;null==(a=t.onError)||a.call(t,e instanceof Error?e:Error(String(e)))}},cancel:a,close:s}}({onError:e=>f(e.message)});y.current=t;let n=function(e){let t,n="connecting",r=t=>{var r;n=t,null==(r=e.onSocketState)||r.call(e,t),(0,o.cY)("voice.ws.state",{state:t,url:e.url})};(0,o.cY)("voice.ws.construct",{url:e.url,hasToken:!!e.token,location:window.location.href,pageProto:window.location.protocol,wsProto:e.url.startsWith("wss:")?"wss":e.url.startsWith("ws:")?"ws":"(other)"});try{(t=new WebSocket(e.url)).binaryType="arraybuffer",(0,o.cY)("voice.ws.constructed",{readyState:t.readyState,url:t.url})}catch(a){var i;r("error");let t=a instanceof Error?a.message:String(a);return(0,o.cY)("voice.ws.construct-throw",{msg:t,url:e.url}),null==(i=e.onError)||i.call(e,{error:"ws construct failed: ".concat(t)}),{sendUpstreamPcm(){},finalize(){},sendInterrupt(){},close(){},getState:()=>n}}return t.onopen=()=>{var n;(0,o.cY)("voice.ws.open",{readyState:t.readyState,url:t.url,protocol:t.protocol,extensions:t.extensions}),r("open");let i={...null!=(n=e.hello)?n:{},...e.token?{token:e.token}:{}},a=new TextEncoder().encode(JSON.stringify(i));t.send(l(s.UPSTREAM_HELLO,a)),(0,o.cY)("voice.ws.hello-sent",{helloKeys:Object.keys(i)})},t.onmessage=t=>{var n,r,o,i,a,l;if("string"==typeof t.data){null==(n=e.onError)||n.call(e,{error:"unexpected text frame: ".concat(t.data.slice(0,200))});return}try{let n=function(e){if(e.byteLength<4)throw Error("frame too short (".concat(e.byteLength," bytes)"));let t=new DataView(e);return{kind:t.getUint8(0),flags:t.getUint8(1),payload:new Uint8Array(e,4)}}(t.data);switch(n.kind){case s.DOWNSTREAM_PCM:e.onDownstreamPcm(n.payload);break;case s.DOWNSTREAM_STATE:{let{state:t}=c(n.payload);null==(r=e.onState)||r.call(e,t);break}case s.DOWNSTREAM_ERROR:{let t=c(n.payload);null==(o=e.onError)||o.call(e,t);break}case s.DOWNSTREAM_TRANSCRIPT:{let t=c(n.payload);null==(i=e.onTranscript)||i.call(e,t);break}default:null==(a=e.onError)||a.call(e,{error:"unknown frame kind 0x".concat(n.kind.toString(16))})}}catch(t){null==(l=e.onError)||l.call(e,{error:t instanceof Error?t.message:String(t)})}},t.onclose=e=>{(0,o.cY)("voice.ws.close",{code:e.code,reason:e.reason,wasClean:e.wasClean,readyState:t.readyState,priorState:n}),r("closed")},t.onerror=n=>{var i;let a={readyState:t.readyState,url:t.url,eventType:n.type,isTrusted:n.isTrusted};(0,o.cY)("voice.ws.error",a),r("error"),null==(i=e.onError)||i.call(e,{error:"websocket transport error (readyState=".concat(t.readyState,", url=").concat(t.url,")")})},{sendUpstreamPcm:function(e){"open"===n&&t.send(l(s.UPSTREAM_PCM,e))},finalize:function(){"open"===n&&t.send(l(s.UPSTREAM_FINALIZE,new Uint8Array(0)))},sendInterrupt:function(){"open"===n&&t.send(l(s.UPSTREAM_INTERRUPT,new Uint8Array(0)))},close:function(){if("closed"!==n&&"closing"!==n){r("closing");try{t.close(1e3,"client-close")}catch(e){}}},getState:()=>n}}({url:e.wsUrl,...e.token?{token:e.token}:{},hello:{surface:"pwa",userAgent:navigator.userAgent},onDownstreamPcm:e=>{t.enqueue(e),I("speaking")},onState:e=>I(function(e){switch(e){case"connecting":return"connecting";case"streaming":return"listening";default:return"idle"}}(e)),onTranscript:e=>{if("final"===e.kind){var t;null==(t=k.current)||t.call(k,e.text)}},onError:e=>{I("error"),f(e.error)},onSocketState:e=>{let t="connecting"===e?"connecting":"error"===e?"error":"closed"===e?"idle":null;t&&I(t)}});v.current=n,g.current=await a({onFrame:e=>{n.sendUpstreamPcm(e);let t=w.current;if(t&&t.push(e)){(0,o.cY)("voice.barge-in.rms-fire");let e=b.current;try{null==e||e()}catch(e){}if("speaking"===x.current){var r,i;try{null==(r=y.current)||r.cancel()}catch(e){}try{null==(i=v.current)||i.sendInterrupt()}catch(e){}I("listening"),(0,o.cY)("voice.barge-in.auto-fire")}}},onError:e=>{I("error"),f(e.message)}}),m(!0),I("listening")}catch(e){I("error"),f(e instanceof Error?e.message:String(e)),await A()}},[e.wsUrl,e.token,A,I]),T=(0,r.useCallback)(async()=>{var e,t;m(!1),null==(e=v.current)||e.finalize(),await A(),null==(t=w.current)||t.reset(),I("idle")},[A,I]),C=(0,r.useCallback)(async()=>{h?await T():await S()},[h,S,T]),E=(0,r.useCallback)(async()=>{h||await S()},[h,S]);return{phase:t,errorMsg:i,active:h,start:S,stop:T,toggle:C,forceListen:E,interrupt:(0,r.useCallback)(()=>{var e,t;try{null==(e=y.current)||e.cancel()}catch(e){}try{null==(t=v.current)||t.sendInterrupt()}catch(e){}"speaking"===x.current&&(I("listening"),(0,o.cY)("voice.barge-in.manual-fire"))},[I])}}},60516:(e,t,n)=>{n.d(t,{K4:()=>o,VQ:()=>a});let r=new Set(["normal","warn","danger","success","info","muted"]);function o(e,t){switch(t.kind){case"agent.thinking":return function(e,t){var n,r;let o=null!=(n=t.payload)?n:{},i=null!=(r=o.msg)?r:"Thinking",a=o.metrics&&"number"==typeof o.metrics.elapsedMs&&"number"==typeof o.metrics.tokenCount?{elapsedMs:o.metrics.elapsedMs,tokenCount:o.metrics.tokenCount}:void 0,s={kind:"agent_thinking",blockId:t.blockId,msg:i,done:"end"===t.phase,...a?{metrics:a}:{},...t.asciiFallback.length>0?{asciiFallback:t.asciiFallback}:{}},l=e.findIndex(e=>"agent_thinking"===e.kind&&e.blockId===t.blockId);return -1===l?e.push(s):e[l]=s,"applied"}(e,t);case"agent.status":var n=e,r=t;let o=r.payload;if(!o||"string"!=typeof o.agentId||"string"!=typeof o.status)return"unhandled";let a={kind:"agent_status",blockId:r.blockId,agentId:o.agentId,status:o.status,...void 0!==o.lastEvent?{lastEvent:o.lastEvent}:{}},s=n.findIndex(e=>"agent_status"===e.kind&&e.blockId===r.blockId);return -1===s?n.push(a):n[s]=a,"applied";case"agent.plan":var l=e,c=t;let u=c.payload;if(!u||"string"!=typeof u.ref||!Array.isArray(u.steps))return"unhandled";let d={kind:"agent_plan",blockId:c.blockId,ref:u.ref,steps:u.steps.map(e=>({text:e.text,status:e.status})),...void 0!==u.activeIndex?{activeIndex:u.activeIndex}:{}},p=l.findIndex(e=>"agent_plan"===e.kind&&e.blockId===c.blockId);return -1===p?l.push(d):l[p]=d,"applied";case"tool.diff":var f=e,h=t;let m=h.payload;if(!m||"string"!=typeof m.filePath||!Array.isArray(m.hunks))return"unhandled";for(let e of m.hunks)if("number"!=typeof e.oldStart||"number"!=typeof e.oldLines||"number"!=typeof e.newStart||"number"!=typeof e.newLines||!Array.isArray(e.lines))return"unhandled";let g={kind:"tool_diff",blockId:h.blockId,filePath:m.filePath,...void 0!==m.language?{language:m.language}:{},hunks:m.hunks.map(e=>({oldStart:e.oldStart,oldLines:e.oldLines,newStart:e.newStart,newLines:e.newLines,lines:e.lines.map(e=>({kind:e.kind,text:e.text}))})),...void 0!==h.parentToolCallId?{parentToolCallId:h.parentToolCallId}:{}},y=f.findIndex(e=>"tool_diff"===e.kind&&e.blockId===h.blockId);return -1===y?f.push(g):f[y]=g,"applied";case"tool.search-hit":return function(e,t){let n=t.payload;if(!n||"string"!=typeof n.query||!Array.isArray(n.hits)||"number"!=typeof n.accumCount)return"unhandled";for(let e of n.hits)if("string"!=typeof e.filePath||"number"!=typeof e.line||"string"!=typeof e.snippet)return"unhandled";let r=e.findIndex(e=>"tool_search_hits"===e.kind&&e.blockId===t.blockId),o=n.hits.map(e=>({filePath:e.filePath,line:e.line,snippet:e.snippet,...void 0!==e.column?{column:e.column}:{},...Array.isArray(e.contextBefore)?{contextBefore:[...e.contextBefore]}:{},...Array.isArray(e.contextAfter)?{contextAfter:[...e.contextAfter]}:{}})),i=o;if(-1!==r&&"delta"===t.phase){let t=e[r],n=new Set(t.hits.map(e=>{var t;return"".concat(e.filePath,":").concat(e.line,":").concat(null!=(t=e.column)?t:0)})),a=o.filter(e=>{var t;return!n.has("".concat(e.filePath,":").concat(e.line,":").concat(null!=(t=e.column)?t:0))});i=[...t.hits,...a]}let a={kind:"tool_search_hits",blockId:t.blockId,query:n.query,hits:i,accumCount:n.accumCount,...n.truncated?{truncated:!0}:{},...void 0!==t.parentToolCallId?{parentToolCallId:t.parentToolCallId}:{}};return -1===r?e.push(a):e[r]=a,"applied"}(e,t);case"tool.progress":return function(e,t){let n,r=t.payload;if(!r||"string"!=typeof r.stream||!i.has(r.stream)||!Array.isArray(r.lines))return"unhandled";for(let e of r.lines)if("string"!=typeof e)return"unhandled";let o=e.findIndex(e=>"tool_progress"===e.kind&&e.blockId===t.blockId);if(-1===o)n=[...r.lines];else{let i=e[o];n="update"===t.phase?[...r.lines]:[...i.lines,...r.lines]}let a={kind:"tool_progress",blockId:t.blockId,stream:r.stream,lines:n,done:"end"===t.phase,...void 0!==r.bytesSoFar?{bytesSoFar:r.bytesSoFar}:{},...void 0!==r.exitCode?{exitCode:r.exitCode}:{},...void 0!==t.parentToolCallId?{parentToolCallId:t.parentToolCallId}:{}};return -1===o?e.push(a):e[o]=a,"applied"}(e,t);case"debug.line":return function(e,t){let n,r=t.payload;if(!r||"string"!=typeof r.category||"string"!=typeof r.event||"number"!=typeof r.loggedAt)return"unhandled";let o={seq:t.seq,category:r.category,event:r.event,...void 0!==r.data?{data:r.data}:{},loggedAt:r.loggedAt},i=e.findIndex(e=>"debug_session"===e.kind&&e.blockId===t.blockId);-1===i?n=[o]:(n=[...e[i].lines,o]).length>200&&n.splice(0,n.length-200);let a={kind:"debug_session",blockId:t.blockId,lines:n};return -1===i?e.push(a):e[i]=a,"applied"}(e,t);case"perf.tick":return function(e,t){let n,r=t.payload;if(!r||"string"!=typeof r.metric||0===r.metric.length||"number"!=typeof r.value||!Number.isFinite(r.value))return"unhandled";let o={seq:t.seq,metric:r.metric,value:r.value,..."string"==typeof r.unit?{unit:r.unit}:{},emittedAt:t.emittedAt},i=e.findIndex(e=>"perf_session"===e.kind&&e.blockId===t.blockId);-1===i?n=[o]:(n=[...e[i].samples,o]).length>60&&n.splice(0,n.length-60);let a={kind:"perf_session",blockId:t.blockId,samples:n};return -1===i?e.push(a):e[i]=a,"applied"}(e,t);default:return"unhandled"}}let i=new Set(["stdout","stderr","http","generic"]);function a(e,t){let n=t.payload;if(!n||"string"!=typeof n.key||0===n.key.length)return"unhandled";if("end"===t.phase)return e.has(n.key)?(e.delete(n.key),"applied"):"unhandled";if("string"!=typeof n.value)return"unhandled";let o={key:n.key,value:n.value,..."number"==typeof n.priority&&Number.isFinite(n.priority)?{priority:n.priority}:{},..."string"==typeof n.tone&&r.has(n.tone)?{tone:n.tone}:{},..."string"==typeof n.glyph&&n.glyph.length>0?{glyph:n.glyph}:{}};return e.set(n.key,o),"applied"}},61897:(e,t,n)=>{n.d(t,{K:()=>i,v:()=>o});var r=n(72215);async function o(e){var t;let n=e.baseUrl.replace(/\/$/,"");if(!n)return{ok:!1,status:0,reason:"baseUrl not configured"};let o=null!=(t=e.filename)?t:e.file instanceof File?e.file.name:"upload.bin";(0,r.cY)("webterm.attach.upload.begin",{filename:o,size:e.file.size,type:e.file.type});let i=new FormData;i.append("file",e.file,o),i.append("filename",o);try{let t=await fetch("".concat(n,"/v1/attachments"),{method:"POST",body:i,...e.token?{headers:{authorization:"Bearer ".concat(e.token)}}:{}});if(!t.ok){let e=await t.text().catch(()=>"");return(0,r.cY)("webterm.attach.upload.error",{status:t.status,detail:e.slice(0,200)}),{ok:!1,status:t.status,reason:e||"HTTP ".concat(t.status)}}let o=await t.json();return(0,r.cY)("webterm.attach.upload.ok",{id:o.id,size:o.size}),{ok:!0,meta:o}}catch(t){let e=String(t instanceof Error?t.message:t);return(0,r.cY)("webterm.attach.upload.exception",{reason:e}),{ok:!1,status:0,reason:e}}}async function i(e,t){return Promise.all(e.map(e=>o({baseUrl:t.baseUrl,...void 0!==t.token?{token:t.token}:{},file:e.file,...void 0!==e.filename?{filename:e.filename}:{}})))}},71633:(e,t,n)=>{n.d(t,{u:()=>d});var r=n(55539),o=n(46124),i=n(76573),a=n(57616),s=n(15151),l=n(67327),c=n(72215),u=n(61897);function d(e){let{onAttached:t}=e,{config:n}=(0,s.Q)(),[d,p]=(0,o.useState)(!1),f=(0,o.useRef)(null),h=async e=>{let r=e.target.files;if(e.target.value="",!r||0===r.length)return;if(!n.baseUrl)return void l.oR.error("Daemon URL 미설정 — Settings 에서 입력");p(!0);let o=Array.from(r);(0,c.cY)("webterm.files.pick",{count:o.length,totalBytes:o.reduce((e,t)=>e+t.size,0)});try{let e=await (0,u.K)(o.map(e=>({file:e,filename:e.name})),{baseUrl:n.baseUrl,...n.token?{token:n.token}:{}}),r=e.filter(e=>e.ok),i=e.filter(e=>!e.ok);r.length>0&&(l.oR.success(1===r.length?"\uD83D\uDCCE ".concat(r[0].meta.filename):"\uD83D\uDCCE ".concat(r.length," files attached")),null==t||t(r.map(e=>e.meta))),i.length>0&&l.oR.error(1===i.length?"업로드 실패: ".concat(i[0].reason.slice(0,80)):"".concat(i.length," 파일 업로드 실패"))}finally{p(!1)}};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{type:"button",onClick:()=>{var e;return null==(e=f.current)?void 0:e.click()},disabled:d,"aria-label":"attach files",title:"attach files (Files.app \xb7 iCloud \xb7 multi-select)",className:"rounded p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-50",children:d?(0,r.jsx)(i.A,{className:"h-3.5 w-3.5 animate-spin"}):(0,r.jsx)(a.A,{className:"h-3.5 w-3.5"})}),(0,r.jsx)("input",{ref:f,type:"file",multiple:!0,className:"hidden",onChange:h})]})}},73532:(e,t,n)=>{n.d(t,{g:()=>a,h:()=>s});let r=["coo-admin","release-schedule","release-checklist"],o=/^ {0,3}(`{3,}|~{3,})([^\r\n]*)$/,i=/^ {0,3}(`{3,}|~{3,})[ \t]*$/;function a(e){let t,n=[],a=[],s=0;for(let l of e.matchAll(/[^\r\n]*(?:\r?\n|$)/g)){let c=l[0];if(!c)continue;let u=l.index,d=c.replace(/\r?\n$/,"");if(!t){let e=o.exec(d);e&&!("`"===e[1][0]&&e[2].includes("`"))&&(t={marker:e[1],start:u,bodyStart:u+c.length,isCard:/^elanous-card[ \t]*$/.test(e[2])});continue}let p=i.exec(d);if(p&&p[1][0]===t.marker[0]&&!(p[1].length<t.marker.length)){if(t.isCard)try{let o=JSON.parse(e.slice(t.bodyStart,u));!(null===o||"object"!=typeof o||Array.isArray(o))&&"string"==typeof o.kind&&r.includes(o.kind)&&Array.isArray(o.items)&&o.items.every(e=>!(null===e||"object"!=typeof e||Array.isArray(e))&&"string"==typeof e.title&&(null===e.due||"string"==typeof e.due&&/^\d{4}-\d{2}-\d{2}$/.test(e.due))&&(null===e.daysLeft||"number"==typeof e.daysLeft&&Number.isFinite(e.daysLeft))&&"string"==typeof e.state&&"string"==typeof e.owner&&(void 0===e.url||"string"==typeof e.url))&&(n.push(o),a.push(e.slice(s,t.start)),s=u+c.length)}catch(e){}t=void 0}}return a.push(e.slice(s)),{text:a.join(""),cards:n}}function s(e){let t=[],n=(e,r)=>{if("string"==typeof e)return void t.push(e);if(!(r>2)&&null!==e&&"object"==typeof e){if(Array.isArray(e)){for(let t of e)n(t,r+1);return}for(let t of["output","text","content","result"])t in e&&n(e[t],r+1)}};return n(e,0),t.flatMap(e=>a(e).cards).map(e=>"```elanous-card\n"+JSON.stringify(e)+"\n```\n").join("")}},81969:(e,t,n)=>{n.d(t,{t:()=>d});let r=/\brun-([0-9a-f]{8})-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,o=/(?:\/(?:Users|home|private)\/[\w.%@+~/-]+|\b[A-Za-z]:\\(?:[^\\\s,;<>"']+\\)*[^\\\s,;<>"']+)/g,i=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,a=RegExp("(?<![A-Za-z0-9_-])(?:[A-Za-z0-9_]{40,}|(?:sk|ghp|gho|ghs|github_pat|xox[abpr])[-_][A-Za-z0-9_-]{20,})(?![A-Za-z0-9_-])","g"),s=/\b(?:OP|MK|TC|UX)\b/g,l=/\bmsb(\d+)\b/gi,c=/(?:\u{1F451}|🪑|🅞|🅜|🅣|🅤|🅢|🅕)\uFE0F?/gu,u={OP:"COO",MK:"CMO",TC:"CTO",UX:"CXO"};function d(e){let t,n=e;do t=n,n=n.replace(r,(e,t)=>"run-".concat(t.slice(0,6))).replace(o,"").replace(i,"").replace(c,"").replace(a,"").replace(s,e=>u[e]).replace(l,(e,t)=>"remote-".concat(t));while(n!==t&&function(e){return[r,o,i,a,s,c,l].flatMap(t=>[...e.matchAll(t)].map(e=>e[0]))}(n).length>0);return n}}}]);
|