elanous 0.2.9 → 0.2.10
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/2DsiDfDCks44g1cPUMhiW/_buildManifest.js +1 -0
- package/apps/pwa/out/_next/static/chunks/24-e6d28380efab7faf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3615-740dd270764ffa24.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3734-1015fe991eb9b7e7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5012-a7fe6f3c8b6fe45a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5783-ef40ebfc91d55230.js +1 -0
- package/apps/pwa/out/_next/static/chunks/62-ff227c3edb8b248b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7633-1b3709b0854c9412.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7951-8b03dbb10b24cd06.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8067-87ce253ec2f23697.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5080-1613752891fcadb4.js → 8195-6fde3d7a39859206.js} +5 -5
- package/apps/pwa/out/_next/static/chunks/8894-b5fb36bab837cd29.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9454-84d0d5d77446bd92.js +1 -0
- package/apps/pwa/out/_next/static/chunks/988-5f92e7ab7ccea3dd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9989-5582582f06429840.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-d2253d7e58ef1890.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-5441d4a9ab35e518.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-d9b12d680922d980.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-f972fc1c00a62e88.js → page-54b32bd27726588d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-e268d6d145827a22.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-f8116559c7424da7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-1085399fd0f32112.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-1df686a14f65895a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-54e1f966ab60a4dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/{page-973996d584f008c1.js → page-7ed95f296f5ee8e9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-11edac668d77e5c3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-59e2b9a22cd5a6d5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-2976df21ad74ab48.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-34d211a67f16d510.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-8ff652d5d950639b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/{page-8b0402a46a749a3d.js → page-b31610deda76337b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-037f83e2a1edc8e2.js → page-6cb0e1bbefe5fb3d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-a286a152cf584576.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-d9237581e7003bcb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-83274e761643fdd2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-ceee6cfb1d4e6d68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-9c9f8bb3e4a64091.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-c17217603ea3426a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-efb6177cbf1e8a51.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-d307523703bc4df3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-462f4e4bab45ce7d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-8990e96f33af3837.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/{page-0df30e0c7e50148a.js → page-e168fa1030af0548.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-1233e05a4068bc9c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-13a1840b1fac337a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-64a29fc80b11ab55.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-68e787339a16b3dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-4fddc90b23feb215.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-886ba8260dc79c79.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-0f26507a1722e40b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-109d4ccd42259c9d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-f5c2a4e510726774.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-b2e0039416f42522.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/{page-90670589b87abea8.js → page-26102fd7350f171e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-708948bc8a802794.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-5e5611620f78fb0b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/{page-35bedde6d885f08f.js → page-139ba5c367bbf60a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/main-app-202b4e81f33895ea.js +1 -0
- package/apps/pwa/out/_next/static/css/43feca5fd387dcbd.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/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/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +14 -14
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +14 -14
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +14 -14
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +14 -14
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +14 -14
- package/apps/pwa/out/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/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 -0
- package/apps/pwa/out/ops/seats/index.txt +30 -0
- 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 -0
- package/apps/pwa/out/today/index.txt +33 -0
- 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/field/field-feed.yaml +2 -0
- package/graphs/implement-loop.yaml +1 -1
- package/package.json +1 -1
- package/plugins/card-followup/graphs/run-step.ts +48 -13
- package/plugins/doc-draft/graphs/doc-draft.yaml +3 -3
- package/plugins/doc-draft/graphs/run-step.ts +13 -6
- package/scripts/ci-pwa-build-gate.ts +160 -0
- package/scripts/coord-channel-watch.sh +42 -8
- package/scripts/coord-digest.ts +199 -0
- package/scripts/coord-post.sh +60 -3
- package/scripts/install.ps1 +68 -9
- package/scripts/install.sh +39 -12
- package/scripts/lib/pwa-scenarios/scenarios.ts +20 -0
- package/scripts/lib/tui-regress-checks.ts +146 -0
- package/scripts/memory-lifecycle-cycle.ts +2 -2
- package/scripts/ops-now-probe.ts +327 -0
- package/scripts/publish-internal-dist.ts +11 -1
- package/scripts/release-loop/cutoff.ts +19 -8
- package/scripts/release-loop/ops-upgrade-node.ts +72 -16
- package/scripts/release-loop/release-readiness.ts +9 -0
- package/scripts/release-loop/version-node.ts +58 -10
- package/scripts/repo-watch-cycle.ts +1 -1
- package/scripts/retro-cycle.ts +2 -2
- package/scripts/schedule-health-report.ts +1 -1
- package/scripts/storyboard/storyboard.ts +5 -161
- package/scripts/test-diet/lib.ts +30 -1
- package/scripts/test-diet/node.ts +82 -7
- package/scripts/test-timeout-audit.ts +114 -0
- package/scripts/tree-sync-alert.ts +1 -1
- package/scripts/tui-regress.ts +71 -0
- package/scripts/waitlist-daily-digest.ts +1 -1
- package/skills/explainer-video/SKILL.md +4 -0
- package/skills/explainer-video/engine/reel.mjs +18 -13
- package/skills/explainer-video/engine/reel.sh +24 -5
- package/skills/explainer-video/engine/stitch.mjs +145 -0
- package/skills/pitch-deck/SKILL.md +36 -0
- package/skills/pitch-deck/template.html +80 -0
- package/src/acp/codex-approval-adapter.ts +9 -3
- package/src/acp/core-turn-bridge.ts +117 -18
- package/src/acp/fact-question.ts +11 -0
- package/src/acp/server.ts +48 -7
- package/src/acp/tool-approval.ts +126 -0
- package/src/acp/turn-runner.ts +36 -0
- package/src/agent/monad-agent-turn.ts +8 -0
- package/src/ask-user-question/pending-questions.ts +25 -10
- package/src/ask-user-question/types.ts +9 -0
- package/src/auth/setup-link-tokens.ts +16 -5
- package/src/autopilot/build/integrity-gate.ts +12 -0
- package/src/boot/daemon-prompt-turn.ts +3 -0
- package/src/boot/daemon-tools/index.ts +8 -0
- package/src/boot/daemon-tools/types.ts +2 -0
- package/src/boot/daemon-tools/web-search.ts +1 -0
- package/src/chat/ctrl-c-in-input.ts +14 -0
- package/src/chat/index.ts +52 -0
- package/src/chat/pickers/state.ts +6 -2
- package/src/cli/agent-cli.ts +7 -0
- package/src/cli/decisions-cli.ts +25 -3
- package/src/cli/doctor-bundle-upload.ts +68 -0
- package/src/cli/doctor-cli.ts +38 -4
- package/src/cli/ops-cli.ts +20 -0
- package/src/cli/pod-cli.ts +49 -0
- package/src/cli/pr-cli.ts +31 -2
- package/src/cli/pwa-stop.ts +163 -13
- package/src/cli/pwa-test.ts +3 -0
- package/src/cli/release-cli.ts +63 -20
- package/src/cli/self-update.ts +14 -0
- package/src/cli/storyboard-cli.ts +37 -0
- package/src/cli/test-state-dir-flag.ts +11 -4
- package/src/connectors/linear.ts +146 -0
- package/src/context-bus/coord-events.ts +115 -0
- package/src/dashboard/dashboard-boot-fixture.ts +23 -0
- package/src/dashboard/index.ts +58 -21
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +7 -0
- package/src/dashboard/slash-runtime/help-from-registry.ts +43 -28
- package/src/decisions/decision-cards.ts +49 -1
- package/src/decisions/decision-ledger.ts +75 -4
- package/src/decisions/decision-linear-projection.ts +157 -0
- package/src/decisions/web-push-decision-cards.ts +50 -0
- package/src/directive/interpretation-card.ts +36 -0
- package/src/discord.ts +2 -1
- package/src/domains/coo-admin-tool.ts +62 -0
- package/src/domains/core-tools.ts +11 -3
- package/src/domains/elanous-card.ts +29 -0
- package/src/domains/ops-facts-tool.ts +76 -0
- package/src/domains/outbound-alert.ts +41 -13
- package/src/domains/release-tool.ts +168 -0
- package/src/domains/telegram-kind-route.ts +19 -1
- package/src/exec-requests/planner.ts +98 -28
- package/src/exec-requests/runner.ts +107 -10
- package/src/exec-requests/store.ts +8 -2
- package/src/field/field-media.ts +10 -7
- package/src/field/field-reel.ts +14 -4
- package/src/git-fs/worktree.ts +45 -6
- package/src/graph-runner/graph-approval-card.ts +113 -0
- package/src/graph-runner/graph-cli.ts +129 -4
- package/src/graph-runner/graph-notify.ts +25 -3
- package/src/graph-runner/runner.ts +142 -16
- package/src/harness/browser-verify.ts +25 -2
- package/src/harness/harness-cli-command.ts +231 -35
- package/src/harness/harness-incidents-writer.fixture.ts +24 -0
- package/src/harness/harness-incidents.ts +129 -0
- package/src/harness/harness-stop.ts +53 -3
- package/src/hitl/clarification-policy.ts +3 -1
- package/src/index.ts +156 -37
- package/src/intake-plane/author-goals.ts +37 -4
- package/src/intake-plane/check.ts +3 -0
- package/src/intake-plane/discord-seat-work.ts +47 -2
- package/src/intake-plane/seat-doc-route.ts +170 -6
- package/src/intake-plane/telegram-seat-work.ts +44 -2
- package/src/intake-plane/telegram-work.ts +1 -0
- package/src/maturity/cli-maturity.ts +34 -0
- package/src/maturity/feature-maturity.ts +98 -1
- package/src/maturity/tui-slash-maturity.ts +31 -0
- package/src/memory.ts +32 -4
- package/src/nexus/api/exec-requests.ts +33 -3
- package/src/nexus/api/http-server.ts +53 -1
- package/src/nexus/api/meta-api.ts +11 -0
- package/src/nexus/api/ops-api.ts +10 -1
- package/src/nexus/api/ops-seats-sources.ts +37 -7
- package/src/nexus/api/ops-seats.ts +16 -6
- package/src/nexus/api/seat-requests.ts +88 -8
- package/src/nexus/api/sessions-store.ts +63 -0
- package/src/nexus/api/setup-codex-login.ts +160 -0
- package/src/nexus/api/usage-api.ts +102 -0
- package/src/nexus/index.ts +45 -4
- package/src/onboarding/first-run.ts +89 -0
- package/src/onboarding/lan-address.ts +45 -0
- package/src/onboarding/web-first.ts +119 -24
- package/src/onboarding.ts +4 -0
- package/src/ops-now/ops-now-refresh.ts +100 -0
- package/src/project/project-store.ts +115 -0
- package/src/release-loop/checklist.ts +78 -4
- package/src/release-loop/feature-store.ts +154 -21
- package/src/release-loop/release-schedule.ts +53 -0
- package/src/repl/index.ts +7 -0
- package/src/seat-dispatch/ceo-commands.ts +41 -8
- package/src/seat-dispatch/ceo-intent.ts +38 -0
- package/src/seat-loop/seat-loop.ts +231 -0
- package/src/seat-loop/seat-report.ts +64 -0
- package/src/self-dev/decompose.ts +66 -11
- package/src/self-dev/run-store.ts +10 -1
- package/src/self-implement/execution-clarification.ts +115 -0
- package/src/self-implement/gate-cli.ts +6 -3
- package/src/self-implement/orchestrator.ts +37 -3
- package/src/self-implement/pipeline-shape.ts +1 -1
- package/src/self-implement/run-status-mapping.ts +5 -3
- package/src/session/chat.ts +2 -0
- package/src/session/index.ts +9 -0
- package/src/shell-env-bootstrap.ts +17 -0
- package/src/steward/directive.ts +51 -2
- package/src/steward/launch.ts +250 -0
- package/src/steward/outcome-notify.ts +115 -0
- package/src/steward/steward-cards.ts +8 -2
- package/src/steward/triage-plan.ts +32 -4
- package/src/steward/triage.ts +93 -9
- package/src/steward/working-backwards.ts +64 -0
- package/src/storyboard/storyboard.ts +141 -0
- package/src/task-cards/card-store.ts +2 -2
- package/src/task-orchestrator/surfaces/pod-lease.ts +260 -0
- package/src/telegram-card-followup.ts +233 -0
- package/src/telegram-report.ts +15 -9
- package/src/telegram-run.ts +7 -0
- package/src/telegram.ts +29 -8
- package/src/tool-runtime/types.ts +4 -0
- package/src/tui-client/dashboard-session.ts +2 -0
- package/src/user-config.ts +118 -11
- package/src/version/packed-revision.json +1 -1
- package/src/web-push/notify-exec-request.ts +32 -0
- package/apps/pwa/out/_next/static/bFI5EEwg7T6aG88ibX4Zq/_buildManifest.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1201-09613bce624467c0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2929-617f1e66a55be184.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3441-a1dd4acfeda14488.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6090-85a3f05f954e5697.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6284-69db415193d5f8bd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6416-505ba707cacafbba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7032-f4ef698518fba61c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8067-d976b441a104ab74.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8519-5632377cce994f86.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8630-cdfc61e82c653ffc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8894-e263b332208e3957.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9454-139040d37c79dbc9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9740-8f5ff96c522b5f55.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-fb7c2d458f32fcad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-35e2713597dd24d1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-918b656f064577ba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-5f30e00693527ebd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-7fbae173b3c103a7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-3b4edcce364062ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-c5794f484c251f44.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-1130d8eefcd87e76.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-016e2bda04eecb1f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-b4d6d9a3b56f2940.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-ec49a466121233ba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-f72db356744ceade.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-a6fd9b50d1b85378.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-adfbd2ba9598e59a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-46fedff57d4bec67.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-0cf318e9dcee2bbf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-899b327cb8b6845c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-6c1e6ba743a29dfe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-1a8e4807292f6b17.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-28deba6bcb834916.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-de68e2205794037d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-c71c33a573230672.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-4fc56790fe0d2682.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-59df2aebb38a7c1e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-4647be5dbcbd0795.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-e025892bda74b743.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-a0955de73b89f078.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-369846d2921af584.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-72cbc1c8cdd0f65d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-77b28bfb0996d5ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-3220c4934f49c6c2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-7df9243ed021a4cc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-4498c3853f4f688d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-6870f30ea99f8346.js +0 -1
- package/apps/pwa/out/_next/static/css/f92f63a5df0ba229.css +0 -1
- package/src/dashboard/turn-typeahead-echo.ts +0 -23
- /package/apps/pwa/out/_next/static/{bFI5EEwg7T6aG88ibX4Zq → 2DsiDfDCks44g1cPUMhiW}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[24],{12775:(e,t,n)=>{n.d(t,{K:()=>r}),n(91269);let r={emit:async function(e){return{ok:!1,reason:"not-configured"}}}},26692:(e,t,n)=>{n.d(t,{Si:()=>a,cK:()=>i});var r=n(91269),o=n(51215);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])}},26916:(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("")}},31113:(e,t,n)=>{n.d(t,{u:()=>d});var r=n(41121),o=n(91269),i=n(50940),a=n(48347),s=n(38519),l=n(66062),c=n(51215),u=n(73313);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})]})}},33628:(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"}},47940:(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),"일 전")}},64323:(e,t,n)=>{n.d(t,{bK:()=>B,Ju:()=>L,yN:()=>Q,Wl:()=>_,FM:()=>G,uS:()=>R,$Q:()=>ee,tw:()=>X,ki:()=>z,ZH:()=>er,py:()=>en,lY:()=>et,HD:()=>Z,er:()=>j});var r=n(26916),o=n(33628),i=n(84606),a=n(27813),s=n(51215),l=n(23934),c=n(11116),u=n(59836);let d={codex:"balanced",luna:"budget",terra:"better",sol:"best",sonnet:"better",opus:"best",grok:"better"},p=[...u.Ql,...Object.keys(d)].join(" \xb7 "),f=["low","medium","high"];function h(e,t){if("model"===e){if(!t.length)return{kind:"model"};let e=t[0].toLowerCase(),n=(0,u.mp)(e)?e:Object.hasOwn(d,e)?d[e]:void 0;return 1===t.length&&n?{kind:"model",tier:n}:{kind:"model",invalid:!0}}return"reasoning"===e?t.length?1===t.length&&f.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 m(e){try{return(await e.client.fetchJson("/v1/setup/llm-providers")).activeProvider||e.provider}catch(t){return e.provider}}async function g(e,t){var n,r,o,i,a,s,l;if("model"===e.kind){if(e.invalid)return"쓸 수 있는 값: ".concat(p);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,u.f7)(await m(t),e).model," \xb7 쓸 수 있는 값: ").concat(p):"현재 모델: 확인할 수 없음 \xb7 쓸 수 있는 값: ".concat(p)}if(!(null==(n=t.daemon)?void 0:n.baseUrl)||"synced"!==await (0,c.tM)(t.daemon,e.tier))return"모델 설정을 저장하지 못했습니다 — 데몬 연결을 확인하세요";let o=await m(t);return"모델: ".concat((0,u.f7)(o,e.tier).model,"(으)로 바꿨습니다")}if("reasoning"===e.kind){if(e.invalid)return"쓸 수 있는 값: ".concat(f.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,u.f7)(await m(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 y=n(82443),v=n(47940);let k="쓰는 법: /resume <id 앞자리> (4자 이상)",b="대화 목록을 못 읽었습니다",w="elanous-session-";function x(e){return e.startsWith(w)?e.slice(w.length):e}function I(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 A(e,t){let n=x(e),r=n.toLowerCase(),o=8;for(let n of t){if(n.id===e)continue;let t=x(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 S(e,t){if("resume"===e.kind&&!e.prefix)return{text:k};try{let n=await new v.jU(t.client).list();if(!n.ok||!Array.isArray(n.sessions))return{text:b};let r=n.sessions.map(y.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(A(n.id,e)).concat(n.id===t?" (지금)":""," \xb7 ").concat(n.msgCount,"개 \xb7 ").concat((0,v.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=x(e).toLowerCase();if(r.length<4)return{text:k};let o=t.filter(e=>x(e.id).toLowerCase().startsWith(r));if(0===o.length)return{text:"그런 대화가 없습니다 — /sessions 로 목록"};if(o.length>1)return{text:"".concat(o.map(e=>A(e.id,t)).join(" \xb7 "),"\n더 길게 쳐 주세요")};let i=o[0].id;return i===n?{text:"이미 이 대화입니다"}:{newSessionId:i,text:"".concat(A(i,t)," 대화로 옮겼습니다")}}(e.prefix,r,t.sessionId)}catch(e){return{text:b}}}let T=/^https?:\/\/[^\s"']+\.(png|jpe?g|webp|gif)(\?[^\s"']*)?$/i,C=/https?:\/\/[^\s"'<>)\]]+?\.(?:png|jpe?g|webp|gif)(?:\?[^\s"'<>)\]]*)?/gi;function E(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 R(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&&T.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:E(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(C)){let r=e[0];t.has(r)||(t.add(r),n.push({src:r,mediaType:E(r)}))}return n}let M=new Map,P=new Set,D=[],U=!1;function _(){return U&&(D=Array.from(M.values()).sort((e,t)=>{var n,r;return(null!=(n=e.priority)?n:50)-(null!=(r=t.priority)?r:50)}),U=!1),D}function j(e){return P.add(e),()=>{P.delete(e)}}function N(e){return"hud.segment"===e.kind&&("applied"===(0,o.VQ)(M,e)&&function(){for(let e of(U=!0,P))try{e()}catch(e){(0,s.cY)("chat-runtime.hud.subscriber-error",e)}}(),!0)}function L(e){N(e)}let Y=/^\[elanous\/feedback\/[a-zA-Z]+\] /;function z(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 O(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 F="예산 상태를 읽지 못했습니다",B=[{name:"help",description:"이 도움말 보기"},{name:"session",description:"현재 세션 ID 보기"},{name:"fork",description:"새 세션 ID 만들기"},{name:"budget",description:"이번 달 지출과 알림 기준 보기"},{name:"history",description:"최근 N개 로컬 대화 요약 (기본 10개, 역할: 앞 80자)"},{name:"clear",description:"로컬 대화 기록 지우기"},{name:"sessions",description:"최근 대화 목록 보기 (/sessions [N])"},{name:"resume",description:"대화 이어가기 (/resume <id 앞자리>)"},{name:"model",description:"모델 티어 보기\xb7바꾸기 (/model <티어|별칭>)"},{name:"reasoning",description:"추론 단계 보기\xb7설정 안내 (/reasoning <low|medium|high>)"},{name:"provider",description:"프로바이더 보기\xb7바꾸기 (/provider next|use <이름>)"}],W=["help","session","fork","budget","history","clear"],K=["메타 명령(:이름 또는 /이름) (Meta commands):",...B.map(e=>{let{name:t,description:n}=e;return" ".concat(W.includes(t)?":":"/").concat(t.padEnd(16)).concat(n)})].join("\n"),J=new Set(["help","?","resume","clear","cls","status","st","remaining","setup","quit","q","exit","run-skill","rs","run","ad","design","design-check","local","ll","session","sess","fork","rewind","mission","resume-turn","context","ctx","paste","sync","s","plugin","plugins","widget","widgets","log","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"]),q={m:"model",r:"reasoning",think:"reasoning",p:"provider"},$=new Set([...J].filter(e=>!B.some(t=>t.name===e))),H=W.map(e=>"/".concat(e)).join(" "),V={":help":async()=>({text:K}),":session":async(e,t)=>({text:"session = ".concat(t.sessionId)}),":fork":async()=>{let e=(0,a.Zr)();return{text:"forked → new session ".concat(e),newSessionId:e}},":budget":async(e,t)=>{let n=t.daemon;if(!(null==n?void 0:n.baseUrl))return{text:F};let r=await (0,l.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:F}},":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)=>S(I("sessions",e),t),":resume":async(e,t)=>S(I("resume",e),t),":model":async(e,t)=>({text:await g(h("model",e),t)}),":reasoning":async(e,t)=>({text:await g(h("reasoning",e),t)}),":provider":async(e,t)=>({text:await g(h("provider",e),t)})};function G(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 Q(e,t){let n=e.trim();if(!n.startsWith(":")&&!n.startsWith("/"))return null;let[r,...o]=n.split(/\s+/);if(r.startsWith("/")&&!G(e))return null;let i=r.startsWith("/"),a=i?":".concat(r.slice(1)):r,l=i&&Object.hasOwn(q,r.slice(1))?q[r.slice(1)]:r.slice(1),c=":".concat(l),u=!(!i&&":provider"===c&&o.length>0&&"next"!==o[0]&&"use"!==o[0])&&Object.hasOwn(V,c)?V[c]:void 0;if(!u){if(i){let e=$.has(r.slice(1));return(0,s.cY)("webterm.chat.meta-command",{cmd:a,outcome:e?"unsupported-tui":"unknown"}),{text:e?"".concat(r," 은 PWA 채팅에서 아직 안 됩니다 — 지금 되는 명령: ").concat(H):"모르는 명령입니다: ".concat(r," — /help 로 목록 보기")}}return(0,s.cY)("webterm.chat.meta-command",{cmd:a,outcome:"unknown"}),{text:"unknown meta command: ".concat(r)}}return(0,s.cY)("webterm.chat.meta-command",{cmd:a,outcome:"ok"}),u(o,t)}async function Z(e,t){var n,r,i;let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,s.cY)("webterm.chat.runturn.stream.start",{sessionId:t.sessionId,provider:t.provider,len:e.length,contentBlocks:null!=(r=null==(n=a.userContent)?void 0:n.length)?r:0});let l=[],c=-1,u=0,d=0,p=0,f=0,h=()=>l.map(e=>({...e})),m=e=>{(0,s.cY)("webterm.chat.runturn.stream.end",{stopReason:e.stopReason,sessionId:e.sessionId,...void 0!==e.error?{error:e.error}:{},images:u,tools:d,mcpApps:p,feedback:f})},g=await t.client.promptStream({sessionId:t.sessionId||void 0,userText:e,...a.userContent&&a.userContent.length>0?{userContent:a.userContent}:{},provider:t.provider||void 0},{onError:a.onError,onTextDelta:e=>{var t,n;let{full:r}=e;-1===c?(c=l.length,l.push({kind:"text",text:r})):l[c]={kind:"text",text:r},null==(t=a.onPartial)||t.call(a,r),null==(n=a.onPartialBlocks)||n.call(a,h())},onImageBlock:e=>{var t;let{src:n,mediaType:r,alt:o}=e;u+=1,l.push(void 0!==o?{kind:"image",src:n,mediaType:r,alt:o}:{kind:"image",src:n,mediaType:r}),null==(t=a.onPartialBlocks)||t.call(a,h())},onFeedback:e=>{if(!N(e)&&"applied"===(0,o.K4)(l,e)){var t;f+=1,null==(t=a.onPartialBlocks)||t.call(a,h())}},onToolCall:e=>{var t;let{id:n,name:r,args:o}=e;d+=1,l.push({kind:"tool_use",id:n,name:r,status:"running",startedAt:Date.now(),args:o}),null==(t=a.onPartialBlocks)||t.call(a,h())},onToolResult:e=>{var t;let{id:n,name:r,ok:o,summary:i,rawOutput:s,resourceUri:c}=e,u=l.findIndex(e=>"tool_use"===e.kind&&e.id===n),f=o?"done":"error";if(-1===u)d+=1,l.push({kind:"tool_use",id:n,name:r,status:f,startedAt:Date.now(),endedAt:Date.now(),...void 0!==i?{summary:i}:{}});else{let e=l[u];l[u]={...e,status:f,endedAt:Date.now(),...void 0!==i?{summary:i}:{}}}if(z(l,s),"string"==typeof c&&c.trim().length>0){p+=1;let e=O(s,c);l.push({kind:"mcp_app",toolId:n,toolName:r,screenUrl:c,...void 0!==s?{toolResult:s}:{},...e||{},...void 0!==i?{fallbackText:i}:{}})}null==(t=a.onPartialBlocks)||t.call(a,h())},...a.signal?{signal:a.signal}:{},...!0===a.debugTap?{debugTap:!0}:{}}).catch(e=>{var t;throw m({stopReason:(null==(t=a.signal)?void 0:t.aborted)===!0?"aborted":"error",error:e instanceof Error?e.message:String(e)}),e});m({stopReason:g.stopReason,sessionId:g.sessionId}),-1!==c&&g.text&&(l[c]={kind:"text",text:g.text});let y=u>0||d>0||p>0||f>0;return{message:{id:"m-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"assistant",text:null!=(i=g.text)?i:"",timestamp:Date.now(),meta:{provider:t.provider,stopReason:g.stopReason},...y?{blocks:h()}:{}},newSessionId:g.sessionId!==t.sessionId?g.sessionId:void 0}}function X(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 ee(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 et(e,t,n){let r=null,i=[],a=-1,l=0,c=0,u=0,d=0,p=!1,f=()=>{r=null,i.length=0,a=-1,l=0,c=0,u=0,d=0,p=!1},h=()=>i.map(e=>({...e}));return e.subscribeChatEvents(t,{onTurnBegin:e=>{var t;if(f(),null==(t=n.isLocalTurnInFlight)?void 0:t.call(n)){p=!0;return}let o=n.onPlaceholder({sessionId:e.sessionId});if(null===o){p=!0;return}r=o},onTextDelta:e=>{let{full:t}=e;p||null===r||(-1===a?(a=i.length,i.push({kind:"text",text:t})):i[a]={kind:"text",text:t},n.onPartialBlocks(r,h()))},onImageBlock:e=>{let{src:t,mediaType:o,alt:a}=e;p||null===r||(l+=1,i.push(void 0!==a?{kind:"image",src:t,mediaType:o,alt:a}:{kind:"image",src:t,mediaType:o}),n.onPartialBlocks(r,h()))},onFeedback:e=>{N(e)||p||null===r||"applied"===(0,o.K4)(i,e)&&(d+=1,n.onPartialBlocks(r,h()))},onToolCall:e=>{let{id:t,name:o,args:a}=e;p||null===r||(c+=1,i.push({kind:"tool_use",id:t,name:o,status:"running",startedAt:Date.now(),args:a}),n.onPartialBlocks(r,h()))},onToolResult:e=>{let{id:t,name:o,ok:a,summary:s,rawOutput:l,resourceUri:d}=e;if(p||null===r)return;let f=i.findIndex(e=>"tool_use"===e.kind&&e.id===t),m=a?"done":"error";if(-1===f)c+=1,i.push({kind:"tool_use",id:t,name:o,status:m,startedAt:Date.now(),endedAt:Date.now(),...void 0!==s?{summary:s}:{}});else{let e=i[f];i[f]={...e,status:m,endedAt:Date.now(),...void 0!==s?{summary:s}:{}}}if(z(i,l),"string"==typeof d&&d.trim().length>0){u+=1;let e=O(l,d);i.push({kind:"mcp_app",toolId:t,toolName:o,screenUrl:d,...void 0!==l?{toolResult:l}:{},...e||{},...void 0!==s?{fallbackText:s}:{}})}n.onPartialBlocks(r,h())},onTurnEnd:e=>{var o;if(p||null===r){(0,s.cY)("webterm.chat.runturn.observer.end",{sessionId:t,stopReason:e.stopReason,dropped:!0,reason:p?"dropped-turn":"no-placeholder"}),f();return}-1!==a&&e.text&&(i[a]={kind:"text",text:e.text});let m=l>0||c>0||u>0||d>0;(0,s.cY)("webterm.chat.runturn.observer.end",{sessionId:t,stopReason:e.stopReason,dropped:!1,images:l,tools:c,mcpApps:u,feedback:d});let g={id:"m-obs-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"assistant",text:null!=(o=e.text)?o:"",timestamp:Date.now(),meta:{...n.provider?{provider:n.provider}:{},stopReason:e.stopReason},...m?{blocks:h()}:{}};n.onFinalize(r,g),f()},onError:e=>{null!==r&&n.onError&&n.onError(r,e),f()}})}async function en(e,t,n){var r,a;let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},c=n.sessionId;if(!c)throw Error("runChatTurnAcp: sessionId required (daemon handshake first)");let u=[],d=-1,p=0,f=0,h=0,m="",g=-1,y="",v=0,k=0,b=0,w=()=>{if(-1===g)return!1;let e=u[g];return!e.done&&(u[g]={...e,done:!0},!0)},x=()=>u.map(e=>({...e})),I=e.on("sessionUpdate",e=>{var t,n,r,a,s,I,A,S,T,C;let E=e.params;if(!E||E.sessionId!==c)return;let M=E.update;if(M){if("agent_message_chunk"===M.sessionUpdate){let e=M.content;if((null==e?void 0:e.type)==="text"&&"string"==typeof e.text&&e.text.length>0){let r=e.text;m+=r,-1===d?(w(),d=u.length,u.push({kind:"text",text:m})):u[d]={kind:"text",text:m},null==(t=l.onPartial)||t.call(l,m),null==(n=l.onPartialBlocks)||n.call(l,x())}else if((null==e?void 0:e.type)==="image"&&"string"==typeof e.data&&"string"==typeof e.mimeType){p+=1;let t={kind:"image",src:e.data,mediaType:e.mimeType};"string"==typeof e.uri&&(t.alt=e.uri),w(),u.push(t),null==(r=l.onPartialBlocks)||r.call(l,x())}}else if("agent_thought_chunk"===M.sessionUpdate){let e=M.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,i.L)(e)?{method:"emit",payload:e}:null}catch(e){return null}}(e.text);if(t){N(t.payload)||"applied"===(0,o.K4)(u,t.payload)&&(k+=1,null==(s=l.onPartialBlocks)||s.call(l,x()));return}if(Y.test(e.text)){b+=1;return}if(y+=e.text,-1===g)v+=1,g=u.length,u.push({kind:"agent_thinking",blockId:"acp-thought-".concat(c),msg:y,done:!1});else{let e=u[g];u[g]={...e,msg:y}}null==(a=l.onPartialBlocks)||a.call(l,x())}}else if("tool_call"===M.sessionUpdate&&"string"==typeof M.toolCallId)f+=1,u.push({kind:"tool_use",id:M.toolCallId,name:null!=(A=M.title)?A:"",status:"running",startedAt:Date.now(),...M.rawInput?{args:M.rawInput}:{}}),null==(I=l.onPartialBlocks)||I.call(l,x());else if("tool_call_update"===M.sessionUpdate&&"string"==typeof M.toolCallId){let e=u.findIndex(e=>"tool_use"===e.kind&&e.id===M.toolCallId),t="completed"===M.status?"done":"error";if(-1===e)f+=1,u.push({kind:"tool_use",id:M.toolCallId,name:null!=(T=M.title)?T:"",status:t,startedAt:Date.now(),endedAt:Date.now(),...M.title?{summary:M.title}:{}});else{let n=u[e];u[e]={...n,status:t,endedAt:Date.now(),...M.title?{summary:M.title}:{}}}for(let e of(z(u,M.rawOutput),R(M.rawOutput)))u.some(t=>"image"===t.kind&&t.src===e.src)||(p+=1,u.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}(M.rawOutput);if(n){h+=1;let e=O(M.rawOutput,n);u.push({kind:"mcp_app",toolId:M.toolCallId,toolName:null!=(C=M.title)?C:"",screenUrl:n,...void 0!==M.rawOutput?{toolResult:M.rawOutput}:{},...e||{},...M.title?{fallbackText:M.title}:{}})}null==(S=l.onPartialBlocks)||S.call(l,x())}}}),A=()=>{e.send("session/cancel",{sessionId:c}).catch(()=>{})},S=l.signal;if(S){if(S.aborted)throw I(),Error("aborted");S.addEventListener("abort",A,{once:!0})}let T=l.userContent&&l.userContent.length>0?l.userContent:[{type:"text",text:t}];(0,s.cY)("webterm.chat.runturn.acp.start",{sessionId:c,provider:n.provider,len:t.length,blocks:T.length});let C=e=>{(0,s.cY)("webterm.chat.runturn.acp.end",{sessionId:c,stopReason:e.stopReason,...void 0!==e.error?{error:e.error}:{},textLen:m.length,images:p,tools:f,mcpApps:h,thoughts:v,feedbackEnvelopes:b})};try{let t=await e.send("session/prompt",{sessionId:c,prompt:T}),o=null!=(r=null==t?void 0:t.stopReason)?r:"end_turn";w(),C({stopReason:o});let i=p>0||f>0||h>0||v>0||k>0;return{message:{id:"m-acp-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),role:"assistant",text:m,timestamp:Date.now(),meta:{provider:n.provider,stopReason:o},...i?{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{w()&&(null==(a=l.onPartialBlocks)||a.call(l,x())),S&&S.removeEventListener("abort",A),I()}}function er(e,t,n){var r;let o=null!=(r=n.idleFinalizeMs)?r:3e3,i=null,a=[],l=-1,c=0,u=0,d=null,p=()=>{if(null!==i)return!0;let e=n.onPlaceholder({sessionId:t});return null!==e&&(i=e,(0,s.cY)("webterm.chat.acp.foreign-turn.start",{id:e}),!0)},f=e.on("sessionUpdate",e=>{var r,f,h,m;if((null==(r=n.isLocalTurnInFlight)?void 0:r.call(n))||(null==(f=n.isRemoteSseTurnInFlight)?void 0:f.call(n)))return;let g=e.params;if(!g||g.sessionId!==t)return;let y=g.update;if(!y)return;let v=!1;if("agent_message_chunk"===y.sessionUpdate){let e=y.content;if((null==e?void 0:e.type)==="text"&&"string"==typeof e.text&&e.text.length>0){if(!p())return;let t=e.text;if(-1===l)l=a.length,a.push({kind:"text",text:t});else{let e=a[l];a[l]={kind:"text",text:e.text+t}}v=!0}else if((null==e?void 0:e.type)==="image"&&"string"==typeof e.data&&"string"==typeof e.mimeType){if(!p())return;c+=1;let t={kind:"image",src:e.data,mediaType:e.mimeType};"string"==typeof e.uri&&(t.alt=e.uri),a.push(t),v=!0}}else if("tool_call"===y.sessionUpdate&&"string"==typeof y.toolCallId){if(!p())return;u+=1,a.push({kind:"tool_use",id:y.toolCallId,name:null!=(h=y.title)?h:"",status:"running",startedAt:Date.now(),...y.rawInput?{args:y.rawInput}:{}}),v=!0}else if("tool_call_update"===y.sessionUpdate&&"string"==typeof y.toolCallId){if(!p())return;let e=a.findIndex(e=>"tool_use"===e.kind&&e.id===y.toolCallId),t="completed"===y.status?"done":"error";if(-1===e)u+=1,a.push({kind:"tool_use",id:y.toolCallId,name:null!=(m=y.title)?m:"",status:t,startedAt:Date.now(),endedAt:Date.now(),...y.title?{summary:y.title}:{}});else{let n=a[e];a[e]={...n,status:t,endedAt:Date.now(),...y.title?{summary:y.title}:{}}}v=!0}v&&null!==i&&(n.onPartialBlocks(i,a.map(e=>({...e}))),d&&clearTimeout(d),d=setTimeout(()=>{let e=i;if(e&&(0,s.cY)("webterm.chat.acp.foreign-turn.end",{id:e,images:c,tools:u}),d&&(clearTimeout(d),d=null),i=null,a=[],l=-1,c=0,u=0,e&&n.onFinalize)try{n.onFinalize(e)}catch(e){(0,s.cY)("webterm.chat.acp.finalize.error",{reason:String(e)})}},o))});return()=>{f(),d&&(clearTimeout(d),d=null)}}},68158:(e,t,n)=>{n.d(t,{sS:()=>f});var r=n(91269),o=n(51215);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(26692),d=n(75761);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])}}},73313:(e,t,n)=>{n.d(t,{K:()=>i,v:()=>o});var r=n(51215);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}:{}})))}},76161:(e,t,n)=>{n.d(t,{z:()=>g});var r=n(41121),o=n(91269),i=n(50940),a=n(82823),s=n(72754),l=n(67770),c=n(66062),u=n(38519),d=n(51215),p=n(12775);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})}},82443:(e,t,n)=>{n.d(t,{C5:()=>a,hG:()=>c});var r=n(47940),o=n(51215);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}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3615],{3615:(e,t,r)=>{r.d(t,{ChatPanel:()=>eM});var n=r(41121),a=r(91269),s=r(82356),l=r(82823),o=r(73139),i=r(28353),c=r(36715),u=r(38519),d=r(96811),h=r(19206);function m(e){let{queue:t,onRemove:r,onClear:a}=e;return 0===t.length?null:(0,n.jsxs)("div",{className:"flex shrink-0 flex-wrap items-center gap-1.5 border-t border-border bg-background px-3 py-2","aria-label":"보낼 차례",children:[t.map((e,t)=>(0,n.jsxs)("span",{className:"inline-flex max-w-full items-center gap-1 rounded-full border border-border bg-muted px-2 py-1 text-xs",children:[(0,n.jsxs)("span",{className:"max-w-[160px] truncate",title:e.text,children:[t+1," \xb7 ",Array.from(e.text).slice(0,20).join("")]}),(0,n.jsx)("button",{type:"button",onClick:()=>r(e.id),"aria-label":"".concat(t+1,"번 지우기"),className:"rounded-full px-1 hover:bg-background",children:"\xd7"})]},e.id)),(0,n.jsx)("button",{type:"button",onClick:a,className:"rounded px-2 py-1 text-xs text-muted-foreground hover:bg-muted",children:"모두 지우기"})]})}function p(e){let t={files:[],tooLarge:0,tooMany:0};for(let r of e)r.file.size>0x1400000?t.tooLarge+=1:t.files.length>=10?t.tooMany+=1:t.files.push(r);return t}function f(e){return!!(e&&Array.from(e.types).includes("Files"))}function g(){return(0,n.jsx)("div",{role:"status","aria-label":"여기에 놓으면 첨부","data-elanous-chat-drop-overlay":"",className:"pointer-events-none absolute inset-0 z-30 flex items-center justify-center bg-background/80 backdrop-blur-sm",children:(0,n.jsxs)("div",{className:"mx-4 rounded-2xl border-2 border-dashed border-primary/60 bg-card/90 px-8 py-6 text-center shadow-lg",children:[(0,n.jsx)("p",{className:"text-lg font-semibold text-foreground",children:"여기에 놓으면 첨부"}),(0,n.jsxs)("p",{className:"mt-2 text-sm text-muted-foreground",children:["파일 ",10,"개까지 \xb7 큰 파일은 빠집니다"]})]})})}function x(e,t,r){if("drop"===t||"end"===t||!r)return{visible:!1,depth:0};let n="enter"===t?e.depth+1:Math.max(0,e.depth-1);return{visible:n>0,depth:n}}var b=r(68355),v=r(82157),y=r(64323);function j(e){let{segmentKey:t,value:r,glyph:a}=e,s=function(e){var t;let r=/(\d{1,3})\s*%/.exec(e);if(!r)return null;let n=Number.parseInt(null!=(t=r[1])?t:"",10);return Number.isFinite(n)?Math.max(0,Math.min(100,n)):null}(r);if(null===s)return(0,n.jsxs)("span",{"data-elanous-hud-key":t,"data-elanous-hud-gauge":"false",className:"inline-flex items-center gap-1 font-mono text-[11px] text-muted-foreground",children:[a?(0,n.jsx)("span",{"aria-hidden":"true",children:a}):null,(0,n.jsx)("span",{children:r})]});let{bar:l,text:o}=s>=80?{bar:"bg-pink-400",text:"text-pink-300"}:s>=60?{bar:"bg-amber-400",text:"text-amber-300"}:{bar:"bg-emerald-500",text:"text-emerald-300"};return(0,n.jsxs)("span",{"data-elanous-hud-key":t,"data-elanous-hud-gauge":"true","data-elanous-hud-percent":String(s),className:"inline-flex items-center gap-1.5 font-mono text-[11px]",children:[a?(0,n.jsx)("span",{"aria-hidden":"true",className:"text-muted-foreground",children:a}):null,(0,n.jsx)("span",{role:"progressbar","aria-valuenow":s,"aria-valuemin":0,"aria-valuemax":100,"aria-label":"".concat(t," ").concat(s,"%"),className:"relative h-2 w-20 overflow-hidden rounded bg-muted/30",children:(0,n.jsx)("span",{"aria-hidden":"true",style:{width:"".concat(s,"%")},className:(0,v.cn)("block h-full",l)})}),(0,n.jsx)("span",{className:(0,v.cn)("tabular-nums",o),children:r})]})}let w=new Set(["variant","workspace","model","token-gauge","ctx","agent-activity","agents"]),k=new Set(["token-gauge","ctx"]),N={normal:"text-foreground",warn:"text-amber-300",danger:"text-pink-300",success:"text-emerald-300",info:"text-sky-300",muted:"text-muted-foreground"};function S(e){var t,r;let{segment:a}=e;if(k.has(a.key))return(0,n.jsx)(j,{segmentKey:a.key,value:a.value,...void 0!==a.glyph?{glyph:a.glyph}:{}});let s=a.tone?N[a.tone]:N.normal;return(0,n.jsxs)("span",{"data-elanous-hud-key":a.key,"data-elanous-hud-tone":null!=(t=a.tone)?t:"normal","data-elanous-hud-priority":String(null!=(r=a.priority)?r:50),className:(0,v.cn)("inline-flex items-center gap-1 font-mono text-[11px]",s),children:[a.glyph?(0,n.jsx)("span",{"aria-hidden":"true",children:a.glyph}):null,(0,n.jsx)("span",{children:a.value})]})}function C(e){let{segments:t,row:r,className:a}=e;return 0===t.length?null:(0,n.jsx)("div",{"data-elanous-hud-row":r,className:(0,v.cn)("flex flex-wrap items-center gap-x-3 gap-y-1",a),children:t.map((e,t)=>(0,n.jsxs)("span",{className:"flex items-center gap-x-3",children:[t>0?(0,n.jsx)("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"\xb7"}):null,(0,n.jsx)(S,{segment:e})]},e.key))})}function I(e){let{segments:t}=e;if(0===t.length)return null;let{top:r,bottom:a}=function(e){let t=[],r=[];for(let n of e)w.has(n.key)?t.push(n):r.push(n);return{top:t,bottom:r}}(t);return(0,n.jsxs)("div",{"data-elanous-hud":"strip",role:"status","aria-label":"HUD status",className:"flex flex-col gap-0.5 border-b border-border/40 bg-muted/10 px-3 py-1.5",children:[(0,n.jsx)(C,{segments:r,row:"top"}),(0,n.jsx)(C,{segments:a,row:"bottom",className:"hidden sm:flex"})]})}let A=[];function R(){return A}function E(){let e=(0,a.useSyncExternalStore)(y.er,y.Wl,R);return(0,n.jsx)(I,{segments:e})}function q(e,t){if("string"!=typeof e)return t;let r=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-](\d{2}):(\d{2}))$/.exec(e);if(!r)return t;let[,n,a,s,l,o,i,c,u]=r,d=Number(n),h=Number(a),m=Number(s),p=[31,d%4==0&&(d%100!=0||d%400==0)?29:28,31,30,31,30,31,31,30,31,30,31][h-1];if(m<1||void 0===p||m>p||Number(l)>23||Number(o)>59||Number(i)>59||void 0!==c&&(Number(c)>23||Number(u)>59))return t;let f=Date.parse(e);return Number.isFinite(f)?f:t}var D=r(56178),T=r(38869),L=r(25194);let M=(0,r(89117).A)("hand",[["path",{d:"M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2",key:"1fvzgz"}],["path",{d:"M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2",key:"1kc0my"}],["path",{d:"M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8",key:"10h0bg"}],["path",{d:"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15",key:"1s1gnw"}]]);var U=r(50940),O=r(67089),F=r(41657),_=r(8979);let Y={idle:"음성 대기",connecting:"데몬 연결 중…",listening:"듣는 중",processing:"생각 중…",speaking:"말하는 중",error:"음성 오류"},P={idle:"마이크를 켜서 대화를 시작하세요.",connecting:"잠시만 기다려주세요.",listening:"문장이 끝나면 자동으로 전송됩니다.",processing:"서버가 응답을 생성하는 중입니다.",speaking:"음성 응답을 재생하는 중입니다.",error:"아래 메시지를 확인하고 다시 시도하세요."},z={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 J(e){let{active:t,phase:r,errorMsg:a,onToggle:s,ttsSupported:i=!1,ttsMuted:c=!1,onTtsToggle:u,onInterrupt:d}=e,h="speaking"===r&&"function"==typeof d;return(0,n.jsxs)("div",{"data-elanous-voice-overlay":!0,"aria-hidden":!t,className:(0,v.cn)("pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300",t?"pointer-events-auto opacity-100":"opacity-0"),children:[(0,n.jsx)("div",{className:"absolute inset-0 bg-background/60 backdrop-blur-md"}),(0,n.jsxs)("div",{className:"relative mx-4 flex w-full max-w-sm flex-col items-center gap-5 rounded-xl border border-border bg-card px-6 py-7 text-center shadow-xl",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 text-sm",children:[(0,n.jsx)("span",{className:(0,v.cn)("h-2.5 w-2.5 rounded-full",z[r],("listening"===r||"speaking"===r||"connecting"===r)&&"animate-pulse"),"aria-hidden":!0}),(0,n.jsx)("span",{className:"font-medium tracking-wide",children:Y[r]})]}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:P[r]}),(0,n.jsx)("button",{type:"button",onClick:h?d:s,"data-elanous-action":h?"voice-overlay-interrupt":"voice-overlay-toggle",className:(0,v.cn)("inline-flex h-16 w-16 items-center justify-center rounded-full text-white transition-colors",h?"bg-amber-500 hover:bg-amber-400 animate-pulse":"connecting"===r||"processing"===r?"bg-sky-500 hover:bg-sky-400":"error"===r?"bg-rose-600 hover:bg-rose-500":"bg-rose-500 hover:bg-rose-400"),"aria-label":h?"끼어들기":"마이크 끄기",children:h?(0,n.jsx)(M,{className:"h-7 w-7"}):"connecting"===r||"processing"===r?(0,n.jsx)(U.A,{className:"h-7 w-7 animate-spin"}):"error"===r?(0,n.jsx)(O.A,{className:"h-7 w-7"}):(0,n.jsx)(l.A,{className:"h-7 w-7"})}),a&&(0,n.jsx)("p",{className:"max-w-xs text-xs text-rose-500",children:a}),(0,n.jsxs)("div",{className:"flex items-center gap-4",children:[i&&u&&(0,n.jsxs)("button",{type:"button",onClick:u,"data-elanous-action":"voice-overlay-tts-toggle",className:"inline-flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground","aria-label":c?"음성 응답 켜기":"음성 응답 끄기","aria-pressed":!c,children:[c?(0,n.jsx)(F.A,{className:"h-3.5 w-3.5"}):(0,n.jsx)(_.A,{className:"h-3.5 w-3.5"}),(0,n.jsx)("span",{children:c?"음성 응답 OFF":"음성 응답 ON"})]}),(0,n.jsxs)("button",{type:"button",onClick:s,className:"inline-flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground","aria-label":"음성 닫고 텍스트로 돌아가기",children:[(0,n.jsx)(o.A,{className:"h-3.5 w-3.5"}),(0,n.jsx)("span",{children:"음성 끄기"})]})]})]})]})}function $(e){let{open:t,onClose:r,lines:s}=e,[l,o]=(0,a.useState)(""),i=(0,a.useMemo)(()=>{if(!l.trim())return null;try{return RegExp(l,"i")}catch(e){return null}},[l]),c=(0,a.useMemo)(()=>l.trim().toLowerCase(),[l]),u=(0,a.useMemo)(()=>{let e=s.length>200?s.slice(s.length-200):s;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},[s,i,c]);return(0,n.jsx)("div",{"data-elanous-debug-tap-drawer":t?"open":"closed",className:(0,v.cn)("fixed bottom-0 left-0 right-0 z-50 transition-transform duration-200 ease-out","pointer-events-none",t?"translate-y-0":"translate-y-full"),role:"region","aria-label":"Debug Tap Drawer","aria-hidden":!t,children:(0,n.jsxs)("div",{className:(0,v.cn)("pointer-events-auto mx-auto flex max-h-[60vh] w-full max-w-[1100px] flex-col","rounded-t-md border border-b-0 border-border bg-card shadow-xl"),children:[(0,n.jsxs)("header",{className:"flex items-center justify-between gap-2 border-b border-border/60 px-3 py-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:"Debug Tap"}),(0,n.jsxs)("span",{className:"text-[10px] text-muted-foreground/70","data-elanous-debug-tap-count":u.length,"data-elanous-debug-tap-total":s.length,children:[u.length,"/",s.length]})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("input",{type:"text",placeholder:"regex filter…",value:l,onChange:e=>o(e.target.value),spellCheck:!1,autoComplete:"off",className:(0,v.cn)("w-40 rounded border border-border bg-background px-2 py-1 text-[11px] font-mono","focus:outline-none focus:ring-1 focus:ring-primary"),"data-elanous-debug-tap-filter":"","aria-label":"Filter debug lines"}),(0,n.jsx)("button",{type:"button",onClick:r,className:"rounded px-2 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground","aria-label":"Close debug drawer","data-elanous-debug-tap-close":"",children:"✕"})]})]}),(0,n.jsx)("ul",{className:"flex-1 overflow-y-auto px-3 py-2 text-[11px] font-mono","data-elanous-debug-tap-list":"",children:0===u.length?(0,n.jsx)("li",{className:"italic text-muted-foreground/60",children:0===s.length?"(no debug lines yet)":"(no matches for filter)"}):u.map((e,t)=>(0,n.jsx)(Q,{line:e},"".concat(e.loggedAt,"-").concat(e.seq,"-").concat(t)))})]})})}function Q(e){let{line:t}=e,r=new Date(t.loggedAt).toISOString().slice(11,23);return(0,n.jsxs)("li",{"data-elanous-debug-tap-line":"","data-elanous-category":t.category,"data-elanous-event":t.event,className:"py-0.5",children:[(0,n.jsxs)("span",{className:"text-muted-foreground/70",children:["[",r,"]"]})," ",(0,n.jsxs)("span",{className:"text-amber-400",children:["[",t.category,"]"]})," ",(0,n.jsx)("span",{className:"text-foreground",children:t.event}),void 0!==t.data&&(0,n.jsxs)("details",{className:"ml-4 text-muted-foreground",children:[(0,n.jsx)("summary",{className:"cursor-pointer select-none text-[10px]",children:"data"}),(0,n.jsx)("pre",{className:"m-0 mt-1 whitespace-pre-wrap break-all text-[10px] text-muted-foreground/80",children:function(e){try{return JSON.stringify(e,null,2)}catch(t){return String(e)}}(t.data)})]})]})}var W=r(33628),K=r(68158),G=r(45977),B=r(19866),V=r(72030),H=r(59062),Z=r(749);let X="Other";function ee(e){let{request:t,onSubmit:r,onCancel:a,onChatAboutThis:s}=e;return(0,n.jsx)(B.lG,{open:null!==t,onOpenChange:e=>{e||a()},children:(0,n.jsx)(B.Cf,{className:"max-w-2xl",children:t?(0,n.jsx)(et,{request:t,onSubmit:r,onCancel:a,onChatAboutThis:s}):null})})}function et(e){let{request:t,onSubmit:r,onCancel:s,onChatAboutThis:l}=e,[o,i]=(0,a.useState)(()=>Object.fromEntries(t.questions.map(e=>[e.id,new Set]))),[c,u]=(0,a.useState)({}),[d,h]=(0,a.useState)({}),m=1===t.questions.length?t.questions[0].header:"Pick options",p=(0,a.useMemo)(()=>{for(let r of t.questions){var e;let t=null!=(e=o[r.id])?e:new Set,n=ea(r,o,d);if(0===t.size&&!n)return!1}return!0},[t.questions,o,d]);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(B.c7,{children:[(0,n.jsx)(B.L3,{children:m}),1===t.questions.length?(0,n.jsx)(B.rr,{children:t.questions[0].question}):(0,n.jsxs)(B.rr,{children:[t.questions.length," questions"]})]}),(0,n.jsx)(Z.F,{className:"max-h-[60vh] pr-2",children:(0,n.jsx)("div",{className:"flex flex-col gap-6 py-2",children:t.questions.map(e=>{var t;return(0,n.jsx)(er,{question:e,isSelected:t=>{var r,n,a;return r=e.id,null!=(a=null==(n=o[r])?void 0:n.has(t))&&a},onToggle:t=>{i(r=>{var n;let a={...r},s=new Set(null!=(n=a[e.id])?n:[]);return e.multiSelect?s.has(t)?s.delete(t):s.add(t):(s.clear(),s.add(t),h(t=>({...t,[e.id]:!1}))),a[e.id]=s,a})},otherActive:ea(e,o,d),onToggleOther:()=>{e.multiSelect?h(t=>{var r;return{...t,[e.id]:!(null!=(r=t[e.id])&&r)}}):i(t=>{let r={...t};return r[e.id]=new Set([X]),r})},otherText:null!=(t=c[e.id])?t:"",onOtherText:t=>u(r=>({...r,[e.id]:t}))},e.id)})})}),(0,n.jsxs)(B.Es,{className:"flex-wrap gap-2 sm:justify-between",children:[(0,n.jsx)(V.$,{variant:"ghost",onClick:l,"aria-label":"Chat about this",children:"\uD83D\uDCAC Chat about this"}),(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsx)(V.$,{variant:"outline",onClick:s,children:"Cancel"}),(0,n.jsx)(V.$,{onClick:function(){let e={},n={};for(let r of t.questions){var a,s;let t=Array.from(null!=(a=o[r.id])?a:[]);if(ea(r,o,d)&&!t.includes(X)&&t.push(X),0!==t.length&&(r.multiSelect?e[r.id]=t:e[r.id]=t[0],t.includes(X))){let e=(null!=(s=c[r.id])?s:"").trim();e.length>0&&(n[r.id]=e)}}let l={answers:e};Object.keys(n).length>0&&(l.otherText=n),r(l)},disabled:!p,children:"Submit"})]})]})]})}function er(e){var t,r;let{question:a}=e;return(0,n.jsxs)("section",{className:"flex flex-col gap-2",children:[""!==e.question.id?(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"rounded-full bg-primary/15 px-2 py-0.5 text-xs font-medium text-primary",children:a.header}),a.multiSelect?(0,n.jsx)("span",{className:"text-xs text-muted-foreground",children:"multi-select"}):null]}):null,(0,n.jsxs)("div",{className:"flex flex-col gap-1.5",children:[a.options.map(t=>{var r;return(0,n.jsx)(en,{multi:null!=(r=a.multiSelect)&&r,option:t,selected:e.isSelected(t.label),onToggle:()=>e.onToggle(t.label)},t.label)}),null==(t=a.includeOther)||t?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(en,{multi:null!=(r=a.multiSelect)&&r,option:{label:"Other",description:"Type your own response"},selected:e.otherActive,onToggle:e.onToggleOther}),e.otherActive?(0,n.jsx)(H.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 en(e){let{multi:t,option:r,selected:a,onToggle:s}=e;return(0,n.jsxs)("button",{type:"button",role:t?"checkbox":"radio","aria-checked":a,onClick:s,className:"\n flex items-start gap-3 rounded-md border p-3 text-left\n transition-colors\n ".concat(a?"border-primary bg-primary/10":"border-border hover:bg-muted/40","\n "),children:[(0,n.jsx)("span",{className:"mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center ".concat(t?"rounded":"rounded-full"," border ").concat(a?"border-primary bg-primary text-primary-foreground":"border-muted-foreground/40"),"aria-hidden":"true",children:a?t?"✓":"●":null}),(0,n.jsxs)("span",{className:"flex flex-col gap-0.5",children:[(0,n.jsx)("span",{className:"font-medium",children:r.label}),(0,n.jsx)("span",{className:"text-sm text-muted-foreground",children:r.description}),r.preview?(0,n.jsx)("span",{className:"mt-1 rounded bg-muted/40 px-2 py-1 text-xs font-mono text-muted-foreground",children:r.preview}):null]})]})}function ea(e,t,r){var n,a,s;return e.multiSelect?null!=(a=r[e.id])&&a:null!=(s=null==(n=t[e.id])?void 0:n.has(X))&&s}function es(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 el(e){let{request:t,receivedAt:r,onChoose:s,onCancel:l}=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?es(t.toolCall.rawInput):"",u=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 es(e).replace(/\s+/g," ").slice(0,80)}(t.toolCall.rawInput):"",d=Math.max(0,Math.ceil((r+6e4-o)/1e3));return(0,n.jsx)(B.lG,{open:null!==t,onOpenChange:e=>{!e&&t&&l(t)},children:(0,n.jsx)(B.Cf,{className:"max-w-lg",children:t&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(B.c7,{children:[(0,n.jsx)(B.L3,{children:"이 작업을 실행할까요?"}),(0,n.jsxs)(B.rr,{children:["도구: ",t.toolCall.title]})]}),u&&(0,n.jsx)("p",{className:"truncate font-mono text-sm",title:u,children:u}),c&&(0,n.jsxs)("details",{className:"text-sm",children:[(0,n.jsx)("summary",{className:"cursor-pointer",children:"자세히"}),(0,n.jsx)("pre",{className:"mt-2 max-h-48 overflow-auto whitespace-pre-wrap break-all rounded bg-muted p-2",children:c})]}),(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","aria-live":"off",children:["남은 시간: ",d,"초"]}),(0,n.jsxs)(B.Es,{className:"flex-wrap gap-2",children:[(0,n.jsx)(V.$,{onClick:()=>s(t,"allow_once"),children:"이번만 허용"}),(0,n.jsx)(V.$,{variant:"outline",onClick:()=>s(t,"allow_always"),children:"이 도구는 항상 허용"}),(0,n.jsx)(V.$,{variant:"outline",onClick:()=>s(t,"reject_once"),children:"거절"})]})]})})})}var eo=r(51215);let ei={outcome:{outcome:"cancelled"}},ec=["allow_once","allow_always","reject_once","reject_always"],eu="unverified";var ed=r(72422),eh=r(66062);function em(e,t){var r;return"error"!==t.kind?null:null!=(r=function(e){if(!e||"object"!=typeof e)return null;let{error:t,message:r,holder:n}=e;return"turn_busy"!==t?null:{message:"string"==typeof r?r:"This session is currently receiving input. Please try again when that turn finishes.",holder:"string"==typeof n&&n.trim()?n:null}}(t.payload))?r:e}var ep=r(73313);function ef(e){return"string"==typeof e.mediaType&&e.mediaType.toLowerCase().startsWith("image/")}async function eg(e,t){let r=e.downloadUrl.startsWith("http")?e.downloadUrl:"".concat(t.baseUrl.replace(/\/$/,"")).concat(e.downloadUrl),n={};t.token&&(n.authorization="Bearer ".concat(t.token));let a=await fetch(r,{headers:n});if(!a.ok)throw Error("fetch attachment ".concat(e.id," failed: ").concat(a.status));return function(e){let t=new Uint8Array(e),r="";for(let e=0;e<t.length;e+=32768)r+=String.fromCharCode(...t.subarray(e,e+32768));return btoa(r)}(await a.arrayBuffer())}async function ex(e,t,r){if(0===t.length)return null;let n=[];for(let a of(e.length>0&&n.push({type:"text",text:e}),t))if(ef(a))try{let e=await eg(a,r);n.push({type:"image",mimeType:a.mediaType,data:e})}catch(t){let e=t instanceof Error?t.message:String(t);n.push({type:"text",text:"[image fetch failed: ".concat(a.filename," — ").concat(e,"]")})}else n.push({type:"resource_link",uri:a.path?"file://".concat(a.path):a.downloadUrl,mimeType:a.mediaType,name:a.filename});return n}function eb(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{compact:r}=(0,c.K)(),[j,w]=(0,a.useState)(!1),k=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(!j)return;let e=e=>{k.current&&k.current.contains(e.target)||w(!1)},t=e=>{"Escape"===e.key&&w(!1)};return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t)}},[j]),(0,a.useEffect)(()=>{r||w(!1)},[r]);let{client:N,config:S,sessionId:C,setSessionId:I}=(0,u.Q)(),[A,R]=(0,a.useState)([]),[M,U]=(0,a.useState)(),[O,F]=(0,a.useState)(!1),[_,Y]=(0,a.useState)([]),P=(0,a.useRef)([]),z=(0,a.useRef)(C),Q=(0,a.useRef)(C),B=(0,a.useRef)(null),V=(0,a.useRef)(0),H=(0,a.useRef)(0),Z=(0,a.useRef)(!1),[X,et]=(0,a.useState)(null),er=z.current!==C&&B.current!==C?[]:_;(0,a.useLayoutEffect)(()=>{Q.current=C,z.current!==C&&(B.current!==C&&(V.current++,P.current=[],Y([])),z.current=C,B.current=null)},[C]);let en=e=>{P.current=e,Y(e)},[ea,es]=(0,a.useState)(null),[eg,eb]=(0,a.useState)(null),[ev,ey]=(0,a.useState)([]),[ej,ew]=(0,a.useState)({visible:!1,depth:0});(0,a.useEffect)(()=>{let e=()=>ew(e=>x(e,"end",!1));return window.addEventListener("dragend",e),()=>window.removeEventListener("dragend",e)},[]);let ek=(0,a.useRef)(!1),eN=(0,a.useRef)(null),eS=(0,a.useRef)(null),[eC,eI]=(0,a.useState)(null),eA=(0,a.useMemo)(()=>{try{let e=new URLSearchParams(window.location.search);return"on"===e.get("debug-tap")}catch(e){return!1}},[]),[eR,eE]=(0,a.useState)(eA),eq=(0,a.useMemo)(()=>{let e=[];for(let t of A)if(Array.isArray(t.blocks)){for(let r of t.blocks)if("debug_session"===r.kind)for(let t of r.lines)e.push({seq:t.seq,category:t.category,event:t.event,...void 0!==t.data?{data:t.data}:{},loggedAt:t.loggedAt})}return e},[A]),eD=(0,a.useRef)(async()=>{}),eT=(0,a.useRef)(!1);eT.current=O;let eL=(0,a.useRef)(async()=>{}),eM=N.voiceWsUrl(),eU=(0,a.useCallback)(e=>{let t=e.trim();if(t){if(eT.current)return void(0,eo.cY)("chat.voice.skip-pending",{len:t.length});(0,eo.cY)("chat.voice.auto-send",{len:t.length}),eD.current(t)}},[]),eO=(0,K.sS)({wsUrl:eM,...S.token?{token:S.token}:{},onTranscript:eU}),eF=!!S.baseUrl;eL.current=()=>eO.toggle();let[e_,eY]=(0,a.useState)(!1),eP=(0,G.$)({enabled:eO.active&&!e_,language:"ko-KR"}),ez=(0,a.useCallback)(()=>{null==eg||eg.abort(),(0,eo.cY)("webterm.chat.stop",{had:!!eg})},[eg]);(0,a.useEffect)(()=>{if(!eg)return;let e=e=>{var t;if("Escape"!==e.key)return;let r=e.target,n=null==r||null==(t=r.tagName)?void 0:t.toLowerCase();"input"===n||"textarea"===n||null!=r&&r.isContentEditable||(e.preventDefault(),ez())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[eg,ez]),(0,a.useEffect)(()=>{let e=e=>{"m"===e.key.toLowerCase()&&e.shiftKey&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),(0,eo.cY)("chat.voice.shortcut.toggle"),eL.current())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]);let eJ=(0,a.useCallback)(e=>{ey(t=>[...t,...e]),(0,eo.cY)("webterm.chat.attach.queue",{added:e.length,filenames:e.map(e=>e.filename)})},[]),e$=async e=>{let{files:t,tooLarge:r,tooMany:n}=e;if(r&&eh.oR.error("".concat(r," files exceed the 20 MB attachment limit")),n&&eh.oR.error("".concat(n," files exceed the 10-file attachment limit")),0===t.length)return;if(!S.baseUrl)return void eh.oR.error("Daemon URL 미설정 — Settings 에서 입력");let a=await (0,ep.K)(t,{baseUrl:S.baseUrl,...S.token?{token:S.token}:{}}),s=a.filter(e=>e.ok).map(e=>e.meta),l=a.filter(e=>!e.ok);s.length&&(eJ(s),eh.oR.success(1===s.length?"\uD83D\uDCCE ".concat(s[0].filename):"\uD83D\uDCCE ".concat(s.length," files attached"))),l.length&&eh.oR.error(1===l.length?"업로드 실패: ".concat(l[0].reason.slice(0,80)):"".concat(l.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;ey(e=>[...e,...t]);let r=1===t.length?"1 file shared from another app":"".concat(t.length," files shared from another app");eh.oR.success(r),(0,eo.cY)("pwa.chat.share-attachments.consume",{count:t.length})}catch(e){(0,eo.cY)("pwa.chat.share-attachments.parse-failed",{reason:e instanceof Error?e.message:String(e)})}},[]);let eQ=(0,a.useRef)("");(0,a.useEffect)(()=>{if(!C||eQ.current===C)return;eQ.current=C;let e=!0;return(async()=>{try{let t=await N.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(C),"?ifExists=1"));if(!e||!(null==t?void 0:t.messages)||0===t.messages.length)return;R(e=>e.length>0?e:function(e,t){let r,n,a=[],s=[];for(let o of e){var l;if("tool"===o.role){for(let e of(0===s.length&&(n=o.ts),function(e,t){let r,n=function(e,t){var r,n;let a,s=String(null!=(r=e.toolName)?r:"");try{a=JSON.parse(String(null!=(n=e.toolResult)?n:""))}catch(e){a=void 0}let l=a&&"object"==typeof a&&!Array.isArray(a)?a:void 0,o=null==l?void 0:l._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,u=null==l?void 0:l["ui/resourceUri"],d="string"==typeof c?c:"string"==typeof u?u:void 0;return void 0!==d&&""!==d.trim()?{kind:"mcp_app",toolId:t,toolName:s,screenUrl:d,...void 0!==a?{toolResult:a}:{}}:{kind:"tool_use",id:t,name:s,status:"done",...void 0!==l&&void 0!==e.toolArgs?{args:{raw:String(e.toolArgs)}}:{}}}(e,t);try{var a;r=JSON.parse(String(null!=(a=e.toolResult)?a:""))}catch(e){r=void 0}let s=(0,y.uS)(r).map(e=>({kind:"image",...e})),l=[];return(0,y.ki)(l,null!=r?r:e.toolResult),[...s,n,...l]}(o,"restore-tool-".concat(s.length,"-").concat(a.length))))"image"===e.kind&&s.some(t=>"image"===t.kind&&t.src===e.src)||s.push(e);continue}if("user"!==o.role&&"assistant"!==o.role)continue;let e=String(null!=(l=o.content)?l:""),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()){s.length>0&&"assistant"===c&&(a.push({id:"restore-".concat(a.length),role:c,text:"",blocks:s,timestamp:q(n,t+a.length)}),s=[],n=void 0);continue}let u=i!==e,d=void 0!==r&&r.role===c&&r.text===i&&(u||r.wasStripped)&&0===s.length;if(r={role:c,text:i,wasStripped:u},d)continue;let h=s.length>0&&"assistant"===c?[...s,{kind:"text",text:i}]:void 0,m=q(void 0!==h?n:o.ts,t+a.length);void 0!==h&&(s=[],n=void 0),a.push({id:"restore-".concat(a.length),role:c,text:i,...void 0!==h?{blocks:h}:{},timestamp:m})}return s.length>0&&a.push({id:"restore-".concat(a.length),role:"assistant",text:"",blocks:s,timestamp:q(n,t+a.length)}),a}(t.messages,Date.now()))}catch(e){}})(),()=>{e=!1}},[C,N]);let eW=(0,a.useCallback)(e=>{ey(t=>t.filter(t=>t.id!==e))},[]),eK={client:N,sessionId:C,provider:S.provider,setSessionId:I,daemon:{baseUrl:S.baseUrl,...S.token?{token:S.token}:{}},messages:A},eG=e=>{R(t=>[...t,e])},eB=async function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];es(e=>em(e,{kind:"turn-begin"})),(0,eo.cY)("webterm.chat.input",{len:e.length,attachCount:ev.length});let r=t?[]:ev;t||ey([]);let n=r.filter(ef),a=r.filter(e=>!ef(e)),s=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"))}(S.provider),l=n.length>0&&s;n.length>0&&!s&&eh.oR.warning("이 모델은 이미지 입력을 지원하지 않습니다 — ".concat(n.length,"개 이미지가 무시됩니다. (vision 모델로 전환 후 재첨부)"));let o=a.map(e=>e.path?"[attached] ".concat(e.path):"").filter(e=>e.length>0),i=o.length>0?"".concat(o.join("\n"),"\n\n").concat(e).trimEnd():e,c=null;if(l&&S.baseUrl)try{c=await ex(i,n,{baseUrl:S.baseUrl,token:S.token})}catch(t){let e=t instanceof Error?t.message:String(t);(0,eo.cY)("webterm.chat.attach.contentblock.error",{msg:e}),eh.oR.error("이미지 첨부 변환 실패 — 텍스트만 전송: ".concat(e)),c=null}e.length>0&&eG((0,y.tw)(e)),r.length>0&&eG((0,y.$Q)("\uD83D\uDCCE attached: ".concat(r.map(e=>e.filename).join(", "))));let u=e?await (0,y.yN)(e,eK):null;if(u){"__CLEAR__"===u.text?R([]):eG((0,y.$Q)(u.text)),u.newSessionId&&(V.current++,en([]),z.current=u.newSessionId,Q.current=u.newSessionId,I(u.newSessionId));return}if(!S.baseUrl)return void eG((0,y.$Q)("error: daemon baseUrl not configured. Visit /settings."));F(!0),ek.current=!0;let d="m-stream-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6));eG({id:d,role:"assistant",text:"",timestamp:Date.now(),meta:{provider:S.provider}});let h=new AbortController;eb(h);let m=0,p=eS.current,f=!!(p&&C&&S.baseUrl),g=null;(0,eo.cY)("webterm.chat.runturn.path",{useAcpPath:f,hasAcp:!!p,hasSession:!!C});let x=e=>{R(t=>t.map(t=>t.id===d?{...t,text:e}:t)),e.length>m&&(eP.pushText(e.slice(m)),m=e.length)},b=e=>{R(t=>t.map(t=>t.id===d?{...t,blocks:e}:t))};try{f&&(g=N.connectAcp({sessionId:C}));let{message:e,newSessionId:t}=f?await (0,y.py)(g,i,{...eK,sessionId:await g.ready||C},{signal:h.signal,...c?{userContent:c}:{},onPartial:x,onPartialBlocks:b}):await (0,y.HD)(i,eK,{signal:h.signal,...c?{userContent:c}:{},...eR?{debugTap:!0}:{},onPartial:x,onPartialBlocks:b,onError:e=>es(t=>em(t,{kind:"error",payload:e}))});es(e=>em(e,{kind:"turn-end"})),R(t=>t.map(t=>t.id===d?e:t)),t&&t!==C&&Q.current===C&&(B.current=t,Q.current=t,I(t)),eP.flush()}catch(r){let e=h.signal.aborted,t=r instanceof Error?r.message:String(r);eP.cancel(),e?(R(e=>e.map(e=>e.id===d?{...e,meta:{...e.meta,stopReason:"aborted"}}:e)),(0,eo.cY)("webterm.chat.runturn.stream.abort",{reason:t})):(R(e=>e.filter(e=>e.id!==d)),eG((0,y.$Q)("error: ".concat(t))),eh.oR.error("chat failed: ".concat(t)),(0,eo.cY)("webterm.chat.runturn.error",{reason:t,useAcpPath:f}))}finally{null==g||g.close(),F(!1),eb(null),ek.current=!1}},eV=async function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Z.current||!t&&P.current.length>0){var r,n;if(!t&&(ev.length>0||/^[\s]*[:/]/.test(e))){eh.oR.info("답이 끝난 뒤 보내 주세요"),U(t=>{var r;return{text:e,id:(null!=(r=null==t?void 0:t.id)?r:0)+1}});return}let a=(r=P.current,(n={id:++H.current,text:e}).text.trim()?r.length>=5?{queue:[...r],error:"줄이 찼습니다"}:{queue:[...r,{...n,text:n.text.trim()}]}:{queue:[...r]});a.error?(eh.oR.info(a.error),U(t=>{var r;return{text:e,id:(null!=(r=null==t?void 0:t.id)?r:0)+1}})):en(a.queue);return}Z.current=!0;let a=V.current,s=Q.current;try{await eB(e,t)}finally{Z.current=!1,a!==V.current&&(0,eo.cY)("webterm.chat.queue.session-changed",{turnSessionId:s,currentSessionId:Q.current}),et({generation:V.current,sessionId:Q.current})}};(0,a.useEffect)(()=>{var e;if(Z.current||0===P.current.length||!X||X.generation!==V.current||X.sessionId!==C)return;let{entry:t,queue:r}={entry:(e=P.current)[0],queue:e.slice(1)};t&&(en(r),eD.current(t.text,!0))},[X]),eD.current=eV,(0,a.useEffect)(()=>{es(e=>em(e,{kind:"session-change"}))},[C]),(0,a.useEffect)(()=>{if(!C||!S.baseUrl)return;let e=(0,y.lY)(N,C,{isLocalTurnInFlight:()=>ek.current,provider:S.provider,onPlaceholder:e=>{let{sessionId:t}=e;es(e=>em(e,{kind:"turn-begin"}));let r="m-obs-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),n={id:r,role:"assistant",text:"",timestamp:Date.now(),meta:{provider:S.provider}};return(0,eo.cY)("webterm.chat.observer.placeholder",{id:r,turnSessionId:t}),R(e=>[...e,n]),eN.current=r,r},onPartialBlocks:(e,t)=>{R(r=>r.map(r=>r.id===e?{...r,blocks:t}:r))},onFinalize:(e,t)=>{es(e=>em(e,{kind:"turn-end"})),R(r=>r.map(r=>r.id===e?t:r)),eN.current===e&&(eN.current=null)},onError:(e,t)=>{es(e=>em(e,{kind:"error",payload:t})),(0,eo.cY)("webterm.chat.observer.error",{placeholderId:e,error:t.error}),R(r=>r.map(r=>r.id===e?{...r,meta:{...r.meta,stopReason:t.error}}:r)),eN.current===e&&(eN.current=null)}});return()=>{e()}},[N,C,S.baseUrl,S.provider]),(0,a.useEffect)(()=>{if(!C||!S.baseUrl)return;let e=N.subscribeChatFeedbackEvents(C,{agentStatus:{onFeedback:e=>{R(t=>{if(0===t.length)return t;for(let r=t.length-1;r>=0;r--){if("assistant"!==t[r].role)continue;let n=t[r],a=Array.isArray(n.blocks)?[...n.blocks]:[];if("applied"!==(0,W.K4)(a,e))break;let s={...n,blocks:a};return[...t.slice(0,r),s,...t.slice(r+1)]}return t})},onError:e=>{(0,eo.cY)("webterm.agent-status.error",e)}},hudSegment:{onFeedback:e=>(0,y.Ju)(e),onError:e=>{(0,eo.cY)("webterm.hud-segment.error",e)}}});return()=>{e()}},[N,C,S.baseUrl]),(0,a.useEffect)(()=>{if(!C||!S.baseUrl)return;let e=null;try{e=N.connectAcp({sessionId:C,onSession:e=>{if(e&&e!==C){var r;(0,eo.cY)("webterm.chat.acp.session-adopt",{previous:C,issued:e}),Q.current===C&&(B.current=e,Q.current=e,null==(r=t.onSessionAdopt)||r.call(t,e),I(e))}}})}catch(e){(0,eo.cY)("webterm.chat.acp.connect-failed",{reason:String(e)});return}eS.current=e,eI(e);let r=e;(0,eo.x8)(async e=>{let t=JSON.parse(e);return await r.send("elanous/debug-logs/ingest",{records:t.records}),!0});let n=(0,y.ZH)(e,C,{isLocalTurnInFlight:()=>ek.current,isRemoteSseTurnInFlight:()=>null!==eN.current,onPlaceholder:e=>{let{sessionId:t}=e;es(e=>em(e,{kind:"turn-begin"}));let r="m-acp-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,6)),n={id:r,role:"assistant",text:"",timestamp:Date.now(),meta:{provider:S.provider}};return(0,eo.cY)("webterm.chat.acp.foreign-placeholder",{id:r,turnSessionId:t}),R(e=>[...e,n]),r},onPartialBlocks:(e,t)=>{let r=t.find(e=>"text"===e.kind),n=t.some(e=>"image"===e.kind||"tool_use"===e.kind);R(a=>a.map(a=>a.id===e?{...a,...r?{text:r.text}:{},...n?{blocks:t}:{}}:a))},onFinalize:e=>{(0,eo.cY)("webterm.chat.acp.foreign-finalize",{placeholderId:e})}});return()=>{n(),(0,eo.x8)(null);try{null==e||e.close()}catch(e){}eS.current===e&&(eS.current=null),eI(null)}},[N,C,S.baseUrl,S.provider]);let eH=function(e){var t;let{acp:r,onComposerPrefill:n}=e,[s,l]=(0,a.useState)(null),o=(0,a.useRef)(null),i=(0,a.useCallback)(e=>{o.current=e,l(e)},[]),c=(0,a.useCallback)(e=>{let t=o.current;t&&(t.resolve(e),i(null))},[i]);(0,a.useEffect)(()=>{if(!r)return;let e=r.onRequest("elanous/ask/request",async e=>{let t=function(e){if(!e||"object"!=typeof e||"string"!=typeof e.id||!e.id||!e.request||"object"!=typeof e.request)return null;let t=e.request;return Array.isArray(t.questions)&&0!==t.questions.length?{id:e.id,request:e.request}:null}(e);if(!t)return{answers:{},cancelled:!0};let r=o.current;return r&&r.resolve({answers:{},cancelled:!0}),await new Promise(e=>{i({request:t.request,resolve:e,askId:t.id})})}),t=r.on("sessionUpdate",()=>{}),n=r.onAny(e=>{var t;if("elanous/ask/cancel"!==e.method||void 0!==e.id)return;let r=(t=e.params)&&"object"==typeof t&&"string"==typeof t.id&&t.id?{id:t.id,..."string"==typeof t.reason?{reason:t.reason}:{}}:null;if(!r)return;let n=o.current;n&&n.askId===r.id&&c({answers:{},cancelled:!0})});return()=>{e(),t(),n();let r=o.current;r&&(r.resolve({answers:{},cancelled:!0}),o.current=null)}},[r,i,c]);let u=(0,a.useCallback)(e=>{c(e)},[c]),d=(0,a.useCallback)(()=>{c({answers:{},cancelled:!0})},[c]),h=(0,a.useCallback)(()=>{let e=o.current;e&&n&&n(e.request),c({answers:{},cancelled:!0})},[c,n]);return{pendingRequest:null!=(t=null==s?void 0:s.request)?t:null,submit:u,cancel:d,chatAboutThis:h}}({acp:eC,onComposerPrefill:e=>{let t=e.questions[0];if(!t)return;let r="[ Q: ".concat(t.question.trim()," ]\n\n");(0,D.vn)(r),U(e=>{var t;return{text:r,id:(null!=(t=null==e?void 0:e.id)?t:0)+1}}),eh.oR.info("\uD83D\uDCAC 입력 영역에 질문 prefill 됨 (Chat about this)")}}),eZ=function(e){var t,r;let{acp:n,sessionId:s}=e,[l,o]=(0,a.useState)(null),i=(0,a.useRef)(null),c=(0,a.useRef)(s);c.current=s;let u=(0,a.useCallback)((e,t,r)=>{let n=i.current;n&&(!r||n.request===r)&&(i.current=null,clearTimeout(n.timer),o(null),(0,eo.cY)("pwa.tool-approval.".concat("cancelled"===t?"cancelled":"decided"),{tool:eu,choice:t}),n.resolve(e))},[]);(0,a.useEffect)(()=>{if(!n)return;let e=n.onRequest("session/request_permission",e=>{let t=function(e){try{if(!e||"object"!=typeof e)return null;let t=e.toolCall;if(!t||"object"!=typeof t||"string"!=typeof e.sessionId||!e.sessionId||"string"!=typeof t.toolCallId||!t.toolCallId||"string"!=typeof t.title||!t.title||!Array.isArray(e.options))return null;let r=e.options.map(e=>{if(!e||"object"!=typeof e||"string"!=typeof e.optionId||!e.optionId||"string"!=typeof e.kind||!ec.includes(e.kind))throw Error("invalid option");return{optionId:e.optionId,kind:e.kind}});if(new Set(r.map(e=>e.optionId)).size!==r.length||new Set(r.map(e=>e.kind)).size!==r.length||["allow_once","allow_always","reject_once"].some(e=>!r.some(t=>t.kind===e)))return null;return{sessionId:e.sessionId,toolCall:{toolCallId:t.toolCallId,title:t.title,...void 0!==t.rawInput?{rawInput:t.rawInput}:{}},options:r}}catch(e){return null}}(e);return t&&t.sessionId===c.current?((0,eo.cY)("pwa.tool-approval.requested",{tool:eu,choice:null}),u(ei,"cancelled"),new Promise(e=>{let r={request:t,receivedAt:Date.now(),resolve:e,timer:setTimeout(()=>{i.current===r&&u(ei,"cancelled")},6e4)};i.current=r,o(r)})):((0,eo.cY)("pwa.tool-approval.cancelled",{tool:eu,choice:"cancelled"}),ei)}),t="function"==typeof n.onState?n.onState(e=>{("CLOSED"===e||"FAILED"===e)&&u(ei,"cancelled")}):()=>{};return()=>{e(),t(),u(ei,"cancelled")}},[n,u]),(0,a.useEffect)(()=>{i.current&&i.current.request.sessionId!==s&&u(ei,"cancelled")},[s,u]);let d=(0,a.useCallback)((e,t)=>{var r;if((null==(r=i.current)?void 0:r.request)!==e)return;let n=e.options.find(e=>e.kind===t);n&&u({outcome:{outcome:"selected",optionId:n.optionId}},t,e)},[u]),h=(0,a.useCallback)(e=>u(ei,"cancelled",e),[u]);return{pendingRequest:null!=(t=null==l?void 0:l.request)?t:null,receivedAt:null!=(r=null==l?void 0:l.receivedAt)?r:0,choose:d,cancel:h}}({acp:eC,sessionId:C}),eX=(0,n.jsxs)("button",{type:"button",onClick:()=>void eO.toggle(),disabled:!eF,title:eF?null!=(e=eO.errorMsg)?e:ed.g[eO.phase]:"daemon URL 미설정 — Settings 에서 Base URL 입력","data-elanous-action":"chat-voice-toggle",className:(0,v.cn)("inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium transition-colors",eO.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",!eF&&"cursor-not-allowed opacity-50"),children:[(0,n.jsx)("span",{className:(0,v.cn)("h-2 w-2 rounded-full",ed.x[eO.phase],("listening"===eO.phase||"speaking"===eO.phase)&&"animate-pulse"),"aria-hidden":!0}),eO.active?(0,n.jsx)(l.A,{className:"h-3.5 w-3.5"}):(0,n.jsx)(o.A,{className:"h-3.5 w-3.5"}),(0,n.jsx)("span",{className:"hidden sm:inline",children:ed.g[eO.phase]})]});return(0,n.jsxs)("div",{className:"relative flex h-full flex-col",onPaste:e=>{let t=function(e,t){if(!e)return p([]);let r=[];if(e.items.length>0)for(let t of Array.from(e.items)){if("file"!==t.kind)continue;let e=t.getAsFile();e&&r.push(e)}else r.push(...Array.from(e.files));return p(r.map(e=>({file:e,filename:e.name||"paste-".concat(t,".png")})))}(e.clipboardData,Date.now());(0!==t.files.length||0!==t.tooLarge||0!==t.tooMany)&&(e.preventDefault(),e$(t))},onDragEnter:e=>{ew(t=>x(t,"enter",f(e.dataTransfer)))},onDragLeave:e=>{ew(t=>x(t,"leave",f(e.dataTransfer)))},onDragOver:e=>{f(e.dataTransfer)&&e.preventDefault()},onDrop:e=>{var t;ew(t=>x(t,"drop",f(e.dataTransfer)));let r=p((t=e.dataTransfer)?Array.from(t.files,e=>({file:e,filename:e.name})):[]);(0!==r.files.length||0!==r.tooLarge||0!==r.tooMany)&&(e.preventDefault(),e$(r))},children:[ej.visible&&(0,n.jsx)(g,{}),r?(0,n.jsxs)("div",{"data-elanous-chat-compact-header":"",className:"flex h-11 max-h-11 min-w-0 shrink-0 items-center gap-2 border-b border-border bg-background px-3 whitespace-nowrap",children:[t.leading&&(0,n.jsx)("div",{className:"shrink-0",children:t.leading}),(0,n.jsx)("div",{className:"min-w-0 flex-1 [&>div]:min-w-0 [&>div]:max-w-full [&>div>div:first-child]:min-w-0 [&>div>div:first-child]:max-w-full [&>div>div:first-child]:overflow-hidden [&>div>div:first-child>span:last-child]:shrink-0 [&>div>div:first-child_span]:min-w-0 [&>div>div:first-child_span]:truncate [&>div>div[role=menu]]:max-w-[calc(100vw-4rem)]",children:(0,n.jsx)(b.Qh,{sessionId:C,...t.onAttachRequest?{onAttachRequest:t.onAttachRequest}:{},...t.onForgetRequest?{onForgetRequest:t.onForgetRequest}:{}})}),(0,n.jsxs)("div",{ref:k,className:"relative shrink-0",children:[(0,n.jsx)("button",{type:"button","aria-label":"채팅 더보기","aria-expanded":j,"aria-controls":"chat-header-more",onClick:()=>w(e=>!e),className:"inline-flex h-8 w-8 items-center justify-center rounded-lg hover:bg-muted",children:(0,n.jsx)(i.A,{className:"h-5 w-5","aria-hidden":"true"})}),j&&(0,n.jsxs)("div",{id:"chat-header-more",className:"absolute right-0 top-full z-50 mt-1 flex max-w-[calc(100vw-1.5rem)] flex-col gap-2 rounded-lg border border-border bg-popover p-3 shadow-lg",children:[(0,n.jsx)(s.vG,{children:(0,n.jsx)(T.rm,{})}),(0,n.jsx)(s.vG,{children:(0,n.jsx)(L.D,{})}),eX]})]})]}):(0,n.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-3 border-b border-border bg-background px-4 py-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(b.Qh,{sessionId:C,...t.onAttachRequest?{onAttachRequest:t.onAttachRequest}:{},...t.onForgetRequest?{onForgetRequest:t.onForgetRequest}:{}}),(0,n.jsx)(s.vG,{children:(0,n.jsx)(T.rm,{})}),(0,n.jsx)(s.vG,{children:(0,n.jsx)(L.D,{})})]}),(0,n.jsx)("div",{className:"flex items-center gap-2",children:eX})]}),(0,n.jsx)(E,{}),(0,n.jsxs)("div",{className:"relative flex flex-1 min-h-0 flex-col",children:[(0,n.jsx)(d.D,{messages:A,pending:O,...t.tabId?{tabId:t.tabId}:{}}),ea&&(0,n.jsxs)("div",{role:"alert",className:"mx-4 mb-3 flex shrink-0 items-start justify-between gap-3 rounded-md border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-foreground","data-elanous-turn-busy-banner":"",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"font-medium",children:"This session is busy"}),(0,n.jsx)("p",{className:"text-muted-foreground",children:ea.message}),(0,n.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:ea.holder?"Current input holder: ".concat(ea.holder):"The current input holder is not available."})]}),(0,n.jsx)("button",{type:"button",onClick:()=>es(null),className:"rounded px-2 py-1 text-xs text-muted-foreground hover:bg-amber-500/10 hover:text-foreground","aria-label":"Dismiss busy-session notice",children:"Dismiss"})]}),(0,n.jsx)(J,{active:eO.active,phase:eO.phase,errorMsg:eO.errorMsg,onToggle:()=>void eO.toggle(),ttsSupported:eP.supported,ttsMuted:e_,onTtsToggle:()=>eY(e=>!e),onInterrupt:()=>{try{eP.cancel()}catch(e){}eO.interrupt()}})]}),O&&eg&&(0,n.jsxs)("div",{className:"flex shrink-0 items-center justify-end gap-2 border-t border-border bg-muted/30 px-4 py-1.5 text-xs",children:[(0,n.jsx)("span",{className:"text-muted-foreground",children:"streaming…"}),(0,n.jsx)("button",{type:"button",onClick:ez,className:"rounded border border-border bg-background px-2 py-0.5 font-mono hover:bg-muted","data-elanous-action":"chat-stop",title:"Stop the running turn (Esc)",children:"Stop ⎋"})]}),(0,n.jsx)(m,{queue:er,onRemove:e=>{var t;return en((t=P.current,t.filter(t=>t.id!==e)))},onClear:()=>en([])}),(0,n.jsx)(h.V,{onSubmit:eV,prefill:M,attachments:ev,onAttached:eJ,onRemoveAttachment:eW,voice:{active:eO.active,phase:eO.phase,dotColor:ed.x[eO.phase],phaseLabel:ed.g[eO.phase],disabled:!eF,onToggle:()=>void eO.toggle()},...t.tabId?{tabId:t.tabId}:{},onListFiles:eC&&C?async e=>{var t,r;let n=await eC.send("elanous/fs/list",{sessionId:C,query:e,limit:50}),a=(null!=(t=n.entries)?t:[]).filter(e=>"string"==typeof(null==e?void 0:e.name)&&"boolean"==typeof(null==e?void 0:e.isDir)&&"string"==typeof(null==e?void 0:e.relPath)).map(e=>({name:e.name,isDir:e.isDir,relPath:e.relPath}));return{cwd:null!=(r=n.cwd)?r:"",entries:a}}:void 0,onListSkills:eC&&C?async e=>{var t;return{entries:(null!=(t=(await eC.send("elanous/skills/list",{sessionId:C,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}),eA&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)($,{open:eR,onClose:()=>eE(!1),lines:eq}),!eR&&(0,n.jsxs)("button",{type:"button",onClick:()=>eE(!0),"data-elanous-debug-tap-reopen":"",className:(0,v.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 (",eq.length,")"]})]}),(0,n.jsx)(ee,{request:eH.pendingRequest,onSubmit:eH.submit,onCancel:eH.cancel,onChatAboutThis:eH.chatAboutThis}),(0,n.jsx)(el,{request:eZ.pendingRequest,receivedAt:eZ.receivedAt,onChoose:eZ.choose,onCancel:eZ.cancel})]})}var ev=r(85576),ey=r(4956),ej=r(27813),ew=r(5159);class ek{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 eN="elanous.chat.projectSelection";function eS(e){let{projects:t,selection:r,onChange:s,onCreate:l}=e,[o,i]=(0,a.useState)(!1),[c,u]=(0,a.useState)(""),[d,h]=(0,a.useState)(!1);return(0,n.jsxs)("div",{className:"space-y-2",children:[0===t.length&&!o&&(0,n.jsx)("button",{type:"button",onClick:()=>i(!0),className:"text-sm text-muted-foreground hover:text-foreground",children:"+ 프로젝트 만들기"}),t.length>0&&(0,n.jsxs)("select",{"aria-label":"프로젝트 바꾸기",value:r,onChange:e=>{if("create"===e.target.value)return void i(!0);s(e.target.value)},className:"w-full rounded-lg border border-border bg-background px-3 py-2 text-sm",children:[(0,n.jsx)("option",{value:"all",children:"모든 대화"}),(0,n.jsx)("option",{value:"none",children:"받은 대화(프로젝트 없음)"}),t.map(e=>(0,n.jsx)("option",{value:e.id,children:e.name},e.id)),(0,n.jsx)("option",{value:"create",children:"+ 프로젝트 만들기"})]}),o&&(0,n.jsxs)("form",{onSubmit:e=>{e.preventDefault();let t=c.trim();t&&l(t).then(()=>{i(!1),u(""),h(!1)}).catch(()=>h(!0))},className:"flex gap-2",children:[(0,n.jsx)("input",{"aria-label":"프로젝트 이름",autoFocus:!0,value:c,maxLength:80,onChange:e=>u(e.target.value),className:"min-w-0 flex-1 rounded-lg border border-border bg-background px-2 py-1 text-sm"}),(0,n.jsx)("button",{type:"submit",className:"rounded-lg border border-border px-2 text-sm",children:"만들기"}),d&&(0,n.jsx)("span",{role:"alert",children:"프로젝트를 만들지 못했습니다"})]})]})}function eC(e,t){var r,n;return(null==t?void 0:t.trim())||(null==(n=e.lastMsgPreview)||null==(r=n.trim().split(/\r?\n/)[0])?void 0:r.trim())||"대화"}let eI="elanous.chat.pendingProjects";function eA(e){try{return"undefined"==typeof localStorage?null:localStorage.getItem(e)}catch(e){return null}}function eR(e,t){try{"undefined"!=typeof localStorage&&localStorage.setItem(e,t)}catch(e){}}function eE(e){let{onSelect:t}=e,r=(0,u.Q)(),s=(0,ew.t)({activePoll:!0}),[l,o]=(0,a.useState)({}),[i,c]=(0,a.useState)(""),[d,h]=(0,a.useState)([]),[m,p]=(0,a.useState)("all"),[f,g]=(0,a.useState)([]),[x,b]=(0,a.useState)(()=>{try{var e;let t=JSON.parse(null!=(e=eA(eI))?e:"{}");if(t&&"object"==typeof t&&!Array.isArray(t))return Object.fromEntries(Object.entries(t).filter(e=>{let[t,r]=e;return t&&"string"==typeof r&&r}))}catch(e){}return{}}),[v,y]=(0,a.useState)({}),j=(0,a.useRef)(new Set);(0,a.useEffect)(()=>{var e;p(null!=(e=eA(eN))?e:"all");let t=!0;return new ek(r.client).list().then(e=>{var r;t&&h(null!=(r=e.projects)?r:[])}).catch(()=>{}),()=>{t=!1}},[r.client]),(0,a.useEffect)(()=>{eR(eI,JSON.stringify(x))},[x]),(0,a.useEffect)(()=>{let e=!0,t=d.length>0&&"all"!==m&&"none"!==m?"?projectId=".concat(encodeURIComponent(m)):"";return r.client.fetchJson("/v1/sessions/store".concat(t)).then(t=>{var r;if(!e)return;let n=null!=(r=t.sessions)?r:[];g(n),o(Object.fromEntries(n.map(e=>[e.id,e.title])))}).catch(()=>{}),()=>{e=!1}},[r.client,s,d,m]),(0,a.useEffect)(()=>{let e=Object.keys(x).filter(e=>s.some(t=>t.id===e)&&!f.some(t=>t.id===e));if(0===e.length)return;let t=!0;for(let n of e)r.client.fetchJson("/v1/sessions/store/".concat(encodeURIComponent(n),"?ifExists=1")).then(e=>{t&&e.meta&&g(t=>t.some(e=>e.id===n)?t:[...t,e.meta])}).catch(()=>{});return()=>{t=!1}},[f,r.client,x,s]),(0,a.useEffect)(()=>{for(let[e,t]of Object.entries(x)){if(!s.some(t=>t.id===e)||j.current.has(e))continue;let n=f.find(t=>t.id===e);if(n){if(n.projectId===t||v[e]===t){b(t=>{let r={...t};return delete r[e],r});continue}j.current.add(e),new ek(r.client).assign(e,t).then(()=>{y(r=>({...r,[e]:t})),g(r=>r.map(r=>r.id===e?{...r,projectId:t}:r)),b(t=>{let r={...t};return delete r[e],r})}).catch(()=>{j.current.delete(e)})}}},[v,f,r.client,x,s]);let w=d.some(e=>e.id===m)||"none"===m?m:"all",k=0===d.length||"all"===w?s:s.filter(e=>x[e.id]?x[e.id]===w:"none"===w?!f.some(t=>t.id===e.id&&t.projectId)&&!v[e.id]:v[e.id]===w||f.some(t=>t.id===e.id&&t.projectId===w)),N=[...k].filter(e=>{var t;return"".concat(eC(e,l[e.id])," ").concat(null!=(t=e.lastMsgPreview)?t:"").toLocaleLowerCase().includes(i.trim().toLocaleLowerCase())}).sort((e,t)=>Date.parse(t.lastTurnAt)-Date.parse(e.lastTurnAt)),S=()=>{let e=(0,ej.Zr)();d.length>0&&"all"!==w&&"none"!==w&&b(t=>({...t,[e]:w})),r.setSessionId(e),null==t||t()};return(0,n.jsxs)("nav",{"aria-label":"대화 목록",className:"flex h-full min-h-0 flex-col bg-background",children:[(0,n.jsxs)("div",{className:"shrink-0 space-y-3 border-b border-border p-3",children:[(0,n.jsx)(eS,{projects:d,selection:w,onChange:e=>{p(e),eR(eN,e)},onCreate:async e=>{let{project:t}=await new ek(r.client).create(e);h(e=>[...e,t]),p(t.id),eR(eN,t.id)}}),(0,n.jsxs)("button",{type:"button",onClick:S,className:"flex w-full items-center gap-2 rounded-lg bg-primary px-3 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90",children:[(0,n.jsx)(ev.A,{className:"h-4 w-4","aria-hidden":"true"})," 새 대화"]}),(0,n.jsxs)("label",{className:"flex items-center gap-2 rounded-lg border border-border bg-muted/30 px-2.5 py-2 focus-within:ring-2 focus-within:ring-ring",children:[(0,n.jsx)(ey.A,{className:"h-4 w-4 shrink-0 text-muted-foreground","aria-hidden":"true"}),(0,n.jsx)("input",{"aria-label":"대화 검색",type:"search",value:i,onChange:e=>c(e.target.value),placeholder:"대화 검색",className:"min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground"})]})]}),(0,n.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto p-2",children:0===k.length?(0,n.jsxs)("div",{className:"space-y-3 px-2 py-8 text-center text-sm text-muted-foreground",children:[(0,n.jsx)("p",{children:"아직 대화가 없습니다"}),(0,n.jsx)("button",{type:"button",onClick:S,className:"rounded-lg border border-border px-3 py-2 text-foreground hover:bg-muted",children:"+ 새 대화"})]}):0===N.length?(0,n.jsx)("p",{className:"px-2 py-8 text-center text-sm text-muted-foreground",children:"검색 결과가 없습니다"}):(0,n.jsx)("ul",{className:"space-y-1",children:N.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button","aria-current":r.sessionId===e.id?"page":void 0,onClick:()=>{r.setSessionId(e.id),null==t||t()},className:"w-full rounded-lg px-3 py-2.5 text-left transition-colors ".concat(r.sessionId===e.id?"bg-primary/10 text-primary ring-1 ring-inset ring-primary/25":"text-foreground hover:bg-muted"),children:[(0,n.jsx)("span",{className:"block truncate text-sm font-medium",children:eC(e,l[e.id])}),(0,n.jsxs)("span",{className:"mt-1 block truncate text-xs text-muted-foreground",children:[function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now(),r=Date.parse(e);if(!Number.isFinite(r))return"";let n=Math.max(0,Math.floor((t-r)/6e4));if(n<1)return"방금 전";if(n<60)return"".concat(n,"분 전");let a=Math.floor(n/60);if(a<24)return"".concat(a,"시간 전");let s=Math.floor(a/24);return s<7?"".concat(s,"일 전"):new Date(r).toLocaleDateString()}(e.lastTurnAt)," \xb7 ",e.msgCount,"개 메시지"]})]})},e.id))})})]})}var eq=r(24721),eD=r(72754),eT=r(48619),eL=r(82443);function eM(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{compact:r}=(0,c.K)(),s=(0,eT.tg)(),{client:l,sessionId:o,setSessionId:i}=(0,u.Q)(),[d,h]=(0,a.useState)(o||"default"),[m,p]=(0,a.useState)(!1);(0,a.useEffect)(()=>{if(!m)return;let e=e=>{"Escape"===e.key&&p(!1)};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[m]);let f=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(f.current===o){f.current=null;return}f.current=null,h(o||"default")},[o]);let g=(0,a.useRef)(t.sessionId),x=(0,a.useRef)(o),b=null!=(e=null==s?void 0:s.state.activeId)?e:null;(0,a.useEffect)(()=>{let e=t.sessionId;if(s&&t.tabId&&e&&o){var r,n;let a=function(e){if(!e.isActive||e.tabSessionId===e.daemonSessionId)return"none";let t=e.prevTabSessionId!==e.tabSessionId,r=e.prevDaemonSessionId!==e.daemonSessionId;return t||!r?"adopt-tab":"record-global"}({isActive:b===t.tabId,tabSessionId:e,daemonSessionId:o,prevTabSessionId:null!=(r=g.current)?r:e,prevDaemonSessionId:null!=(n=x.current)?n:o});"adopt-tab"===a?i(e):"record-global"===a&&s.updateChatTab(t.tabId,{sessionId:o})}g.current=t.sessionId,x.current=o},[s,b,t.tabId,t.sessionId,o,i]);let v=s&&t.tabId?()=>s.openPicker({kind:"attachToTab",tabId:t.tabId}):void 0,y=s&&t.sessionId?async()=>{let e=(0,eL.hG)(l);await e.forget(t.sessionId)}:void 0,j=(0,n.jsx)("button",{type:"button",onClick:()=>p(!0),"aria-label":"대화 목록","aria-expanded":m,"aria-controls":"chat-conversation-drawer",className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-lg hover:bg-muted",children:(0,n.jsx)(eq.A,{className:"h-4 w-4","aria-hidden":"true"})}),w=(0,n.jsx)(eb,{onSessionAdopt:e=>{f.current=e},...t.showConversationList&&r?{leading:j}:{},...v?{onAttachRequest:v}:{},...y?{onForgetRequest:y}:{},...t.tabId?{tabId:t.tabId}:{}},d);return t.showConversationList?(0,n.jsxs)("div",{className:"flex h-full min-h-0 min-w-0",children:[(0,n.jsx)("aside",{className:r?"hidden":"hidden h-full w-[260px] shrink-0 border-r border-border md:block",children:(0,n.jsx)(eE,{})}),(0,n.jsxs)("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col",children:[!r&&(0,n.jsx)("div",{className:"shrink-0 border-b border-border bg-background px-3 py-2 md:hidden",children:(0,n.jsxs)("button",{type:"button",onClick:()=>p(!0),"aria-label":"대화 목록","aria-expanded":m,"aria-controls":"chat-conversation-drawer",className:"inline-flex items-center gap-2 rounded-lg px-2 py-1.5 text-sm font-medium hover:bg-muted",children:[(0,n.jsx)(eq.A,{className:"h-4 w-4","aria-hidden":"true"})," 대화 목록"]})}),(0,n.jsx)("div",{className:"min-h-0 min-w-0 flex-1",children:w})]}),m&&(0,n.jsxs)("div",{className:r?"fixed inset-0 z-50":"fixed inset-0 z-50 md:hidden",children:[(0,n.jsx)("button",{type:"button","aria-label":"대화 목록 닫기",onClick:()=>p(!1),className:"absolute inset-0 bg-black/50"}),(0,n.jsxs)("aside",{id:"chat-conversation-drawer",role:"dialog","aria-modal":"true","aria-label":"대화 목록",className:"relative h-full w-[min(260px,85vw)] bg-background shadow-xl",children:[(0,n.jsx)("button",{type:"button","aria-label":"대화 목록 닫기",onClick:()=>p(!1),className:"absolute right-2 top-2 z-10 rounded p-1 hover:bg-muted",children:(0,n.jsx)(eD.A,{className:"h-4 w-4"})}),(0,n.jsx)(eE,{onSelect:()=>p(!1)})]})]})]}):w}},4956:(e,t,r)=>{r.d(t,{A:()=>n});let n=(0,r(89117).A)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]])},24721:(e,t,r)=>{r.d(t,{A:()=>n});let n=(0,r(89117).A)("menu",[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]])},28353:(e,t,r)=>{r.d(t,{A:()=>n});let n=(0,r(89117).A)("ellipsis",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]])},85576:(e,t,r)=>{r.d(t,{A:()=>n});let n=(0,r(89117).A)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])}}]);
|