elanous 0.2.14 → 0.2.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/chunks/{1307-6e7e0377c1db0bdc.js → 1307-b46d45b705e8c9ae.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5977-c952712c87a1f757.js +1 -0
- package/apps/pwa/out/_next/static/chunks/899-46946fe8363e1262.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9103-7a3ae7f60af3b99f.js → 9103-60fbef33e66f0a46.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-79c3ed84baaedd03.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-7b2b4f378354869a.js → page-3cb52e5ea8fc2fa5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-a424ef80885d1743.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-c1e20d7d338713f1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/{page-1512d91c7491ed62.js → page-482c5dbde699947c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-1e962b31d1f11081.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/{page-a627db94ec6904a0.js → page-8c2d9526164f5d09.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-ffff6d819fbc6e0f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/{page-e6b84ab07d3567d5.js → page-a0e2a6d1bfb52fc5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-c53598cfce6156f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/{page-fed69f9759d248d0.js → page-13a63953f53c6a23.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/{page-15374909d8f1aebd.js → page-5d3c8429d04f3831.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/field/{page-012a742f81218b01.js → page-3193bdc0bbab047a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-76270efaee638f17.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/{page-99effd9d893a43dc.js → page-6107ca8ddd5e3bdd.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/{layout-938de57ae0315e46.js → layout-dce686e582c23937.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-d3d53b146416e422.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/{page-160089123a40dd91.js → page-1a61c7ca1ceb3ae7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/market/{page-629e1ede482ec6eb.js → page-51f811fa119308b6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-dacff46049e1557e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-27e99b4e54a849d4.js → page-4167348049166852.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-de52e8fdf9095f7a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-36a7d994f4ca0299.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/{page-32cde713be47cddb.js → page-ca3952cd78a83ca2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/{page-e7e10cd3386222e5.js → page-5b042736aa113756.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-acb749f1e432bcf3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-cd78862707999911.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-54b9ef8afe6278fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/{page-e64caff084f7ce21.js → page-1ebfe049c640e171.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-db07eaffba0df7e3.js → page-57924393e3e4e539.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9e0ce6c8129fa641.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-31fa1ce4c4aff9ae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/{page-86f91034bd5cabe5.js → page-0f5cd57ca928f42b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-abe8e3b74bea1ffc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-4364ef9f4e7c7f0f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/{page-ce4d8a1215ce53a3.js → page-d28573d6792b4275.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/{page-58043db78ba519ae.js → page-59f03fda76c03d22.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/{page-357750dfb91bf960.js → page-d751de5f8062ff5e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/term/{page-274703bc41b71333.js → page-fe1759f94003b32b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-d64c984e855c8c68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-86914b0dee8ab7f8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/{page-3b7e821dc492bdfd.js → page-9afdee66b820c76e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-d4aef67abf264874.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/{page-f8da5dc6f3752276.js → page-1ea64acadd704ace.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/{page-2f810b18d89ecba6.js → page-3544f154c87b43ee.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-30c2073bfc21c004.js +1 -0
- package/apps/pwa/out/_next/static/css/001d5fbaee388a25.css +1 -0
- package/apps/pwa/out/_next/static/css/{04dabcbcc4bfa6db.css → 085673d826b98b62.css} +1 -1
- package/apps/pwa/out/_next/static/rv9cierV0jSOvDBm1g0XB/_buildManifest.js +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +15 -15
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +15 -15
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +15 -15
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +15 -15
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +15 -15
- package/apps/pwa/out/ceo/index.html +1 -0
- package/apps/pwa/out/ceo/index.txt +33 -0
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +15 -15
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +15 -15
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +15 -15
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +15 -15
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +15 -15
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +15 -15
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +15 -15
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +15 -15
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +15 -15
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +15 -15
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +15 -15
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +15 -15
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +15 -15
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +15 -15
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +15 -15
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +15 -15
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +15 -15
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +15 -15
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +15 -15
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +15 -15
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +16 -16
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +15 -15
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +15 -15
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +15 -15
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +15 -15
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +15 -15
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +15 -15
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +15 -15
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +15 -15
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +15 -15
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +15 -15
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +15 -15
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +15 -15
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +15 -15
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +15 -15
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +15 -15
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +15 -15
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +15 -15
- package/graphs/doc-gen/doc-gen.yaml +24 -0
- package/graphs/doc-gen/recipes.yaml +3 -0
- package/graphs/heal/heal-loop.yaml +1 -1
- package/graphs/implement-loop.yaml +1 -1
- package/graphs/orchestrator/orchestrator.yaml +7 -0
- package/graphs/orchestrator/recipes.yaml +3 -0
- package/graphs/release/recipes.yaml +3 -0
- package/graphs/release/release-loop.yaml +4 -2
- package/graphs/steward/recipes.yaml +2 -1
- package/package.json +1 -1
- package/scripts/brand/check.ts +7 -5
- package/scripts/ci-public-export-import-gate.ts +154 -0
- package/scripts/ci-test-interference-gate.ts +5 -1
- package/scripts/ci-typecheck-changed.ts +82 -31
- package/scripts/docs/doc-rot.ts +164 -0
- package/scripts/docs/generate-graph-anatomy.ts +437 -0
- package/scripts/docs-cli-check.ts +4 -4
- package/scripts/expose-rubric-suggest.ts +18 -12
- package/scripts/goals/goal-census.ts +343 -0
- package/scripts/lecture-note/node.ts +31 -11
- package/scripts/lessons/handbook-page.ts +30 -3
- package/scripts/marketing/generate-ax-brief.ts +140 -0
- package/scripts/marketing/generate-feature-map.ts +118 -0
- package/scripts/measure/author-section-contribution.ts +84 -0
- package/scripts/release-loop/checklist-gate-node.ts +53 -14
- package/scripts/release-loop/cut-branch.ts +43 -13
- package/scripts/release-loop/gate-node.ts +82 -14
- package/scripts/release-loop/vault-note-node.ts +257 -8
- package/scripts/release-story/draft.ts +57 -9
- package/scripts/rhythm/daily.ts +263 -76
- package/scripts/rhythm/monthly.ts +97 -0
- package/scripts/rhythm/weekly.ts +30 -9
- package/scripts/smart-merge/resync-shadow.ts +147 -0
- package/src/acp/client.ts +17 -2
- package/src/agent-env/profile.ts +161 -0
- package/src/agent-mission/driver.ts +51 -1
- package/src/agent-mission/supervisor-metrics-cli.ts +40 -0
- package/src/agent-mission/supervisor-metrics.ts +218 -0
- package/src/agent-substrate/pr-reviewer.ts +2 -0
- package/src/ask-user-question/pending-questions.ts +5 -0
- package/src/auth/github-app-token.ts +112 -13
- package/src/autopilot/build/llm-conflict-merge.ts +32 -6
- package/src/autopilot/track-agent-shadow.ts +2 -1
- package/src/briefing/brief-items.ts +276 -0
- package/src/budget/usage-outcomes.ts +204 -0
- package/src/claims/claims-render.ts +14 -5
- package/src/cli/agent-env-cli.ts +21 -0
- package/src/cli/brief-cli.ts +73 -0
- package/src/cli/decisions-cli.ts +9 -0
- package/src/cli/doctor-cli.ts +23 -1
- package/src/cli/doctor-node-modules.ts +147 -0
- package/src/cli/intake-cli.ts +46 -17
- package/src/cli/know-cli.ts +20 -0
- package/src/cli/logs-cli.ts +43 -1
- package/src/cli/pod-cli.ts +2 -0
- package/src/cli/pr-cli.ts +80 -12
- package/src/cli/release-cli.ts +66 -29
- package/src/cli/seat-requests-cli.ts +52 -0
- package/src/cli/self-update.ts +200 -1
- package/src/cli/usage-cli.ts +26 -0
- package/src/context-bus/context-now-public.ts +16 -6
- package/src/context-bus/context-now.ts +3 -1
- package/src/context-bus/coord-events.ts +6 -4
- package/src/decisions/decision-cards.ts +33 -7
- package/src/decisions/proact-meter.ts +286 -0
- package/src/decisions/proact1-lite.ts +86 -0
- package/src/decisions/web-push-decision-cards.ts +1 -1
- package/src/discord-self-message.ts +9 -0
- package/src/domains/alert-audit.ts +271 -0
- package/src/domains/core-tools.ts +4 -3
- package/src/domains/ops-facts-tool.ts +31 -1
- package/src/flow-loop/split.ts +24 -0
- package/src/harness/harness-cli-command.ts +147 -17
- package/src/harness/harness-incidents.ts +2 -0
- package/src/harness/harness-pod-dispatch.ts +67 -8
- package/src/harness/harness-queue.ts +380 -50
- package/src/harness/harness-seams.ts +13 -3
- package/src/harness/helper-repair.ts +218 -0
- package/src/harness/helper-scan.ts +27 -4
- package/src/harness/launch-stamp.ts +236 -0
- package/src/harness/ledger-write-guard-child.fixture.ts +12 -0
- package/src/harness/ledger-write-guard.ts +35 -0
- package/src/harness/nested-elanous-policy.ts +114 -0
- package/src/harness/pod-memory-policy.ts +15 -0
- package/src/harness/repository-name.ts +55 -0
- package/src/hq/fence-audit.ts +90 -0
- package/src/hq/hq.ts +70 -6
- package/src/hq/lease.ts +9 -7
- package/src/hq/move-plan.ts +126 -0
- package/src/hq/promote.ts +31 -0
- package/src/hq/transfer.ts +185 -0
- package/src/index.ts +189 -13
- package/src/intake-plane/check.ts +63 -0
- package/src/intake-plane/digest.ts +65 -21
- package/src/intake-plane/front-classifier.ts +6 -0
- package/src/intake-plane/items.ts +3 -2
- package/src/intake-plane/lens.ts +177 -0
- package/src/intake-plane/route.ts +145 -1
- package/src/knowledge/know-find.ts +105 -0
- package/src/llm.ts +75 -19
- package/src/loops/budget.ts +36 -5
- package/src/loops/checker.ts +2 -2
- package/src/loops/orchestrator/author-depth.ts +65 -9
- package/src/loops/orchestrator/author-input-check.ts +8 -3
- package/src/loops/orchestrator/author-ledger.ts +3 -1
- package/src/loops/orchestrator/finish-rate.ts +14 -3
- package/src/loops/orchestrator/seat-share.ts +56 -0
- package/src/loops/orchestrator/tick.ts +107 -29
- package/src/loops/orchestrator/traffic.ts +117 -11
- package/src/loops/registry.ts +142 -61
- package/src/maturity/bot-slash-catalog.ts +11 -2
- package/src/maturity/feature-maturity.ts +4 -3
- package/src/maturity/tui-slash-availability.ts +40 -0
- package/src/mss/logging/log-store.ts +35 -4
- package/src/nexus/api/http-server.ts +28 -14
- package/src/nexus/api/loop-edges.ts +173 -0
- package/src/nexus/api/schedules-read.ts +13 -0
- package/src/nexus/api/seat-requests.ts +79 -56
- package/src/oauth/overload-failover-launch.ts +75 -0
- package/src/oauth/overload-failover.ts +137 -0
- package/src/prompt-enhance/enhance.ts +6 -1
- package/src/release-loop/auto-start.ts +6 -3
- package/src/release-loop/checklist.ts +19 -5
- package/src/release-loop/feature-store.ts +59 -31
- package/src/release-loop/merged-pr-checklist.ts +125 -0
- package/src/release-loop/placement.ts +98 -29
- package/src/seat-dispatch/seat-ask.ts +33 -6
- package/src/seat-dispatch/seat-request-eligibility.ts +19 -0
- package/src/seat-dispatch/seat-request-ledger.ts +133 -0
- package/src/seat-loop/seat-loop.ts +215 -12
- package/src/self-dev/ask-launch-flow.ts +22 -1
- package/src/self-dev/authored-goal-trace.ts +64 -0
- package/src/self-dev/dev-cli.ts +19 -1
- package/src/self-dev/dev-pipeline.ts +14 -9
- package/src/self-dev/draft-sweep.ts +90 -10
- package/src/self-dev/draft-triage-rules.ts +25 -8
- package/src/self-dev/entrance-registry.ts +10 -6
- package/src/self-dev/old-door.ts +73 -0
- package/src/self-dev/orchestrate.ts +15 -1
- package/src/self-dev/review-provider-fallback.ts +6 -1
- package/src/self-dev/run-supervisor.ts +49 -2
- package/src/self-implement/app-api-budget.ts +166 -0
- package/src/self-implement/budget-gate.ts +7 -5
- package/src/self-implement/follow-up-goals.ts +289 -0
- package/src/self-implement/frozen-merges.ts +3 -2
- package/src/self-implement/goal-author.ts +50 -6
- package/src/self-implement/goal-clarification-escalation.ts +5 -0
- package/src/self-implement/heal-intake.ts +120 -2
- package/src/self-implement/heal-triage.ts +44 -0
- package/src/self-implement/host-regate.ts +9 -2
- package/src/self-implement/l8-merge-queue.ts +132 -0
- package/src/self-implement/orchestrator.ts +325 -47
- package/src/self-implement/pipeline-shape.ts +1 -1
- package/src/self-implement/revert-guard.ts +42 -7
- package/src/self-implement/run-ledger.ts +6 -0
- package/src/self-implement/run-status-mapping.ts +2 -0
- package/src/self-implement/seams.ts +45 -16
- package/src/self-implement/self-implement-cli.ts +1 -0
- package/src/self-implement/speed-claims.ts +338 -0
- package/src/session-runtime/index.ts +2 -0
- package/src/session-runtime/retry-api.ts +87 -0
- package/src/session-runtime/retry-policy.ts +107 -6
- package/src/steward/triage.ts +74 -3
- package/src/steward/working-backwards.ts +20 -2
- package/src/task-cards/card-cli.ts +25 -0
- package/src/task-cards/card-store.ts +5 -3
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +63 -48
- package/src/task-orchestrator/surfaces/pod-command-job.ts +84 -9
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +48 -0
- package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +4 -3
- package/src/task-orchestrator/surfaces/pod-ledger-prod-sink.ts +75 -0
- package/src/task-orchestrator/surfaces/pod-pool.ts +70 -9
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +37 -1
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +166 -46
- package/src/task-orchestrator/surfaces/self-implement.ts +7 -1
- package/src/telegram-commands.ts +5 -0
- package/src/telegram.ts +72 -4
- package/src/user-config.ts +64 -7
- package/src/version/packed-revision.json +1 -1
- package/src/workflow-runtime/nodes/bash.ts +9 -1
- package/apps/pwa/out/_next/static/chunks/4562-071d8bac44a01069.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5977-2df489622a52a33a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-74383f890f075511.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-c496bb16da85385f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-1abfe3aec3be6bdc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-fb260b9283dbf646.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-61ec1d2e92bdd50a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-fd7e200d4d83fbd7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-d47266766766d227.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-2ce5471926761fdd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-e995d30f6800b6bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-39f89c53038a51d4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-5a753bb4ec0cc511.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-04250f0e2c0d03df.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-341480ed8e3c1ea8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-8ac8d71c2adf9c8a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-e1e47d8d940aba3d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-94dc383d3d54db1a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-b3759cc14da80908.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-194dce4a83143fce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-35bdeae2e2c17147.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-16bef3da05a900c3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-134c1bc762aee62c.js +0 -1
- package/apps/pwa/out/_next/static/css/2e33713c444d5b39.css +0 -1
- package/apps/pwa/out/_next/static/x6mjI6vqOkVVu0jFuDkz1/_buildManifest.js +0 -1
- /package/apps/pwa/out/_next/static/{x6mjI6vqOkVVu0jFuDkz1 → rv9cierV0jSOvDBm1g0XB}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4635],{5997:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>a,f6:()=>s,oD:()=>o});let n="elanous.daemon.sessionId";function s(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function o(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=s();return localStorage.setItem(n,t),t}function a(){let e=s();return localStorage.setItem(n,e),e}},15151:(e,t,r)=>{"use strict";r.d(t,{C:()=>c,DaemonProvider:()=>d,Q:()=>u});var n=r(55539),s=r(46124),o=r(8101),a=r(5997),l=r(18060),i=r(72215);let c=(0,s.createContext)(null);function d(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[d,u]=(0,s.useState)(r),[m,f]=(0,s.useState)(""),[p]=(0,s.useState)(()=>new l.ki(r));(0,s.useEffect)(()=>{let e=(0,o.Fp)();u(e),p.updateConfig(e),f((0,a.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[p]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,o.Fp)();p.updateConfig(t),u(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&f(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[p]);let x=e=>{u(t=>{let r={...t,...e};return(0,o.Qc)(e),p.updateConfig(r),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},g=e=>{f(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},h=(0,s.useMemo)(()=>({config:d,setConfig:x,client:p,sessionId:m,setSessionId:g}),[d,p,m]);return(0,n.jsx)(c.Provider,{value:h,children:t})}function u(){let e=(0,s.useContext)(c);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},66485:(e,t,r)=>{"use strict";r.d(t,{OutputsList:()=>i});var n=r(55539),s=r(46124),o=r(15151);let a={OP:"COO",MK:"CMO",TC:"CTO",UX:"CXO"},l=new Intl.DateTimeFormat("ko-KR",{timeZone:"Asia/Seoul",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});function i(){let{client:e}=(0,o.Q)(),[t,r]=(0,s.useState)([]),[a,l]=(0,s.useState)("all"),[i,d]=(0,s.useState)("loading");return(0,s.useEffect)(()=>{let t=!0;return(function(e){let{limit:t,source:r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=new URLSearchParams;void 0!==t&&n.set("limit",String(t)),void 0!==r&&n.set("source",r);let s=n.toString();return e.fetchJson("/v1/outputs".concat(s?"?".concat(s):""))})(e).then(e=>{let{outputs:n}=e;t&&(r(n),d("ready"))}).catch(()=>{t&&d("error")}),()=>{t=!1}},[e]),(0,n.jsx)(c,{outputs:t,selected:a,onSelect:l,status:i})}function c(e){let{outputs:t,selected:r,onSelect:s,status:o}=e,i=Array.from(new Map(t.map(e=>[e.kind,e.kindLabel])).entries()),c="all"===r?t:t.filter(e=>e.kind===r);return(0,n.jsxs)("main",{className:"mx-auto w-full max-w-3xl space-y-8 px-5 py-10 sm:py-16",children:[(0,n.jsxs)("header",{className:"space-y-2",children:[(0,n.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"산출물"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"엘라누스가 만든 문서\xb7슬라이드\xb7보고서\xb7영상을 한곳에서 봅니다."})]}),"loading"===o&&(0,n.jsx)("p",{role:"status",className:"text-sm text-muted-foreground",children:"산출물을 불러오는 중…"}),"error"===o&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:"산출물 목록을 읽지 못했습니다"}),"ready"===o&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{role:"group","aria-label":"종류 고르기",className:"flex flex-wrap gap-2",children:[["all","전부"],...i].map(e=>{let[o,a]=e;return(0,n.jsxs)("button",{type:"button",onClick:()=>s(o),"aria-pressed":r===o,className:"rounded-full border px-3 py-1.5 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ".concat(r===o?"border-primary bg-primary text-primary-foreground":"border-border bg-card text-foreground hover:bg-muted"),children:[a," ","all"===o?t.length:t.filter(e=>e.kind===o).length]},o)})}),0===t.length?(0,n.jsx)("p",{className:"rounded-xl border border-dashed border-border px-5 py-10 text-center text-sm text-muted-foreground",children:"아직 만든 산출물이 없습니다 — 일을 맡기면 여기에 쌓입니다"}):(0,n.jsx)("ul",{className:"space-y-3","aria-label":"산출물 목록",children:c.map((e,t)=>{var r;return(0,n.jsxs)("li",{className:"rounded-xl border border-border bg-card p-5 shadow-sm",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs text-muted-foreground",children:[(0,n.jsx)("span",{className:"rounded-md bg-muted px-2 py-1 font-medium text-foreground",children:e.kindLabel}),e.seat&&(0,n.jsx)("span",{children:null!=(r=a[e.seat])?r:e.seat}),(0,n.jsx)("time",{dateTime:e.at,children:function(e){let t=Object.fromEntries(l.formatToParts(new Date(e)).map(e=>{let{type:t,value:r}=e;return[t,r]}));return"".concat(t.month,"월 ").concat(t.day,"일 ").concat(t.hour,":").concat(t.minute)}(e.at)}),(0,n.jsx)("span",{children:"exec"===e.source?"맡긴 일":"현장"})]}),(0,n.jsx)("h2",{className:"mt-3 font-semibold leading-snug",children:e.title}),e.url?(0,n.jsx)("a",{href:e.url,target:"_blank",rel:"noopener",className:"mt-3 inline-block text-sm font-medium text-primary underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:"열기"}):e.fileName&&(0,n.jsx)("p",{className:"mt-3 text-sm text-muted-foreground",children:e.fileName})]},"".concat(e.at,"-").concat(e.kind,"-").concat(t))})})]})]})}},89657:(e,t,r)=>{Promise.resolve().then(r.bind(r,66485))}},e=>{e.O(0,[8060,2463,2196,7358],()=>e(e.s=89657)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8974],{97897:(e,s,_)=>{Promise.resolve().then(_.bind(_,1369))}},e=>{e.O(0,[211,3324,3558,5994,5977,224,2463,2196,7358],()=>e(e.s=97897)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8898],{5997:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>o,f6:()=>s,oD:()=>a});let n="elanous.daemon.sessionId";function s(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=s();return localStorage.setItem(n,t),t}function o(){let e=s();return localStorage.setItem(n,e),e}},9734:(e,t,r)=>{"use strict";r.d(t,{$:()=>l});var n=r(55539),s=r(89545),a=r(17154),o=r(44373);let i=(0,a.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function l(e){let{className:t,variant:r="default",size:a="default",...l}=e;return(0,n.jsx)(s.$,{"data-slot":"button",className:(0,o.cn)(i({variant:r,size:a,className:t})),...l})}},15151:(e,t,r)=>{"use strict";r.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var n=r(55539),s=r(46124),a=r(8101),o=r(5997),i=r(18060),l=r(72215);let d=(0,s.createContext)(null);function c(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[c,u]=(0,s.useState)(r),[m,g]=(0,s.useState)(""),[p]=(0,s.useState)(()=>new i.ki(r));(0,s.useEffect)(()=>{let e=(0,a.Fp)();u(e),p.updateConfig(e),g((0,o.oD)()),(0,l.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[p]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();p.updateConfig(t),u(t),(0,l.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&g(t=>t===e.newValue?t:((0,l.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[p]);let x=e=>{u(t=>{let r={...t,...e};return(0,a.Qc)(e),p.updateConfig(r),(0,l.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},f=e=>{g(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,l.cY)("webterm.provider.daemon.session-set",{sessionId:e})},h=(0,s.useMemo)(()=>({config:c,setConfig:x,client:p,sessionId:m,setSessionId:f}),[c,p,m]);return(0,n.jsx)(d.Provider,{value:h,children:t})}function u(){let e=(0,s.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},23660:(e,t,r)=>{"use strict";r.d(t,{KW:()=>a,jU:()=>n,nj:()=>s});class n{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 s(e,t){let r=t.trim().toLowerCase();if(!r)return{kind:"none"};let n=e.filter(e=>e.id.toLowerCase().startsWith(r));return 1===n.length?{kind:"one",id:n[0].id}:0===n.length?{kind:"none"}:{kind:"ambiguous",count:n.length}}function a(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)/1e3));return n<30?"방금":n<3600?"".concat(Math.floor(n/60),"분 전"):n<86400?"".concat(Math.floor(n/3600),"시간 전"):"".concat(Math.floor(n/86400),"일 전")}},40640:(e,t,r)=>{"use strict";r.d(t,{SessionsListPanel:()=>p});var n=r(55539),s=r(46124),a=r(58603),o=r(67327),i=r(15151),l=r(9734),d=r(23660);function c(e){return"pwa"===e.origin?"pwa":"telegram"===e.source||"tg"===e.origin?"telegram":"cli"}function u(e){let{source:t,origin:r}=e,s=c({source:t,origin:r}),a="telegram"===s?{label:"텔레그램",tone:"bg-sky-500/15 text-sky-300 ring-sky-500/30"}:"pwa"===s?{label:"PWA 챗",tone:"bg-fuchsia-500/15 text-fuchsia-300 ring-fuchsia-500/30"}:{label:"CLI",tone:"bg-slate-500/15 text-slate-300 ring-slate-500/30"};return(0,n.jsx)("span",{className:["rounded px-1.5 py-0.5 text-[11px] ring-1",a.tone].join(" "),children:a.label})}function m(e){let{messages:t,onTimeTravel:r,busy:s}=e,a=t.filter(e=>"user"===e.role||"assistant"===e.role);if(0===a.length)return(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"메시지 없음."});let o=0,i=a.map(e=>({m:e,userIndex:"user"===e.role?++o:0}));return(0,n.jsx)("div",{className:"max-h-[360px] space-y-2 overflow-y-auto rounded-md border border-border bg-background/50 p-2.5",children:i.map((e,t)=>{let{m:a,userIndex:o}=e;return(0,n.jsxs)("div",{className:["group/msg text-sm","user"===a.role?"text-foreground/90":"text-muted-foreground"].join(" "),children:[(0,n.jsx)("span",{className:["mr-1.5 rounded px-1 py-0.5 text-[10px] ring-1","user"===a.role?"bg-primary/15 text-primary ring-primary/30":"bg-muted text-muted-foreground ring-border"].join(" "),children:"user"===a.role?"나":"elanous"}),"user"===a.role&&r&&(0,n.jsx)("button",{type:"button",disabled:s,onClick:()=>r(o),title:"이 발화 직전으로 갈라치기 — u".concat(o," 부터는 미포함 (원본 불변)"),className:"mr-1.5 rounded px-1 py-0.5 text-[10px] text-violet-300 ring-1 ring-violet-500/30 transition-opacity hover:bg-violet-500/15 disabled:opacity-30 md:opacity-0 md:focus:opacity-100 md:group-hover/msg:opacity-100",children:"⑂ 여기서 갈라치기"}),(0,n.jsx)("span",{className:"whitespace-pre-wrap",children:a.content.slice(0,2e3)})]},t)})})}function g(e){let{api:t,s:r,onForked:c,onDeleted:g}=e,p=(0,a.useRouter)(),{setSessionId:x}=(0,i.Q)(),[f,h]=(0,s.useState)(!1),[v,b]=(0,s.useState)(null),[y,k]=(0,s.useState)(null),j=(0,s.useCallback)(async()=>{if(v)return v;k("load");try{let e=await t.transcript(r.id);return b(e.messages),e.messages}catch(e){return o.oR.error("불러오기 실패: ".concat(e instanceof Error?e.message:String(e))),null}finally{k(null)}},[t,r.id,v]),w=(0,s.useCallback)(async()=>{let e=!f;h(e),e&&!v&&await j()},[f,v,j]),N=(0,s.useCallback)(async()=>{k("copy");try{let e=await j();if(!e)return;let t=e.filter(e=>"user"===e.role||"assistant"===e.role).map(e=>"[".concat("user"===e.role?"나":"elanous","] ").concat(e.content)).join("\n\n");await navigator.clipboard.writeText(t),o.oR.success("복사 완료 (".concat(e.length," 메시지)"))}catch(e){o.oR.error("복사 실패: ".concat(e instanceof Error?e.message:String(e)))}finally{k(null)}},[j]),C=(0,s.useCallback)((e,t)=>{x(e),o.oR.success(t),p.push("/chat")},[x,p]),S=(0,s.useCallback)(async()=>{k("fork");try{var e;let n=await t.fork(r.id);n.ok&&n.id?(c(),C(n.id,"Fork 생성 — 이어갑니다 (".concat(n.id.slice(0,8),"…)"))):o.oR.error("Fork 실패: ".concat(null!=(e=n.error)?e:"알 수 없음"))}catch(e){o.oR.error("Fork 실패: ".concat(e instanceof Error?e.message:String(e)))}finally{k(null)}},[t,r.id,c,C]),E=(0,s.useCallback)(async e=>{k("fork");try{var n;let s=await t.fork(r.id,{beforeUser:e});s.ok&&s.id?(c(),C(s.id,"⑂ u".concat(e," 직전으로 갈라치기 — 이어갑니다 (").concat(s.id.slice(0,8),"…)"))):o.oR.error("갈라치기 실패: ".concat(null!=(n=s.error)?n:"알 수 없음"))}catch(e){o.oR.error("갈라치기 실패: ".concat(e instanceof Error?e.message:String(e)))}finally{k(null)}},[t,r.id,c,C]),I=(0,s.useCallback)(()=>C(r.id,"이 대화로 이어갑니다"),[C,r.id]),z=(0,s.useCallback)(async()=>{if(window.confirm('이 대화를 지울까요? 복구할 수 없습니다.\n\n"'.concat(r.title||r.id.slice(0,8),'"'))){k("delete");try{var e;let n=await t.delete(r.id);n.ok?(o.oR.success("대화를 지웠습니다"),g()):o.oR.error("삭제 실패: ".concat(null!=(e=n.error)?e:"알 수 없음"))}catch(e){o.oR.error("삭제 실패: ".concat(e instanceof Error?e.message:String(e)))}finally{k(null)}}},[t,r.id,r.title,g]);return(0,n.jsxs)("div",{className:"rounded-lg border border-border bg-card/50",children:[(0,n.jsxs)("div",{className:"flex items-start gap-3 p-3",children:[(0,n.jsx)("button",{type:"button",onClick:()=>void w(),className:"mt-0.5 text-muted-foreground",children:f?"▾":"▸"}),(0,n.jsxs)("div",{className:"min-w-0 flex-1 space-y-1",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsx)(u,{source:r.source,origin:r.origin}),r.active&&(0,n.jsx)("span",{className:"rounded bg-emerald-500/15 px-1.5 py-0.5 text-[11px] font-medium text-emerald-300 ring-1 ring-emerald-500/30",children:"대화중"}),r.forkedFromId&&(0,n.jsx)("span",{className:"rounded bg-violet-500/15 px-1.5 py-0.5 text-[11px] text-violet-300 ring-1 ring-violet-500/30",children:"↳ fork"}),(0,n.jsxs)("span",{className:"text-[11px] text-muted-foreground",children:[r.messageCount," 메시지 \xb7 ",(0,d.KW)(r.updatedAt)]})]}),(0,n.jsx)("p",{className:"truncate text-sm font-medium text-foreground/90",children:r.title||"(제목 없음)"}),r.preview&&(0,n.jsx)("p",{className:"truncate text-xs text-muted-foreground",children:r.preview})]}),(0,n.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:[(0,n.jsx)(l.$,{size:"sm",variant:"ghost",disabled:!!y,onClick:()=>void w(),children:f?"닫기":"보기"}),(0,n.jsx)(l.$,{size:"sm",variant:"ghost",disabled:!!y,onClick:()=>void N(),children:"copy"===y?"…":"복사"}),(0,n.jsx)(l.$,{size:"sm",variant:"ghost",disabled:!!y,onClick:()=>I(),children:"이어가기"}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",disabled:!!y,onClick:()=>void S(),children:"fork"===y?"…":"Fork"}),(0,n.jsx)(l.$,{size:"sm",variant:"ghost",disabled:!!y,onClick:()=>void z(),className:"text-rose-400 hover:text-rose-300",title:"대화 지우기(복구 불가)",children:"delete"===y?"…":"삭제"})]})]}),f&&(0,n.jsxs)("div",{className:"border-t border-border px-4 py-3",children:["load"===y&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"불러오는 중…"}),v&&(0,n.jsx)(m,{messages:v,busy:!!y,onTimeTravel:e=>void E(e)}),(0,n.jsx)("p",{className:"mt-1.5 font-mono text-[10px] text-muted-foreground",children:r.id})]})]})}function p(){var e;let{client:t}=(0,i.Q)(),r=(0,s.useMemo)(()=>new d.jU(t),[t]),[a,o]=(0,s.useState)(null),[u,m]=(0,s.useState)(!1),[p,x]=(0,s.useState)(""),[f,h]=(0,s.useState)("all"),[v,b]=(0,s.useState)(!1),[y,k]=(0,s.useState)(null),[j,w]=(0,s.useState)(""),N=(0,s.useRef)(""),C=(0,s.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e||b(!0),k(null);try{var t,n,s,a;let i=await r.list(u),l="".concat(i.total,":").concat(null!=(s=null==(t=i.sessions[0])?void 0:t.id)?s:"",":").concat(null!=(a=null==(n=i.sessions[0])?void 0:n.updatedAt)?a:"");l===N.current&&e||(N.current=l,o(i.sessions)),w(new Date().toLocaleTimeString())}catch(t){e||k(t instanceof Error?t.message:String(t))}finally{e||b(!1)}},[r,u]);(0,s.useEffect)(()=>{C()},[C]),(0,s.useEffect)(()=>{let e=setInterval(()=>{C(!0)},1e4),r=null,n=null;{let e=t.sessionStoreEventsUrl();if(e)try{r=new EventSource(e);let t=()=>{n&&clearTimeout(n),n=setTimeout(()=>{C(!0)},500)};r.addEventListener("session.created",t),r.addEventListener("session.updated",t),r.onmessage=t}catch(e){r=null}}return()=>{clearInterval(e),n&&clearTimeout(n),null==r||r.close()}},[C,t]);let S=(0,s.useMemo)(()=>{if(!a)return null;let e=p.trim().toLowerCase();return a.filter(t=>{var r,n;return("all"===f||c(t)===f)&&(!e||(null!=(r=t.title)?r:"").toLowerCase().includes(e)||(null!=(n=t.preview)?n:"").toLowerCase().includes(e)||t.id.toLowerCase().includes(e))})},[a,p,f]),E=null!=(e=null==a?void 0:a.filter(e=>e.active).length)?e:0,I=(0,s.useMemo)(()=>{var e;let t={all:null!=(e=null==a?void 0:a.length)?e:0,cli:0,telegram:0,pwa:0};for(let e of null!=a?a:[])t[c(e)]+=1;return t},[a]);return(0,n.jsxs)("div",{className:"mx-auto max-w-3xl space-y-3 p-4",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,n.jsxs)("div",{children:[(0,n.jsxs)("h1",{className:"text-lg font-semibold",children:["대화 목록 ",(0,n.jsx)("span",{className:"text-sm font-normal text-muted-foreground",children:"CLI \xb7 텔레그램"})]}),(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:[a?S&&S.length!==a.length?"".concat(S.length,"/").concat(a.length,"개 \xb7 대화중 ").concat(E):"".concat(a.length,"개 \xb7 대화중 ").concat(E):"불러오는 중…",j&&(0,n.jsxs)("span",{className:"ml-2",children:["\xb7 자동 갱신 ",j]})]})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsxs)("label",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[(0,n.jsx)("input",{type:"checkbox",checked:u,onChange:e=>m(e.target.checked)}),"빈 대화"]}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",disabled:v,onClick:()=>void C(),children:v?"…":"새로고침"})]})]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsx)("input",{type:"search",value:p,onChange:e=>x(e.target.value),placeholder:"대화 검색 (제목\xb7내용\xb7id)","aria-label":"대화 검색",className:"min-w-[180px] flex-1 rounded-md border border-border bg-background/60 px-2.5 py-1.5 text-sm outline-none ring-primary/30 focus:ring-2"}),(0,n.jsx)("div",{className:"flex items-center gap-1",children:[{key:"all",label:"전체"},{key:"cli",label:"CLI"},{key:"telegram",label:"텔레그램"},{key:"pwa",label:"PWA"}].map(e=>(0,n.jsxs)("button",{type:"button",onClick:()=>h(e.key),className:["rounded-full px-2.5 py-1 text-[11px] ring-1 transition-colors",f===e.key?"bg-primary/20 text-primary ring-primary/40":"bg-muted/40 text-muted-foreground ring-border hover:bg-muted"].join(" "),children:[e.label,"all"===e.key||I[e.key]>0?" ".concat(I[e.key]):""]},e.key))})]}),y&&(0,n.jsx)("p",{className:"text-xs text-rose-400",children:y}),a&&0===a.length&&(0,n.jsx)("p",{className:"rounded-lg border border-dashed border-border p-6 text-center text-sm text-muted-foreground",children:"대화가 없습니다. 텔레그램이나 CLI에서 대화를 시작하면 여기에 나타납니다."}),S&&a&&a.length>0&&0===S.length&&(0,n.jsx)("p",{className:"rounded-lg border border-dashed border-border p-6 text-center text-sm text-muted-foreground",children:p||"all"!==f?"검색\xb7필터 결과가 없습니다.":"대화가 없습니다."}),S&&S.length>0&&(0,n.jsx)("div",{className:"space-y-2",children:S.map(e=>(0,n.jsx)(g,{api:r,s:e,onForked:()=>void C(),onDeleted:()=>void C()},e.id))})]})}},44373:(e,t,r)=>{"use strict";r.d(t,{cn:()=>a});var n=r(20852),s=r(30984);function a(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,s.QP)((0,n.$)(t))}},58603:(e,t,r)=>{"use strict";var n=r(99027);r.o(n,"useParams")&&r.d(t,{useParams:function(){return n.useParams}}),r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}}),r.o(n,"useSearchParams")&&r.d(t,{useSearchParams:function(){return n.useSearchParams}})},60190:(e,t,r)=>{Promise.resolve().then(r.bind(r,40640))}},e=>{e.O(0,[211,8682,7327,8060,2463,2196,7358],()=>e(e.s=60190)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1718],{39713:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>r});var a=s(55539),i=s(46124),c=s(42827);class l extends Error{constructor(e,t,s){super("devices ".concat(e," on ").concat(t)),this.status=e,this.path=t,this.body=s,this.name="DevicesApiError"}}function n(e){let{api:t}=e,[s,c]=(0,i.useState)(null),[n,r]=(0,i.useState)(null),[o,d]=(0,i.useState)(!0);return((0,i.useEffect)(()=>{let e=!1;return t.fleet().then(t=>{e||(c(t),d(!1))}).catch(t=>{e||(r(t instanceof l?"(".concat(t.status,") ").concat(t.path):String(t)),d(!1))}),()=>{e=!0}},[t]),o)?(0,a.jsx)("div",{className:"text-sm opacity-70",children:"Loading device fleet…"}):n?(0,a.jsx)("div",{role:"alert",className:"rounded bg-rose-50 px-3 py-2 text-sm text-rose-900",children:n}):s?0===s.totalDevices?(0,a.jsxs)("div",{className:"rounded border border-zinc-200 bg-zinc-50 p-4 text-sm",children:[(0,a.jsx)("p",{className:"font-medium",children:"No Apple devices detected yet."}),(0,a.jsxs)("p",{className:"mt-1 opacity-70",children:["The iOS Companion writes ",(0,a.jsx)("code",{children:"~/.elanous/devices.json"})," on iCloud sync. Install it on at least one Apple device to populate this list."]})]}):(0,a.jsxs)("table",{className:"w-full text-sm",children:[(0,a.jsxs)("caption",{className:"text-xs opacity-60 text-left mb-2",children:["snapshot @ ",new Date(s.snapshotAt).toLocaleString()," \xb7 ",s.totalDevices," devices"]}),(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{className:"border-b border-zinc-200 text-xs uppercase tracking-wide opacity-70",children:[(0,a.jsx)("th",{className:"text-left py-1",children:"kind"}),(0,a.jsx)("th",{className:"text-right py-1",children:"count"}),(0,a.jsx)("th",{className:"text-left py-1 pl-3",children:"capabilities"})]})}),(0,a.jsx)("tbody",{children:s.kinds.map(e=>(0,a.jsxs)("tr",{className:"border-b border-zinc-100 align-top",children:[(0,a.jsx)("td",{className:"py-1 font-medium",children:e.kind}),(0,a.jsx)("td",{className:"py-1 text-right tabular-nums",children:e.count}),(0,a.jsx)("td",{className:"py-1 pl-3 text-xs",children:0===e.capabilities.length?(0,a.jsx)("span",{className:"opacity-50",children:"(none advertised)"}):e.capabilities.map(e=>(0,a.jsx)("span",{className:"mr-1 inline-block rounded bg-zinc-100 px-1.5 py-0.5",children:e},e))})]},e.kind))})]}):(0,a.jsx)("div",{className:"text-sm opacity-70",children:"No fleet data."})}function r(){let e=(0,i.useMemo)(()=>(function(e){var t;let s=e.baseUrl.replace(/\/+$/,""),a=null!=(t=e.fetchImpl)?t:fetch;async function i(t,i){let c={"content-type":"application/json"};e.authHeader&&(c.authorization=e.authHeader);let n=await a("".concat(s).concat(t),{...i,headers:c}),r=await n.json().catch(()=>null);if(!n.ok)throw new l(n.status,t,r);return r}return{fleet:async()=>await i(c.WF),preview:async e=>await i(c.bR,{method:"POST",body:JSON.stringify(e)})}})({baseUrl:window.location.origin}),[]);return(0,a.jsxs)("section",{className:"flex flex-col gap-4 p-4",children:[(0,a.jsxs)("header",{children:[(0,a.jsx)("h1",{className:"text-lg font-semibold",children:"Device fleet"}),(0,a.jsx)("p",{className:"text-xs opacity-70",children:"Detected Apple devices \xb7 OMF v1 templates use this to decide which capabilities to fire vs gracefully degrade. iPhone-only fleets still get full template value via the fallback chain."})]}),(0,a.jsx)(n,{api:e})]})}},42827:(e,t,s)=>{"use strict";s.d(t,{GM:()=>n,J3:()=>l,WF:()=>a,bR:()=>c,m:()=>r,r5:()=>i});let a="/v1/devices",i="/v1/approvals/merges",c="/v1/templates/capability-preview",l="/v1/idle-nudge/preview",n="/v1/morning-digest/showroom",r="/v1/next-fluent/dispatch"},71006:(e,t,s)=>{Promise.resolve().then(s.bind(s,39713))}},e=>{e.O(0,[2463,2196,7358],()=>e(e.s=71006)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8517],{9734:(e,t,s)=>{"use strict";s.d(t,{$:()=>o});var r=s(55539),i=s(89545),a=s(17154),n=s(44373);let l=(0,a.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function o(e){let{className:t,variant:s="default",size:a="default",...o}=e;return(0,r.jsx)(i.$,{"data-slot":"button",className:(0,n.cn)(l({variant:s,size:a,className:t})),...o})}},14794:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>f});var r=s(55539),i=s(3558),a=s.n(i),n=s(46124),l=s(9734),o=s(94306);let d=[{anchor:"channels",label:"Channels",description:"Telegram / Discord 봇 연결",primary:!0},{anchor:"voice",label:"Voice",description:"TTS \xb7 STT 모델 + voice 환경설정",primary:!0},{anchor:"ios",label:"iOS / mobile",description:"PWA install \xb7 iOS companion 페어링",primary:!0},{anchor:"personas",label:"Personas",description:"4 인격 (default \xb7 contrarian \xb7 pragmatist \xb7 sage) 편집",primary:!1},{anchor:"tools",label:"Tool surface",description:"chat 이 사용할 tool 셋 (readonly / chat / webterm / all)",primary:!1},{anchor:"advanced",label:"Advanced",description:"Model tier \xb7 budget guard \xb7 OCR \xb7 기타 카드 17 종",primary:!1}];var c=s(58046),u=s(55918);function h(){let e=(0,o.Qj)(),[t,s]=(0,n.useState)(null),[i,a]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{if(!e)return;let t=!0;return s(null),a(!1),e.getChatFastPath().then(e=>{let{enabled:r}=e;if("boolean"!=typeof r)throw Error("chat.fastPath is unavailable");t&&s(r)}).catch(()=>{t&&a(!0)}),()=>{t=!1}},[e]),(0,r.jsx)("section",{"aria-label":"셋업 추천","data-testid":"setup-recommendations",className:"flex flex-col gap-2 rounded border border-border bg-card p-3 text-sm",children:null===t?(0,r.jsx)("p",{role:"status",children:i?"chat.fastPath 값을 읽을 수 없습니다. 다시 접속해 확인하세요.":"추천 설정 확인 중…"}):["고칠 것 고치기 — 권한\xb7PATH\xb7서비스 파일\xb7파이썬 환경 등 고칠 수 있는 항목을 고칩니다(로그인\xb7서비스 재시작은 별도): `elanous doctor --fix --yes`",{fastPath:t}.fastPath?"짧은 물음은 빠르게 — 켜져 있음(chat.fastPath=true): 짧은 물음에 도구 없이 먼저 답합니다. 끄기: `elanous config set chat.fastPath false`":"짧은 물음은 빠르게 — 꺼져 있음(chat.fastPath=false): 켜면 짧은 물음에 도구 없이 먼저 답합니다. 켜기: `elanous config set chat.fastPath true`"].map(e=>(0,r.jsx)("p",{children:e},e))})}function p(){let[e,t]=(0,n.useState)(!1),[s,i]=(0,n.useState)(!1);return(0,r.jsxs)("section",{className:"flex flex-col gap-3","aria-labelledby":"setup-next-steps-title","data-testid":"setup-next-steps",children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("h2",{id:"setup-next-steps-title",className:"text-sm font-semibold",children:"다음 셋업(선택)"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"필요한 것만 지금 연결하세요. 나중에 해도 됩니다."})]}),(0,r.jsxs)("div",{className:"rounded border border-border bg-card p-3",children:[(0,r.jsx)(l.$,{type:"button",variant:"outline","aria-expanded":e,"aria-controls":"setup-next-bots",onClick:()=>t(e=>!e),children:"텔레그램\xb7디스코드 봇 연결"}),e&&(0,r.jsxs)("div",{id:"setup-next-bots",className:"mt-3 flex flex-col gap-3",children:[(0,r.jsx)(c.W,{}),(0,r.jsx)(l.$,{type:"button",variant:"ghost",className:"self-start",onClick:()=>t(!1),children:"나중에"})]})]}),(0,r.jsxs)("div",{className:"rounded border border-border bg-card p-3",children:[(0,r.jsx)(l.$,{type:"button",variant:"outline","aria-expanded":s,"aria-controls":"setup-next-vault",onClick:()=>i(e=>!e),children:"Obsidian 볼트\xb7스킬 폴더"}),s&&(0,r.jsxs)("div",{id:"setup-next-vault",className:"mt-3 flex flex-col gap-3",children:[(0,r.jsx)(u.Q,{}),(0,r.jsx)(l.$,{type:"button",variant:"ghost",className:"self-start",onClick:()=>i(!1),children:"나중에"})]})]})]})}function f(){let e=(0,o.Qj)(),[t,s]=(0,n.useState)(!1),[i,d]=(0,n.useState)({status:"idle"});return((0,n.useEffect)(()=>{s(!0)},[]),(0,n.useEffect)(()=>{t&&e&&(d({status:"loading"}),e.getLlmProviders().then(e=>{d({status:"ok",active:{provider:e.activeProvider||"(unset)"}})}).catch(e=>{d({status:"error",message:e.message})}))},[t,e]),t&&e)?(0,r.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,r.jsx)(h,{}),(0,r.jsx)(m,{load:i}),(0,r.jsxs)("section",{className:"flex flex-col gap-3",children:[(0,r.jsx)("h2",{className:"text-sm font-semibold",children:"곧장 chat 으로"}),(0,r.jsxs)("p",{className:"text-xs text-muted-foreground",children:["LLM 만 셋업해도 chat 은 바로 사용 가능합니다. 나머지는 필요할 때",(0,r.jsx)("span",{className:"font-mono",children:" /settings"})," 에서 추가하세요."]}),(0,r.jsx)("div",{children:(0,r.jsx)(a(),{href:"/chat","data-testid":"setup-done-chat-link",children:(0,r.jsx)(l.$,{size:"lg",children:"Chat 시작 →"})})})]}),(0,r.jsx)(p,{}),(0,r.jsx)(x,{})]}):null}function m(e){let{load:t}=e;if("loading"===t.status||"idle"===t.status)return(0,r.jsx)("section",{className:"rounded border border-border bg-card p-4",children:(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"상태 확인 중…"})});if("error"===t.status)return(0,r.jsx)("section",{className:"rounded border border-destructive/40 bg-destructive/5 p-4",children:(0,r.jsxs)("p",{className:"text-sm text-destructive",children:["LLM 상태 로드 실패: ",t.message]})});let s=t.active.provider,i="(unset)"===s;return(0,r.jsx)("section",{className:"rounded border border-primary/40 bg-primary/5 p-4","data-testid":"setup-done-active-llm",children:(0,r.jsxs)("header",{className:"flex items-center justify-between gap-3",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:"현재 LLM provider"}),(0,r.jsx)("p",{className:"mt-1 font-mono text-base font-semibold",children:s})]}),i?(0,r.jsx)(a(),{href:"/setup",children:(0,r.jsx)(l.$,{variant:"outline",size:"sm",children:"셋업"})}):(0,r.jsx)("span",{className:"rounded bg-primary/10 px-2 py-1 text-xs font-medium text-primary",children:"✓ 준비됨"})]})})}function x(){let e=d.filter(e=>e.primary),t=d.filter(e=>!e.primary);return(0,r.jsxs)("section",{className:"flex flex-col gap-3",children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("h2",{className:"text-sm font-semibold",children:"필요하면 더 셋업하기"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"모두 선택. 안 만져도 chat 은 잘 됩니다."})]}),(0,r.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-3",children:e.map(e=>(0,r.jsx)(b,{link:e},e.anchor))}),(0,r.jsxs)("details",{className:"rounded border border-border bg-card",children:[(0,r.jsxs)("summary",{className:"cursor-pointer px-3 py-2 text-xs font-medium uppercase tracking-wider text-muted-foreground",children:["기타 (",t.length,")"]}),(0,r.jsx)("div",{className:"grid grid-cols-1 gap-2 border-t border-border p-2 sm:grid-cols-3",children:t.map(e=>(0,r.jsx)(b,{link:e},e.anchor))})]})]})}function b(e){let{link:t}=e,s="/settings#".concat(t.anchor);return(0,r.jsxs)(a(),{href:s,"data-testid":"setup-done-link-".concat(t.anchor),className:"flex flex-col gap-1 rounded border border-border bg-card p-3 transition-colors hover:border-primary/40",children:[(0,r.jsx)("span",{className:"text-sm font-medium",children:t.label}),(0,r.jsx)("span",{className:"text-xs text-muted-foreground",children:t.description})]})}},18068:(e,t,s)=>{"use strict";s.d(t,{Qb:()=>n,SI:()=>o,dJ:()=>l});let r="elanous:auth-required",i=null,a=!1;function n(e){null===i&&(i=e,window.dispatchEvent(new CustomEvent(r,{detail:{path:e}})))}function l(e){let t=window,s=t=>e(t.detail);return t.addEventListener(r,s),null===i||a||e({path:i}),()=>t.removeEventListener(r,s)}function o(){a=!0}},30158:(e,t,s)=>{"use strict";s.d(t,{p:()=>n});var r=s(55539);s(46124);var i=s(8085),a=s(44373);function n(e){let{className:t,type:s,...n}=e;return(0,r.jsx)(i.p,{type:s,"data-slot":"input",className:(0,a.cn)("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",t),...n})}},44373:(e,t,s)=>{"use strict";s.d(t,{cn:()=>a});var r=s(20852),i=s(30984);function a(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return(0,i.QP)((0,r.$)(t))}},55918:(e,t,s)=>{"use strict";s.d(t,{Q:()=>c});var r=s(55539),i=s(46124),a=s(9734),n=s(30158),l=s(94306),o=s(79247);function d(e){if(e instanceof o.Iu&&e.body&&"object"==typeof e.body){var t;let s=e.body;return[null!=(t=s.reason)?t:s.error,s.path].filter(Boolean).join(": ")}return e instanceof Error?e.message:String(e)}function c(){let e=(0,l.Qj)(),[t,s]=(0,i.useState)(!1),[o,c]=(0,i.useState)(null),[u,h]=(0,i.useState)({vault:"",selection:"custom",dirs:""}),{vault:p,selection:f,dirs:m}=u,[x,b]=(0,i.useState)(!0),[g,v]=(0,i.useState)(!1),[j,y]=(0,i.useState)(""),[k,w]=(0,i.useState)(""),[N,S]=(0,i.useState)("");(0,i.useEffect)(()=>{s(!0)},[]);let C=(0,i.useCallback)(async function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"all";if(e){b(!0);try{let s=await e.getObsidianSkills();c(s),h(e=>({vault:"skills"===t?e.vault:s.obsidian.vault,selection:"vault"===t?e.selection:s.skills.activeSet,dirs:"vault"===t?e.dirs:s.skills.dirs.join("\n")})),y("")}catch(e){y(d(e))}finally{b(!1)}}},[e]);(0,i.useEffect)(()=>{t&&e&&C()},[t,e,C]);let O=async()=>{if(e){v(!0),w("");try{var t;let s=await e.setObsidian({vault:p.trim()});await C("vault"),w(null!=(t=s.warning)?t:"Vault saved.")}catch(e){w(d(e))}finally{v(!1)}}},F=async()=>{if(e){v(!0),S("");try{await e.setSkills("custom"===f?{dirs:m.split("\n").map(e=>e.trim()).filter(Boolean)}:{activeSet:f}),await C("skills"),S("Skills saved.")}catch(e){S(d(e))}finally{v(!1)}}};return t&&e?(0,r.jsxs)("section",{className:"space-y-4 rounded border border-border bg-card p-4","data-testid":"obsidian-skills-card",children:[(0,r.jsxs)("header",{className:"flex items-center justify-between gap-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h2",{className:"text-sm font-semibold",children:"Obsidian & Skills"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Choose directories on the machine running NEXUS."})]}),(0,r.jsx)(a.$,{size:"sm",variant:"outline",onClick:()=>void C("all"),disabled:x||g,children:"Refresh"})]}),x&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Loading paths…"}),j&&(0,r.jsx)("p",{role:"alert",className:"text-xs text-destructive",children:j}),o&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)("label",{htmlFor:"obsidian-vault",className:"text-sm font-medium",children:"Obsidian vault path"}),(0,r.jsx)(n.p,{id:"obsidian-vault",value:p,onChange:e=>{h(t=>({...t,vault:e.target.value})),w("")},placeholder:"/absolute/path/to/vault"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground","data-testid":"vault-validation",children:p===o.obsidian.vault?o.obsidian.looksLikeVault?"Vault found (.obsidian detected)":o.obsidian.exists?"Directory found; .obsidian not detected":"Directory not found":"Save to validate this path on the NEXUS host."}),(0,r.jsx)(a.$,{size:"sm",onClick:()=>void O(),disabled:g||!p.trim(),children:"Save vault"}),k&&(0,r.jsx)("p",{role:"status",className:"text-xs","data-testid":"vault-feedback",children:k})]}),(0,r.jsxs)("div",{className:"space-y-2 border-t border-border pt-3",children:[(0,r.jsx)("label",{htmlFor:"skills-preset",className:"text-sm font-medium",children:"Skills source"}),(0,r.jsxs)("select",{id:"skills-preset",value:f,onChange:e=>{h(t=>({...t,selection:e.target.value})),S("")},className:"flex h-9 w-full rounded-md border border-input bg-background px-3 text-sm",children:[o.skills.presets.map(e=>{var t;return(0,r.jsxs)("option",{value:e.key,children:[e.label," — ",null!=(t=e.dir)?t:"(no path)"," ",e.exists?"✓":"(missing)"]},e.key)}),(0,r.jsx)("option",{value:"custom",children:"Custom directories"})]}),"custom"===f&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("label",{htmlFor:"skills-dirs",className:"block text-xs text-muted-foreground",children:"One absolute directory per line"}),(0,r.jsx)("textarea",{id:"skills-dirs",value:m,onChange:e=>{h(t=>({...t,dirs:e.target.value})),S("")},rows:3,className:"w-full rounded-md border border-input bg-background px-3 py-2 font-mono text-xs",placeholder:"/absolute/path/to/skills"})]}),(0,r.jsx)(a.$,{size:"sm",onClick:()=>void F(),disabled:g,children:"Save skills"}),N&&(0,r.jsx)("p",{role:"status",className:"text-xs","data-testid":"skills-feedback",children:N})]})]})]}):null}},58046:(e,t,s)=>{"use strict";s.d(t,{W:()=>d});var r=s(55539),i=s(46124),a=s(9734),n=s(30158),l=s(94306);let o=["telegram","discord"];function d(){let{client:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,l.Qj)(),s=null!=e?e:t,[d,c]=(0,i.useState)([]),[u,h]=(0,i.useState)({}),[p,f]=(0,i.useState)({}),[m,x]=(0,i.useState)({}),[b,g]=(0,i.useState)(null),[v,j]=(0,i.useState)({}),[y,k]=(0,i.useState)("");(0,i.useEffect)(()=>{if(!s)return;let e=!1;return s.getChannelBots().then(t=>{let{platforms:s}=t;e||(c(s),f(e=>{let t={...e};for(let e of s)Object.hasOwn(t,e.platform)||(t[e.platform]=e.allowedUsers.join(", "));return t}))}).catch(()=>{e||k("봇 상태를 불러오지 못했습니다.")}),()=>{e=!0}},[s]);let w=async e=>{var t;if(!s)return;g(e),k("");let r=null==(t=u[e])?void 0:t.trim(),i=Object.hasOwn(p,e)?p[e].split(",").map(e=>e.trim()).filter(Boolean):void 0;h(t=>({...t,[e]:""}));try{let t=await s.setChannelBot({platform:e,...r?{token:r}:{},...void 0!==i?{allowedUsers:i}:{}});t.botName&&x(s=>({...s,[e]:t.botName})),j(s=>({...s,[e]:t.restartNeeded}));try{let e=await s.getChannelBots();c(e.platforms)}catch(e){k("저장됐지만 봇 상태를 다시 불러오지 못했습니다.")}}catch(t){k("".concat(e," 저장에 실패했습니다. 토큰과 허용 사용자 ID를 확인하세요."))}finally{g(null)}};return s?(0,r.jsxs)("section",{className:"space-y-4 rounded border border-border bg-card p-4","data-testid":"channel-bot-setup-card",children:[(0,r.jsx)("h2",{className:"text-sm font-semibold",children:"봇 연결"}),o.map(e=>{var t,s;let i=d.find(t=>t.platform===e);return(0,r.jsxs)("div",{className:"space-y-2 border-t border-border pt-3",children:[(0,r.jsx)("h3",{className:"text-sm font-medium capitalize",children:e}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:(null==i?void 0:i.configured)?"연결됨 (".concat(i.source,")"):"미연결"}),m[e]&&(0,r.jsxs)("p",{className:"text-xs",children:["봇 이름: ",m[e]]}),(0,r.jsx)("label",{htmlFor:"".concat(e,"-bot-token"),className:"block text-xs",children:"봇 토큰"}),(0,r.jsx)(n.p,{id:"".concat(e,"-bot-token"),type:"password",autoComplete:"off",value:null!=(t=u[e])?t:"",onChange:t=>h(s=>({...s,[e]:t.target.value}))}),(0,r.jsx)("label",{htmlFor:"".concat(e,"-allowed-users"),className:"block text-xs",children:"허용 사용자 ID (쉼표로 구분)"}),(0,r.jsx)(n.p,{id:"".concat(e,"-allowed-users"),value:null!=(s=p[e])?s:"",onChange:t=>f(s=>({...s,[e]:t.target.value}))}),(0,r.jsx)(a.$,{type:"button",size:"sm",disabled:null!==b,onClick:()=>void w(e),children:"확인하고 저장"}),v[e]&&(0,r.jsx)("p",{role:"status",className:"text-xs",children:"봇을 재시작해야 반영됩니다"})]},e)}),y&&(0,r.jsx)("p",{role:"alert",className:"text-xs text-destructive",children:y})]}):null}},72215:(e,t,s)=>{"use strict";let r;s.d(t,{cY:()=>c,x8:()=>l});let i={debug:0,info:1,warn:2,error:3},a="/v1/debug-logs/batch",n=null;function l(e){n=e}class o{health(){return{pending:this.queue.length,consecutiveFailures:this.consecutiveFailures,lastOkAt:this.lastOkAt,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches}}push(e){if(!(i[function(e){let t=e.slice(e.lastIndexOf(".")+1).toLowerCase();return/^(error|exception|crash|fail|failed)$/.test(t)?"error":/^(warn|degraded|timeout)$/.test(t)?"warn":/^(boot|ready|start|begin|open|ok|done|resolve|end|stop|close)$/.test(t)?"info":"debug"}(e.category)]<i[this.minLevel])){if(this.queue.push(e),this.queue.length>500){let e=this.queue.length-500;this.droppedByCap+=e,this.queue.splice(0,e)}if(this.queue.length>=100&&!this.inFlight){null!==this.timer&&(clearTimeout(this.timer),this.timer=null),this.flush();return}null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},this.flushMs))}}async flush(){if(this.timer&&(clearTimeout(this.timer),this.timer=null),this.inFlight||0===this.queue.length)return;let e=this.queue.slice(0,100);this.inFlight=!0;let t=!1,s=JSON.stringify({records:e});try{var r,i;t=await (r=this.fetchFn(s),i=this.postTimeoutMs,new Promise((e,t)=>{let s=setTimeout(()=>t(Error("debug-forward timeout after ".concat(i,"ms"))),i);r.then(t=>{clearTimeout(s),e(t)},e=>{clearTimeout(s),t(e)})}))}catch(e){t=!1}finally{this.inFlight=!1}if(!t){if(this.consecutiveFailures+=1,this.consecutiveFailures>=2&&n)try{await n(JSON.stringify({records:[...e,this.blockedNotice()]}))&&(this.fallbackBatches+=1)}catch(e){}this.wasFailing=!0,this.scheduleRetry();return}let a=this.lastOkAt;this.lastOkAt=Date.now();let l=this.consecutiveFailures;this.consecutiveFailures=0,this.queue.splice(0,e.length),this.wasFailing&&(this.wasFailing=!1,this.queue.push({ts:new Date().toISOString(),category:"pwa.debug-forwarder.recovered",event:"recovered",data:{consecutiveFailures:l,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches,pending:this.queue.length,previousOkAt:a},source:{platform:"pwa"}})),this.queue.length>0&&null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},this.flushMs))}scheduleRetry(){if(null!==this.timer||0===this.queue.length)return;let e=Math.min(this.flushMs*2**this.consecutiveFailures,3e4);this.timer=setTimeout(()=>{this.flush()},e)}blockedNotice(){return{ts:new Date().toISOString(),category:"pwa.debug-forwarder.http-blocked",event:"http-blocked",data:{consecutiveFailures:this.consecutiveFailures,pending:this.queue.length,droppedByCap:this.droppedByCap,lastOkAt:this.lastOkAt,via:"acp-fallback"},source:{platform:"pwa"}}}beaconFlush(){if(0!==this.queue.length)try{if("undefined"!=typeof navigator&&"function"==typeof navigator.sendBeacon){let e=this.queue.slice(0,100),t=new Blob([JSON.stringify({records:e})],{type:"application/json"});navigator.sendBeacon(a,t)&&this.queue.splice(0,e.length)}}catch(e){}}get pending(){return this.queue.length}constructor(e=d,t="debug",s=1e4,r=100){this.fetchFn=e,this.minLevel=t,this.postTimeoutMs=s,this.flushMs=r,this.queue=[],this.timer=null,this.inFlight=!1,this.consecutiveFailures=0,this.lastOkAt=null,this.droppedByCap=0,this.fallbackBatches=0,this.wasFailing=!1}}async function d(e){return(await fetch(a,{method:"POST",headers:{"content-type":"application/json"},body:e,keepalive:!0,..."undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout?{signal:AbortSignal.timeout(1e4)}:{}})).ok}function c(e,t){if("undefined"==typeof console)return;let s=new Date().toISOString();if(void 0!==t){let r="";try{let e=new WeakSet;r=JSON.stringify(t,(t,s)=>{if("bigint"==typeof s)return"".concat(s.toString(),"n");if("function"==typeof s)return"[fn ".concat(s.name||"anon","]");if(s&&"object"==typeof s){if(e.has(s))return"[circular]";e.add(s)}return s})}catch(e){r="[unserializable: ".concat(String(e),"]")}r&&r.length>800&&(r=r.slice(0,797)+"..."),console.debug("[".concat(s,"] ").concat(e," ").concat(r),t),u(s,e,r)}else console.debug("[".concat(s,"] ").concat(e)),u(s,e,void 0)}function u(e,t,s){let i,a=function(){if(void 0!==r)return r;let e=function(){try{let e="off"!==window.localStorage.getItem("elanous.pwa.debug.forward"),t=window.localStorage.getItem("elanous.pwa.debug.forwardLevel");return{forward:e,level:"info"===t||"warn"===t||"error"===t?t:"debug"}}catch(e){return{forward:!0,level:"debug"}}}();if(!e.forward)return r=null,null;let t=new o(d,e.level,1e4,1500);try{window.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&t.beaconFlush()})}catch(e){}return r=t,t}();if(!a)return;let n=t.slice(t.lastIndexOf(".")+1)||t;if(void 0!==s&&""!==s)try{i=JSON.parse(s)}catch(e){i=s}a.push({ts:e,category:t,event:n,...void 0!==i?{data:i}:{},source:{platform:"pwa"}})}},93323:(e,t,s)=>{Promise.resolve().then(s.bind(s,14794))},94306:(e,t,s)=>{"use strict";s.d(t,{M1:()=>d,Qj:()=>c,tI:()=>o});var r=s(55539),i=s(46124),a=s(76642),n=s(50363);let l=(0,i.createContext)(null);function o(e){let{client:t,queryClient:s,defaultStaleTimeMs:o,children:d}=e,c=(0,i.useMemo)(()=>null!=s?s:new a.E({defaultOptions:{queries:{staleTime:null!=o?o:2e3,refetchOnWindowFocus:!1}}}),[s,o]);return(0,r.jsx)(l.Provider,{value:t,children:(0,r.jsx)(n.Ht,{client:c,children:d})})}function d(){let e=(0,i.useContext)(l);if(!e)throw Error("useNexusClient must be used within <NexusProvider>");return e}function c(){return(0,i.useContext)(l)}}},e=>{e.O(0,[211,3324,8682,3558,8085,9247,2463,2196,7358],()=>e(e.s=93323)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[620],{9734:(e,t,r)=>{"use strict";r.d(t,{$:()=>o});var s=r(55539),a=r(89545),n=r(17154),i=r(44373);let l=(0,n.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function o(e){let{className:t,variant:r="default",size:n="default",...o}=e;return(0,s.jsx)(a.$,{"data-slot":"button",className:(0,i.cn)(l({variant:r,size:n,className:t})),...o})}},14786:(e,t,r)=>{"use strict";r.d(t,{N:()=>l});var s=r(55539),a=r(97479),n=r(52982);let i=[{role:"owner",label:"오너",description:"모든 화면과 운영 화면을 봅니다."},{role:"contributor",label:"기여자",description:"베타 화면과 개발 도구를 함께 봅니다."},{role:"general",label:"일반",description:"사용할 준비가 된 화면을 봅니다."}];function l(){let e=(0,a.In)(),{showBeta:t,setShowBeta:r}=(0,n.hj)();return(0,s.jsxs)("section",{"aria-label":"화면 역할",className:"rounded-lg border border-border bg-card p-4",children:[(0,s.jsx)("h2",{className:"text-base font-semibold",children:"화면 역할"}),(0,s.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:"이 기기에서 메뉴에 표시할 화면을 선택하세요. 주소를 직접 입력하면 다른 화면도 열 수 있습니다."}),(0,s.jsx)("div",{className:"mt-3 grid gap-2 sm:grid-cols-3",children:i.map(t=>{let{role:r,label:n,description:i}=t;return(0,s.jsxs)("button",{type:"button","aria-pressed":e===r,onClick:()=>(0,a.OG)(r),className:"rounded-lg border p-3 text-left transition-colors hover:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ".concat(e===r?"border-primary bg-primary/10":"border-border"),children:[(0,s.jsx)("span",{className:"block font-medium",children:n}),(0,s.jsx)("span",{className:"mt-1 block text-xs text-muted-foreground",children:i})]},r)})}),"general"===e&&(0,s.jsxs)("label",{className:"mt-4 flex items-center justify-between gap-3 border-t border-border pt-4 text-sm",children:[(0,s.jsx)("span",{children:"실험 기능 켜기"}),(0,s.jsx)("input",{type:"checkbox",role:"switch",checked:t,onChange:e=>r(e.currentTarget.checked),className:"h-5 w-5 accent-primary"})]})]})}},21774:(e,t,r)=>{Promise.resolve().then(r.bind(r,75649))},44373:(e,t,r)=>{"use strict";r.d(t,{cn:()=>n});var s=r(20852),a=r(30984);function n(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,a.QP)((0,s.$)(t))}},52982:(e,t,r)=>{"use strict";r.d(t,{hj:()=>l});var s=r(46124);let a="elanous.pwa.showBeta",n="elanous:show-beta";function i(){try{return"1"===window.localStorage.getItem(a)}catch(e){return!1}}function l(){let[e,t]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{t(i());let e=e=>{let r=e.detail;t("boolean"==typeof r?r:i())},r=e=>{(e.key===a||null===e.key)&&t(i())};return window.addEventListener(n,e),window.addEventListener("storage",r),()=>{window.removeEventListener(n,e),window.removeEventListener("storage",r)}},[]),{showBeta:e,setShowBeta:(0,s.useCallback)(e=>{t(e);try{e?window.localStorage.setItem(a,"1"):window.localStorage.removeItem(a)}catch(e){}window.dispatchEvent(new CustomEvent(n,{detail:e}))},[])}}},58603:(e,t,r)=>{"use strict";var s=r(99027);r.o(s,"useParams")&&r.d(t,{useParams:function(){return s.useParams}}),r.o(s,"usePathname")&&r.d(t,{usePathname:function(){return s.usePathname}}),r.o(s,"useRouter")&&r.d(t,{useRouter:function(){return s.useRouter}}),r.o(s,"useSearchParams")&&r.d(t,{useSearchParams:function(){return s.useSearchParams}})},75649:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>w});var s=r(55539),a=r(58603),n=r(46124),i=r(96375),l=r(14786),o=r(98136),d=r(9734),c=r(30158),u=r(44373);function p(e){var t;let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=e.trim();if(0===s.length)return{ok:!1,message:"required"};let a=null!=(t=r.minLength)?t:8;return s.length<a?{ok:!1,message:"at least ".concat(a," characters")}:r.prefix&&r.prefix.length>0&&!s.startsWith(r.prefix)?{ok:!1,message:'must start with "'.concat(r.prefix,'"')}:{ok:!0}}function x(e){let{label:t,value:r,onChange:a,validation:i,disabled:l,placeholder:o,id:x}=e,[m,g]=(0,n.useState)(!1),v=null!=x?x:"api-key-".concat(t.toLowerCase().replace(/\s+/g,"-")),f=(0,n.useMemo)(()=>p(r,i),[r,i]),h=r.length>0&&!f.ok,b=(0,n.useCallback)(e=>{a(e.target.value.replace(/^\s+|\s+$/g,""))},[a]),w=(0,n.useCallback)(()=>g(e=>!e),[]);return(0,s.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,s.jsx)("label",{htmlFor:v,className:"text-xs font-medium text-foreground/80",children:t}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)(c.p,{id:v,type:m?"text":"password",value:r,onChange:b,disabled:l,placeholder:null!=o?o:"Paste your ".concat(t),autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-invalid":h,"aria-describedby":h?"".concat(v,"-error"):void 0,className:(0,u.cn)("font-mono text-xs",h&&"border-destructive"),"data-testid":"api-key-input"}),(0,s.jsx)(d.$,{type:"button",variant:"outline",size:"sm",onClick:w,disabled:l,"aria-label":m?"Hide API key":"Show API key","data-testid":"api-key-toggle",children:m?"Hide":"Show"})]}),h&&f.message?(0,s.jsx)("p",{id:"".concat(v,"-error"),className:"text-xs text-destructive","data-testid":"api-key-error",children:f.message}):null]})}var m=r(94306),g=r(18060),v=r(8101);let f={anthropic:"sk-ant-",gemini:"AIza",openai:"sk-"};function h(e){let t=f[e];return t?{prefix:t,minLength:16}:{minLength:16}}let b={timeout:"5분 안에 로그인이 끝나지 않았습니다. 다시 시도해 주세요.","authorization-denied":"로그인이 거절되었습니다. 다시 시도해 주세요.","browser-unavailable":"브라우저 로그인을 시작하지 못했습니다. 기기 코드로 해 보세요.","port-unavailable":"로그인 응답을 받을 자리(포트 1455)가 이미 쓰이고 있습니다. 기기 코드로 해 보세요.","token-exchange":"로그인은 됐지만 토큰을 받지 못했습니다. 다시 시도해 주세요.","device-code-failed":"기기 코드를 받지 못했습니다. 네트워크를 확인하고 다시 시도해 주세요.","device-poll-failed":"로그인 확인 중 연결이 끊겼습니다. 다시 시도해 주세요.","config-save-failed":"로그인은 됐지만 설정을 저장하지 못했습니다. 다시 시도해 주세요."};function w(){var e,t;let r=(0,a.useRouter)(),c=(0,m.Qj)(),[u,x]=(0,n.useState)(!1),[f,w]=(0,n.useState)({status:"idle"}),[y,k]=(0,n.useState)(()=>Date.now()),[C,S]=(0,n.useState)(0),[E,P]=(0,n.useState)(null),[z,L]=(0,n.useState)(""),[I,_]=(0,n.useState)({status:"idle"}),[$,A]=(0,n.useState)({state:"idle"}),[K,M]=(0,n.useState)("device"),[T,U]=(0,n.useState)(!1),[G,O]=(0,n.useState)(""),[F,Q]=(0,n.useState)(""),[R,q]=(0,n.useState)(!1),B=(0,n.useMemo)(()=>u?new g.ki((0,v.Fp)()):null,[u]);(0,n.useEffect)(()=>{if(!u)return;let e=["127.0.0.1","localhost"].includes(window.location.hostname);U(e),M(e?"browser":"device")},[u]),(0,n.useEffect)(()=>{if(!B)return;let e=!0,t=!1,s=async()=>{if(!t){t=!0;try{let t=await B.getCodexLogin();if(!e)return;A(t),"idle"!==t.state&&P(e=>null!=e?e:"openai-codex"),"ok"===t.state&&r.push("/setup/done"),"error"===t.state?O(t.error):O("")}catch(t){e&&O(t instanceof Error?t.message:String(t))}finally{t=!1}}};s();let a=window.setInterval(()=>{s()},2e3);return()=>{e=!1,window.clearInterval(a)}},[B,r]);let D=(0,n.useCallback)(async e=>{try{var t;if(!(null==(t=navigator.clipboard)?void 0:t.writeText))throw Error("clipboard unavailable");await navigator.clipboard.writeText(e),Q("코드를 복사했습니다.")}catch(e){Q("복사할 수 없습니다. 위 코드를 직접 선택해 복사해주세요.")}},[]),H=(0,n.useCallback)(async e=>{let t=null!=e?e:K;if(!B||R)return;e&&M(e),q(!0),O(""),Q("");let s="browser"===t?window.open("","_blank"):null;try{let e=await B.startCodexLogin(t);A(e),"pending"===e.state&&"browser"===e.mode&&e.authorizeUrl?s?s.location.href=e.authorizeUrl:O("새 탭이 차단되었습니다. 아래 로그인 링크를 직접 열어 계속해주세요."):null==s||s.close(),"ok"===e.state&&r.push("/setup/done"),"error"===e.state&&O(e.error)}catch(e){null==s||s.close(),O(e instanceof Error?e.message:String(e))}finally{q(!1)}},[B,R,K,r]);(0,n.useEffect)(()=>{x(!0)},[]);let W=(0,n.useCallback)(async()=>{if(c){S(0),k(Date.now()),w({status:"loading"});try{let e=await c.getLlmProviders();w({status:"ok",snapshot:e})}catch(e){w({status:"error",message:e.message})}}},[c]);(0,n.useEffect)(()=>{u&&c&&W()},[u,c,W]),(0,n.useEffect)(()=>{if("loading"!==f.status)return;let e=window.setInterval(()=>S(Math.floor((Date.now()-y)/1e3)),1e3);return()=>window.clearInterval(e)},[f.status,y]);let V="ok"===f.status?f.snapshot.providers:[],J=V.find(e=>"codex"===e.flow),X=(0,n.useMemo)(()=>{var e;return null!=(e=V.find(e=>e.provider===E))?e:null},[V,E]),Y=(0,n.useMemo)(()=>!!X&&"mutating"!==I.status&&("auto"===X.flow||"apiKey"===X.flow&&p(z,h(X.provider)).ok),[X,z,I.status]),Z=(0,n.useCallback)(async()=>{if(!c||!X)return;let e={provider:X.provider};"apiKey"===X.flow&&(e.apiKey=z),_({status:"mutating"});try{await c.setLlmProvider(e),r.push("/setup/done")}catch(e){_({status:"error",message:e instanceof Error?e.message:String(e)})}},[c,X,z,r]);return u&&c?"loading"===f.status||"idle"===f.status?(0,s.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,s.jsx)(l.N,{}),(0,s.jsxs)("section",{role:"status","aria-live":"polite",className:"flex flex-col gap-4",children:[(0,s.jsxs)("p",{className:"text-sm text-muted-foreground",children:["공급자 확인 중 \xb7 ",C,"초"]}),(0,s.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2","aria-hidden":"true",children:[0,1,2].map(e=>(0,s.jsxs)("div",{className:"h-24 animate-pulse rounded border border-border bg-card p-3",children:[(0,s.jsx)("div",{className:"mb-3 h-4 w-1/2 rounded bg-muted"}),(0,s.jsx)("div",{className:"h-3 w-3/4 rounded bg-muted"})]},e))})]})]}):"error"===f.status?(0,s.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,s.jsx)(l.N,{}),(0,s.jsxs)("div",{className:"flex flex-col gap-3 rounded border border-destructive/40 bg-destructive/5 p-4",children:[(0,s.jsxs)("p",{className:"text-sm text-destructive",children:["Provider 카탈로그 로드 실패: ",f.message]}),(0,s.jsx)(d.$,{variant:"outline",size:"sm",onClick:W,children:"다시 시도"})]})]}):(0,s.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,s.jsx)(l.N,{}),J?(0,s.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded border border-primary/30 bg-primary/5 p-4",children:[(0,s.jsx)("p",{className:"text-sm font-medium",children:"구독이 있으면 추가 비용 없이"}),(0,s.jsxs)(d.$,{type:"button",variant:"outline",onClick:()=>{P(J.provider),L(""),_({status:"idle"}),window.requestAnimationFrame(()=>{var e;null==(e=document.getElementById("selected-provider"))||e.scrollIntoView({behavior:"smooth"})})},children:[J.label," 구독 로그인 보기"]})]}):null,(0,s.jsx)(j,{providers:V,selected:E,onSelect:e=>{P(e),L(""),_({status:"idle"})},activeProvider:f.snapshot.activeProvider}),X?"codex"===X.flow?(0,s.jsxs)("section",{id:"selected-provider",className:"flex flex-col gap-4 rounded border border-border bg-card p-4",children:[(0,s.jsx)("h3",{className:"text-base font-semibold",children:X.label}),"ok"===$.state?(0,s.jsx)("p",{role:"status",children:"연결됨"}):null,"pending"===$.state?"browser"===$.mode?(0,s.jsxs)("div",{role:"status",className:"flex flex-col gap-2",children:[(0,s.jsx)("p",{children:"로그인을 마치면 이 화면이 다음으로 넘어갑니다."}),$.authorizeUrl?(0,s.jsx)("a",{href:$.authorizeUrl,target:"_blank",rel:"noopener noreferrer",className:"underline",children:"ChatGPT 로그인 링크 열기"}):null,(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"새 탭이 열리지 않았다면 위 링크를 직접 여세요."}),(0,s.jsx)(d.$,{type:"button",variant:"outline",disabled:R,onClick:()=>{H("device")},children:"기기 코드로 바꾸기"})]}):(0,s.jsxs)("div",{role:"status",className:"flex flex-col gap-3",children:[(0,s.jsx)("p",{children:"아래 코드를 입력해 ChatGPT 에 로그인해주세요."}),(0,s.jsx)("strong",{className:"text-3xl tracking-widest","data-testid":"codex-user-code",children:null!=(e=$.userCode)?e:"코드 준비 중…"}),$.userCode?(0,s.jsx)(d.$,{type:"button",variant:"outline",onClick:()=>{D($.userCode)},children:"복사"}):null,F?(0,s.jsx)("p",{role:"status","aria-live":"polite",children:F}):null,$.verificationUrl?(0,s.jsx)("a",{href:$.verificationUrl,target:"_blank",rel:"noopener noreferrer",className:"underline",children:$.verificationUrl}):null]}):null,G?(0,s.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:null!=(t=b[G])?t:G}):null,"pending"!==$.state&&"ok"!==$.state?(0,s.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,s.jsx)(d.$,{type:"button",disabled:R,onClick:()=>{H()},children:"error"===$.state?"다시 시도":"ChatGPT 로 로그인"}),T&&("error"===$.state||G)?(0,s.jsxs)(d.$,{type:"button",variant:"outline",onClick:()=>{M("browser"===K?"device":"browser"),O("")},children:["다른 방식으로 (","browser"===K?"기기 코드":"브라우저",")"]}):null]}):null]}):(0,s.jsx)(N,{provider:X,apiKey:z,onApiKeyChange:L,submitState:I,canSubmit:Y,onSubmit:Z}):(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"위에서 provider 를 선택해주세요."}),(0,s.jsxs)("details",{className:"rounded border border-border bg-card",children:[(0,s.jsx)("summary",{className:"cursor-pointer p-4 text-sm font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:"고급 \xb7 자식 LLM 선호"}),(0,s.jsx)("div",{className:"p-4 pt-0",children:(0,s.jsx)(i.lN,{})})]}),(0,s.jsx)(o.Q,{})]}):(0,s.jsx)(l.N,{})}function j(e){let{providers:t,selected:r,onSelect:a,activeProvider:n}=e,i=t.filter(e=>e.recommended),l=t.filter(e=>!e.recommended);return(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("section",{className:"flex flex-col gap-2",children:[(0,s.jsx)("h2",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:"주요 provider"}),(0,s.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2",children:i.map(e=>(0,s.jsx)(y,{provider:e,selected:r===e.provider,active:n===e.provider,onSelect:a},e.provider))})]}),l.length>0?(0,s.jsxs)("details",{className:"rounded border border-border bg-card",children:[(0,s.jsxs)("summary",{className:"cursor-pointer px-3 py-2 text-xs font-medium uppercase tracking-wider text-muted-foreground",children:["기타 provider (",l.length,")"]}),(0,s.jsx)("div",{className:"grid grid-cols-1 gap-2 border-t border-border p-2 sm:grid-cols-2",children:l.map(e=>(0,s.jsx)(y,{provider:e,selected:r===e.provider,active:n===e.provider,onSelect:a},e.provider))})]}):null]})}function y(e){let{provider:t,selected:r,active:a,onSelect:n}=e;return(0,s.jsxs)("button",{type:"button",onClick:()=>n(t.provider),"data-testid":"provider-card-".concat(t.provider),"aria-pressed":r,className:(0,u.cn)("flex flex-col items-start gap-1 rounded border bg-card p-3 text-left transition-colors","hover:border-primary/40 focus-visible:border-primary focus-visible:outline-none",r?"border-primary bg-primary/5":"border-border"),children:[(0,s.jsxs)("div",{className:"flex w-full items-center justify-between gap-2",children:[(0,s.jsx)("span",{className:"text-sm font-medium",children:t.label}),(0,s.jsxs)("div",{className:"flex gap-1",children:[a?(0,s.jsx)("span",{className:"rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary",children:"현재"}):null,t.hasSavedKey?(0,s.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground",children:"key 저장됨"}):null]})]}),(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:t.description})]})}function N(e){let{provider:t,apiKey:r,onApiKeyChange:a,submitState:n,canSubmit:i,onSubmit:l}=e,o="apiKey"===t.flow,c="auto"===t.flow,u="local"===t.flow;return(0,s.jsxs)("section",{id:"selected-provider",className:"flex flex-col gap-4 rounded border border-border bg-card p-4",children:[(0,s.jsxs)("header",{className:"flex flex-col gap-1",children:[(0,s.jsx)("h3",{className:"text-base font-semibold",children:t.label}),(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:t.description})]}),o?(0,s.jsx)(x,{label:t.apiKeyLabel,value:r,onChange:a,validation:h(t.provider),disabled:"mutating"===n.status}):null,c?(0,s.jsx)("p",{className:"rounded bg-muted/50 px-3 py-2 text-xs text-muted-foreground",children:"Auto 모드는 매 호출마다 env 에서 첫 번째 사용 가능한 provider 를 선택합니다. 사용자가 export 한 env 변수에 의존하니, 실패 시 provider 를 명시 선택해주세요."}):null,u?(0,s.jsxs)("p",{className:"rounded bg-yellow-500/10 px-3 py-2 text-xs text-yellow-700 dark:text-yellow-400",children:["Local runtime probe 흐름은 PWA 에서 직접 처리할 수 없어요. 터미널에서"," ",(0,s.jsx)("span",{className:"font-mono",children:"elanous setup llm"})," 을 실행해주세요."]}):null,"error"===n.status?(0,s.jsx)("p",{className:"rounded border border-destructive/40 bg-destructive/5 px-3 py-2 text-xs text-destructive",children:n.message}):null,(0,s.jsx)("div",{className:"flex justify-end",children:(0,s.jsx)(d.$,{type:"button",onClick:l,disabled:!i,"data-testid":"setup-submit",children:"mutating"===n.status?"저장중…":"저장 & chat 으로"})})]})}},94306:(e,t,r)=>{"use strict";r.d(t,{M1:()=>d,Qj:()=>c,tI:()=>o});var s=r(55539),a=r(46124),n=r(76642),i=r(50363);let l=(0,a.createContext)(null);function o(e){let{client:t,queryClient:r,defaultStaleTimeMs:o,children:d}=e,c=(0,a.useMemo)(()=>null!=r?r:new n.E({defaultOptions:{queries:{staleTime:null!=o?o:2e3,refetchOnWindowFocus:!1}}}),[r,o]);return(0,s.jsx)(l.Provider,{value:t,children:(0,s.jsx)(i.Ht,{client:c,children:d})})}function d(){let e=(0,a.useContext)(l);if(!e)throw Error("useNexusClient must be used within <NexusProvider>");return e}function c(){return(0,a.useContext)(l)}},97479:(e,t,r)=>{"use strict";r.d(t,{GC:()=>a,In:()=>d,OG:()=>l});var s=r(46124);let a="elanous.pwa.role",n="elanous:pwa-role";function i(){try{let e=window.localStorage.getItem(a);if("owner"===e||"contributor"===e||"general"===e)return e}catch(e){}return"general"}function l(e){try{window.localStorage.setItem(a,e)}catch(e){}"function"==typeof window.dispatchEvent&&window.dispatchEvent(new Event(n))}function o(e){if("function"!=typeof window.addEventListener)return()=>{};window.addEventListener(n,e);let t=t=>{(t.key===a||null===t.key)&&e()};return window.addEventListener("storage",t),()=>{window.removeEventListener(n,e),window.removeEventListener("storage",t)}}function d(){return(0,s.useSyncExternalStore)(o,i,()=>"general")}}},e=>{e.O(0,[211,3324,8682,8085,8060,9247,3194,2463,2196,7358],()=>e(e.s=21774)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7556],{5997:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>s,f6:()=>n,oD:()=>a});let o="elanous.daemon.sessionId";function n(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(o,e),e):localStorage.getItem(o)}();if(e)return e;let t=n();return localStorage.setItem(o,t),t}function s(){let e=n();return localStorage.setItem(o,e),e}},15151:(e,t,r)=>{"use strict";r.d(t,{C:()=>c,DaemonProvider:()=>u,Q:()=>d});var o=r(55539),n=r(46124),a=r(8101),s=r(5997),i=r(18060),l=r(72215);let c=(0,n.createContext)(null);function u(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[u,d]=(0,n.useState)(r),[p,m]=(0,n.useState)(""),[h]=(0,n.useState)(()=>new i.ki(r));(0,n.useEffect)(()=>{let e=(0,a.Fp)();d(e),h.updateConfig(e),m((0,s.oD)()),(0,l.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[h]),(0,n.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();h.updateConfig(t),d(t),(0,l.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&m(t=>t===e.newValue?t:((0,l.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[h]);let f=e=>{d(t=>{let r={...t,...e};return(0,a.Qc)(e),h.updateConfig(r),(0,l.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},w=e=>{m(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,l.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,n.useMemo)(()=>({config:u,setConfig:f,client:h,sessionId:p,setSessionId:w}),[u,h,p]);return(0,o.jsx)(c.Provider,{value:b,children:t})}function d(){let e=(0,n.useContext)(c);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},23660:(e,t,r)=>{"use strict";r.d(t,{KW:()=>a,jU:()=>o,nj:()=>n});class o{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 n(e,t){let r=t.trim().toLowerCase();if(!r)return{kind:"none"};let o=e.filter(e=>e.id.toLowerCase().startsWith(r));return 1===o.length?{kind:"one",id:o[0].id}:0===o.length?{kind:"none"}:{kind:"ambiguous",count:o.length}}function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now(),r=Date.parse(e);if(!Number.isFinite(r))return"";let o=Math.max(0,Math.floor((t-r)/1e3));return o<30?"방금":o<3600?"".concat(Math.floor(o/60),"분 전"):o<86400?"".concat(Math.floor(o/3600),"시간 전"):"".concat(Math.floor(o/86400),"일 전")}},37371:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>f});var o=r(55539),n=r(46124),a=r(58603),s=r(15151),i=r(74780),l=r(54508),c=r(97479),u=r(92161),d=r(23660);let p=()=>({items:[],loading:!0,error:!1});function m(e){let{title:t,href:r,loading:n,error:a,empty:s,retry:i,children:l}=e;return(0,o.jsxs)("section",{"aria-label":t,className:"rounded-xl border border-border bg-card p-5 shadow-sm",children:[(0,o.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,o.jsx)("h2",{className:"text-lg font-semibold",children:t}),r&&(0,o.jsx)("a",{href:r,className:"text-sm font-medium text-primary underline underline-offset-4",children:"모두 보기"})]}),n?(0,o.jsx)("p",{role:"status",className:"mt-4 text-sm text-muted-foreground",children:"불러오는 중…"}):a?(0,o.jsxs)("div",{className:"mt-4 text-sm",role:"alert",children:["목록을 읽지 못했습니다. ",(0,o.jsx)("button",{type:"button",onClick:i,className:"font-medium text-primary underline underline-offset-4",children:"다시 시도"})]}):l||(0,o.jsx)("p",{className:"mt-4 text-sm text-muted-foreground",children:s})]})}function h(){let{client:e,setSessionId:t}=(0,s.Q)(),r=(0,c.In)(),h=(0,u.EX)(r,"/approvals"),f=(0,a.useRouter)(),w=(0,n.useMemo)(()=>(0,i.ll)({client:e}),[e]),b=(0,n.useMemo)(()=>(0,l.tV)({client:e}),[e]),g=(0,n.useMemo)(()=>new d.jU(e),[e]),[v,y]=(0,n.useState)(()=>({items:[],loading:!0,error:!1})),[x,k]=(0,n.useState)(p),[j,E]=(0,n.useState)(p),I=(0,n.useCallback)(async()=>{y(e=>({...e,loading:!0,error:!1}));try{let[e,t]=await Promise.all([w.list(),b.list()]);y({items:[{graph:e.items,merge:t.items}],loading:!1,error:!1})}catch(e){y({items:[],loading:!1,error:!0})}},[w,b]),S=(0,n.useCallback)(async()=>{k(e=>({...e,loading:!0,error:!1}));try{let t=await e.listExecRequests();k({items:[...t.items].sort((e,t)=>t.createdAt.localeCompare(e.createdAt)).slice(0,5),loading:!1,error:!1})}catch(e){k({items:[],loading:!1,error:!0})}},[e]),C=(0,n.useCallback)(async()=>{E(e=>({...e,loading:!0,error:!1}));try{let e=await g.list();E({items:[...e.sessions].sort((e,t)=>t.updatedAt.localeCompare(e.updatedAt)).slice(0,5),loading:!1,error:!1})}catch(e){E({items:[],loading:!1,error:!0})}},[g]);(0,n.useEffect)(()=>{h&&I()},[h,I]),(0,n.useEffect)(()=>{S()},[S]),(0,n.useEffect)(()=>{C()},[C]);let U=v.items[0];return(0,o.jsxs)("main",{className:"mx-auto w-full max-w-3xl space-y-6 px-4 py-8 text-foreground sm:px-8",children:[(0,o.jsxs)("header",{children:[(0,o.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"오늘"}),(0,o.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:"기다리는 결정과 최근 활동을 한눈에 확인하세요."})]}),(0,o.jsx)(m,{title:"승인 대기",href:h?"/approvals":void 0,loading:h&&v.loading,error:h&&v.error,empty:"지금 결정 대기 중인 일이 없습니다.",retry:()=>void I(),children:h&&U&&(U.graph.length>0||U.merge.length>0)?(0,o.jsxs)("ul",{className:"mt-4 space-y-2 text-sm",children:[U.graph.map(e=>(0,o.jsx)("li",{className:"rounded-lg border border-border p-3",children:e.message||e.graphId},"".concat(e.graphId,"/").concat(e.runId))),U.merge.map(e=>(0,o.jsx)("li",{className:"rounded-lg border border-border p-3",children:e.title},e.number))]}):null}),(0,o.jsx)(m,{title:"최근 맡긴 일",href:"/exec",loading:x.loading,error:x.error,empty:"아직 맡긴 일이 없습니다.",retry:()=>void S(),children:x.items.length>0?(0,o.jsx)("ul",{className:"mt-4 space-y-2",children:x.items.map(e=>(0,o.jsx)("li",{children:(0,o.jsx)("a",{className:"block rounded-lg border border-border p-3 text-sm hover:border-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary",href:"/exec?request=".concat(encodeURIComponent(e.id)),children:e.text.trim().split(/\r?\n/,1)[0]||"제목 없는 일"})},e.id))}):null}),(0,o.jsx)(m,{title:"최근 대화",href:"/chat",loading:j.loading,error:j.error,empty:"아직 대화가 없습니다.",retry:()=>void C(),children:j.items.length>0?(0,o.jsx)("ul",{className:"mt-4 space-y-2",children:j.items.map(e=>(0,o.jsx)("li",{children:(0,o.jsx)("button",{type:"button",onClick:()=>{t(e.id),f.push("/chat")},className:"w-full rounded-lg border border-border p-3 text-left text-sm hover:border-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary",children:e.title||e.preview||"대화"})},e.id))}):null})]})}function f(){let[e,t]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{t(!0)},[]),e?(0,o.jsx)(h,{}):null}},42827:(e,t,r)=>{"use strict";r.d(t,{GM:()=>i,J3:()=>s,WF:()=>o,bR:()=>a,m:()=>l,r5:()=>n});let o="/v1/devices",n="/v1/approvals/merges",a="/v1/templates/capability-preview",s="/v1/idle-nudge/preview",i="/v1/morning-digest/showroom",l="/v1/next-fluent/dispatch"},54508:(e,t,r)=>{"use strict";r.d(t,{V5:()=>a,tV:()=>s});var o=r(42827);class n extends Error{constructor(e,t,r){super(r||t),this.status=e,this.error=t,this.reason=r,this.name="MergeApprovalsApiError"}}function a(e,t){return e instanceof n?401===e.status||"unauthorized"===e.error?{text:"이 기기에 소유자 토큰이 없어 승인 목록을 못 읽었습니다 — 이미 연결된 기기의 설정 › 연결 토큰 만들기 에서 토큰을 만들어, 이 기기의 설정 › 데몬 연결 › 연결 토큰 칸에 붙이면 바로 보입니다.",href:"/app/settings/#bearer-token"}:"gh-failed"===e.error?{text:"데몬이 GitHub 를 읽지 못했습니다(데몬 기계의 gh 로그인\xb7네트워크) — 잠시 뒤 다시 열어 보세요.".concat(e.reason?" 사유: ".concat(e.reason.split("\n")[0].slice(0,160)):"")}:"gh-invalid-response"===e.error?{text:"GitHub 응답을 해석하지 못했습니다 — 잠시 뒤 다시 열어 보세요."}:"approvals-repo-unknown"===e.error?{text:"승인할 저장소를 모릅니다 — 데몬 설정 intake.approvals.repo(예: owner/repo)를 채워 주세요.",href:"/app/settings/"}:e.reason?{text:e.reason}:{text:"".concat(t," (").concat(e.status," ").concat(e.error,")")}:e instanceof TypeError?{text:"데몬에 닿지 못했습니다 — 데몬이 켜져 있는지, 이 기기가 같은 네트워크(tailnet)에 있는지 확인하세요."}:{text:e instanceof Error&&e.message?e.message:t}}function s(e){var t,r;let a=null!=(t=e.fetchImpl)?t:fetch,s=(null!=(r=e.baseUrl)?r:"").replace(/\/+$/,"");async function i(t,r){let o={...r,headers:{"content-type":"application/json",...e.authHeader?{authorization:e.authHeader}:{}}},i=e.client?await e.client.fetchResponse(t,o):await a("".concat(s).concat(t),o),l=await i.json().catch(()=>null);if(!i.ok){var c;let e=l&&"object"==typeof l?l:{};throw new n(i.status,null!=(c=e.error)?c:"request-failed",e.reason)}return l}return{list:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"open";return i("merged"===e?"".concat(o.r5,"?state=merged"):o.r5)},get:e=>i("".concat(o.r5,"/").concat(e)),check:(e,t)=>i("".concat(o.r5,"/").concat(e,"/check"),{method:"POST",body:JSON.stringify({headSha:t})}),merge:(e,t)=>i("".concat(o.r5,"/").concat(e,"/merge"),{method:"POST",body:JSON.stringify({headSha:t})})}}},58603:(e,t,r)=>{"use strict";var o=r(99027);r.o(o,"useParams")&&r.d(t,{useParams:function(){return o.useParams}}),r.o(o,"usePathname")&&r.d(t,{usePathname:function(){return o.usePathname}}),r.o(o,"useRouter")&&r.d(t,{useRouter:function(){return o.useRouter}}),r.o(o,"useSearchParams")&&r.d(t,{useSearchParams:function(){return o.useSearchParams}})},74780:(e,t,r)=>{"use strict";function o(e){return{slides:e.slides.map(e=>{let{image:t,caption:r,include:o}=e;return{image:t,caption:r,include:o}}),caption:{hook:e.caption.hook,body:e.caption.body},hashtags:[...e.hashtags],cover:{text:e.cover.text,sub:e.cover.sub},location:e.location}}r.d(t,{$Y:()=>s,LP:()=>l,Mz:()=>o,ll:()=>u,rH:()=>i});class n extends Error{constructor(e,t){super(t),this.status=e,this.name="GraphApprovalsApiError"}}let a={list:"목록을 보려면",decide:"승인하려면",save:"초안을 저장하려면"},s="/app/settings/#bearer-token";function i(e){return e instanceof n&&(401===e.status||403===e.status)}function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"decide";return e instanceof n?401===e.status||403===e.status?"".concat(a[t]," 이 기기를 데몬에 연결해야 합니다 — 설정 › 데몬 연결 › 연결 토큰 칸에 토큰을 넣어 주세요."):404===e.status?"이 실행을 찾지 못했습니다. 목록을 다시 확인해 주세요.":409===e.status?"이미 결정된 실행입니다. 목록을 다시 확인해 주세요.":400===e.status?"결정 내용을 확인한 뒤 다시 시도해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요.":e instanceof TypeError?"서버에 연결하지 못했습니다. 연결 상태를 확인해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요."}let c="/v1/graph-approvals";function u(e){var t,r;let o=(null!=(t=e.baseUrl)?t:"").replace(/\/+$/,""),a=null!=(r=e.fetchImpl)?r:fetch;async function s(t,r){let s={...r,headers:{"content-type":"application/json",...e.authHeader?{authorization:e.authHeader}:{}}},i=e.client?await e.client.fetchResponse(t,s):await a("".concat(o).concat(t),s),l=await i.json().catch(()=>null);if(!i.ok){let e=l&&"object"==typeof l&&"error"in l&&"string"==typeof l.error?l.error:"request-failed";throw new n(i.status,e)}return l}return{list:()=>s(c),decide:(e,t,r)=>s("".concat(c,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t)),{method:"POST",body:JSON.stringify({decision:r})}),saveFeedDraft:(e,t,r)=>s("".concat(c,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t),"/feed-draft"),{method:"PUT",body:JSON.stringify(r)}),feedMedia:async(t,r,s)=>{let i="".concat(c,"/").concat(encodeURIComponent(t),"/").concat(encodeURIComponent(r),"/media?path=").concat(encodeURIComponent(s)),l={headers:e.authHeader?{authorization:e.authHeader}:{}},u=e.client?await e.client.fetchResponse(i,l):await a("".concat(o).concat(i),l);if(!u.ok)throw new n(u.status,"media-failed");return u.blob()}}}},78486:(e,t,r)=>{Promise.resolve().then(r.bind(r,37371))},92161:(e,t,r)=>{"use strict";r.d(t,{dY:()=>s,EX:()=>i});let o={pwaRoute:{"/":{pwa:"stable"},"/404":{pwa:"stable"},"/setup":{pwa:"stable"},"/setup/done":{pwa:"stable"},"/consult":{pwa:"stable"},"/chat":{pwa:"stable"},"/today":{pwa:"stable"},"/term":{pwa:"stable"},"/live":{pwa:"stable"},"/market":{pwa:"stable"},"/sessions":{pwa:"stable"},"/settings":{pwa:"beta"},"/editor":{pwa:"beta"},"/intake":{pwa:"beta"},"/trace":{pwa:"beta"},"/inside":{pwa:"beta"},"/board":{pwa:"beta"},"/autopilot":{pwa:"beta"},"/missions/[id]":{pwa:"beta"},"/tasks":{pwa:"beta"},"/workspace":{pwa:"beta"},"/reflection":{pwa:"beta"},"/vault":{pwa:"beta"},"/observatory":{pwa:"beta"},"/exec":{pwa:"beta"},"/outputs":{pwa:"beta"},"/field":{pwa:"beta"},"/showroom":{pwa:"beta"},"/workflows":{pwa:"beta"},"/approvals":{pwa:"tool"},"/worktrees":{pwa:"tool"},"/design-check":{pwa:"tool"},"/control":{pwa:"tool"},"/scheduler":{pwa:"ops"},"/loops":{pwa:"beta"},"/ops/release":{pwa:"ops"},"/ops/seats":{pwa:"ops"},"/ops/checklist":{pwa:"ops"},"/dashboard":{pwa:"ops"},"/bots":{pwa:"ops"},"/botlab":{pwa:"ops"},"/morning":{pwa:"broken"},"/settings/devices":{pwa:"broken"},"/workflows/chat-ui":{pwa:"broken"},"/share":{pwa:"system"}}},n=Object.fromEntries(Object.entries(o.pwaRoute).map(e=>{let[t,r]=e;return[t,r.pwa]}));function a(e){var t;let r=(null==(t=e.split(/[?#]/,1)[0])?void 0:t.replace(/\/+$/,""))||"/";return Object.prototype.hasOwnProperty.call(n,r)?r:r.startsWith("/missions/")&&-1===r.slice(10).indexOf("/")?"/missions/[id]":r}function s(e){let t=a(e);return Object.prototype.hasOwnProperty.call(n,t)?n[t]:void 0}function i(e,t,r){let n=a(t);if("general"===e&&(null==r?void 0:r.showBeta)&&"beta"===s(n))return!0;let i=function(e,t){var r;if(!Object.prototype.hasOwnProperty.call(o.pwaRoute,e))return;let n=o.pwaRoute[e];return null!=(r=n.pwa)?r:"desktop"===t?n.pwa:void 0}(n,"pwa");return!!i&&("owner"===e||"system"!==i&&("/settings"===n||"stable"===i||"contributor"===e&&("beta"===i||"tool"===i)))}},97479:(e,t,r)=>{"use strict";r.d(t,{GC:()=>n,In:()=>c,OG:()=>i});var o=r(46124);let n="elanous.pwa.role",a="elanous:pwa-role";function s(){try{let e=window.localStorage.getItem(n);if("owner"===e||"contributor"===e||"general"===e)return e}catch(e){}return"general"}function i(e){try{window.localStorage.setItem(n,e)}catch(e){}"function"==typeof window.dispatchEvent&&window.dispatchEvent(new Event(a))}function l(e){if("function"!=typeof window.addEventListener)return()=>{};window.addEventListener(a,e);let t=t=>{(t.key===n||null===t.key)&&e()};return window.addEventListener("storage",t),()=>{window.removeEventListener(a,e),window.removeEventListener("storage",t)}}function c(){return(0,o.useSyncExternalStore)(l,s,()=>"general")}}},e=>{e.O(0,[8060,2463,2196,7358],()=>e(e.s=78486)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7580],{8571:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>ep});var r=n(55539),a=n(46124),s=n(3558),l=n.n(s),i=n(73855),o=n(94306),d=n(21501),c=n(34885),u=n(16241);let x=["L0","L1","L2","L3"],f=e=>"string"==typeof e&&e.trim()?e:null;function m(e,t){var n;let r=null==(n=t.q)?void 0:n.trim().toLowerCase();return e.runs.filter(n=>{var a;return(!t.universe||n.universe===t.universe)&&(!t.status||n.status===t.status)&&(!r||n.runId.toLowerCase().includes(r)||(null!=(a=n.pr)?a:"").includes(r)||n.universe.toLowerCase().includes(r))&&(!t.finding||(function(e,t){let n=new Set;for(let r of e.decisions)if(r.runId===t){let e=p(r);e&&n.add(e)}return n})(e,n.runId).has(t.finding))&&(void 0===t.from||Date.parse(n.lastTs)>=t.from)&&(void 0===t.to||Date.parse(n.firstTs)<=t.to)})}function g(e,t){return e.decisions.filter(e=>e.runId===t).slice().reverse()}function p(e){var t;if("VERIFY"!==e.kind)return null;let n=null!=(t=e.why)?t:null;if(!n)return null;let r=n.toLowerCase().replace(/#\d+/g,"#").replace(/:\d+(:\d+)?/g,"").replace(/\d+/g,"n").replace(/\s+/g," ").trim();return r.length>=6?r:null}function h(e){return"PLAN"===e.kind?"author":"ROUTE"===e.kind?"build":"VERIFY"===e.kind||"HEAL"===e.kind?"review":"SHIP"===e.kind?"land":null}function v(e,t){return e.rows.filter(e=>{var n;return(null==(n=e.data)?void 0:n.runId)===t}).map(e=>({ts:e.ts,category:e.category,event:e.event,...(0,u.dl)(e)})).sort((e,t)=>e.ts<t.ts?1:-1)}function b(e){let t=[];if(e.finding&&t.push({key:"finding",label:"같은 지적: ".concat(e.finding.slice(0,24)).concat(e.finding.length>24?"…":"")}),void 0!==e.from&&void 0!==e.to){let n=e=>new Date(e).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1});t.push({key:"time",label:"시간: ".concat(n(e.from),"–").concat(n(e.to))})}return e.universe&&t.push({key:"universe",label:"우주: ".concat(e.universe)}),e.status&&t.push({key:"status",label:"상태: ".concat(e.status)}),e.runId&&t.push({key:"runId",label:"런: ".concat(e.runId.replace(/^run-/,"").slice(0,8))}),e.q&&t.push({key:"q",label:"검색: ".concat(e.q)}),t}function y(e,t){return"universe"===t.kind?{...e,level:"L1",universe:t.id.slice(2)}:"run"===t.kind?{...e,level:"L2",runId:t.id.slice(2)}:"decision"===t.kind?{...e,level:"L3",decision:Number(t.id.slice(2))}:e}function j(e){if("L3"===e.level){let{decision:t,...n}=e;return{...n,level:"L2"}}if("L2"===e.level){let{runId:t,...n}=e;return{...n,level:"L1"}}if("L1"===e.level){let{universe:t,...n}=e;return{...n,level:"L0"}}return e}var w=n(56830),k=n(90932),N=n(83183),I=n(47082),M=n(52973),S=n(663),L=n(19630),E=n(33114);let R={running:"#818cf8",landed:"#4ade80",blocked:"#fb7185",quiet:"#64748b",ok:"#4ade80",bad:"#fb7185",info:"#c7d2fe"},A={universe:"#67e8f9",run:"#818cf8",stage:"#c7d2fe",decision:"#f0abfc"},C={PLAN:"#38bdf8",ROUTE:"#a78bfa",VERIFY:"#fbbf24",HEAL:"#34d399",ESCALATE:"#fb7185",SHIP:"#4ade80"};function T(e){return("universe"===e.kind?14:"run"===e.kind?7:"stage"===e.kind?9:5)+Math.min(10,Math.sqrt(e.weight)*("universe"===e.kind?2.5:1.2))}function q(e,t,n,r){return{x:t/2-e.x*r,y:n/2-e.y*r,k:r}}function D(e){let{nodes:t,edges:n,selected:s,onSelect:l,onDrill:i,height:o=560}=e,d=(0,a.useRef)(null),[c,u]=(0,a.useState)(null),x=null!=c?c:s,f=(0,a.useMemo)(()=>(function(e,t){let n=new Set;if(!t)return n;for(let r of(n.add(t),e))r.source===t&&n.add(r.target),r.target===t&&n.add(r.source);return n})(n,x),[n,x]);(0,a.useRef)(f).current=f;let m=(0,a.useRef)({onSelect:l,onDrill:i,setHover:u});m.current={onSelect:l,onDrill:i,setHover:u};let g=(0,a.useRef)(null),p=(0,a.useRef)(null),h="".concat(t.map(e=>{var t;return"".concat(e.id,":").concat(e.kind,":").concat(null!=(t=e.status)?t:"",":").concat(e.weight)}).join("|"),"#").concat(n.map(e=>"".concat(e.source,">").concat(e.target,":").concat(e.kind)).join("|")),v=(0,a.useRef)({nodes:t,edges:n});v.current={nodes:t,edges:n},(0,a.useEffect)(()=>{let e=d.current;if(!e)return;let{nodes:t,edges:n}=v.current,r=e.clientWidth||800,a=(0,S.A)(e);a.selectAll("*").remove();let s=a.append("g"),l=t.map(e=>({...e})),i=new Map(l.map(e=>[e.id,e])),c=n.filter(e=>i.has(e.source)&&i.has(e.target)).map(e=>({source:e.source,target:e.target,kind:e.kind})),u=s.append("g").attr("stroke-linecap","round").selectAll("line").data(c).join("line").attr("stroke",e=>"parent"===e.kind?"#f0abfc":"decides"===e.kind?"#a78bfa":"#6366f1").attr("stroke-width",e=>"parent"===e.kind?1.6:1).attr("stroke-dasharray",e=>"parent"===e.kind?"4 3":null).attr("data-trace-edge",e=>"".concat(e.source,">").concat(e.target)),x=s.append("g").selectAll("g").data(l).join("g").attr("data-trace-node",e=>e.id).style("cursor","pointer").on("mouseenter",(e,t)=>m.current.setHover(t.id)).on("mouseleave",()=>m.current.setHover(null)).on("click",(e,t)=>{e.stopPropagation(),m.current.onSelect(t.id)}).on("dblclick",(e,t)=>{if(e.stopPropagation(),null!=t.fx){t.fx=null,t.fy=null,f.alpha(.3).restart();return}m.current.onDrill(t)});x.append("circle").attr("r",e=>T(e)).attr("fill",e=>{var t;return"decision"===e.kind?null!=(t=C[e.label])?t:A.decision:e.status&&R[e.status]||A[e.kind]}).attr("fill-opacity",.9).attr("stroke","#0f172a").attr("stroke-width",1.5),x.append("text").text(e=>"decision"===e.kind?"":e.label).attr("x",e=>T(e)+4).attr("y",3).attr("fill","#e2e8f0").attr("font-size",e=>"universe"===e.kind?14:12).attr("font-family","ui-monospace, SFMono-Regular, monospace").style("pointer-events","none"),x.append("title").text(e=>"".concat(e.kind," \xb7 ").concat(e.label).concat(e.status?" \xb7 ".concat(e.status):""));let f=(0,w.A)(l).force("link",(0,k.A)(c).id(e=>e.id).distance(e=>"contains"===e.kind?70:"decides"===e.kind?40:60).strength(.7)).force("charge",(0,N.A)().strength(e=>"universe"===e.kind?-420:-90)).force("collide",(0,I.A)().radius(e=>T(e)+3)).force("center",(0,M.A)(r/2,o/2)).on("tick",()=>{u.attr("x1",e=>{var t;return null!=(t=e.source.x)?t:0}).attr("y1",e=>{var t;return null!=(t=e.source.y)?t:0}).attr("x2",e=>{var t;return null!=(t=e.target.x)?t:0}).attr("y2",e=>{var t;return null!=(t=e.target.y)?t:0}),x.attr("transform",e=>{var t,n;return"translate(".concat(null!=(t=e.x)?t:0,",").concat(null!=(n=e.y)?n:0,")")})}),h=(0,E.A)().on("start",(e,t)=>{e.active||f.alphaTarget(.2).restart(),t.fx=t.x,t.fy=t.y}).on("drag",(e,t)=>{t.fx=e.x,t.fy=e.y}).on("end",e=>{e.active||f.alphaTarget(0)});x.call(h);let b=!1,y=(0,L.s_)().scaleExtent([.2,6]).on("zoom",e=>{e.sourceEvent&&(b=!0),s.attr("transform",e.transform.toString()),p.current&&(p.current.cur={x:e.transform.x,y:e.transform.y,k:e.transform.k})});a.call(y).on("dblclick.zoom",null).on("click",()=>m.current.onSelect(null));let j=e=>{a.call(y.transform,L.GS.translate(e.x,e.y).scale(e.k))};p.current&&cancelAnimationFrame(p.current.raf),p.current={apply:j,cur:{x:0,y:0,k:1},fit:null,width:r,nodes:l,raf:0},j({x:0,y:0,k:1});let D="function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,F=(e,t,n)=>{let a=p.current;if(!a)return;if(cancelAnimationFrame(a.raf),D||n<=0)return void j(t);let s=performance.now(),l=i=>{let d=Math.min(1,(i-s)/n);j(function(e,t,n,r,a){let s={x:(r/2-e.x)/e.k,y:(a/2-e.y)/e.k},l={x:(r/2-t.x)/t.k,y:(a/2-t.y)/t.k},i=e.k*Math.pow(t.k/e.k,n);return{x:r/2-(s.x+(l.x-s.x)*n)*i,y:a/2-(s.y+(l.y-s.y)*n)*i,k:i}}(e,t,d<.5?4*d*d*d:1-Math.pow(-2*d+2,3)/2,r,o)),d<1&&p.current===a&&(a.raf=requestAnimationFrame(l))};a.raf=requestAnimationFrame(l)};g.current=F;let P=()=>{if(b||0===l.length)return;let e=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:24;if(0===e.length||t<=0||n<=0)return{x:0,y:0,k:1};let a=1/0,s=1/0,l=-1/0,i=-1/0;for(let t of e)a=Math.min(a,t.x-t.r),s=Math.min(s,t.y-t.r),l=Math.max(l,t.x+t.r+90),i=Math.max(i,t.y+t.r);let o=Math.max(.2,Math.min(1.5,(t-2*r)/Math.max(1,l-a),(n-2*r)/Math.max(1,i-s)));return{x:(t-(l-a)*o)/2-a*o,y:(n-(i-s)*o)/2-s*o,k:o}}(l.map(e=>{var t,n;return{x:null!=(t=e.x)?t:0,y:null!=(n=e.y)?n:0,r:T(e)}}),r,o);p.current&&(p.current.fit=e),F(q({x:(r/2-e.x)/e.k,y:(o/2-e.y)/e.k},r,o,.5*e.k),e,700)},U=!1;return f.on("tick.fit",()=>{!U&&.05>f.alpha()&&(U=!0,P())}),f.on("end.fit",()=>{U||(U=!0,P())}),()=>{f.stop(),p.current&&cancelAnimationFrame(p.current.raf)}},[h,o]);let b=(0,a.useRef)(!1);return(0,a.useEffect)(()=>{let e=p.current,t=g.current;if(!e||!t)return;let n=d.current,r=(null==n?void 0:n.clientWidth)||e.width;if(s){var a,l;let n=e.nodes.find(e=>e.id===s);if(!n||null==n.x||null==n.y)return;b.current=!0,t(e.cur,q({x:n.x,y:n.y},r,o,Math.max(1.2,Math.min(3.5,2.4*(null!=(l=null==(a=e.fit)?void 0:a.k)?l:e.cur.k)))),650)}else b.current&&e.fit&&(b.current=!1,t(e.cur,e.fit,550))},[s,o,h]),(0,a.useEffect)(()=>{let e=d.current;if(!e)return;let t=(0,S.A)(e),n=f.size>0;t.selectAll("g[data-trace-node]").style("transition","opacity 250ms").style("opacity",e=>!n||f.has(e.id)?1:.18).select("circle").attr("stroke",e=>e.id===s?"#f8fafc":"#0f172a").attr("stroke-width",e=>e.id===s?3:1.5),t.selectAll("line").style("transition","opacity 250ms").style("opacity",e=>{let t="string"==typeof e.source?e.source:e.source.id,r="string"==typeof e.target?e.target:e.target.id;return!n||f.has(t)&&f.has(r)?.7:.08})},[f,s,t,n]),(0,r.jsx)("svg",{ref:d,className:"w-full rounded-lg bg-[radial-gradient(ellipse_at_center,rgba(79,70,229,.18),rgba(2,6,23,.96)_70%)]",style:{height:o},role:"img","aria-label":"Trace 그래프 — 클릭 선택 \xb7 더블클릭 한 층 내려가기 \xb7 휠 줌 \xb7 끌어 고정","data-trace-graph":!0})}var F=n(38393);let P={running:"#818cf8",landed:"#4ade80",blocked:"#fb7185",quiet:"#64748b"},U={ok:"#4ade80",bad:"#fb7185",info:"#818cf8"};function O(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:6;if(t<=e)return[e];let r=(t-e)/n;return Array.from({length:n+1},(t,n)=>e+n*r)}let z=e=>new Date(e).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1});function H(e){let{runs:t,lo:n,hi:s,range:l,onBrush:i}=e,o=(0,a.useRef)(null),d=t.slice(0,40),c=4+7*d.length+6,u=e=>(e-n)/Math.max(1,s-n)*1e3,x=(0,a.useRef)(i);return x.current=i,(0,a.useEffect)(()=>{let e=o.current;if(!e)return;let t=(0,S.A)(e).select("g[data-brush]"),r=(0,F.n5)().extent([[0,0],[1e3,c]]).on("end",e=>{if(!e.sourceEvent)return;if(!e.selection)return void x.current(null);let[t,r]=e.selection;x.current({from:n+t/1e3*(s-n),to:n+r/1e3*(s-n)})});return t.call(r),l&&t.call(r.move,[u(l.from),u(l.to)]),()=>{t.on(".brush",null)}},[n,s,c,null==l?void 0:l.from,null==l?void 0:l.to]),(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)("div",{className:"pointer-events-none relative h-4 font-mono text-[11px] text-slate-500","aria-hidden":!0,"data-trace-timeline-ticks":!0,children:O(n,s).map((e,t,n)=>(0,r.jsx)("span",{className:"absolute top-0",style:{left:"".concat(u(e)/1e3*100,"%"),transform:t===n.length-1?"translateX(-100%)":0===t?void 0:"translateX(-50%)"},children:z(e)},e))}),(0,r.jsxs)("svg",{ref:o,viewBox:"0 0 ".concat(1e3," ").concat(c),preserveAspectRatio:"none",className:"h-32 w-full rounded-md bg-slate-950/60","data-trace-timeline":!0,"aria-label":"런 시간 축 — 끌어서 구간 고르기",children:[O(n,s).map(e=>(0,r.jsx)("line",{x1:u(e),x2:u(e),y1:0,y2:c,stroke:"#1e293b",strokeDasharray:"2 3"},e)),d.map((e,t)=>{let n=u(Date.parse(e.firstTs)),a=Math.max(n+2,u(Date.parse(e.lastTs)));return(0,r.jsx)("rect",{x:n,y:4+7*t,width:a-n,height:5,rx:1.5,fill:P[e.status],opacity:.85,"data-trace-timeline-run":e.runId},e.runId)}),(0,r.jsx)("g",{"data-brush":!0})]})]})}function _(e){let{bars:t}=e;if(0===t.length)return(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"이 런의 단계 신호가 없다."});let n=Math.min(...t.map(e=>e.start)),a=Math.max(...t.map(e=>e.end),n+6e4),s=e=>90+(e-n)/(a-n)*900;return(0,r.jsxs)("svg",{viewBox:"0 0 ".concat(1e3," ").concat(16*t.length+16),className:"w-full rounded-md bg-slate-950/60","data-trace-gantt":!0,"aria-label":"단계 간트",children:[t.map((e,t)=>(0,r.jsxs)("g",{children:[(0,r.jsx)("text",{x:4,y:14+16*t,fill:"#cbd5e1",fontSize:11,children:u.fQ[e.stage]}),(0,r.jsx)("rect",{x:s(e.start),y:4+16*t,width:Math.max(3,s(e.end)-s(e.start)),height:11,rx:2,fill:U[e.tone],opacity:.85}),(0,r.jsxs)("text",{x:Math.max(s(e.end),s(e.start)+3)+4,y:14+16*t,fill:"#64748b",fontSize:9,fontFamily:"monospace",children:[Math.round((e.end-e.start)/6e4),"분"]})]},e.stage)),(0,r.jsx)("text",{x:90,y:16*t.length+13,fill:"#64748b",fontSize:9,fontFamily:"monospace",children:z(n)}),(0,r.jsx)("text",{x:996,y:16*t.length+13,fill:"#64748b",fontSize:9,fontFamily:"monospace",textAnchor:"end",children:z(a)})]})}let B={grok:"#f0abfc",firecrawl:"#fb923c",tavily:"#38bdf8",ddg:"#a7f3d0",jina:"#fde68a","fc-dev":"#fdba74",capture:"#c4b5fd"},V=e=>{var t,n,r;return null!=(r=null!=(n=B[e])?n:B[null!=(t=e.split("-")[0])?t:""])?r:"#a5b4fc"};function W(e){let{session:t}=e,n=Math.max(1,t.engines.length),a=Math.max(1,...t.engines.map(e=>e.hits)),s=Object.values(t.share).reduce((e,t)=>e+t,0);return(0,r.jsxs)("div",{className:"rounded-lg border border-fuchsia-400/30 bg-slate-950/80 p-2 text-slate-100","data-trace-research":t.key,style:{boxShadow:"0 0 24px #f0abfc22"},children:[(0,r.jsx)("style",{children:"@keyframes rf-grow { from { stroke-dashoffset: 400 } to { stroke-dashoffset: 0 } } @keyframes rf-pulse { 0%,100% { opacity: .5 } 50% { opacity: 1 } } @media (prefers-reduced-motion: reduce) { [data-trace-research] * { animation: none !important } }"}),(0,r.jsxs)("div",{className:"mb-1 flex items-center gap-2 font-mono text-[11px] lg:text-[10.5px] tracking-wider text-slate-400",children:[(0,r.jsxs)("span",{children:["▸ RESEARCH \xb7 엔진 ",t.engines.length]}),(0,r.jsx)("span",{className:"ml-auto",children:new Date(t.ts).toLocaleTimeString(void 0,{hour12:!1})})]}),(0,r.jsxs)("svg",{viewBox:"0 0 ".concat(460," ").concat(200),className:"w-full","aria-label":"엔진 부채꼴",children:[(0,r.jsx)("defs",{children:(0,r.jsxs)("radialGradient",{id:"rf-core",children:[(0,r.jsx)("stop",{offset:"0%",stopColor:"#f5d0fe"}),(0,r.jsx)("stop",{offset:"100%",stopColor:"#f5d0fe00"})]})}),(0,r.jsx)("circle",{cx:50,cy:100,r:26,fill:"url(#rf-core)"}),(0,r.jsx)("circle",{cx:50,cy:100,r:6,fill:"#fdf4ff"}),t.engines.map((e,t)=>{let s=1===n?0:-.55+1.1*t/(n-1),l=Math.min(e.done?70+e.hits/a*190:90,86/Math.max(.2,Math.abs(Math.sin(s))),270),i=50+Math.cos(s)*l,o=100+Math.sin(s)*l,d=e.error?"#fb7185":V(e.id);return(0,r.jsxs)("g",{"data-trace-research-engine":e.id,children:[(0,r.jsx)("line",{x1:50,y1:100,x2:i,y2:o,stroke:d,strokeWidth:e.done?2.5:1.5,strokeDasharray:e.done?"400":"4 4",style:{animation:e.done?"rf-grow .8s ease-out both":"rf-pulse 1.2s ease-in-out infinite",filter:"drop-shadow(0 0 5px ".concat(d,")")}}),(0,r.jsx)("circle",{cx:i,cy:o,r:e.done?4+Math.min(8,e.hits):3,fill:d,style:{filter:"drop-shadow(0 0 8px ".concat(d,")")}}),(0,r.jsxs)("text",{x:i+8,y:o+3,fill:d,fontSize:13,fontFamily:"ui-monospace, monospace",children:[e.id," ",e.error?"오류":e.done?"".concat(e.hits,"건"):"…",null!==e.ms?" \xb7 ".concat((e.ms/1e3).toFixed(1),"s"):""]})]},e.id)})]}),(0,r.jsxs)("p",{className:"line-clamp-2 px-1 text-[11px] text-slate-200",title:t.question,children:["\xab",t.question,"\xbb"]}),s>0&&(0,r.jsx)("div",{className:"mt-1 flex h-2 overflow-hidden rounded-full","aria-label":"출처 비","data-trace-research-share":!0,children:Object.entries(t.share).map(e=>{let[t,n]=e;return(0,r.jsx)("span",{style:{width:"".concat(n/s*100,"%"),background:V(t)},title:"".concat(t," ").concat(n)},t)})}),t.sources.length>0&&(0,r.jsx)("ul",{className:"mt-1 flex flex-wrap gap-1 font-mono text-[11px] lg:text-[10px]","aria-label":"인용 후보",children:t.sources.slice(0,8).map((e,t)=>(0,r.jsx)("li",{className:"rounded px-1.5 py-0.5",style:{color:V(e.engine),background:"".concat(V(e.engine),"1a"),textDecoration:e.merged?"line-through":void 0},title:"".concat(e.url).concat(e.merged?" (중복 합침)":""),children:e.host},"".concat(e.url,"-").concat(t)))})]})}function Y(e){let{label:t,value:n,sub:a,color:s="#e0e7ff"}=e;return(0,r.jsxs)("div",{className:"min-w-0 rounded-lg border border-indigo-400/15 bg-slate-950/70 px-3 py-2",children:[(0,r.jsx)("div",{className:"font-mono text-[11px] lg:text-[10px] tracking-[.14em] text-slate-400",children:t}),(0,r.jsx)("div",{className:"font-mono text-3xl font-semibold tabular-nums",style:{color:s,textShadow:"0 0 18px ".concat(s,"66")},children:n}),a]})}function G(e){var t;let{s:n,i:a,delayBase:s,cited:l}=e,i=V(n.engine),o="".concat(s+.12*a,"s");return(0,r.jsxs)("div",{className:"w-44 rounded-md border bg-slate-950/90 px-2 py-1 text-[11px] lg:text-[10px] leading-tight",style:{borderColor:"".concat(i,"88"),"--c":i,animation:n.merged?"rs-rain .9s ease-out ".concat(o," both, rs-merge 1s ease-in ").concat(s+.12*a+1.4,"s forwards"):l?"rs-rain .9s ease-out ".concat(o," both, rs-cite 1.6s ease-in-out ").concat(s+.12*a+1,"s infinite"):"rs-rain .9s ease-out ".concat(o," both")},title:n.url,"data-research-card":n.merged?"merged":l?"cited":"source",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)("span",{className:"flex h-3 w-3 shrink-0 items-center justify-center rounded-sm text-[11px] lg:text-[8px] font-bold text-slate-950",style:{background:i},"aria-hidden":!0,children:n.host.charAt(0).toUpperCase()}),(0,r.jsx)("span",{className:"truncate font-mono",style:{color:i},children:n.host}),n.scraped&&(0,r.jsx)("span",{className:"ml-auto rounded bg-orange-400/20 px-1 text-[11px] lg:text-[9px] text-orange-200",children:"SCRAPED"})]}),(0,r.jsx)("div",{className:"mt-0.5 line-clamp-2 text-slate-200",children:null!=(t=n.title)?t:n.url.replace(/^https?:\/\//,"")})]})}function Q(e){var t;let{session:n,label:a}=e,s=Math.max(1,n.engines.length),l=n.sources.filter(e=>!e.merged),i=l.filter(e=>e.cited).slice(0,5),o=n.sources.filter(e=>e.engine.startsWith("firecrawl")||"fc-dev"===e.engine),d=n.sources.filter(e=>e.scraped).length,c=n.engines.reduce((e,t)=>{var n;return e+(null!=(n=t.credits)?n:0)},0),u=n.engines.some(e=>"number"==typeof e.credits),x=Math.max(0,...n.engines.map(e=>{var t;return null!=(t=e.ms)?t:0})),f=Math.ceil(s/2),m=e=>{let t=e<f?"left":"right",n="left"===t?e:e-f,r="left"===t?f:s-f;return{side:t,top:n/r,height:1/r,x:"left"===t?300:700,y:(n+.5)/r*600}};return(0,r.jsxs)("div",{className:"relative flex h-full min-h-0 flex-col overflow-hidden rounded-xl border border-indigo-400/20 bg-[radial-gradient(ellipse_at_center,rgba(124,58,237,.22),rgba(2,6,23,.98)_68%)] p-3","data-research-stage-panel":n.key,children:[(0,r.jsxs)("div",{className:"grid grid-cols-5 gap-2",children:[(0,r.jsx)(Y,{label:"ENGINES",value:String(n.engines.length),sub:(0,r.jsx)("div",{className:"mt-1 flex gap-1",children:n.engines.map(e=>(0,r.jsx)("span",{className:"h-1.5 flex-1 rounded-full",style:{background:e.error?"#fb7185":V(e.id),opacity:e.done?1:.35}},e.id))})}),(0,r.jsx)(Y,{label:"SOURCES",value:String(l.length),color:"#f5d0fe",sub:(0,r.jsxs)("div",{className:"font-mono text-[11px] lg:text-[10px] text-slate-500",children:["합침 ",n.sources.length-l.length]})}),(0,r.jsx)(Y,{label:"SCRAPED",value:"".concat(d),color:"#fdba74",sub:(0,r.jsx)("div",{className:"mt-1 h-1.5 rounded-full bg-slate-800",children:(0,r.jsx)("div",{className:"h-1.5 rounded-full bg-orange-400",style:{width:"".concat(o.length?Math.min(100,d/o.length*100):0,"%"),boxShadow:"0 0 8px #fb923c"}})})}),(0,r.jsx)(Y,{label:"CREDITS",value:u?String(c):"—",color:"#fde68a"}),(0,r.jsx)(Y,{label:"TIME",value:x?"".concat((x/1e3).toFixed(1),"s"):"—",color:"#a7f3d0",sub:a?(0,r.jsx)("div",{className:"font-mono text-[11px] lg:text-[10px] text-slate-400",children:a}):null})]}),(0,r.jsxs)("div",{className:"relative min-h-0 flex-1",children:[(0,r.jsxs)("svg",{viewBox:"0 0 ".concat(1e3," ").concat(600),preserveAspectRatio:"none",className:"absolute inset-0 h-full w-full",children:[(0,r.jsx)("defs",{children:(0,r.jsxs)("radialGradient",{id:"rs-q",children:[(0,r.jsx)("stop",{offset:"0%",stopColor:"#fdf4ff"}),(0,r.jsx)("stop",{offset:"100%",stopColor:"#f0abfc00"})]})}),n.engines.map((e,t)=>{let n=m(t),a=e.error?"#fb7185":V(e.id);return(0,r.jsx)("line",{x1:500,y1:300,x2:n.x,y2:n.y,stroke:a,strokeWidth:e.done?3:1.5,strokeDasharray:e.done?"1600":"6 6",style:{animation:e.done?"rs-grow 1.1s ease-out both":void 0,filter:"drop-shadow(0 0 8px ".concat(a,")")}},e.id)}),(0,r.jsx)("circle",{cx:500,cy:300,r:38,fill:"url(#rs-q)",style:{animation:"rs-core 2.4s ease-in-out infinite"}}),(0,r.jsx)("circle",{cx:500,cy:300,r:9,fill:"#fff"})]}),(0,r.jsxs)("div",{className:"pointer-events-none absolute left-1/2 top-1/2 w-[34%] -translate-x-1/2 translate-y-6 text-center text-sm text-slate-100",style:{textShadow:"0 0 12px #000"},children:["\xab",n.question,"\xbb"]}),n.engines.map((e,t)=>{let a=m(t),s=n.sources.filter(t=>t.engine===e.id).slice(0,12),l="right"===a.side;return(0,r.jsxs)("div",{className:"absolute overflow-hidden p-1","data-research-engine-slot":e.id,style:{top:"".concat(100*a.top,"%"),height:"".concat(100*a.height,"%"),width:"".concat(30,"%"),...l?{right:0}:{left:0}},children:[(0,r.jsxs)("div",{className:"mb-1 font-mono text-xs ".concat(l?"text-right":""),style:{color:e.error?"#fb7185":V(e.id),textShadow:"0 0 10px ".concat(V(e.id))},children:[e.id," ",e.error?"오류 \xb7 ".concat(e.error):e.done?"".concat(e.hits,"건"):"…",null!=e.ms?" \xb7 ".concat((e.ms/1e3).toFixed(1),"s"):""]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1 ".concat(l?"justify-end":""),children:s.map((e,n)=>(0,r.jsx)(G,{s:e,i:n,delayBase:.3+.25*t,cited:!e.merged&&!!e.cited},"".concat(e.url,"-").concat(n)))})]},e.id)})]}),(0,r.jsxs)("div",{className:"mx-auto mt-2 w-[min(760px,92%)] rounded-xl border border-violet-300/40 bg-slate-950/90 p-3",style:{boxShadow:"0 0 30px #a78bfa44"},"data-research-why":!0,children:[(0,r.jsx)("div",{className:"font-mono text-[11px] lg:text-[10px] tracking-widest text-violet-300",children:"▸ 판단 \xb7 왜"}),(0,r.jsx)("div",{className:"mt-1 text-sm text-slate-100",children:null!=(t=n.why)?t:(0,r.jsx)("span",{className:"text-slate-500",children:"이 조사 뒤 판단이 아직 없다"})}),i.length>0&&(0,r.jsx)("div",{className:"mt-2 flex flex-wrap gap-1",children:i.map((e,t)=>{var n;return(0,r.jsx)("span",{className:"rounded border px-1.5 py-0.5 font-mono text-[11px] lg:text-[10px]",style:{color:V(e.engine),borderColor:"".concat(V(e.engine),"88"),animation:"rs-fly .8s cubic-bezier(.2,1.4,.4,1) ".concat(2.2+.25*t,"s both"),boxShadow:"0 0 12px ".concat(V(e.engine),"66")},"data-research-cited":!0,children:null!=(n=e.title)?n:e.host},e.url)})})]})]})}function X(e){let{sessions:t,pair:n,onClose:a,onPair:s}=e,l=t[0],i=t.find(e=>"full"===e.tier),o=t.find(e=>"free"===e.tier),d=!!i&&!!o;return(0,r.jsxs)("div",{className:"fixed inset-0 z-50 flex flex-col gap-2 bg-[#020617] p-3 text-slate-100","data-research-stage":!0,children:[(0,r.jsx)("style",{children:"\n@keyframes rs-rain { from { transform: translateY(-110vh) rotate(-4deg); opacity: 0 } 70% { opacity: 1 } to { transform: none; opacity: 1 } }\n@keyframes rs-merge { 0% { box-shadow: 0 0 0 0 #fde68a } 40% { box-shadow: 0 0 28px 6px #fde68a; transform: scale(1.08) } 100% { transform: scale(0); opacity: 0 } }\n@keyframes rs-cite { 0%,100% { box-shadow: 0 0 10px var(--c) } 50% { box-shadow: 0 0 30px 4px var(--c) } }\n@keyframes rs-fly { from { transform: translateY(-46vh) scale(.6); opacity: 0 } to { transform: none; opacity: 1 } }\n@keyframes rs-grow { from { stroke-dashoffset: 1600 } to { stroke-dashoffset: 0 } }\n@keyframes rs-core { 0%,100% { r: 34 } 50% { r: 44 } }\n@media (prefers-reduced-motion: reduce) { [data-research-stage] * { animation: none !important } }\n"}),(0,r.jsxs)("header",{className:"flex items-center gap-3",children:[(0,r.jsx)("span",{className:"text-xl tracking-tight",style:{fontFamily:'Georgia, "Times New Roman", serif'},children:"Elanous"}),(0,r.jsx)("span",{className:"font-mono text-[11px] tracking-[.18em] text-fuchsia-200/80",children:"RESEARCH \xb7 조사"}),(0,r.jsx)("button",{type:"button",disabled:!d,onClick:()=>s(!n),className:"rounded-full border border-fuchsia-300/40 px-3 py-1 font-mono text-[11px] lg:text-[10px] text-fuchsia-100 disabled:opacity-30",title:d?"full ↔ free 두 판 나란히":"full\xb7free 두 조사가 모두 있을 때","data-research-pair":!0,children:n?"한 판":"full ↔ free"}),(0,r.jsx)("button",{type:"button",onClick:a,className:"ml-auto rounded-full border border-slate-600 px-3 py-1 text-xs text-slate-300 hover:bg-slate-800",children:"닫기(Esc)"})]}),l?n&&d?(0,r.jsxs)("div",{className:"grid min-h-0 flex-1 grid-cols-2 gap-2",children:[(0,r.jsx)(Q,{session:i,label:"FULL \xb7 유료 엔진"}),(0,r.jsx)(Q,{session:o,label:"FREE \xb7 무료 폴백"})]}):(0,r.jsx)("div",{className:"min-h-0 flex-1",children:(0,r.jsx)(Q,{session:l,label:l.tier?l.tier.toUpperCase():void 0})}):(0,r.jsx)("p",{className:"m-auto text-sm text-slate-400",children:"이 창에 조사가 없다 — `elanous research` 가 돌면 여기에 뜬다."})]})}function K(e,t){return"public"===e||"stage"===t&&"private"!==e}var J=n(89578);let $=e=>"string"==typeof e&&e.trim()?e:null,Z=e=>"number"==typeof e&&Number.isFinite(e)?e:0;function ee(e){var t;if("harness.decision"===e.category&&"string"==typeof(null==(t=e.data)?void 0:t.runId))return"why";if(!e.category.startsWith("research"))return null;let n=e.event.replace(/^research\./,"");return"query"===n||"result"===n||"source"===n?n:null}var et=n(7456),en=n(43422),er=n(44373);let ea=(0,a.createContext)(null),es=[],el=[60,360,1440],ei={L0:"L0 플릿",L1:"L1 런",L2:"L2 런 한 개",L3:"L3 판단"},eo={running:"도는",landed:"착지",blocked:"막힘",quiet:"끊김\xb7결과 모름"},ed={PLAN:"text-sky-400",ROUTE:"text-violet-400",VERIFY:"text-amber-400",HEAL:"text-emerald-400",ESCALATE:"text-rose-400",SHIP:"text-green-400"};function ec(){return(0,o.Qj)()?(0,r.jsx)(eu,{}):(0,r.jsxs)("div",{className:"mx-auto max-w-2xl space-y-2 p-6",children:[(0,r.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Trace"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Connect to a NEXUS daemon to trace runs."})]})}function eu(){var e,t,n,s,w,k,N;let[I,M]=(0,a.useState)({level:"L1",windowMin:1440}),[S,L]=(0,a.useState)(null),[E,R]=(0,a.useState)("@active"),[A,C]=(0,a.useState)(null),[T,q]=(0,a.useState)(!1),[F,P]=(0,a.useState)(null);(0,a.useEffect)(()=>{let e=new URLSearchParams(window.location.search);P(e.get("capture"));let t=e.get("present");("stage"===t||"research"===t)&&C(t)},[]);let U=(0,a.useRef)(null),O=(0,a.useRef)(!1);(0,a.useEffect)(()=>{M(function(e){var t;let n=new URLSearchParams(e),r=x.includes(null!=(t=n.get("level"))?t:"")?n.get("level"):"L1",a=n.get("status"),s=Number(n.get("window"));return{level:r,...n.get("universe")?{universe:n.get("universe")}:{},...n.get("run")?{runId:n.get("run")}:{},...Number.isInteger(Number(n.get("dec")))&&null!==n.get("dec")&&""!==n.get("dec")?{decision:Number(n.get("dec"))}:{},..."running"===a||"landed"===a||"blocked"===a||"quiet"===a?{status:a}:{},...n.get("q")?{q:n.get("q")}:{},...n.get("finding")?{finding:n.get("finding")}:{},...Number(n.get("from"))>0&&Number(n.get("to"))>Number(n.get("from"))?{from:Number(n.get("from")),to:Number(n.get("to"))}:{},windowMin:Number.isFinite(s)&&s>0?s:1440}}(window.location.search)),O.current=!0},[]),(0,a.useEffect)(()=>{if(!O.current)return;let e=new URLSearchParams(window.location.search),t=new URLSearchParams((function(e){let t=new URLSearchParams;return t.set("level",e.level),e.universe&&t.set("universe",e.universe),e.runId&&t.set("run",e.runId),void 0!==e.decision&&t.set("dec",String(e.decision)),e.status&&t.set("status",e.status),e.q&&t.set("q",e.q),e.finding&&t.set("finding",e.finding),void 0!==e.from&&void 0!==e.to&&(t.set("from",String(Math.round(e.from))),t.set("to",String(Math.round(e.to)))),1440!==e.windowMin&&t.set("window",String(e.windowMin)),"?".concat(t.toString())})(I).replace(/^\?/,""));for(let n of["capture","present"]){let r=e.get(n);r&&t.set(n,r)}let n=t.toString();window.history.replaceState(null,"","".concat(window.location.pathname).concat(n?"?".concat(n):""))},[I]);let{logs:z,runs:B}=(0,c.HI)({store:E,windowMinutes:I.windowMin}),V=K(F,null),Y=K(F,A),G=null!=(n=null==(e=z.data)?void 0:e.logs)?n:es,Q=(0,a.useMemo)(()=>V?(0,et.Er)(G):null,[V,G]),J=(0,a.useMemo)(()=>V?(0,et.yR)(G):G,[V,G]),[ed,ec]=(0,a.useState)(()=>Date.now());(0,a.useEffect)(()=>{ec(Date.now())},[z.dataUpdatedAt]);let eu=(0,o.Qj)(),ex=(0,d.I)({queryKey:["trace","L1",E,I.windowMin],queryFn:()=>eu.getTrace({level:"L1",from:Date.now()-6e4*I.windowMin,...E?{store:E}:{}}),enabled:!!eu,refetchInterval:6e4,retry:!1}),ep=(0,a.useMemo)(()=>{var e,t,n,r,a;return function(e,t,n,r){var a,s,l,i,o,d,c,u,x,f,m;let g=(null!=(a=null==t?void 0:t.nodes)?a:[]).filter(e=>"L1"===e.level&&e.runId);if(0===g.length)return e;let p=new Set(e.runs.map(e=>e.runId)),h=new Map(n.map(e=>[e.runId,e])),v=new Map;for(let e of null!=(s=null==t?void 0:t.edges)?s:[])"parent"===e.kind&&v.set(e.target,e.source);let b=[];for(let e of g){let t=e.runId;if(p.has(t))continue;p.add(t);let n=null!=(d=null!=(o=e.lastTs)?o:e.firstTs)?d:new Date(r).toISOString(),a=(m=null==(l=h.get(t))?void 0:l.status)?/complet|merged|landed|success|done/i.test(m)?"landed":/fail|block|park|cancel|abort|error|stall/i.test(m)?"blocked":/run|progress|active|review|build/i.test(m)?"running":null:null,s=null!=a?a:r-Date.parse(n)<=9e5?"running":"quiet",f=v.get(e.id),y=f&&null!=(c=null==(i=g.find(e=>e.id===f))?void 0:i.runId)?c:null;b.push({runId:t,universe:null!=(u=e.universe)?u:"this",status:s,current:null,stages:{},events:e.count,firstTs:null!=(x=e.firstTs)?x:n,lastTs:n,pr:null,parentRunId:y,decisions:0})}if(0===b.length)return e;let y=[...e.runs,...b],j=new Map(e.universes.map(e=>[e.name,{...e}]));for(let e of b){let t=null!=(f=j.get(e.universe))?f:{name:e.universe,signals:0,runs:0,running:0,blocked:0};t.runs+=1,t.signals+=e.events,"running"===e.status&&(t.running+=1),"blocked"===e.status&&(t.blocked+=1),j.set(e.universe,t)}return{...e,runs:y,universes:[...j.values()].sort((e,t)=>t.runs-e.runs||t.signals-e.signals)}}(function(e,t,n){var r,a,s,l,i;let o=(0,u.Hc)(e,t,n),d=new Map,c=new Map,x=new Map,m=new Map;for(let t of e){let e=null!=(s=t.instance)?s:"this";m.set(e,(null!=(l=m.get(e))?l:0)+1);let n=f(null==(r=t.data)?void 0:r.runId);if(!n)continue;d.has(n)||d.set(n,e);let i=c.get(n);(!i||t.ts<i)&&c.set(n,t.ts);let o=f(null==(a=t.data)?void 0:a.parentRunId);o&&o!==n&&x.set(n,o)}let g=new Map;for(let e of o.stream)e.runId&&g.set(e.runId,(null!=(i=g.get(e.runId))?i:0)+1);let p=o.snapshot.runs.map(e=>{var t,n,r,a;return{runId:e.runId,universe:null!=(t=d.get(e.runId))?t:"this",status:e.blocked?"blocked":"ok"===e.stages.land?"landed":"running",current:e.current,stages:e.stages,events:e.events,firstTs:null!=(n=c.get(e.runId))?n:e.lastTs,lastTs:e.lastTs,pr:e.pr,parentRunId:null!=(r=x.get(e.runId))?r:null,decisions:null!=(a=g.get(e.runId))?a:0}});return{universes:[...m.entries()].map(e=>{let[t,n]=e,r=p.filter(e=>e.universe===t);return{name:t,signals:n,runs:r.length,running:r.filter(e=>"running"===e.status).length,blocked:r.filter(e=>"blocked"===e.status).length}}).sort((e,t)=>t.runs-e.runs||t.signals-e.signals),runs:p,decisions:o.stream,rows:e}}(J,null!=(r=null==(e=B.data)?void 0:e.entries)?r:[],{now:ed,windowMinutes:I.windowMin}),(null==(t=ex.data)?void 0:t.ok)?ex.data:void 0,null!=(a=null==(n=B.data)?void 0:n.entries)?a:[],ed)},[J,B.data,ed,I.windowMin,ex.data]),eh=(0,a.useMemo)(()=>(function(e,t){let n=[],r=[],a=m(e,t);if("L0"===t.level){for(let r of e.universes.filter(e=>!t.universe||e.name===t.universe))n.push({id:"u:".concat(r.name),kind:"universe",label:r.name,weight:Math.max(1,r.runs),status:r.blocked?"bad":r.running?"info":"ok"});for(let e of a)n.some(t=>t.id==="u:".concat(e.universe))&&(n.push({id:"r:".concat(e.runId),kind:"run",label:e.runId.replace(/^run-/,"").slice(0,8),weight:1,status:e.status}),r.push({source:"u:".concat(e.universe),target:"r:".concat(e.runId),kind:"contains"}));return{nodes:n,edges:r}}if("L1"===t.level){let e=new Set(a.map(e=>e.runId));for(let e of a)n.push({id:"r:".concat(e.runId),kind:"run",label:e.runId.replace(/^run-/,"").slice(0,8),weight:1+Math.log2(1+e.events),status:e.status});for(let t of a)t.parentRunId&&e.has(t.parentRunId)&&r.push({source:"r:".concat(t.parentRunId),target:"r:".concat(t.runId),kind:"parent"});return{nodes:n,edges:r}}let s=e.runs.find(e=>e.runId===t.runId);if(!s)return{nodes:n,edges:r};n.push({id:"r:".concat(s.runId),kind:"run",label:s.runId.replace(/^run-/,"").slice(0,8),weight:3,status:s.status});let l="r:".concat(s.runId);for(let e of u.lV){let t=s.stages[e];if(!t)continue;let a="s:".concat(e);n.push({id:a,kind:"stage",label:e,weight:2,status:t}),r.push({source:l,target:a,kind:"next"}),l=a}return g(e,s.runId).forEach((e,t)=>{let a="d:".concat(t);n.push({id:a,kind:"decision",label:e.kind,weight:1}),r.push({source:n.some(t=>{var n;return t.id==="s:".concat(null!=(n=h(e))?n:"")})?"s:".concat(h(e)):"r:".concat(s.runId),target:a,kind:"decides"})}),{nodes:n,edges:r}})(ep,I),[ep,I]),ev=(0,a.useMemo)(()=>m(ep,I).sort((e,t)=>e.lastTs<t.lastTs?1:-1),[ep,I]),eb=(0,a.useMemo)(()=>(function(e,t){var n;let r={};for(let a of m(e,{...t,universe:void 0}))r[a.universe]=(null!=(n=r[a.universe])?n:0)+1;let a={running:0,landed:0,blocked:0,quiet:0};for(let n of m(e,{...t,status:void 0}))a[n.status]+=1;return{universe:r,status:a}})(ep,I),[ep,I]),ey=(0,a.useMemo)(()=>(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,n=new Map;for(let t of e.decisions){var r;let e=p(t);if(!e||!t.runId)continue;let a=null!=(r=n.get(e))?r:new Set;a.add(t.runId),n.set(e,a)}return[...n.entries()].filter(e=>{let[,n]=e;return n.size>=t}).map(e=>{let[t,n]=e;return{sig:t,runs:n.size}}).sort((e,t)=>t.runs-e.runs)})(ep).slice(0,6),[ep]),ej=I.runId&&null!=(s=ep.runs.find(e=>e.runId===I.runId))?s:null,ew=(0,a.useMemo)(()=>(function(e){let t=e.filter(e=>ee(e)).sort((e,t)=>e.ts<t.ts?-1:1),n=[],r=new Map,a=null;for(let e of t){var s,l,i,o,d,c,u,x,f;let t=ee(e),m=null!=(s=e.data)?s:{},g=$(m.runId);if("query"===t){let t=Array.isArray(m.engines)?m.engines.map(e=>$(e)).filter(e=>!!e):[],s={key:"".concat(e.ts,"|").concat(null!=g?g:""),ts:e.ts,question:null!=(i=null!=(l=$(m.question))?l:$(m.query))?i:"(질문 없음)",runId:g,engines:t.map(e=>({id:e,hits:0,ms:null,error:null,done:!1})),sources:[],share:{},tier:"full"===m.tier||"free"===m.tier?m.tier:!0===m.free?"free":null,why:null};n.push(s),g&&r.set(g,s),a=s;continue}if("why"===t){let e=g?r.get(g):null;e&&!e.why&&(e.why=null!=(d=null!=(o=$(m.reason))?o:$(m.why))?d:$(m.what));continue}let p=g&&r.get(g)||a;if(p)if("result"===t){let e=null!=(u=null!=(c=$(m.id))?c:$(m.engine))?u:"engine",t=p.engines.find(t=>t.id===e);t||(t={id:e,hits:0,ms:null,error:null,done:!1},p.engines.push(t)),t.hits=Z(m.hits),t.ms="number"==typeof m.ms?m.ms:null,t.error=$(m.error),t.done=!0,"number"==typeof m.credits&&(t.credits=m.credits)}else{let e=$(m.url);if(!e)continue;let t=null!=(x=$(m.engine))?x:"engine",n=!0===m.merged||!0===m.dedup;p.sources.push({url:e,engine:t,merged:n,host:function(e){try{return new URL(e).host.replace(/^www\./,"")}catch(t){return e.slice(0,40)}}(e),title:$(m.title),cited:!0===m.cited||!0===m.picked,scraped:!0===m.scraped}),n||(p.share[t]=(null!=(f=p.share[t])?f:0)+1)}}return n.reverse()})(J).filter(e=>!I.runId||e.runId===I.runId),[J,I.runId]),ek=ew.slice(0,2),eN=(0,a.useRef)(!1);return eN.current=null!==A,(0,a.useEffect)(()=>{let e=e=>{let t=e.target;if(t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||"SELECT"===t.tagName)){"Escape"===e.key&&t.blur();return}if("/"===e.key){var n;e.preventDefault(),null==(n=U.current)||n.focus()}else"Escape"===e.key&&eN.current?C(null):"Escape"===e.key?(L(null),M(e=>j(e))):"["===e.key?M(e=>"L3"===e.level||"L2"===e.level?j(e):"L1"===e.level?{...e,level:"L0"}:e):"ArrowLeft"===e.key?M(e=>{var t,n;return"L3"===e.level&&(null!=(t=e.decision)?t:0)>0?{...e,decision:(null!=(n=e.decision)?n:0)-1}:e}):"ArrowRight"===e.key?M(e=>{var t;return"L3"===e.level?{...e,decision:(null!=(t=e.decision)?t:0)+1}:e}):"]"===e.key&&M(e=>"L0"===e.level?{...e,level:"L1"}:e)};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]),(0,r.jsx)(ea.Provider,{value:Q,children:(0,r.jsxs)("div",{className:"mx-auto max-w-none space-y-3 p-3 text-slate-100 sm:p-4","data-trace-panel":!0,children:["research"===A&&(0,r.jsx)(X,{sessions:ew,pair:T,onPair:q,onClose:()=>C(null)}),"stage"===A&&(0,r.jsxs)("div",{className:"fixed inset-0 z-50 overflow-auto bg-[#020617] p-2","data-trace-present-stage":!0,children:[(0,r.jsxs)("div",{className:"mb-1 flex items-center gap-2 px-1 font-mono ".concat(Y?"text-sm":"text-[11px]"," text-slate-400"),children:[(0,r.jsx)("span",{children:"TRACE \xb7 발표"}),(0,r.jsx)("span",{className:"truncate text-indigo-200",children:Y?"공개 무대":b(I).map(e=>e.label).join(" › ")||"전체"}),(0,r.jsx)("button",{type:"button",onClick:()=>C(null),className:"ml-auto rounded-full border border-slate-600 px-3 py-0.5 text-slate-300 hover:bg-slate-800",children:"닫기(Esc)"})]}),(0,r.jsx)(eg,{model:ep,lens:I,ledger:null!=(w=null==(t=B.data)?void 0:t.entries)?w:[],now:ed,store:E,publicCapture:Y,rowsAlreadyMasked:V})]}),(0,r.jsxs)("header",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsxs)("h1",{className:"mr-2 flex items-center gap-2 text-xl font-semibold tracking-tight text-foreground",children:[(0,r.jsx)(i.A,{className:"h-5 w-5","aria-hidden":!0})," Trace"]}),(0,r.jsx)("nav",{className:"flex gap-1","aria-label":"해상도",children:x.map(e=>(0,r.jsx)("button",{type:"button",onClick:()=>M(t=>({...t,level:e})),disabled:"L2"===e&&!I.runId||"L3"===e&&void 0===I.decision,"aria-pressed":I.level===e,className:(0,er.cn)("rounded-md border px-2 py-1 font-mono text-xs disabled:opacity-40",I.level===e?"border-primary bg-primary/15 text-foreground":"text-muted-foreground hover:bg-muted"),"data-trace-level":e,children:ei[e]},e))}),(0,r.jsx)("input",{ref:U,value:null!=(k=I.q)?k:"",onChange:e=>M(t=>({...t,q:e.target.value||void 0})),placeholder:"/ 검색 — runId \xb7 PR \xb7 우주",className:"w-56 rounded-md border bg-background px-2 py-1 text-xs text-foreground","aria-label":"검색"}),(0,r.jsx)("select",{"aria-label":"시간 창",value:I.windowMin,onChange:e=>M(t=>({...t,windowMin:Number(e.target.value)})),className:"rounded-md border bg-background px-2 py-1 text-xs text-foreground",children:el.map(e=>(0,r.jsx)("option",{value:e,children:e<60?"".concat(e,"분"):"".concat(e/60,"시간")},e))}),(0,r.jsxs)("select",{"aria-label":"신호 출처",value:E,onChange:e=>R(e.target.value),className:"rounded-md border bg-background px-2 py-1 text-xs text-foreground",children:[(0,r.jsx)("option",{value:"@active",children:"전체(연합)"}),(0,r.jsx)("option",{value:"",children:"이 인스턴스"})]}),(0,r.jsx)("button",{type:"button",onClick:()=>C("stage"),className:"ml-auto rounded-md border border-indigo-400/50 px-2 py-1 text-xs text-indigo-200 hover:bg-indigo-500/10","data-elanous-action":"trace-present-stage",title:"렌즈에 남은 런을 v5 무대 문법으로(녹화용 \xb7 Esc 로 닫기)",children:"✦ 발표 \xb7 무대"}),(0,r.jsx)("button",{type:"button",onClick:()=>C("research"),disabled:0===ek.length,className:"rounded-md border border-fuchsia-400/50 px-2 py-1 text-xs text-fuchsia-200 hover:bg-fuchsia-500/10 disabled:opacity-40","data-elanous-action":"trace-present",title:ek.length?"조사 장면을 전체 무대로(녹화용)":"이 렌즈에 조사가 없다",children:"✦ 발표 \xb7 조사"}),(0,r.jsx)(l(),{href:"/live",className:"rounded-md border px-2 py-1 text-xs text-muted-foreground hover:bg-muted",children:"무대로(Live) →"})]}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-1 font-mono text-[11px]","aria-label":"렌즈","data-trace-crumbs":!0,children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"렌즈 ›"}),0===b(I).length&&(0,r.jsx)("span",{className:"text-muted-foreground",children:"전체"}),b(I).map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>{let t;return t=e.key,M(e=>{let n={...e};return"time"===t?(delete n.from,delete n.to):(delete n[t],"runId"===t&&"L2"===n.level&&(n.level="L1")),n})},className:"rounded-full border border-indigo-400/40 bg-indigo-500/10 px-2 py-0.5 text-indigo-200 hover:bg-indigo-500/20","data-trace-crumb":e.key,children:[e.label," ✕"]},e.key)),(0,r.jsxs)("span",{className:"ml-2 text-muted-foreground",children:["신호 ",J.length," \xb7 런 ",ep.runs.length," \xb7 우주 ",ep.universes.length,z.stores.length>0?" \xb7 저장소 ".concat(z.stores.length).concat(z.registeredStores?"/".concat(z.registeredStores):"").concat(z.failedStores.length?" (".concat(z.failedStores.length," 못 읽음)"):""):"",z.truncated?" \xb7 ⚠ 조회 상한에 닿음":""]})]}),(0,r.jsxs)("div",{className:"flex flex-wrap gap-1 text-[11px]","data-trace-chips":!0,children:[Object.keys(eo).map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>M(t=>({...t,status:t.status===e?void 0:e})),"aria-pressed":I.status===e,className:(0,er.cn)("rounded-full border px-2 py-0.5",I.status===e?"border-primary bg-primary/15 text-foreground":"text-muted-foreground hover:bg-muted"),"data-trace-chip":"status:".concat(e),children:[eo[e]," ",(0,r.jsx)("span",{className:"tabular-nums",children:eb.status[e]})]},e)),(0,r.jsx)("span",{className:"mx-1 text-muted-foreground",children:"\xb7"}),Object.entries(eb.universe).sort((e,t)=>t[1]-e[1]).slice(0,12).map(e=>{let[t,n]=e;return(0,r.jsxs)("button",{type:"button",onClick:()=>M(e=>({...e,universe:e.universe===t?void 0:t})),"aria-pressed":I.universe===t,className:(0,er.cn)("rounded-full border px-2 py-0.5 font-mono",I.universe===t?"border-cyan-400 bg-cyan-500/15 text-foreground":"text-muted-foreground hover:bg-muted"),"data-trace-chip":"universe:".concat(t),children:[t," ",(0,r.jsx)("span",{className:"tabular-nums",children:n})]},t)})]}),ey.length>0&&(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-1 text-[11px]","data-trace-findings":!0,children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:"같은 지적 ›"}),ey.map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>M(t=>({...t,finding:t.finding===e.sig?void 0:e.sig})),"aria-pressed":I.finding===e.sig,className:(0,er.cn)("max-w-[28rem] truncate rounded-full border px-2 py-0.5",I.finding===e.sig?"border-amber-400 bg-amber-500/15 text-foreground":"text-muted-foreground hover:bg-muted"),title:e.sig,"data-trace-finding":!0,children:[e.sig," ",(0,r.jsxs)("span",{className:"tabular-nums",children:["\xb7 런 ",e.runs]})]},e.sig))]}),(0,r.jsxs)("div",{className:"grid gap-3 xl:grid-cols-12",children:[(0,r.jsxs)("section",{className:"xl:col-span-8","aria-label":"그래프",children:[(0,r.jsx)(D,{nodes:eh.nodes,edges:eh.edges,selected:"L3"===I.level&&void 0!==I.decision?"d:".concat(I.decision):S,onSelect:L,onDrill:e=>{L(null),M(t=>y(t,e))}}),(0,r.jsx)("div",{className:"mt-2",children:"L0"===I.level||"L1"===I.level?(0,r.jsx)(H,{runs:m(ep,{...I,from:void 0,to:void 0}).sort((e,t)=>e.firstTs<t.firstTs?-1:1),lo:ed-6e4*I.windowMin,hi:ed,range:void 0!==I.from&&void 0!==I.to?{from:I.from,to:I.to}:void 0,onBrush:e=>M(t=>e?{...t,from:e.from,to:e.to}:(()=>{let e={...t};return delete e.from,delete e.to,e})())}):ej?(0,r.jsx)(_,{bars:function(e,t){let n=new Map;for(let r of v(e,t)){if(!r.stage)continue;let e=Date.parse(r.ts),t=n.get(r.stage);t?(t.start=Math.min(t.start,e),t.end=Math.max(t.end,e),"bad"===r.tone?t.tone="bad":"ok"===r.tone&&"bad"!==t.tone&&(t.tone="ok")):n.set(r.stage,{start:e,end:e,tone:r.tone})}return u.lV.filter(e=>n.has(e)).map(e=>({stage:e,...n.get(e)}))}(ep,ej.runId)}):null}),(0,r.jsxs)("p",{className:"mt-1 text-[11px] lg:text-[10px] text-muted-foreground",children:["시간 축을 끌면 그 구간만 \xb7 클릭 = 선택(이웃만 밝게) \xb7 더블클릭 = 한 층 내려가기 \xb7 끌기 = 고정(두 번 누르면 해제) \xb7 휠 = 줌 \xb7 ",(0,r.jsx)("kbd",{children:"/"})," 검색 \xb7 ",(0,r.jsx)("kbd",{children:"Esc"})," 위로"]})]}),(0,r.jsxs)("aside",{className:"space-y-2 xl:col-span-4","aria-label":"옆 패널",children:[ek.map(e=>(0,r.jsx)(W,{session:e},e.key)),"L3"===I.level&&ej?(0,r.jsx)(em,{runId:ej.runId,universe:ej.universe,store:E,index:null!=(N=I.decision)?N:0,model:ep,onIndex:e=>M(t=>({...t,decision:e}))}):"L2"!==I.level?(0,r.jsxs)("div",{className:"rounded-lg border bg-card/60",children:[(0,r.jsxs)("h2",{className:"border-b px-3 py-1.5 font-mono text-[11px] tracking-wider text-muted-foreground",children:["▸ RUNS \xb7 ",ev.length]}),(0,r.jsxs)("ul",{className:"max-h-[520px] divide-y overflow-auto text-xs","data-trace-runs":!0,children:[ev.slice(0,120).map(e=>(0,r.jsx)("li",{children:(0,r.jsxs)("button",{type:"button",onClick:()=>L("r:".concat(e.runId)),onDoubleClick:()=>M(t=>y(t,{id:"r:".concat(e.runId),kind:"run"})),className:(0,er.cn)("flex w-full items-center gap-2 px-3 py-1.5 text-left hover:bg-muted/40",S==="r:".concat(e.runId)&&"bg-primary/10"),"data-trace-run":e.runId,children:[(0,r.jsx)("span",{className:(0,er.cn)("h-2 w-2 shrink-0 rounded-full","blocked"===e.status?"bg-rose-400":"landed"===e.status?"bg-green-400":"bg-indigo-400")}),(0,r.jsx)("span",{className:"w-20 shrink-0 truncate font-mono",children:e.runId.replace(/^run-/,"").slice(0,8)}),(0,r.jsx)("span",{className:"w-14 shrink-0 text-muted-foreground",children:e.current?u.fQ[e.current]:"—"}),(0,r.jsx)("span",{className:"min-w-0 flex-1 truncate font-mono text-[11px] lg:text-[10px] text-muted-foreground",children:e.universe}),e.pr&&(0,r.jsxs)("span",{className:"font-mono text-[11px] lg:text-[10px]",children:["#",e.pr]}),(0,r.jsx)("span",{className:"w-12 shrink-0 text-right font-mono text-[11px] lg:text-[10px] text-muted-foreground",children:(0,u.qo)(e.lastTs)})]})},e.runId)),0===ev.length&&(0,r.jsx)("li",{className:"px-3 py-6 text-center text-muted-foreground",children:"이 렌즈에 런이 없다 — 빵부스러기에서 칸을 빼 본다."})]})]}):ej?(0,r.jsx)(ef,{runId:ej.runId,store:E,model:ep,onPick:e=>M(t=>({...t,level:"L3",decision:e}))}):(0,r.jsxs)("p",{className:"rounded-lg border p-3 text-xs text-muted-foreground",children:["이 창에 런 ",I.runId," 가 없다 — 창을 넓히거나 출처를 \xab전체\xbb로."]})]})]}),("L2"===I.level||"L3"===I.level)&&ej&&(0,r.jsx)(en.RT,{runId:ej.runId,run:{runId:ej.runId,stages:ej.stages,current:ej.current,lastTs:ej.lastTs,events:ej.events,blocked:"blocked"===ej.status,pr:ej.pr,ledgerStatus:null},lines:v(ep,ej.runId).map(e=>"".concat((0,u.qo)(e.ts)," ").concat(e.category," ").concat(e.event)),onClose:()=>M(e=>j(e))})]})})}function ex(e,t,n){let r=(0,o.M1)(),s=(0,d.I)({queryKey:["trace","L3",e,t],queryFn:()=>r.getTrace({level:"L3",runId:e,limit:1e3,q:"harness.decision",...t?{store:t}:{}}),refetchInterval:3e4,retry:!1}),l=(0,a.useContext)(ea);return(0,a.useMemo)(()=>{var t,r,a,i;let o=(null==(t=s.data)?void 0:t.ok)?(i=l?(0,et.cj)(s.data.events,l):s.data.events,i.filter(t=>t.runId===e&&u.jg.includes(t.kind)).slice().sort((e,t)=>e.ts<t.ts?-1:+(e.ts>t.ts)).map(e=>{var t,n,r,a,s;return{ts:e.ts,kind:e.kind,runId:null!=(t=e.runId)?t:null,what:e.what,why:null!=(n=e.why)?n:null,purpose:null!=(r=e.purpose)?r:null,target:null!=(a=e.target)?a:null,..."number"==typeof e.paths?{paths:e.paths}:Array.isArray(e.paths)?{paths:e.paths.length}:{},logId:e.refs.logId,pr:void 0!==e.refs.pr?String(e.refs.pr).replace(/^#/,""):null,commit:null!=(s=e.refs.commit)?s:null,universe:e.universe}})):[];if(o.length>0)return{chain:o,source:"server",note:"서버 /v1/trace".concat((null==(r=s.data)?void 0:r.truncated)?" \xb7 상한에 걸림":"")};let d=s.isLoading?"서버 조회 중":s.error?"서버 조회 실패: ".concat(String(null!=(a=s.error.message)?a:s.error).slice(0,60)):"서버 0건";return{chain:g(n,e),source:"local",note:"이 창 조회 \xb7 ".concat(d)}},[s.data,s.isLoading,s.error,n,e,l])}function ef(e){let{runId:t,store:n,model:a,onPick:s}=e,l=a.runs.find(e=>e.runId===t),{chain:i,source:o,note:d}=ex(t,n,a);return(0,r.jsxs)("div",{className:"space-y-2 rounded-lg border bg-card/60 p-3 text-xs","data-trace-run-detail":t,children:[(0,r.jsxs)("div",{className:"font-mono text-[11px] text-muted-foreground",children:[t," \xb7 ",l.universe,l.parentRunId?" \xb7 부모 ".concat(l.parentRunId.replace(/^run-/,"").slice(0,8)):""]}),(0,r.jsx)("div",{className:"flex gap-1","aria-label":"단계",children:["author","decompose","build","gate","review","land"].map(e=>{let t=l.stages[e];return(0,r.jsx)("span",{className:(0,er.cn)("flex-1 rounded px-1 py-1 text-center text-[11px] lg:text-[10px]",!t&&"bg-muted text-muted-foreground","info"===t&&"bg-indigo-500/30","ok"===t&&"bg-green-600/40","bad"===t&&"bg-rose-500/40",l.current===e&&"ring-1 ring-violet-300"),children:u.fQ[e]},e)})}),(0,r.jsxs)("h3",{className:"pt-1 font-mono text-[11px] tracking-wider text-muted-foreground",children:["▸ 판단 사슬 \xb7 ",i.length," ",(0,r.jsxs)("span",{className:(0,er.cn)("ml-1 rounded px-1","server"===o?"bg-emerald-500/15 text-emerald-300":"bg-muted"),"data-trace-chain-source":o,children:["원천: ",d]})]}),0===i.length?(0,r.jsx)("p",{className:"text-muted-foreground",children:"이 런의 판단 신호가 없다(계측 없음 — MAX \xab이 런만\xbb 을 켜면 채워진다)."}):(0,r.jsx)("ol",{className:"flex gap-1 overflow-x-auto pb-1","data-trace-chain":!0,children:i.map((e,t)=>{var n,a;return(0,r.jsxs)("li",{className:"w-44 shrink-0 cursor-pointer rounded-md border bg-background/60 p-2 hover:border-primary",onClick:()=>s(t),"data-trace-chain-card":t,children:[(0,r.jsxs)("div",{className:"flex justify-between font-mono text-[11px] lg:text-[10px]",children:[(0,r.jsx)("span",{className:ed[e.kind],children:e.kind}),(0,r.jsx)("span",{className:"text-muted-foreground",children:(0,u.qo)(e.ts)})]}),(0,r.jsx)("div",{className:"mt-1 line-clamp-2 text-[11px]",children:e.what}),(0,r.jsxs)("div",{className:"mt-1 line-clamp-2 text-[11px] lg:text-[10px] text-muted-foreground",children:["왜: ",null!=(a=null!=(n=e.why)?n:e.purpose)?a:(0,r.jsx)("span",{className:"rounded bg-muted px-1",children:"계측 없음"})]}),e.target&&(0,r.jsxs)("div",{className:"mt-0.5 truncate text-[11px] lg:text-[10px] text-muted-foreground",children:["→ ",e.target]})]},"".concat(e.ts,"-").concat(t))})})]})}function em(e){var t,n,s,i,c,x,f,m;let{runId:g,universe:p,store:h,index:v,model:b,onIndex:y}=e,{chain:j,source:w}=ex(g,h,b),k=(0,o.M1)(),N=Math.min(Math.max(0,v),Math.max(0,j.length-1)),I=j[N],[M,S]=(0,a.useState)(!1);(0,a.useEffect)(()=>{j.length&&v!==N&&y(N)},[v,N,j.length,y]);let L=null==I?void 0:I.logId,E=(0,d.I)({queryKey:["trace","evidence",L],queryFn:()=>k.getTraceEvidence(L),enabled:!!L,retry:!1,staleTime:1/0}),R=(0,a.useContext)(ea),A=(null==(t=E.data)?void 0:t.evidence)&&R?(0,et.cj)(E.data.evidence,R):null==(n=E.data)?void 0:n.evidence;if(!I)return(0,r.jsx)("p",{className:"rounded-lg border p-3 text-xs text-muted-foreground",children:"이 런에 판단이 없다."});let C=function(e,t,n){var r;let a=Date.parse(t.ts),s=e=>{var n;return!t.runId||(null==(n=e.data)?void 0:n.runId)===t.runId},l=null!=(r=e.rows.find(e=>e.ts===t.ts&&s(e)))?r:null,i=e.rows.filter(e=>s(e)&&e!==l&&6e4>=Math.abs(Date.parse(e.ts)-a)).sort((e,t)=>e.ts<t.ts?-1:1).slice(0,20),o=new Date(a-6e4).toISOString(),d=new Date(a+6e4).toISOString(),c="elanous logs".concat(n&&"this"!==n?" --instance ".concat(n):"").concat(l?" --category ".concat(l.category):""," --since ").concat(o," --until ").concat(d).concat(t.runId?" --grep ".concat(t.runId):""," --json --json-data");return{source:l,around:i,command:c,pr:t.target&&/^#?\d+$/.test(t.target)?t.target.replace(/^#/,""):null}}(b,I,p),T=null!=(c=I.pr)?c:C.pr;return(0,r.jsxs)("div",{className:"space-y-2 rounded-lg border bg-card/60 p-3 text-xs","data-trace-decision":N,children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:()=>y(N-1),disabled:0===N,className:"rounded border px-1.5 disabled:opacity-30","aria-label":"앞 판단",children:"←"}),(0,r.jsxs)("span",{className:"font-mono text-[11px] text-muted-foreground",children:["판단 ",N+1,"/",j.length]}),(0,r.jsx)("button",{type:"button",onClick:()=>y(N+1),disabled:N>=j.length-1,className:"rounded border px-1.5 disabled:opacity-30","aria-label":"다음 판단",children:"→"}),(0,r.jsx)("span",{className:(0,er.cn)("ml-auto font-mono",ed[I.kind]),children:I.kind}),(0,r.jsx)("span",{className:"font-mono text-muted-foreground",children:(0,u.qo)(I.ts)})]}),(0,r.jsxs)("dl",{className:"grid grid-cols-[5rem_1fr] gap-x-2 gap-y-1",children:[(0,r.jsx)("dt",{className:"text-muted-foreground",children:"무엇"}),(0,r.jsx)("dd",{children:I.what}),(0,r.jsx)("dt",{className:"text-muted-foreground",children:"왜"}),(0,r.jsx)("dd",{children:null!=(x=I.why)?x:(0,r.jsx)("span",{className:"rounded bg-muted px-1",children:"계측 없음"})}),(0,r.jsx)("dt",{className:"text-muted-foreground",children:"목적"}),(0,r.jsx)("dd",{children:null!=(f=I.purpose)?f:(0,r.jsx)("span",{className:"rounded bg-muted px-1",children:"계측 없음"})}),(0,r.jsx)("dt",{className:"text-muted-foreground",children:"어디로"}),(0,r.jsx)("dd",{children:null!=(m=I.target)?m:"—"}),I.paths?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("dt",{className:"text-muted-foreground",children:"PATHS"}),(0,r.jsx)("dd",{className:"font-mono",children:I.paths})]}):null]}),(0,r.jsxs)("details",{open:!0,className:"rounded-md border bg-background/40 p-2","data-trace-evidence":!0,children:[(0,r.jsx)("summary",{className:"cursor-pointer font-mono text-[11px] tracking-wider text-muted-foreground",children:"▸ L4 증거"}),(0,r.jsxs)("div",{className:"mt-2 space-y-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"text-[11px] lg:text-[10px] text-muted-foreground","data-trace-evidence-origin":(null==(s=E.data)?void 0:s.evidence)?"server":"local",children:["원 로그 줄 \xb7 ",(null==(i=E.data)?void 0:i.evidence)?"서버 원문(비밀 가림)":"server"===w&&E.error?"서버 원문 실패 — 이 창 조회":"이 창 조회"]}),(0,r.jsx)("pre",{className:"max-h-40 overflow-auto rounded bg-muted/40 p-2 text-[11px] lg:text-[10px] leading-relaxed","data-trace-evidence-source":!0,children:A?JSON.stringify({ref:E.data.ref,ts:A.ts,instance:A.instance,category:A.category,event:A.event,data:A.data},null,2):C.source?JSON.stringify({ts:C.source.ts,instance:C.source.instance,category:C.source.category,event:C.source.event,data:C.source.data},null,2):L&&E.isLoading?"원문을 받는 중…":"이 창의 조회에 원 줄이 없다(조회 상한 또는 다른 우주)."})]}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"text-[11px] lg:text-[10px] text-muted-foreground",children:["앞뒤 1분 \xb7 같은 런 \xb7 ",C.around.length]}),(0,r.jsx)("pre",{className:"max-h-32 overflow-auto rounded bg-muted/40 p-2 text-[11px] lg:text-[10px] leading-relaxed",children:C.around.map(e=>"".concat((0,u.qo)(e.ts)," ").concat(e.category," ").concat(e.event)).join("\n")||"—"})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("code",{className:"min-w-0 flex-1 truncate rounded bg-muted/40 px-2 py-1 text-[11px] lg:text-[10px]",title:C.command,"data-trace-evidence-command":!0,children:C.command}),(0,r.jsx)("button",{type:"button",className:"rounded border px-2 py-1 text-[11px] lg:text-[10px] hover:bg-muted",onClick:()=>{var e;null==(e=navigator.clipboard)||e.writeText(C.command).then(()=>{S(!0),setTimeout(()=>S(!1),1200)})},children:M?"복사됨":"명령 복사"})]}),I.commit&&(0,r.jsxs)("code",{className:"rounded bg-muted/40 px-2 py-1 text-[11px] lg:text-[10px]","data-trace-evidence-commit":!0,children:["커밋 ",I.commit.slice(0,10)]}),T&&(0,r.jsxs)(l(),{href:"/approvals?pr=".concat(T),className:"inline-block rounded border px-2 py-1 text-[11px] lg:text-[10px] hover:bg-muted",children:["PR #",T," 승인 카드 →"]})]})]})]})}function eg(e){var t;let{model:n,lens:s,ledger:l,now:i,store:c,publicCapture:x,rowsAlreadyMasked:f}=e,g=(0,a.useMemo)(()=>(function(e,t){if(!(t.universe||t.status||t.q||t.runId||t.finding||void 0!==t.from))return e.rows;let n=new Set(t.runId?[t.runId]:m(e,t).map(e=>e.runId));return e.rows.filter(e=>{var t;let r=null==(t=e.data)?void 0:t.runId;return"string"!=typeof r||n.has(r)})})(n,s),[n,s]),p=(0,a.useMemo)(()=>x&&!f?(0,et.yR)(g):g,[x,f,g]),h=g===n.rows,v=(0,o.M1)(),b=(0,d.I)({queryKey:["trace","shipped",s.windowMin],queryFn:()=>v.getLiveShipped("".concat(s.windowMin,"m")),refetchInterval:6e4,enabled:h}),y=(0,a.useMemo)(()=>{var e;let t=(0,u.Hc)(p,l,{now:i,windowMinutes:s.windowMin}),n=h?null==(e=b.data)?void 0:e.merged:null;return"number"==typeof n?{...t,gauges:{...t.gauges,shipped:n}}:t},[p,l,i,s.windowMin,h,b.data]);return(0,r.jsx)(J.xl,{board:y,rows:p,publicCapture:x,windowMinutes:s.windowMin,sourceLabel:"@active"===c?"federated":c||"this instance",shippedSource:h&&"number"==typeof(null==(t=b.data)?void 0:t.merged)?"github":"log"})}function ep(){return(0,r.jsx)(ec,{})}},88326:(e,t,n)=>{Promise.resolve().then(n.bind(n,8571))}},e=>{e.O(0,[211,3324,3558,1844,1866,2957,5360,2463,2196,7358],()=>e(e.s=88326)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4191],{21329:(e,t,s)=>{Promise.resolve().then(s.bind(s,32215))},32215:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>l});var n=s(55539),a=s(46124),r=s(58603),o=s(38813);function i(){var e,t;let s=(0,r.useSearchParams)(),i=null!=(e=s.get("workflow"))?e:"",l=null!=(t=s.get("token"))?t:"",[c,d]=(0,a.useState)({kind:"loading"}),[u,h]=(0,a.useState)([]),[f,m]=(0,a.useState)(""),[x,g]=(0,a.useState)(!1),[p]=(0,a.useState)(()=>"hosted-".concat(Date.now().toString(36),"-").concat(Math.random().toString(16).slice(2,6))),w=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=!1;return 0===i.length?void d({kind:"error",reason:"missing ?workflow= query param"}):((0,o.XQ)(i).then(t=>{e||(t?d({kind:"ready",config:t}):d({kind:"not-found"}))}).catch(t=>{e||d({kind:"error",reason:t instanceof Error?t.message:String(t)})}),()=>{e=!0})},[i]),(0,a.useEffect)(()=>{w.current&&(w.current.scrollTop=w.current.scrollHeight)},[u]);let b=async()=>{if("ready"!==c.kind||x)return;let e=f.trim();if(0===e.length)return;let t={id:"u-".concat(Date.now()),role:"user",text:e},s="a-".concat(Date.now());h(e=>[...e,t,{id:s,role:"assistant",text:"",pending:!0}]),m(""),g(!0);try{let t=await (0,o.gJ)({chatPath:c.config.path,message:e,sessionId:"per-session"===c.config.sessionMode?p:void 0,bearer:l.length>0?l:void 0,streaming:c.config.streaming});if("buffered"===t.kind)h(e=>e.map(e=>e.id===s?{...e,text:t.response,pending:!1}:e));else for await(let e of t.frames)if("token"===e.event)h(t=>t.map(t=>t.id===s?{...t,text:t.text+e.data}:t));else if("done"===e.event){let t;try{t=JSON.parse(e.data).response}catch(e){}h(e=>e.map(e=>e.id===s?{...e,text:null!=t?t:e.text,pending:!1}:e))}else"error"===e.event&&h(t=>t.map(t=>t.id===s?{...t,text:t.text+"\n[error: ".concat(e.data,"]"),pending:!1,role:"system"}:t))}catch(t){let e=t instanceof Error?t.message:String(t);h(t=>t.map(t=>t.id===s?{...t,text:"[error: ".concat(e,"]"),pending:!1,role:"system"}:t))}finally{g(!1)}};return"loading"===c.kind?(0,n.jsx)("div",{className:"p-6 text-sm text-slate-500",children:"Loading workflow chat…"}):"not-found"===c.kind?(0,n.jsxs)("div",{className:"p-6 text-sm",children:[(0,n.jsx)("h1",{className:"text-lg font-medium mb-2",children:"Workflow not found"}),(0,n.jsxs)("p",{className:"text-slate-600",children:["The workflow ",(0,n.jsx)("code",{className:"px-1 bg-slate-100 rounded",children:i})," is not available for hosted chat. The workflow author needs to add",(0,n.jsxs)("code",{className:"px-1 bg-slate-100 rounded ml-1",children:["hostedUi: ","{"," enabled: true ","}"]}),"to the chat trigger node."]})]}):"error"===c.kind?(0,n.jsxs)("div",{className:"p-6 text-sm",children:[(0,n.jsx)("h1",{className:"text-lg font-medium mb-2 text-red-600",children:"Connection error"}),(0,n.jsx)("p",{className:"text-slate-600",children:c.reason})]}):(0,n.jsxs)("div",{className:"flex flex-col h-screen max-w-2xl mx-auto px-4",children:[(0,n.jsxs)("header",{className:"py-3 border-b",children:[(0,n.jsx)("h1",{className:"text-base font-medium",children:c.config.workflowName}),(0,n.jsxs)("p",{className:"text-xs text-slate-500",children:[c.config.streaming?"streaming":"buffered"," \xb7 ",c.config.sessionMode,c.config.hostedUi.requiresBearer?" \xb7 bearer required":""]})]}),c.config.hostedUi.requiresBearer&&l.length>0?(0,n.jsx)("div",{className:"text-xs px-3 py-2 bg-amber-50 border-b border-amber-200 text-amber-800",children:"⚠ The bearer token is embedded in this URL. Treat this link as a secret — sharing the URL gives anyone full access to the workflow."}):null,(0,n.jsxs)("div",{ref:w,className:"flex-1 overflow-y-auto py-4 space-y-3",children:[0===u.length?(0,n.jsx)("p",{className:"text-sm text-slate-400 italic",children:"Type a message to start the conversation."}):null,u.map(e=>(0,n.jsxs)("div",{className:"text-sm",children:[(0,n.jsxs)("div",{className:"font-medium text-xs uppercase text-slate-500",children:[e.role,e.pending?" \xb7 typing…":null]}),(0,n.jsx)("pre",{className:"whitespace-pre-wrap font-sans text-slate-800",children:e.text})]},e.id))]}),(0,n.jsxs)("div",{className:"py-3 border-t flex gap-2",children:[(0,n.jsx)("input",{className:"flex-1 px-3 py-2 border rounded text-sm",value:f,onChange:e=>m(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),b())},placeholder:"Message…",disabled:x}),(0,n.jsx)("button",{type:"button",onClick:()=>void b(),disabled:x||0===f.trim().length,className:"px-4 py-2 bg-slate-900 text-white rounded text-sm disabled:opacity-50",children:"Send"})]})]})}function l(){return(0,n.jsx)(a.Suspense,{fallback:(0,n.jsx)("div",{className:"p-6 text-sm text-slate-500",children:"Loading workflow chat…"}),children:(0,n.jsx)(i,{})})}},38813:(e,t,s)=>{"use strict";async function n(e){var t,s;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=null!=(t=n.fetchImpl)?t:fetch,r="".concat(null!=(s=n.origin)?s:"","/v1/workflows/").concat(encodeURIComponent(e),"/chat-config"),o=await a(r);if(404===o.status)return null;if(!o.ok)throw Error("chat-config ".concat(o.status));return await o.json()}async function a(e){var t,s,n,a,o;let i=null!=(t=e.fetchImpl)?t:fetch,l="".concat(null!=(s=e.origin)?s:"","/v1/workflows/chat").concat(e.chatPath),c={"content-type":"application/json"};e.bearer&&e.bearer.length>0&&(c.authorization="Bearer ".concat(e.bearer));let d={message:e.message};e.sessionId&&(d.sessionId=e.sessionId);let u=await i(l,{method:"POST",headers:c,body:JSON.stringify(d),...e.signal?{signal:e.signal}:{}});if(!u.ok){let e=await u.text().catch(()=>"");throw Error("chat ".concat(u.status).concat(e?": "+e:""))}if((null!=(n=u.headers.get("content-type"))?n:"").includes("text/event-stream")&&u.body)return{kind:"streaming",frames:r(u.body)};let h=await u.json();return{kind:"buffered",response:null!=(a=h.response)?a:"",runId:null!=(o=h.runId)?o:""}}async function*r(e){let t=e.getReader(),s=new TextDecoder,n="";try{for(;;){let{value:e,done:a}=await t.read();if(a)break;let r=(n+=s.decode(e,{stream:!0})).indexOf("\n\n");for(;-1!==r;){let e=n.slice(0,r);n=n.slice(r+2);let t=o(e);t&&(yield t),r=n.indexOf("\n\n")}}if(n.trim().length>0){let e=o(n);e&&(yield e)}}finally{t.releaseLock()}}function o(e){let t="message",s=[];for(let n of e.split("\n")){let e=n.endsWith("\r")?n.slice(0,-1):n;if(e.startsWith(":"))continue;let a=e.indexOf(":");if(-1===a)continue;let r=e.slice(0,a),o=e.slice(a+1).replace(/^ /,"");"event"===r?t=o:"data"===r&&s.push(o)}return 0===s.length?null:{event:t,data:s.join("\n")}}s.d(t,{XQ:()=>n,gJ:()=>a})},58603:(e,t,s)=>{"use strict";var n=s(99027);s.o(n,"useParams")&&s.d(t,{useParams:function(){return n.useParams}}),s.o(n,"usePathname")&&s.d(t,{usePathname:function(){return n.usePathname}}),s.o(n,"useRouter")&&s.d(t,{useRouter:function(){return n.useRouter}}),s.o(n,"useSearchParams")&&s.d(t,{useSearchParams:function(){return n.useSearchParams}})}},e=>{e.O(0,[2463,2196,7358],()=>e(e.s=21329)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2975],{18068:(e,t,s)=>{"use strict";s.d(t,{Qb:()=>n,SI:()=>o,dJ:()=>l});let r="elanous:auth-required",i=null,a=!1;function n(e){null===i&&(i=e,window.dispatchEvent(new CustomEvent(r,{detail:{path:e}})))}function l(e){let t=window,s=t=>e(t.detail);return t.addEventListener(r,s),null===i||a||e({path:i}),()=>t.removeEventListener(r,s)}function o(){a=!0}},24231:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(3704).A)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]])},24982:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(3704).A)("git-branch",[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]])},45876:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(3704).A)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]])},46044:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(3704).A)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]])},65354:(e,t,s)=>{"use strict";s.d(t,{AF:()=>r});let r={all:["nexus"],health:()=>[...r.all,"health"],snapshot:()=>[...r.all,"snapshot"],tabs:e=>e?[...r.all,"tabs",{kind:e}]:[...r.all,"tabs"],tab:e=>[...r.all,"tab",e],templates:()=>[...r.all,"templates"],template:e=>[...r.all,"template",e],config:()=>[...r.all,"config"],switches:()=>[...r.all,"switches"],switch:e=>[...r.all,"switch",e],secrets:()=>[...r.all,"secrets"],bindingChannels:()=>[...r.all,"bindings","channels"],bindings:e=>[...r.all,"bindings",e],binding:(e,t)=>[...r.all,"binding",e,t],logsTail:(e,t)=>t?[...r.all,"logs",e,{lines:t}]:[...r.all,"logs",e],workflows:()=>[...r.all,"workflows"],workflow:e=>[...r.all,"workflow",e],workflowRun:e=>[...r.all,"workflow-run",e],workflowRuns:()=>[...r.all,"workflow-runs"],pendingApprovals:()=>[...r.all,"workflow-pending-approvals"],platforms:()=>[...r.all,"platforms"],providers:()=>[...r.all,"providers"],worktrees:()=>[...r.all,"worktrees"],designCheck:()=>[...r.all,"design-check"],designPreviews:()=>[...r.all,"design-previews"],designPreview:e=>[...r.all,"design-preview",e],registryCatalog:()=>[...r.all,"registry-catalog"],resolvedView:()=>[...r.all,"resolved-view"]};r.snapshot(),r.tabs(),r.health(),r.snapshot(),r.config(),r.switches()},67264:(e,t,s)=>{"use strict";s.d(t,{n:()=>u});var r=s(46124),i=s(17600),a=s(92477),n=s(33814),l=s(40404),o=class extends n.Q{#e;#t=void 0;#s;#r;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#i()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),(0,l.f8)(this.options,t)||this.#e.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#s,observer:this}),t?.mutationKey&&this.options.mutationKey&&(0,l.EN)(t.mutationKey)!==(0,l.EN)(this.options.mutationKey)?this.reset():this.#s?.state.status==="pending"&&this.#s.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#s?.removeObserver(this)}onMutationUpdate(e){this.#i(),this.#a(e)}getCurrentResult(){return this.#t}reset(){this.#s?.removeObserver(this),this.#s=void 0,this.#i(),this.#a()}mutate(e,t){return this.#r=t,this.#s?.removeObserver(this),this.#s=this.#e.getMutationCache().build(this.#e,this.options),this.#s.addObserver(this),this.#s.execute(e)}#i(){let e=this.#s?.state??(0,i.$)();this.#t={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#a(e){a.jG.batch(()=>{if(this.#r&&this.hasListeners()){let t=this.#t.variables,s=this.#t.context,r={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type==="success"){try{this.#r.onSuccess?.(e.data,t,s,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(e.data,null,t,s,r)}catch(e){Promise.reject(e)}}else if(e?.type==="error"){try{this.#r.onError?.(e.error,t,s,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(void 0,e.error,t,s,r)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},c=s(50363);function u(e,t){let s=(0,c.jE)(t),[i]=r.useState(()=>new o(s,e));r.useEffect(()=>{i.setOptions(e)},[i,e]);let n=r.useSyncExternalStore(r.useCallback(e=>i.subscribe(a.jG.batchCalls(e)),[i]),()=>i.getCurrentResult(),()=>i.getCurrentResult()),u=r.useCallback((e,t)=>{i.mutate(e,t).catch(l.lQ)},[i]);if(n.error&&(0,l.GU)(i.options.throwOnError,[n.error]))throw n.error;return{...n,mutate:u,mutateAsync:n.mutate}}},68762:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>O});var r=s(55539),i=s(46124),a=s(81694),n=s(46044),l=s(24982),o=s(3704);let c=(0,o.A)("folder-tree",[["path",{d:"M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"hod4my"}],["path",{d:"M20 21a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"w4yl2u"}],["path",{d:"M3 5a2 2 0 0 0 2 2h3",key:"f2jnh7"}],["path",{d:"M3 3v13a2 2 0 0 0 2 2h3",key:"k8epm1"}]]);var u=s(24231),d=s(75342);let h=(0,o.A)("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);var p=s(45876),m=s(94306),f=s(21501),x=s(50363),g=s(67264),y=s(65354),b=s(79247);let w={orphan:0,active:1,detached:2,idle:3,main:4},v={orphan:"Orphan",active:"Active",detached:"Detached",idle:"Idle",main:"Main"},k={orphan:"bg-error/10 text-error",active:"bg-green-600/10 text-green-700",detached:"bg-warning/10 text-warning",idle:"bg-muted text-muted-foreground",main:"bg-primary/10 text-primary"},j={orphan:a.A,active:n.A,detached:l.A,idle:c,main:c};function N(){return(0,m.Qj)()?(0,r.jsx)(M,{}):(0,r.jsxs)("div",{className:"mx-auto max-w-2xl space-y-2 p-6",children:[(0,r.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Worktrees"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Connect to a NEXUS daemon to see active worktrees."})]})}function M(){var e,t,s,n;let{data:l,isLoading:o,error:N,refetch:M,isFetching:O}=function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=(0,m.M1)();return(0,f.I)({queryKey:y.AF.worktrees(),queryFn:()=>s.getWorktrees(),enabled:null==(e=t.enabled)||e,refetchInterval:5e3})}(),S=function(){let e=(0,m.M1)(),t=(0,x.jE)();return(0,g.n)({mutationFn:async t=>{try{return await e.disposeWorktree(t)}catch(t){let e=function(e){if(e instanceof b.Iu&&e.body&&"object"==typeof e.body){let t=e.body;if("ok"in t)return t}return null}(t);if(e)return e;throw t}},onSuccess:e=>{e.ok&&t.invalidateQueries({queryKey:y.AF.worktrees()})}})}(),[C,F]=(0,i.useState)(null),q=null!=(e=null==l?void 0:l.repoRoot)?e:null,E=null!=(t=null==l?void 0:l.worktrees)?t:[],R=null!=(s=null==l?void 0:l.orphanedSessions)?s:[],I=E.map(e=>({view:e,status:e.orphan?"orphan":e.isMain?"main":e.isDetached?"detached":e.session&&e.session.alive?"active":"idle"})).sort((e,t)=>{var s,r,i,a;let n=null!=(s=w[e.status])?s:99,l=null!=(r=w[t.status])?r:99;if(n!==l)return n-l;let o=null!=(i=e.view.branch)?i:"~detached",c=null!=(a=t.view.branch)?a:"~detached";return o.localeCompare(c)}),B=function(e){let t={total:e.length,active:0,orphan:0,idle:0,detached:0,main:0};for(let s of e)t[s.status]+=1;return t}(I),P=Date.now(),T=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=!0===t.force,r=s?"Force-remove this worktree (will discard local changes)?\n\n".concat(e):t.locked?"This worktree is locked. Removing it will fail unless you force.\nProceed with --force?\n\n".concat(e):"Remove this worktree?\n\n".concat(e);if(!window.confirm(r))return;let i=await S.mutateAsync({path:e,force:s||!0===t.locked});F({path:e,result:i})};return(0,r.jsxs)("div",{className:"mx-auto max-w-5xl space-y-4 p-6",children:[(0,r.jsxs)("header",{className:"space-y-1",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("h1",{className:"flex items-center gap-2 text-xl font-semibold tracking-tight",children:[(0,r.jsx)(c,{className:"h-5 w-5"}),"Worktrees"]}),(0,r.jsxs)("button",{type:"button",onClick:()=>M(),disabled:O,"aria-label":"Refresh worktrees",className:"flex items-center gap-1 rounded-md border border-border px-2 py-1 text-[11px] hover:bg-surface-elevated disabled:opacity-50",children:[(0,r.jsx)(u.A,{className:"h-3 w-3 ".concat(O?"animate-spin":"")}),"Refresh"]})]}),q?(0,r.jsx)("p",{className:"text-[11px] font-mono text-muted-foreground",children:q}):(0,r.jsxs)("p",{className:"text-[11px] text-muted-foreground",children:["No repository found. Set ",(0,r.jsx)("code",{className:"font-mono",children:"harness.defaultRepo"})," (absolute path) in Settings, or start NEXUS inside a checkout."]})]}),N&&(0,r.jsxs)("p",{className:"flex items-center gap-1 text-[11px] text-error",children:[(0,r.jsx)(d.A,{className:"h-3 w-3"}),N instanceof Error?N.message:"Failed to load worktrees"]}),o&&!l&&(0,r.jsx)("p",{className:"text-[11px] text-muted-foreground",children:"Querying /v1/worktrees…"}),l&&(0,r.jsx)(A,{summary:B}),C&&(0,r.jsx)("div",{"data-testid":"worktree-dispose-result","data-result-status":C.result.ok?"ok":"error",className:"rounded-md border px-2.5 py-1.5 text-[11px] ".concat(C.result.ok?"border-green-600/40 bg-green-600/5 text-green-700":"border-error/40 bg-error/5 text-error"),children:(0,r.jsxs)("div",{className:"flex items-baseline justify-between gap-2",children:[(0,r.jsxs)("span",{children:[C.result.ok?"".concat("orphan-session-cleanup"===C.result.action?"Cleared orphan session":"Removed worktree"," — ").concat(C.path):"Dispose failed — ".concat(null!=(n=C.result.error)?n:"unknown error"),C.result.detail&&(0,r.jsxs)("span",{className:"ml-1 font-mono text-[10px] opacity-80",children:["(",C.result.detail,")"]})]}),(0,r.jsx)("button",{type:"button",onClick:()=>F(null),className:"text-[10px] underline opacity-70 hover:opacity-100",children:"dismiss"})]})}),l&&I.length>0&&(0,r.jsx)("section",{"data-testid":"worktree-list",className:"overflow-x-auto rounded-md border border-border",children:(0,r.jsxs)("table",{className:"min-w-full text-[11px]",children:[(0,r.jsx)("thead",{className:"bg-surface-elevated",children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{className:"px-2 py-1.5 text-left font-medium",children:"Status"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-left font-medium",children:"Branch"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-left font-medium",children:"Path"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-left font-medium",children:"SHA"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-left font-medium",children:"Owner"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-left font-medium",children:"Entered"}),(0,r.jsx)("th",{className:"px-2 py-1.5 text-right font-medium",children:"Actions"})]})}),(0,r.jsx)("tbody",{children:I.map(e=>{var t;let{view:s,status:i}=e,a=j[i];return(0,r.jsxs)("tr",{"data-testid":"worktree-row-".concat(s.path),"data-status":i,className:"border-t border-border",children:[(0,r.jsxs)("td",{className:"px-2 py-1.5",children:[(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full px-1.5 py-0.5 text-[9px] font-medium uppercase tracking-wider ".concat(k[i]),children:[(0,r.jsx)(a,{className:"h-3 w-3"}),v[i]]}),s.isLocked&&(0,r.jsx)("span",{title:"locked",className:"ml-1 inline-flex items-center text-warning",children:(0,r.jsx)(h,{className:"h-3 w-3"})})]}),(0,r.jsx)("td",{className:"px-2 py-1.5 font-mono",children:null!=(t=s.branch)?t:(0,r.jsx)("span",{className:"text-muted-foreground",children:"—"})}),(0,r.jsx)("td",{className:"px-2 py-1.5 font-mono text-[10px] text-muted-foreground",children:s.path}),(0,r.jsx)("td",{className:"px-2 py-1.5 font-mono text-[10px] text-muted-foreground",children:s.sha.slice(0,7)}),(0,r.jsx)("td",{className:"px-2 py-1.5",children:s.session?(0,r.jsxs)("span",{className:"text-[10px] ".concat(s.session.alive?"text-foreground":"text-error"),children:["pid ",s.session.sessionId,s.session.alive?" (alive)":" (dead — orphan)"]}):(0,r.jsx)("span",{className:"text-[10px] text-muted-foreground",children:"—"})}),(0,r.jsx)("td",{className:"px-2 py-1.5 text-[10px] text-muted-foreground",children:s.session?function(e,t){if(void 0===t)return"";let s=Math.floor(Math.max(0,e-t)/1e3);if(s<60)return"".concat(s,"s ago");let r=Math.floor(s/60);if(r<60)return"".concat(r,"m ago");let i=Math.floor(r/60);if(i<24)return"".concat(i,"h ago");let a=Math.floor(i/24);return"".concat(a,"d ago")}(P,s.session.enteredAt):""}),(0,r.jsx)("td",{className:"px-2 py-1.5 text-right",children:s.isMain?(0,r.jsx)("span",{className:"text-[10px] text-muted-foreground",children:"—"}):(0,r.jsxs)("button",{type:"button","data-testid":"dispose-worktree-".concat(s.path),onClick:()=>T(s.path,{locked:s.isLocked}),disabled:S.isPending,className:"inline-flex items-center gap-1 rounded-md border border-border px-1.5 py-0.5 text-[10px] text-error hover:bg-error/10 disabled:opacity-50","aria-label":"Dispose worktree ".concat(s.path),children:[(0,r.jsx)(p.A,{className:"h-3 w-3"}),"Dispose"]})})]},s.path)})})]})}),l&&0===I.length&&(0,r.jsx)("p",{className:"text-[11px] text-muted-foreground","data-testid":"worktree-empty",children:"No worktrees registered."}),l&&R.length>0&&(0,r.jsxs)("section",{"data-testid":"orphaned-sessions",className:"space-y-1",children:[(0,r.jsxs)("h2",{className:"flex items-center gap-1 text-sm font-medium text-warning",children:[(0,r.jsx)(a.A,{className:"h-4 w-4"}),"Orphaned sessions (",R.length,")"]}),(0,r.jsxs)("p",{className:"text-[10px] text-muted-foreground",children:["Worktree directory was removed (e.g., via ",(0,r.jsx)("code",{children:"git worktree remove"}),") but the session JSON wasn't cleaned. Boot-time stale-cleanup will reap these the next time NEXUS restarts."]}),(0,r.jsx)("ul",{className:"space-y-1 text-[11px]",children:R.map(e=>(0,r.jsxs)("li",{"data-testid":"orphan-session-".concat(e.sessionId),className:"rounded-md border border-warning/40 bg-warning/5 px-2 py-1.5",children:[(0,r.jsxs)("div",{className:"flex items-baseline justify-between gap-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("span",{className:"font-mono",children:["pid ",e.sessionId]})," ",(0,r.jsxs)("span",{className:"text-muted-foreground",children:["(",e.alive?"alive (unusual)":"dead",")"]})]}),(0,r.jsxs)("button",{type:"button","data-testid":"cleanup-orphan-".concat(e.sessionId),onClick:()=>T(e.worktreePath),disabled:S.isPending,className:"inline-flex items-center gap-1 rounded-md border border-border px-1.5 py-0.5 text-[10px] text-error hover:bg-error/10 disabled:opacity-50","aria-label":"Clear orphan session ".concat(e.sessionId),children:[(0,r.jsx)(p.A,{className:"h-3 w-3"}),"Cleanup"]})]}),(0,r.jsxs)("div",{className:"font-mono text-[10px] text-muted-foreground",children:["branch ",(0,r.jsx)("strong",{children:e.branch})," \xb7 ",e.worktreePath]})]},e.sessionId))})]})]})}function A(e){let{summary:t}=e,s=[{label:"Total",value:t.total,cls:"text-foreground"},{label:"Active",value:t.active,cls:"text-green-700"},{label:"Orphan",value:t.orphan,cls:"text-error"},{label:"Idle",value:t.idle,cls:"text-muted-foreground"},{label:"Detached",value:t.detached,cls:"text-warning"}];return(0,r.jsx)("div",{"data-testid":"worktree-summary",className:"flex flex-wrap items-baseline gap-3 text-[11px]",children:s.map(e=>(0,r.jsxs)("span",{className:"flex items-baseline gap-1",children:[(0,r.jsx)("span",{className:"text-muted-foreground",children:e.label}),(0,r.jsx)("span",{className:"font-medium ".concat(e.cls),children:e.value})]},e.label))})}function O(){return(0,r.jsx)(N,{})}},72215:(e,t,s)=>{"use strict";let r;s.d(t,{cY:()=>u,x8:()=>l});let i={debug:0,info:1,warn:2,error:3},a="/v1/debug-logs/batch",n=null;function l(e){n=e}class o{health(){return{pending:this.queue.length,consecutiveFailures:this.consecutiveFailures,lastOkAt:this.lastOkAt,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches}}push(e){if(!(i[function(e){let t=e.slice(e.lastIndexOf(".")+1).toLowerCase();return/^(error|exception|crash|fail|failed)$/.test(t)?"error":/^(warn|degraded|timeout)$/.test(t)?"warn":/^(boot|ready|start|begin|open|ok|done|resolve|end|stop|close)$/.test(t)?"info":"debug"}(e.category)]<i[this.minLevel])){if(this.queue.push(e),this.queue.length>500){let e=this.queue.length-500;this.droppedByCap+=e,this.queue.splice(0,e)}if(this.queue.length>=100&&!this.inFlight){null!==this.timer&&(clearTimeout(this.timer),this.timer=null),this.flush();return}null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},this.flushMs))}}async flush(){if(this.timer&&(clearTimeout(this.timer),this.timer=null),this.inFlight||0===this.queue.length)return;let e=this.queue.slice(0,100);this.inFlight=!0;let t=!1,s=JSON.stringify({records:e});try{var r,i;t=await (r=this.fetchFn(s),i=this.postTimeoutMs,new Promise((e,t)=>{let s=setTimeout(()=>t(Error("debug-forward timeout after ".concat(i,"ms"))),i);r.then(t=>{clearTimeout(s),e(t)},e=>{clearTimeout(s),t(e)})}))}catch(e){t=!1}finally{this.inFlight=!1}if(!t){if(this.consecutiveFailures+=1,this.consecutiveFailures>=2&&n)try{await n(JSON.stringify({records:[...e,this.blockedNotice()]}))&&(this.fallbackBatches+=1)}catch(e){}this.wasFailing=!0,this.scheduleRetry();return}let a=this.lastOkAt;this.lastOkAt=Date.now();let l=this.consecutiveFailures;this.consecutiveFailures=0,this.queue.splice(0,e.length),this.wasFailing&&(this.wasFailing=!1,this.queue.push({ts:new Date().toISOString(),category:"pwa.debug-forwarder.recovered",event:"recovered",data:{consecutiveFailures:l,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches,pending:this.queue.length,previousOkAt:a},source:{platform:"pwa"}})),this.queue.length>0&&null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},this.flushMs))}scheduleRetry(){if(null!==this.timer||0===this.queue.length)return;let e=Math.min(this.flushMs*2**this.consecutiveFailures,3e4);this.timer=setTimeout(()=>{this.flush()},e)}blockedNotice(){return{ts:new Date().toISOString(),category:"pwa.debug-forwarder.http-blocked",event:"http-blocked",data:{consecutiveFailures:this.consecutiveFailures,pending:this.queue.length,droppedByCap:this.droppedByCap,lastOkAt:this.lastOkAt,via:"acp-fallback"},source:{platform:"pwa"}}}beaconFlush(){if(0!==this.queue.length)try{if("undefined"!=typeof navigator&&"function"==typeof navigator.sendBeacon){let e=this.queue.slice(0,100),t=new Blob([JSON.stringify({records:e})],{type:"application/json"});navigator.sendBeacon(a,t)&&this.queue.splice(0,e.length)}}catch(e){}}get pending(){return this.queue.length}constructor(e=c,t="debug",s=1e4,r=100){this.fetchFn=e,this.minLevel=t,this.postTimeoutMs=s,this.flushMs=r,this.queue=[],this.timer=null,this.inFlight=!1,this.consecutiveFailures=0,this.lastOkAt=null,this.droppedByCap=0,this.fallbackBatches=0,this.wasFailing=!1}}async function c(e){return(await fetch(a,{method:"POST",headers:{"content-type":"application/json"},body:e,keepalive:!0,..."undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout?{signal:AbortSignal.timeout(1e4)}:{}})).ok}function u(e,t){if("undefined"==typeof console)return;let s=new Date().toISOString();if(void 0!==t){let r="";try{let e=new WeakSet;r=JSON.stringify(t,(t,s)=>{if("bigint"==typeof s)return"".concat(s.toString(),"n");if("function"==typeof s)return"[fn ".concat(s.name||"anon","]");if(s&&"object"==typeof s){if(e.has(s))return"[circular]";e.add(s)}return s})}catch(e){r="[unserializable: ".concat(String(e),"]")}r&&r.length>800&&(r=r.slice(0,797)+"..."),console.debug("[".concat(s,"] ").concat(e," ").concat(r),t),d(s,e,r)}else console.debug("[".concat(s,"] ").concat(e)),d(s,e,void 0)}function d(e,t,s){let i,a=function(){if(void 0!==r)return r;let e=function(){try{let e="off"!==window.localStorage.getItem("elanous.pwa.debug.forward"),t=window.localStorage.getItem("elanous.pwa.debug.forwardLevel");return{forward:e,level:"info"===t||"warn"===t||"error"===t?t:"debug"}}catch(e){return{forward:!0,level:"debug"}}}();if(!e.forward)return r=null,null;let t=new o(c,e.level,1e4,1500);try{window.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&t.beaconFlush()})}catch(e){}return r=t,t}();if(!a)return;let n=t.slice(t.lastIndexOf(".")+1)||t;if(void 0!==s&&""!==s)try{i=JSON.parse(s)}catch(e){i=s}a.push({ts:e,category:t,event:n,...void 0!==i?{data:i}:{},source:{platform:"pwa"}})}},75342:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(3704).A)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]])},81694:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(3704).A)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},94306:(e,t,s)=>{"use strict";s.d(t,{M1:()=>c,Qj:()=>u,tI:()=>o});var r=s(55539),i=s(46124),a=s(76642),n=s(50363);let l=(0,i.createContext)(null);function o(e){let{client:t,queryClient:s,defaultStaleTimeMs:o,children:c}=e,u=(0,i.useMemo)(()=>null!=s?s:new a.E({defaultOptions:{queries:{staleTime:null!=o?o:2e3,refetchOnWindowFocus:!1}}}),[s,o]);return(0,r.jsx)(l.Provider,{value:t,children:(0,r.jsx)(n.Ht,{client:u,children:c})})}function c(){let e=(0,i.useContext)(l);if(!e)throw Error("useNexusClient must be used within <NexusProvider>");return e}function u(){return(0,i.useContext)(l)}},96091:(e,t,s)=>{Promise.resolve().then(s.bind(s,68762))}},e=>{e.O(0,[3324,1844,9247,2463,2196,7358],()=>e(e.s=96091)),_N_E=e.O()}]);
|