elanous 0.2.25 → 0.2.28
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/{1454-37fd16f479f5554a.js → 1454-29d1d773d5996a49.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{599-a914cc0468f56143.js → 599-56f2c0a5cc4a7295.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-5ab1e47978577c5e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-24453f6a302816b4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-6c131d30bb1cf871.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-b12149c51f7d04b1.js → page-fa46d4588e8442c2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-dc0772b11861af51.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-66ad46ed0279feb9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-5159dc8752c6cd29.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-c5a2478861c08b87.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-f722a9dec084e08b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/{page-305cd294e754906e.js → page-256ffd365d32e100.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/{page-dea4b795741126fd.js → page-e0de78ae7b99f01c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-cfbdc44b708d9801.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/{page-45889e7070d11126.js → page-4c741eb760f2f77c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/field/{page-16a2e893f83ae4d0.js → page-e9ba98f5f1440a21.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-dafc901bb1b72b5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/{page-56888bc744e08dac.js → page-2f6f303fa114ec24.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-1634081c5272006c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/{page-952c6ceec6d9de38.js → page-ced0bcfc6542b3fc.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/{page-6d0202af568f4c63.js → page-bb1f05cd51c38944.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-646b50f63b6fe732.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-db069b48a59c8c00.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-4fb6fc34e20c07b7.js → page-f736324afa2117c1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-e9502921f4f01b1f.js → page-6f131b51193a36f9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/{not-found-b6169ea2f09cf287.js → not-found-435f5e2faf02bc01.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/{page-6a14333d1b1b3967.js → page-497e0eedf20e7890.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/{page-8c91a9a66c9ec90a.js → page-a8d28fdf995e16ea.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-8966452228753c5e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fd5d18656cb432b6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-5663779cb1a37609.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/{page-3d3fc73dd187ed52.js → page-66a67eb19ebd976b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-3b492aa78cf3c4a6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-9c04dac0831c2bbb.js → page-c71267e7681da982.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-a21d1e1797172692.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/{page-04de9ca6d52a3893.js → page-cb249e81ed339318.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/{page-62527677bbc2fdc4.js → page-781cfc5114e097da.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/{page-9a2e09c4a311764c.js → page-478157214db6a023.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/{page-bfeb35d69e8b24bb.js → page-86141f12cf090b7f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/share/{page-89cb33bced824e4a.js → page-7256c73bb1c36751.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-5c738ca7adef3de5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-0138c8091ec17224.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-cc2f24f16d85e735.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/{page-6445ac4cbb8dd869.js → page-979d318a534e92da.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-182d394f7e6e096b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-21050928a697ed7a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-44b9d807005a9030.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/{page-20162174b77f96cf.js → page-601fb77340e63c9a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-75d3fb5d47af0edf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/{page-05a4b2c9b91034aa.js → page-11bf9e5725a72c22.js} +1 -1
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +13 -13
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +13 -13
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +13 -13
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +13 -13
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +13 -13
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +13 -13
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +13 -13
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +13 -13
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +13 -13
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +13 -13
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +13 -13
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +13 -13
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +13 -13
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +13 -13
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +13 -13
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +13 -13
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +13 -13
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +13 -13
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +13 -13
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +13 -13
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +13 -13
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +13 -13
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +13 -13
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +13 -13
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +13 -13
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +13 -13
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +13 -13
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +13 -13
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +14 -14
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +13 -13
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +13 -13
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +13 -13
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +13 -13
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +13 -13
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +13 -13
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +13 -13
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +13 -13
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +13 -13
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +13 -13
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +13 -13
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +13 -13
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +13 -13
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +13 -13
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +13 -13
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +13 -13
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +13 -13
- package/graphs/implement-loop.yaml +38 -1
- package/graphs/steward/recipes.yaml +6 -0
- package/graphs/steward/release-day.yaml +23 -0
- package/graphs/steward/steward.yaml +9 -1
- package/graphs/work/code-pr.yaml +23 -0
- package/package.json +1 -1
- package/scripts/browser-observe-cycle.ts +76 -2
- package/scripts/ci-typecheck-changed.ts +119 -7
- package/scripts/coord-msg-bridge.ts +209 -0
- package/scripts/coord-post.sh +40 -7
- package/scripts/coord-requests-bridge.ts +10 -5
- package/scripts/detect-test-interference.ts +31 -1
- package/scripts/expose-rubric-suggest.ts +1 -1
- package/scripts/measure-tsc-affected-roots.ts +10 -1
- package/scripts/release-loop/docs-node.ts +51 -22
- package/scripts/release-loop/export-check-node.ts +8 -5
- package/scripts/release-loop/gate-node.ts +37 -4
- package/scripts/release-loop/node-verdict.ts +10 -3
- package/scripts/release-loop/publish-node.ts +3 -0
- package/scripts/release-loop/tui-node-checks.ts +5 -2
- package/scripts/skills/public-check.ts +5 -2
- package/scripts/test-deterministic.ts +520 -37
- package/scripts/ux-sim.ts +7 -1
- package/scripts/verify-kpack6-live.ts +230 -0
- package/src/acp/codex-plugins.ts +17 -0
- package/src/agent/task-notification.ts +32 -2
- package/src/agent-mission/in-agent-plugin.ts +8 -3
- package/src/agent-substrate/review-observation.ts +9 -2
- package/src/agent-substrate/self-review-cli.ts +62 -16
- package/src/boot/daemon-tools/self-implement.ts +72 -4
- package/src/briefing/brief-items.ts +151 -35
- package/src/budget/llm-cost.ts +30 -3
- package/src/budget/usage-outcomes.ts +32 -0
- package/src/claims/claims-ledger.ts +23 -0
- package/src/claims/claims-render.ts +22 -2
- package/src/cli/brief-cli.ts +131 -10
- package/src/cli/claims-cli.ts +24 -4
- package/src/cli/control-cli.ts +29 -0
- package/src/cli/doctor-cli.ts +90 -8
- package/src/cli/msg-cli.ts +177 -11
- package/src/cli/plugin-cli.ts +11 -3
- package/src/cli/pr-cli.ts +133 -18
- package/src/cli/pr-land-overlap-evidence.ts +18 -10
- package/src/cli/pr-land-refusal.ts +20 -0
- package/src/cli/release-cli.ts +34 -5
- package/src/cli/rfc-cli.ts +24 -0
- package/src/cli/seat-cli.ts +121 -0
- package/src/cli/self-utterances-cli.ts +140 -0
- package/src/cli/tailscale-serve.ts +5 -8
- package/src/cli/tasks-cli.ts +528 -31
- package/src/cli/usage-cli.ts +9 -4
- package/src/context-card/cell.ts +40 -0
- package/src/dashboard/boot-timing.ts +35 -0
- package/src/dashboard/first-screen-band.ts +63 -13
- package/src/dashboard/index.ts +94 -27
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +26 -0
- package/src/dashboard/skill-detection-runtime.ts +24 -4
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +6 -0
- package/src/debug/log.ts +1 -1
- package/src/domains/morning-report.ts +3 -1
- package/src/domains/release-tool.ts +29 -12
- package/src/domains/surface-events.ts +16 -0
- package/src/elanous-config-dir.ts +2 -2
- package/src/fleet/host-doctor.ts +73 -2
- package/src/github/pr-labels.ts +10 -4
- package/src/graph-runner/runner.ts +104 -15
- package/src/harness/harness-clean.ts +21 -3
- package/src/harness/harness-cli-command.ts +68 -10
- package/src/harness/harness-pod-dispatch.ts +11 -4
- package/src/harness/harness-stop.ts +11 -7
- package/src/hq/seats.ts +17 -3
- package/src/index.ts +69 -9
- package/src/instance/current.ts +2 -6
- package/src/instance/resolve.ts +5 -6
- package/src/intelligence-map/model-bench-scores.ts +102 -0
- package/src/llm/openai-sampling-fields.ts +89 -0
- package/src/llm/runtime-model-family.ts +61 -0
- package/src/llm/zai-coding-plan.ts +27 -1
- package/src/llm.ts +13 -89
- package/src/loops/orchestrator/inbox.ts +73 -0
- package/src/loops/orchestrator/resync-shadow.ts +100 -12
- package/src/loops/orchestrator/tick.ts +73 -2
- package/src/machines/machine-ledger.ts +31 -3
- package/src/maturity/cli-maturity.ts +13 -3
- package/src/maturity/feature-maturity.ts +1 -1
- package/src/msg/msg-sse-server.ts +141 -0
- package/src/msg/msg-store.ts +149 -17
- package/src/ops/overview-collect.ts +3 -2
- package/src/ops/overview-owner.ts +29 -0
- package/src/patents/ledger.ts +128 -0
- package/src/plugin-hooks/shell-hook.ts +17 -2
- package/src/plugin-missions/evaluator-runner.ts +18 -2
- package/src/plugins/install/market-fetch.ts +32 -1
- package/src/plugins/install/plugin-install.ts +11 -1
- package/src/pod-lease/admission.ts +116 -41
- package/src/prompt-enhance/enhance.ts +11 -0
- package/src/release-loop/checklist.ts +52 -4
- package/src/release-loop/feature-store.ts +10 -9
- package/src/release-loop/merged-pr-checklist.ts +24 -5
- package/src/release-loop/rubric.ts +70 -0
- package/src/rfc-registry/registry.ts +88 -0
- package/src/seat-dispatch/seat-request-ledger.ts +4 -0
- package/src/seat-loop/knowhow-lint.ts +233 -0
- package/src/seat-loop/seat-loop.ts +5 -1
- package/src/seat-loop/seat-pack.ts +16 -4
- package/src/seat-loop/traffic-signal.ts +7 -0
- package/src/self-dev/ask-launch-flow.ts +48 -8
- package/src/self-dev/ask-path-candidates.ts +69 -14
- package/src/self-dev/decompose-proposal.ts +43 -1
- package/src/self-dev/draft-sweep.ts +23 -14
- package/src/self-dev/graph-journey-nodes.ts +2 -0
- package/src/self-dev/launch-preflight-text.ts +5 -1
- package/src/self-dev/launch-preflight.ts +143 -10
- package/src/self-dev/orchestrate.ts +6 -2
- package/src/self-dev/run-supervisor.ts +35 -1
- package/src/self-implement/gate-cli.ts +6 -2
- package/src/self-implement/goal-author.ts +5 -28
- package/src/self-implement/goal-command-execution.ts +26 -0
- package/src/self-implement/goal-new-paths.ts +4 -5
- package/src/self-implement/graph-authority.ts +17 -3
- package/src/self-implement/graph-yaml.ts +15 -7
- package/src/self-implement/headless-elanous-driver.ts +16 -1
- package/src/self-implement/host-regate.ts +44 -9
- package/src/self-implement/orchestrator.ts +5 -11
- package/src/self-implement/pwa-import-graph.ts +194 -7
- package/src/self-implement/rework-policy.ts +80 -2
- package/src/self-implement/self-implement-runtime.ts +126 -21
- package/src/self-implement/speed-claims.ts +145 -6
- package/src/session/index.ts +14 -4
- package/src/session-runtime/index.ts +55 -11
- package/src/skills/tools/persistent-grounding.ts +59 -4
- package/src/skills/tools/shell.ts +79 -1
- package/src/steward/rejudge-tick.ts +12 -1
- package/src/steward/release-day.ts +158 -0
- package/src/steward/resync-tick.ts +123 -0
- package/src/task-agent/actions.ts +1 -0
- package/src/task-agent/adopt-pr.ts +140 -0
- package/src/task-agent/board.ts +11 -1
- package/src/task-agent/card-evidence.ts +37 -5
- package/src/task-agent/cover.ts +105 -19
- package/src/task-agent/failure-notify.ts +61 -0
- package/src/task-agent/green-sweep.ts +170 -0
- package/src/task-agent/land-worktree.ts +52 -5
- package/src/task-agent/live-move-history.ts +1 -0
- package/src/task-agent/live-moves.ts +56 -17
- package/src/task-agent/parent-host.ts +1 -1
- package/src/task-agent/postland-card.ts +139 -0
- package/src/task-agent/rejudge-on-head.ts +321 -25
- package/src/task-agent/remote-rejudge-bind.ts +62 -0
- package/src/task-agent/repair-branch-cas.ts +182 -0
- package/src/task-agent/repair-cycle.ts +275 -0
- package/src/task-agent/repair-next-move.ts +31 -0
- package/src/task-agent/repair-review.ts +24 -0
- package/src/task-agent/repair-worker.ts +87 -0
- package/src/task-agent/review-result-capture.ts +66 -2
- package/src/task-agent/shadow.ts +150 -29
- package/src/task-agent/task-hand.ts +133 -8
- package/src/task-orchestrator/surfaces/pod-repair-commit.ts +96 -0
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +71 -12
- package/src/telegram.ts +30 -1
- package/src/tool-runtime/tool-search-runtime.ts +25 -0
- package/src/tui.ts +20 -1
- package/src/user-config.ts +11 -60
- package/src/ux-sim/fault-sqlite-busy.ts +50 -0
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-9360b1285b2a346e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f08f6529d09ffae1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-f000d54d258f9ef6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-22f674e7e4c2c9d5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-8888733e40cea6d1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-9717ec6964b92276.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-44eaad486bc98a45.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-97fa6cf3d34c7eb9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-35e05d7450461a67.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-b2638013c0bf7dfd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-c44f93a41167536f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-1b810474507f3702.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-74366ae2693a7d95.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-4e634c5b98fd4e93.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ed3070d637850548.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-b9cc8a10bc6078b4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-128458c8d86fbb5f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-cf0c2b0183991d09.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-b008aff96be56654.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-814394dcbae789b1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-6a87325c87f09dd2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-852170303c6cd755.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-087ceeb975ef272b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-97c7361cc2a19319.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-8c6901833f897496.js +0 -1
- /package/apps/pwa/out/_next/static/{dRS6lEhSRRBr1abbzp7fJ → y1ltt7oCZxVpC6zVPhZ2O}/_buildManifest.js +0 -0
- /package/apps/pwa/out/_next/static/{dRS6lEhSRRBr1abbzp7fJ → y1ltt7oCZxVpC6zVPhZ2O}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8677],{8801:(e,t,r)=>{"use strict";r.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var n=r(77194),a=r(49954),l=r(9248),s=r(19631),o=r(49638),i=r(35857);let d=(0,a.createContext)(null);function c(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[c,u]=(0,a.useState)(r),[m,x]=(0,a.useState)(""),[h]=(0,a.useState)(()=>new o.ki(r));(0,a.useEffect)(()=>{let e=(0,l.Fp)();u(e),h.updateConfig(e),x((0,s.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[h]),(0,a.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,l.Fp)();h.updateConfig(t),u(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&x(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[h]);let p=e=>{u(t=>{let r={...t,...e};return(0,l.Qc)(e),h.updateConfig(r),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},g=e=>{x(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},f=(0,a.useMemo)(()=>({config:c,setConfig:p,client:h,sessionId:m,setSessionId:g}),[c,h,m]);return(0,n.jsx)(d.Provider,{value:f,children:t})}function u(){let e=(0,a.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},19631:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>s,f6:()=>a,oD:()=>l});let n="elanous.daemon.sessionId";function a(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function l(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=a();return localStorage.setItem(n,t),t}function s(){let e=a();return localStorage.setItem(n,e),e}},35083:(e,t,r)=>{"use strict";r.d(t,{cn:()=>l});var n=r(44196),a=r(25080);function l(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,a.QP)((0,n.$)(t))}},44092:(e,t,r)=>{"use strict";r.d(t,{$:()=>i});var n=r(77194),a=r(51225),l=r(65106),s=r(35083);let o=(0,l.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function i(e){let{className:t,variant:r="default",size:l="default",...i}=e;return(0,n.jsx)(a.$,{"data-slot":"button",className:(0,s.cn)(o({variant:r,size:l,className:t})),...i})}},47797:(e,t,r)=>{"use strict";r.d(t,{HS:()=>n,O2:()=>l,Rk:()=>d,XP:()=>c,sR:()=>i,uU:()=>a});let n=["auto","default","neutral","dark","forest"],a="elanous.mermaid.theme",l="elanous:mermaid-theme-change",s=null,o=null;function i(){if(o!==window&&(s=null),null!==s)return s;try{var e;let t=window.localStorage.getItem(a);return null!=(e=n.find(e=>e===t))?e:"auto"}catch(e){return"auto"}}function d(e){o=window;try{window.localStorage.setItem(a,e),s=null}catch(t){s=e}window.dispatchEvent(new Event(l))}function c(e,t){for(let t of e.matchAll(/%%\{\s*init\s*:\s*\{([\s\S]*?)\}\s*\}%%/gi)){var r;let e=null==(r=t[1])?void 0:r.match(/(?:^|,)\s*['"]?theme['"]?\s*:\s*['"]?(default|neutral|dark|forest|base)\b/i);if(e)return e[1].toLowerCase()}return"auto"===t?"default":t}},57526:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>D});var n=r(77194),a=r(49954),l=r(8801),s=r(44092),o=r(73137),i=r(21666),d=r(58091),c=r(22961),u=r(47797);let m=null,x=Promise.resolve();function h(){var e;return"dark"===(null!=(e=getComputedStyle(document.documentElement).colorScheme)?e:"").trim().split(/\s+/)[0]}async function p(e,t,n){let a=x.then(async()=>{let a=await (!m&&(m=Promise.all([r.e(3966),r.e(9719),r.e(4089),r.e(9117)]).then(r.bind(r,20184)).then(e=>e.default).catch(e=>{throw m=null,e})),m);a.initialize({startOnLoad:!1,securityLevel:"strict",theme:n,fontFamily:"inherit"});try{let{svg:r}=await a.render(e,t);return r}finally{var l,s;"undefined"!=typeof document&&(null==(l=document.getElementById(e))||l.remove(),null==(s=document.getElementById("d".concat(e)))||s.remove())}});return x=a.catch(()=>void 0),a}function g(e){let{source:t}=e,r=(0,a.useId)(),l="mermaid-".concat(r.replace(/[^a-zA-Z0-9_-]/g,"")),[s,o]=(0,a.useState)({status:"loading"}),[i,d]=(0,a.useState)(()=>h()),[c,m]=(0,a.useState)(u.sR),x=(0,u.XP)(t,c);if((0,a.useEffect)(()=>{let e=()=>m((0,u.sR)()),t=t=>{(t.key===u.uU||null===t.key)&&e()};return window.addEventListener(u.O2,e),window.addEventListener("storage",t),()=>{window.removeEventListener(u.O2,e),window.removeEventListener("storage",t)}},[]),(0,a.useEffect)(()=>{if(d(h()),"undefined"==typeof MutationObserver)return;let e=new MutationObserver(()=>d(h()));return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme","class","style"]}),()=>e.disconnect()},[]),(0,a.useEffect)(()=>{let e=!1;return o({status:"loading"}),p("".concat(l,"-").concat(Date.now().toString(36)),t,x).then(r=>{e||o({status:"ok",svg:r,theme:x,source:t})}).catch(t=>{e||o({status:"error",message:(t instanceof Error?t.message:String(t)).split("\n").filter(Boolean).slice(0,3).join(" \xb7 ")||"mermaid 렌더 실패"})}),()=>{e=!0}},[l,t,x]),"ok"===s.status&&s.theme===x&&s.source===t)return(0,n.jsx)("div",{className:"".concat("my-3 flex justify-center overflow-x-auto rounded-lg border p-3 [&_svg]:h-auto [&_svg]:max-w-full"," ").concat(i&&"dark"!==x?"border-gray-200 bg-white text-gray-900 [color-scheme:light]":"border-border bg-muted/20"),"data-elanous-mermaid":"ok",dangerouslySetInnerHTML:{__html:s.svg}});return(0,n.jsxs)("div",{className:"my-3","data-elanous-mermaid":"ok"===s.status?"loading":s.status,children:["error"===s.status&&(0,n.jsxs)("p",{className:"mb-1 text-xs text-destructive",children:["mermaid 도식을 그리지 못했습니다: ",s.message]}),("loading"===s.status||"ok"===s.status&&(s.theme!==x||s.source!==t))&&(0,n.jsx)("p",{className:"mb-1 text-xs text-muted-foreground",children:"mermaid 도식을 그리는 중…"}),(0,n.jsx)("pre",{className:"overflow-x-auto rounded-lg border border-border bg-muted/40 p-3 text-xs",children:(0,n.jsx)("code",{className:"language-mermaid font-mono",children:t})})]})}let f="wikilink:",v={aliasDivider:"|",pageResolver:e=>[e],hrefTemplate:e=>"".concat(f).concat(encodeURIComponent(e))};function b(e){let{markdown:t,onWikilink:r}=e;return(0,n.jsx)("div",{className:"text-sm text-foreground/90",children:(0,n.jsx)(o.oz,{remarkPlugins:[i.A,c.A,[d.A,v]],components:{h1:e=>{let{children:t}=e;return(0,n.jsx)("h1",{className:"mb-3 mt-5 border-b border-border pb-1 text-2xl font-bold",children:t})},h2:e=>{let{children:t}=e;return(0,n.jsx)("h2",{className:"mb-2 mt-5 text-xl font-bold",children:t})},h3:e=>{let{children:t}=e;return(0,n.jsx)("h3",{className:"mb-2 mt-4 text-lg font-semibold",children:t})},h4:e=>{let{children:t}=e;return(0,n.jsx)("h4",{className:"mb-1 mt-3 text-base font-semibold",children:t})},h5:e=>{let{children:t}=e;return(0,n.jsx)("h5",{className:"mb-1 mt-2 text-sm font-semibold text-muted-foreground",children:t})},h6:e=>{let{children:t}=e;return(0,n.jsx)("h6",{className:"mb-1 mt-2 text-xs font-semibold uppercase text-muted-foreground",children:t})},p:e=>{let{children:t}=e;return(0,n.jsx)("p",{className:"my-2 leading-relaxed",children:t})},ul:e=>{let{children:t}=e;return(0,n.jsx)("ul",{className:"my-2 list-disc space-y-1 pl-6",children:t})},ol:e=>{let{children:t}=e;return(0,n.jsx)("ol",{className:"my-2 list-decimal space-y-1 pl-6",children:t})},li:e=>{let{children:t}=e;return(0,n.jsx)("li",{className:"leading-relaxed",children:t})},blockquote:e=>{let{children:t}=e;return(0,n.jsx)("blockquote",{className:"my-3 border-l-4 border-primary/40 bg-muted/40 py-1 pl-3 text-muted-foreground",children:t})},hr:()=>(0,n.jsx)("hr",{className:"my-4 border-border"}),table:e=>{let{children:t}=e;return(0,n.jsx)("div",{className:"my-3 overflow-x-auto",children:(0,n.jsx)("table",{className:"w-full border-collapse text-sm",children:t})})},thead:e=>{let{children:t}=e;return(0,n.jsx)("thead",{className:"bg-muted/60",children:t})},th:e=>{let{children:t}=e;return(0,n.jsx)("th",{className:"border border-border px-3 py-1.5 text-left font-semibold",children:t})},td:e=>{let{children:t}=e;return(0,n.jsx)("td",{className:"border border-border px-3 py-1.5",children:t})},code:e=>{let{className:t,children:r}=e;return t?(0,n.jsx)("code",{className:"".concat(t," font-mono"),children:r}):(0,n.jsx)("code",{className:"rounded bg-muted px-1 py-0.5 font-mono text-[0.85em]",children:r})},pre:e=>{let{node:t,children:r}=e,a=function(e){var t,r;let n=null==e||null==(t=e.children)?void 0:t.find(e=>"element"===e.type&&"code"===e.tagName);if(!n)return null;let a=null==(r=n.properties)?void 0:r.className;return(Array.isArray(a)?a.map(String):"string"==typeof a?a.split(/\s+/):[]).includes("language-mermaid")?(function e(t){var r,n;return t?"text"===t.type?null!=(r=t.value)?r:"":(null!=(n=t.children)?n:[]).map(e).join(""):""})(n).replace(/\n$/,""):null}(t);return null!==a?(0,n.jsx)(g,{source:a}):(0,n.jsx)("pre",{className:"my-3 overflow-x-auto rounded-lg border border-border bg-muted/40 p-3 text-xs",children:r})},img:e=>{let{src:t,alt:r}=e;return(0,n.jsx)("img",{src:"string"==typeof t?t:"",alt:null!=r?r:"",className:"my-2 max-w-full rounded"})},a:e=>{let{href:t,children:a}=e,l=null!=t?t:"";if(l.startsWith(f)){let e=decodeURIComponent(l.slice(f.length));return(0,n.jsx)("button",{type:"button",onClick:()=>null==r?void 0:r(e),className:"text-primary underline decoration-dotted underline-offset-2 hover:decoration-solid",children:a})}return(0,n.jsx)("a",{href:l,target:"_blank",rel:"noreferrer",className:"text-primary underline underline-offset-2",children:a})}},children:t})})}class y{get(e){return this.client.fetchJson(e)}info(){return this.get("/v1/vault/info")}list(e){return this.get("/v1/vault/list".concat(e?"?cwd=".concat(encodeURIComponent(e)):""))}read(e,t){let r=new URLSearchParams({path:e,...t?{maxBytes:String(t)}:{}});return this.get("/v1/vault/read?".concat(r.toString()))}search(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50;return this.get("/v1/vault/search?q=".concat(encodeURIComponent(e),"&limit=").concat(t))}notes(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500;return this.get("/v1/vault/notes?".concat(e?"query=".concat(encodeURIComponent(e),"&"):"","limit=").concat(t))}backlinks(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100;return this.get("/v1/vault/backlinks?target=".concat(encodeURIComponent(e),"&limit=").concat(t))}tags(){return this.get("/v1/vault/tags")}templates(){return this.get("/v1/vault/templates")}graph(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:500,n=new URLSearchParams({limit:String(r),...e?{focus:e,hops:String(t)}:{}});return this.get("/v1/vault/graph?".concat(n.toString()))}pollChanges(e){return this.get("/v1/vault/poll-changes?sinceMs=".concat(e))}orphans(){return this.get("/v1/vault/orphans")}templateExpand(e,t){return this.client.fetchJson("/v1/vault/template-expand",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({templatePath:e,...t?{title:t}:{}})})}async writeNote(e){var t,r,n,a;let l=await this.client.fetchResponse("/v1/vault/file",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(e)}),s=(null!=(t=l.headers.get("content-type"))?t:"").includes("application/json")?await l.json():await l.text();if(!l.ok&&409!==l.status)throw Error(String("string"==typeof s?s:null!=(a=null!=(n=null!=(r=null==s?void 0:s.message)?r:null==s?void 0:s.reason)?n:null==s?void 0:s.error)?a:"".concat(l.status)));return s}async saveNote(e){var t,r,n;let a=await this.client.fetchResponse("/v1/notes/save",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)}),l=(null!=(t=a.headers.get("content-type"))?t:"").includes("application/json")?await a.json():await a.text();if(!a.ok&&409!==a.status)throw Error(String("string"==typeof l?l:null!=(n=null!=(r=null==l?void 0:l.reason)?r:null==l?void 0:l.error)?n:"".concat(a.status)));return l}constructor(e){this.client=e}}function j(e){let t=/^---\n([\s\S]*?)\n---\n?/.exec(e);return t?{frontmatter:t[1],body:e.slice(t[0].length)}:{frontmatter:null,body:e}}function w(e){let t=e.toLowerCase();return t.endsWith(".md")||t.endsWith(".markdown")?"markdown":/\.(png|jpe?g|gif|webp|svg)$/.test(t)?"image":t.endsWith(".pdf")?"pdf":/\.(txt|json|ya?ml|csv|log)$/.test(t)?"text":"other"}function N(e){let{onPickTag:t}=e,{client:r}=(0,l.Q)(),s=(0,a.useMemo)(()=>new y(r),[r]),[o,i]=(0,a.useState)([]),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)(!0),x=(0,a.useCallback)(async()=>{m(!0);try{var e;let t=await s.tags();i((null!=(e=t.tags)?e:[]).sort((e,t)=>t.count-e.count))}catch(e){}finally{m(!1)}},[s]);(0,a.useEffect)(()=>{x()},[x]);let h=d?o.filter(e=>e.tag.toLowerCase().includes(d.toLowerCase())):o;return(0,n.jsxs)("div",{className:"flex h-full flex-col",children:[(0,n.jsx)("div",{className:"border-b border-border p-2",children:(0,n.jsx)("input",{value:d,onChange:e=>c(e.target.value),placeholder:"태그 필터…",className:"w-full rounded border border-border bg-background px-2 py-1 text-xs"})}),(0,n.jsx)("div",{className:"flex-1 overflow-auto p-1",children:u?(0,n.jsx)("p",{className:"p-2 text-xs text-muted-foreground",children:"불러오는 중…"}):0===h.length?(0,n.jsx)("p",{className:"p-2 text-xs text-muted-foreground",children:"태그 없음"}):(0,n.jsx)("ul",{className:"space-y-0.5",children:h.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{onClick:()=>t(e.tag),className:"flex w-full items-center justify-between rounded px-2 py-1 text-left text-xs hover:bg-muted",children:[(0,n.jsxs)("span",{className:"truncate",children:["#",e.tag]}),(0,n.jsx)("span",{className:"ml-2 shrink-0 rounded bg-muted px-1.5 text-[10px] text-muted-foreground",children:e.count})]})},e.tag))})})]})}function k(e){var t,r;let{onOpen:o}=e,{client:i}=(0,l.Q)(),d=(0,a.useMemo)(()=>new y(i),[i]),[c,u]=(0,a.useState)(null),[m,x]=(0,a.useState)(null),[h,p]=(0,a.useState)(!0),g=(0,a.useCallback)(async e=>{p(!0);try{u(await d.graph(null!=e?e:void 0,1,e?60:400))}catch(e){}finally{p(!1)}},[d]);(0,a.useEffect)(()=>{g(m)},[g,m]);let f=(0,a.useMemo)(()=>{if(!c)return{nodes:[],edges:[]};let e=c.nodes.map(e=>e.id),t=c.edges.map(e=>({source:e.from,target:e.to}));return{nodes:function(e,t){var r,n,a;let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{width:800,height:600},{width:s,height:o}=l,i=null!=(r=l.iterations)?r:120,d=e.length,c=new Map;for(let e of t)c.set(e.source,(null!=(n=c.get(e.source))?n:0)+1),c.set(e.target,(null!=(a=c.get(e.target))?a:0)+1);let u=s/2,m=o/2,x=.4*Math.min(s,o),h=e.map((e,t)=>{var r;return{id:e,deg:null!=(r=c.get(e))?r:0,x:u+x*Math.cos(2*Math.PI*t/Math.max(1,d)),y:m+x*Math.sin(2*Math.PI*t/Math.max(1,d))}}),p=new Map(h.map((e,t)=>[e.id,t])),g=Math.sqrt(s*o/Math.max(1,d));for(let e=0;e<i;e++){let r=h.map(()=>({x:0,y:0}));for(let e=0;e<d;e++)for(let t=e+1;t<d;t++){let n=h[e].x-h[t].x,a=h[e].y-h[t].y,l=Math.hypot(n,a)||.01,s=g*g/l;n/=l,a/=l,r[e].x+=n*s,r[e].y+=a*s,r[t].x-=n*s,r[t].y-=a*s}for(let e of t){let t=p.get(e.source),n=p.get(e.target);if(null==t||null==n)continue;let a=h[t].x-h[n].x,l=h[t].y-h[n].y,s=Math.hypot(a,l)||.01,o=s*s/g;a/=s,l/=s,r[t].x-=a*o,r[t].y-=l*o,r[n].x+=a*o,r[n].y+=l*o}let n=1-e/i;for(let e=0;e<d;e++){let t=Math.hypot(r[e].x,r[e].y)||.01,a=Math.min(t,30*n);h[e].x=Math.max(20,Math.min(s-20,h[e].x+r[e].x/t*a)),h[e].y=Math.max(20,Math.min(o-20,h[e].y+r[e].y/t*a))}}return h}(e,t,{width:900,height:640,iterations:140}),edges:t}},[c]),v=(0,a.useMemo)(()=>new Map(f.nodes.map(e=>[e.id,e])),[f]),b=Math.max(1,...f.nodes.map(e=>e.deg));return(0,n.jsxs)("div",{className:"flex h-full flex-col",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 border-b border-border px-3 py-2 text-sm",children:[(0,n.jsx)("span",{className:"font-medium",children:"노트 그래프"}),m?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("span",{className:"text-xs text-muted-foreground",children:["focus: ",m," (1-hop)"]}),(0,n.jsx)(s.$,{size:"sm",variant:"outline",className:"ml-auto h-6 px-2 text-xs",onClick:()=>x(null),children:"전체 그래프"})]}):(0,n.jsxs)("span",{className:"ml-auto text-xs text-muted-foreground",children:[null!=(t=null==c?void 0:c.nodes.length)?t:0," 노드 \xb7 ",null!=(r=null==c?void 0:c.edges.length)?r:0," 링크",(null==c?void 0:c.truncated)?" (일부)":""]})]}),(0,n.jsx)("div",{className:"flex-1 overflow-auto p-2",children:h?(0,n.jsx)("p",{className:"p-4 text-sm text-muted-foreground",children:"그래프 계산 중…"}):c&&0!==c.nodes.length?(0,n.jsxs)("svg",{viewBox:"0 0 ".concat(900," ").concat(640),className:"h-auto w-full",style:{maxHeight:"78vh"},children:[f.edges.map((e,t)=>{let r=v.get(e.source),a=v.get(e.target);return r&&a?(0,n.jsx)("line",{x1:r.x,y1:r.y,x2:a.x,y2:a.y,stroke:"currentColor",className:"text-border",strokeWidth:.6,opacity:.5},t):null}),f.nodes.map(e=>{let t=3+e.deg/b*9;return(0,n.jsxs)("g",{className:"cursor-pointer",onClick:()=>null==o?void 0:o(e.id),onDoubleClick:()=>x(e.id),children:[(0,n.jsx)("circle",{cx:e.x,cy:e.y,r:t,className:"fill-primary/70 hover:fill-primary"}),(e.deg>=.3*b||m)&&(0,n.jsx)("text",{x:e.x+t+2,y:e.y+3,className:"fill-foreground/70 text-[9px]",children:e.id.split("/").pop()})]},e.id)})]}):(0,n.jsx)("p",{className:"p-4 text-sm text-muted-foreground",children:"그래프가 비어있습니다."})}),(0,n.jsx)("p",{className:"border-t border-border px-3 py-1 text-[11px] text-muted-foreground",children:"클릭=노트 열기 \xb7 더블클릭=로컬 그래프(focus)"})]})}function S(e){let{onClose:t,onCreated:r}=e,{client:o}=(0,l.Q)(),i=(0,a.useMemo)(()=>new y(o),[o]),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)([]),[x,h]=(0,a.useState)(""),[p,g]=(0,a.useState)(!1),[f,v]=(0,a.useState)(null);(0,a.useEffect)(()=>{i.templates().then(e=>{var t;return m(null!=(t=e.templates)?t:[])}).catch(()=>{})},[i]);let b=(0,a.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};g(!0),v(null);try{let t=e.daily?function(){let e=new Date;return"".concat(e.getFullYear(),"-").concat(String(e.getMonth()+1).padStart(2,"0"),"-").concat(String(e.getDate()).padStart(2,"0"))}():d.trim();if(!t){v("제목을 입력하세요"),g(!1);return}let n="# ".concat(t,"\n\n");if(x){let e=await i.templateExpand(x,t);e.content&&(n=e.content)}else e.daily&&(n="# ".concat(t,"\n\n## 오늘\n\n- \n"));let a=e.daily?"Daily/".concat(t,".md"):"".concat(t,".md"),l=await i.writeNote({path:a,content:n,createOnly:!0});if(l.error){v("file_exists"===l.error?"이미 존재하는 노트입니다":l.error),g(!1);return}r(a)}catch(e){v(e instanceof Error?e.message:String(e)),g(!1)}},[i,d,x,r]);return(0,n.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:t,children:(0,n.jsxs)("div",{className:"w-[420px] rounded-lg border border-border bg-card p-4 shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,n.jsx)("h2",{className:"mb-3 text-sm font-semibold",children:"새 노트"}),(0,n.jsx)("input",{value:d,onChange:e=>c(e.target.value),onKeyDown:e=>{"Enter"===e.key&&b()},placeholder:"노트 제목…",autoFocus:!0,className:"mb-2 w-full rounded border border-border bg-background px-3 py-2 text-sm"}),u.length>0&&(0,n.jsxs)("select",{value:x,onChange:e=>h(e.target.value),className:"mb-2 w-full rounded border border-border bg-background px-2 py-1.5 text-sm",children:[(0,n.jsx)("option",{value:"",children:"템플릿 없음"}),u.map(e=>(0,n.jsx)("option",{value:e.relPath,children:e.name},e.relPath))]}),f&&(0,n.jsx)("p",{className:"mb-2 text-xs text-rose-400",children:f}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(s.$,{size:"sm",onClick:()=>void b(),disabled:p||!d.trim(),children:"생성"}),(0,n.jsx)(s.$,{size:"sm",variant:"outline",onClick:()=>void b({daily:!0}),disabled:p,children:"오늘 데일리노트"}),(0,n.jsx)(s.$,{size:"sm",variant:"ghost",className:"ml-auto",onClick:t,children:"취소"})]})]})})}let C="elanous.pwa.vaultTreeOpen";function E(e){let{onEdit:t}=e,{client:r}=(0,l.Q)(),o=(0,a.useMemo)(()=>new y(r),[r]),[i,d]=(0,a.useState)(null),[c,u]=(0,a.useState)(""),[m,x]=(0,a.useState)([]),[h,p]=(0,a.useState)(null),[g,f]=(0,a.useState)(null),[v,b]=(0,a.useState)(""),[j,E]=(0,a.useState)(null),[z,D]=(0,a.useState)(!1),[I,P]=(0,a.useState)("view"),[R,U]=(0,a.useState)("files"),[_,O]=(0,a.useState)(!1),[$,L]=(0,a.useState)(0),[T,q]=(0,a.useState)(!0);(0,a.useEffect)(()=>{q(function(e){try{return(null==e?void 0:e.getItem(C))!=="0"}catch(e){return!0}}(window.localStorage))},[]);let A=(0,a.useCallback)(()=>{q(e=>{let t=!e;var r=window.localStorage;try{null==r||r.setItem(C,t?"1":"0")}catch(e){}return t})},[]);(0,a.useEffect)(()=>{let e=Date.now(),t=setInterval(()=>{o.pollChanges(e).then(e=>{var t;return L(null!=(t=e.count)?t:0)}).catch(()=>{})},3e4);return()=>clearInterval(t)},[o]);let F=(0,a.useCallback)(e=>{b("#".concat(e)),U("files"),(async()=>{D(!0);try{var t;let r=await o.search("#".concat(e),50);E(null!=(t=r.matches)?t:[])}catch(e){E([])}finally{D(!1)}})()},[o]),B=(0,a.useCallback)(async e=>{D(!0),E(null);try{let t=await o.list(e||void 0);t.error||(x(t.entries),u(t.cwd))}catch(e){}finally{D(!1)}},[o]);(0,a.useEffect)(()=>{let e=!0;return o.info().then(t=>{e&&(d(t),t.available&&B(""))}).catch(()=>{}),()=>{e=!1}},[o,B]);let K=(0,a.useCallback)(async e=>{p(e),f(null),window.innerWidth<=767&&q(!1);try{f(await o.read(e))}catch(e){}},[o]),Q=(0,a.useCallback)(async()=>{let e=v.trim();if(!e)return void E(null);D(!0);try{var t;let r=await o.search(e,50);E(null!=(t=r.matches)?t:[])}catch(e){E([])}finally{D(!1)}},[o,v]),W=c&&(null==i?void 0:i.root)?c.replace(i.root,"").split("/").filter(Boolean):[],V=(null==i?void 0:i.root)?c.replace(i.root,"").replace(/^\//,""):"";return i&&!i.available?(0,n.jsxs)("div",{className:"p-6 text-sm text-muted-foreground",children:["Obsidian vault를 찾을 수 없습니다 (source: ",i.source,"). ~/.elanous/config.json 의 obsidian.vault 를 확인하세요."]}):(0,n.jsxs)("div",{className:"mx-auto flex h-[calc(100vh-3rem)] max-w-[1920px] gap-3 px-3 py-3",children:[_&&(0,n.jsx)(S,{onClose:()=>O(!1),onCreated:e=>{O(!1),B(""),null==t||t(e)}}),(0,n.jsxs)("div",{"data-testid":"vault-tree",className:[T?"flex":"hidden","w-full shrink-0 flex-col rounded-lg border border-border bg-card/40 md:w-64 lg:w-72"].join(" "),children:[(0,n.jsxs)("div",{className:"flex items-center gap-1 border-b border-border px-2 py-1.5",children:[["files","tags","graph"].map(e=>(0,n.jsx)("button",{onClick:()=>U(e),className:["rounded px-2 py-0.5 text-xs",R===e?"bg-primary/20 text-foreground":"text-muted-foreground"].join(" "),children:{files:"파일",tags:"태그",graph:"그래프"}[e]},e)),$>0&&(0,n.jsxs)("span",{className:"rounded bg-amber-500/15 px-1.5 py-0.5 text-[10px] text-amber-300",title:"외부 변경 감지",children:["↻ ",$]}),(0,n.jsx)(s.$,{size:"sm",variant:"outline",className:"ml-auto h-6 px-2 text-xs",onClick:()=>O(!0),children:"+ 새 노트"})]}),"graph"===R?(0,n.jsx)(k,{onOpen:e=>{U("files"),K("".concat(e,".md"))}}):"tags"===R?(0,n.jsx)(N,{onPickTag:F}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"border-b border-border p-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("input",{value:v,onChange:e=>b(e.target.value),onKeyDown:e=>{"Enter"===e.key&&Q()},placeholder:"vault 전문검색…",className:"min-w-0 flex-1 rounded border border-border bg-background px-2 py-1 text-sm"}),(0,n.jsx)(s.$,{size:"sm",variant:"outline",onClick:()=>void Q(),children:"검색"})]}),!j&&(0,n.jsxs)("div",{className:"mt-1.5 flex flex-wrap items-center gap-1 text-xs text-muted-foreground",children:[(0,n.jsx)("button",{className:"hover:text-foreground",onClick:()=>void B(""),children:"vault"}),W.map((e,t)=>(0,n.jsxs)("span",{children:["/ ",(0,n.jsx)("button",{className:"hover:text-foreground",onClick:()=>void B("".concat(i.root,"/").concat(W.slice(0,t+1).join("/"))),children:e})]},t))]})]}),(0,n.jsxs)("div",{className:"flex-1 overflow-auto p-1",children:[z&&(0,n.jsx)("p",{className:"p-2 text-xs text-muted-foreground",children:"불러오는 중…"}),j?0===j.length?(0,n.jsx)("p",{className:"p-2 text-xs text-muted-foreground",children:"검색 결과 없음"}):(0,n.jsx)("ul",{className:"space-y-1",children:j.map((e,t)=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{className:"w-full rounded px-2 py-1.5 text-left text-xs hover:bg-muted",onClick:()=>void K(e.path),children:[(0,n.jsx)("span",{className:"font-medium",children:e.path.split("/").pop()})," ",(0,n.jsxs)("span",{className:"text-muted-foreground",children:[":",e.lineNumber]}),(0,n.jsx)("div",{className:"truncate text-muted-foreground",children:e.snippet})]})},t))}):(0,n.jsxs)("ul",{children:[V&&(0,n.jsx)("li",{children:(0,n.jsx)("button",{className:"w-full rounded px-2 py-1.5 text-left text-sm text-muted-foreground hover:bg-muted",onClick:()=>void B("".concat(i.root,"/").concat(function(e){let t=e.split("/").filter(Boolean);return t.pop(),t.join("/")}(V))),children:"\uD83D\uDCC1 .."})}),m.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{className:["flex w-full items-center gap-1.5 rounded px-2 py-1.5 text-left text-sm hover:bg-muted",h==="".concat(V?V+"/":"").concat(e.name)?"bg-muted":""].join(" "),onClick:()=>e.isDir?void B("".concat(c,"/").concat(e.name)):void K("".concat(V?V+"/":"").concat(e.name)),children:[(0,n.jsx)("span",{children:e.isDir?"\uD83D\uDCC1":"markdown"===w(e.name)?"\uD83D\uDCDD":"image"===w(e.name)?"\uD83D\uDDBC️":"\uD83D\uDCC4"}),(0,n.jsx)("span",{className:"truncate",children:e.name})]})},e.relPath))]})]})]})]}),(0,n.jsxs)("div",{className:[T?"hidden md:flex":"flex","min-w-0 flex-1 flex-col rounded-lg border border-border bg-card/40"].join(" "),children:[(0,n.jsxs)("div",{className:"flex items-center justify-between border-b border-border px-3 py-2",children:[(0,n.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,n.jsx)("button",{type:"button",onClick:A,"aria-expanded":T,"aria-label":T?"폴더 접기":"폴더 펴기",title:T?"폴더 접기":"폴더 펴기",className:"shrink-0 rounded px-1.5 py-0.5 text-xs text-muted-foreground ring-1 ring-border hover:text-foreground",children:T?"◀ 폴더":"▶ 폴더"}),(0,n.jsx)("span",{className:"truncate text-sm font-medium",children:null!=h?h:"파일을 선택하세요"})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[h&&"markdown"===w(h)&&(0,n.jsx)("div",{className:"flex items-center gap-0.5 rounded ring-1 ring-border",children:["view","raw"].map(e=>(0,n.jsx)("button",{onClick:()=>P(e),className:["px-2 py-0.5 text-xs",I===e?"bg-primary/20 text-foreground":"text-muted-foreground"].join(" "),children:"view"===e?"View":"Raw"},e))}),h&&"markdown"===w(h)&&t&&(0,n.jsx)(s.$,{size:"sm",variant:"outline",onClick:()=>t(h),children:"편집"})]})]}),(0,n.jsx)("div",{className:"flex-1 overflow-auto p-4",children:g?(0,n.jsx)(M,{preview:g,selected:h,mode:I,onWikilink:e=>{K("".concat(V?V+"/":"").concat(e,".md"))}}):(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:h?"로딩…":"좌측에서 노트를 선택하면 여기에 표시됩니다."})})]})]})}function M(e){let{preview:t,selected:r,mode:a,onWikilink:l}=e;if(t.error)return(0,n.jsx)("p",{className:"text-sm text-rose-400",children:t.error});let s=w(r);if("image"===s&&t.bytes)return(0,n.jsx)("img",{src:"data:".concat(t.mime,";base64,").concat(t.bytes),alt:r,className:"max-w-full rounded"});if("markdown"===s&&null!=t.content){let{frontmatter:e,body:r}=j(t.content);return"raw"===a?(0,n.jsx)("pre",{className:"whitespace-pre-wrap font-mono text-xs leading-relaxed",children:t.content}):(0,n.jsxs)("div",{children:[e&&(0,n.jsx)("pre",{className:"mb-3 rounded bg-muted/40 p-2 text-[11px] text-muted-foreground",children:e}),(0,n.jsx)(b,{markdown:r,onWikilink:l}),t.truncated&&(0,n.jsxs)("p",{className:"mt-2 text-xs text-amber-400",children:["⚠ 일부만 표시됨(",(t.size/1024).toFixed(0),"KB)"]})]})}return null!=t.content?(0,n.jsx)("pre",{className:"whitespace-pre-wrap text-sm",children:t.content}):(0,n.jsxs)("p",{className:"text-sm text-muted-foreground",children:["미리보기 불가(",t.mime,")"]})}function z(e){let{path:t,onClose:r}=e,{client:o}=(0,l.Q)(),i=(0,a.useMemo)(()=>new y(o),[o]),[d,c]=(0,a.useState)(""),[u,m]=(0,a.useState)(!1),[x,h]=(0,a.useState)("split"),[p,g]=(0,a.useState)("clean"),[f,v]=(0,a.useState)(null),w=(0,a.useRef)(void 0),N=(0,a.useRef)(null),k=(0,a.useRef)(null),[S,C]=(0,a.useState)("outline"),[E,M]=(0,a.useState)([]),[z,D]=(0,a.useState)(null),I=(0,a.useMemo)(()=>(function(e){let t=[],r=!1;return e.split("\n").forEach((e,n)=>{let a=e.trimEnd();if(/^```/.test(a.trim())){r=!r;return}if(r)return;let l=/^(#{1,6})\s+(.+)$/.exec(a);l&&t.push({level:l[1].length,text:l[2].trim(),line:n})}),t})(j(d).body),[d]);(0,a.useEffect)(()=>{let e=!0;return i.read(t,8388608).then(t=>{var r;e&&(c(null!=(r=t.content)?r:""),w.current=t.mtimeMs,m(!0),g("clean"))}).catch(()=>{e&&(v("노트를 불러오지 못했습니다"),m(!0))}),()=>{e=!1,N.current&&clearTimeout(N.current)}},[i,t]);let P=(0,a.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d;g("saving"),v(null);try{let n=await i.writeNote({path:t,content:r,...e?{}:null!=w.current?{lastKnownMtime:w.current}:{}});if("mtime_conflict"===n.error||n.error&&null!=n.currentMtime)return void g("conflict");if(n.error){g("error"),v(n.error);return}null!=n.mtimeMs&&(w.current=n.mtimeMs),g("saved")}catch(e){g("error"),v(e instanceof Error?e.message:String(e))}},[i,t,d]);(0,a.useEffect)(()=>{var e;let r=!0;return i.backlinks((null!=(e=t.split("/").pop())?e:t).replace(/\.md$/i,""),100).then(e=>{var t;r&&M(null!=(t=e.matches)?t:[])}).catch(()=>{}),()=>{r=!1}},[i,t]);let R=(0,a.useCallback)((e,t)=>{let r=function(e,t){let r=e.slice(0,t),n=r.lastIndexOf("[[");if(n<0)return null;let a=r.slice(n+2);return a.includes("]]")||a.includes("\n")?null:{query:a,start:n+2}}(e,t);if(!r)return void D(null);i.notes(r.query||void 0,8).then(e=>{var n;D({query:r.query,start:r.start,caret:t,items:(null!=(n=e.notes)?n:[]).slice(0,8)})}).catch(()=>D(null))},[i]),U=(0,a.useCallback)((e,t)=>{c(e),g("dirty"),R(e,t),N.current&&clearTimeout(N.current),N.current=setTimeout(()=>{P(!1,e)},2500)},[P,R]),_=(0,a.useCallback)(e=>{if(!z)return;let t=function(e,t,r,n){let a=e.slice(0,t),l=e.slice(r),s="".concat(n,"]]");return{text:a+s+l,caret:a.length+s.length}}(d,z.start,z.caret,e.name);c(t.text),g("dirty"),D(null),requestAnimationFrame(()=>{k.current&&(k.current.focus(),k.current.setSelectionRange(t.caret,t.caret))})},[z,d]),O=(0,a.useCallback)(e=>{let t=k.current;if(!t)return;let r=d.split("\n").slice(0,e).join("\n").length;t.focus(),t.setSelectionRange(r,r),t.scrollTop=Math.max(0,20*e-100)},[d]),$=j(d).body;return u?(0,n.jsxs)("div",{className:"mx-auto flex h-[calc(100vh-3rem)] max-w-[1500px] flex-col px-3 py-3",children:[(0,n.jsxs)("div",{className:"mb-2 flex items-center gap-2",children:[(0,n.jsx)(s.$,{size:"sm",variant:"ghost",onClick:r,children:"← 목록"}),(0,n.jsx)("span",{className:"truncate text-sm font-medium",children:t}),(0,n.jsx)("span",{className:["ml-2 rounded px-2 py-0.5 text-xs",{clean:"text-muted-foreground",dirty:"text-amber-400",saving:"text-sky-400",saved:"text-emerald-400",conflict:"text-rose-400",error:"text-rose-400"}[p]].join(" "),children:{clean:"저장됨",dirty:"● 편집 중",saving:"저장 중…",saved:"✓ 저장됨",conflict:"⚠ 충돌",error:"✗ 오류"}[p]}),(0,n.jsxs)("div",{className:"ml-auto flex items-center gap-1",children:[["edit","split","preview"].map(e=>(0,n.jsx)("button",{onClick:()=>h(e),className:["rounded px-2 py-1 text-xs ring-1",x===e?"bg-primary/20 ring-primary/40":"bg-muted text-muted-foreground ring-border"].join(" "),children:{edit:"편집",split:"분할",preview:"미리보기"}[e]},e)),(0,n.jsx)(s.$,{size:"sm",variant:"outline",onClick:()=>void P(!1),children:"저장"})]})]}),"conflict"===p&&(0,n.jsxs)("div",{className:"mb-2 flex items-center gap-2 rounded border border-rose-500/40 bg-rose-500/10 px-3 py-2 text-xs text-rose-200",children:[(0,n.jsx)("span",{children:"디스크의 노트가 외부에서 변경됐습니다."}),(0,n.jsx)(s.$,{size:"sm",variant:"outline",onClick:()=>void P(!0),children:"강제 덮어쓰기"}),(0,n.jsx)(s.$,{size:"sm",variant:"ghost",onClick:()=>void i.read(t,8388608).then(e=>{var t;c(null!=(t=e.content)?t:""),w.current=e.mtimeMs,g("clean")}),children:"디스크 버전 로드"})]}),f&&(0,n.jsx)("div",{className:"mb-2 text-xs text-rose-400",children:f}),(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 gap-3",children:["preview"!==x&&(0,n.jsxs)("div",{className:"relative min-h-0 flex-1",children:[(0,n.jsx)("textarea",{ref:k,value:d,onChange:e=>U(e.target.value,e.target.selectionStart),onKeyUp:e=>R(d,e.target.selectionStart),onClick:e=>R(d,e.target.selectionStart),onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&"s"===e.key&&(e.preventDefault(),P(!1)),"Escape"===e.key&&z&&(e.preventDefault(),D(null)),"Enter"===e.key&&z&&z.items.length&&(e.preventDefault(),_(z.items[0]))},className:"h-full min-h-0 w-full resize-none rounded-lg border border-border bg-background p-3 font-mono text-sm leading-relaxed focus:outline-none focus:ring-1 focus:ring-ring",spellCheck:!1}),z&&z.items.length>0&&(0,n.jsxs)("div",{className:"absolute left-3 top-3 z-20 max-h-56 w-72 overflow-auto rounded-md border border-border bg-popover shadow-lg",children:[(0,n.jsxs)("div",{className:"border-b border-border px-2 py-1 text-[11px] text-muted-foreground",children:["[[wikilink: ",z.query||"…"]}),z.items.map(e=>(0,n.jsxs)("button",{className:"block w-full truncate px-2 py-1.5 text-left text-xs hover:bg-muted",onMouseDown:t=>{t.preventDefault(),_(e)},children:[(0,n.jsx)("span",{className:"font-medium",children:e.name})," ",(0,n.jsx)("span",{className:"text-muted-foreground",children:e.relPath})]},e.relPath))]})]}),"edit"!==x&&(0,n.jsx)("div",{className:"min-h-0 flex-1 overflow-auto rounded-lg border border-border bg-card/40 p-4",children:(0,n.jsx)(b,{markdown:$})}),(0,n.jsxs)("div",{className:"flex w-[220px] min-w-[180px] flex-col rounded-lg border border-border bg-card/40",children:[(0,n.jsx)("div",{className:"flex border-b border-border text-xs",children:["outline","backlinks"].map(e=>(0,n.jsx)("button",{onClick:()=>C(e),className:["flex-1 px-2 py-1.5",S===e?"border-b-2 border-primary text-foreground":"text-muted-foreground"].join(" "),children:"outline"===e?"개요":"역참조 ".concat(E.length?"(".concat(E.length,")"):"")},e))}),(0,n.jsx)("div",{className:"flex-1 overflow-auto p-1 text-xs",children:"outline"===S?0===I.length?(0,n.jsx)("p",{className:"p-2 text-muted-foreground",children:"heading 없음"}):I.map((e,t)=>(0,n.jsx)("button",{onClick:()=>O(e.line),className:"block w-full truncate rounded px-2 py-1 text-left hover:bg-muted",style:{paddingLeft:"".concat(8*e.level,"px")},children:e.text},t)):0===E.length?(0,n.jsx)("p",{className:"p-2 text-muted-foreground",children:"역참조 없음"}):E.map((e,t)=>(0,n.jsxs)("div",{className:"truncate rounded px-2 py-1",title:e.snippet,children:["\uD83D\uDCCE ",e.path.split("/").pop(),e.headingAnchor?" #".concat(e.headingAnchor):""]},t))})]})]})]}):(0,n.jsx)("div",{className:"p-6 text-sm text-muted-foreground",children:"노트 로딩…"})}function D(){let[e,t]=(0,a.useState)(null);return e?(0,n.jsx)(z,{path:e,onClose:()=>t(null)}):(0,n.jsx)(E,{onEdit:e=>t(e)})}},90527:(e,t,r)=>{Promise.resolve().then(r.bind(r,57526))}},e=>{e.O(0,[8085,5194,1314,3259,9638,2201,6356,7358],()=>e(e.s=90527)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4191],{27883:(e,t,s)=>{Promise.resolve().then(s.bind(s,44145))},42819:(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})},44145:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>l});var n=s(77194),a=s(49954),r=s(98451),o=s(42819);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,{})})}},98451:(e,t,s)=>{"use strict";var n=s(13979);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,[2201,6356,7358],()=>e(e.s=27883)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6364],{5717:(e,t,r)=>{"use strict";r.d(t,{SY:()=>g});var a=r(77194),n=r(49954),s=r(8801),l=r(44092),i=r(17522);let c=["absorbed","discarded","routed","checked"],d={new:"대기 중",queued:"대기 중",absorbed:"흡수됨",routed:"다른 갈래로 넘김",checked:"확인됨",discarded:"버림",deferred:"미룸"};function o(e){var t,r,a;return null===e?{label:"찾을 수 없음",settled:!1,noteRef:null}:{label:Object.hasOwn(d,e.status)?d[e.status]:e.status,settled:c.includes(e.status),noteRef:null!=(a=null==(r=e.outputs)||null==(t=r.find(e=>"note"===e.kind))?void 0:t.ref)?a:null}}let u={"headless.spawn":"실행 시작","gate.baseline":"게이트 검사","review.diff-scope":"리뷰 중","headless.done":"실행 종료","run-terminal":"종료"};function m(e){var t,r,a,n,s;let l=e.at(-1),i=e.find(e=>"run-terminal"===e.event),c=null==i||null==(t=i.payload)?void 0:t.runStatus;return{stage:l?null!=(a=u[l.event])?a:l.event:null,lastEventAt:null!=(n=null==l?void 0:l.ts)?n:null,done:void 0!==i,outcome:i?"completed"===c||"failed"===c?c:"unknown":null,error:null!=(s=null==i||null==(r=i.payload)?void 0:r.error)?s:null}}let p="elanous.intake.recent",f={absorb:"→ 흡수",tasks:"→ 작업",graph:"→ 그래프","ask-human":"→ 직접 고르세요"};function h(e){if(null==e?void 0:e.storage)return e.storage;try{return globalThis.localStorage}catch(e){return null}}function x(e){try{var t;let r=null==(t=h(e))?void 0:t.getItem(p);if(!r)return[];let a=JSON.parse(r);return Array.isArray(a)?a:[]}catch(e){return[]}}async function b(e,t,r){let a=(0,i.cE)(r);return"absorb"===t?{absorbIds:(await (0,i.IH)(e,r)).ids,recentPreview:a}:{acceptanceId:(await (0,i.ZJ)(e,r)).acceptanceId,recentPreview:a}}function g(){var e,t;let{state:r,deps:c}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:d,sessionId:u}=(0,s.Q)(),[g,v]=(0,n.useState)(""),[y,j]=(0,n.useState)(!1),[k,w]=(0,n.useState)(null),[N,I]=(0,n.useState)(null),[S,C]=(0,n.useState)(null),[E,T]=(0,n.useState)(null),[M,D]=(0,n.useState)({}),[R,L]=(0,n.useState)(null),P=(0,n.useRef)(null),[A,O]=(0,n.useState)([]),[z,J]=(0,n.useState)({}),K=(0,n.useRef)(z),U=(0,n.useMemo)(()=>[...new Set(A.filter(e=>"absorb"===e.track).flatMap(e=>{var t;return null!=(t=e.ids)?t:[]}))],[A]),B=(0,n.useRef)(U);B.current=U;let $=(0,n.useRef)(()=>{}),[q,Y]=(0,n.useState)(null),[_,F]=(0,n.useState)(!1),H=(0,n.useRef)(!1),Q=(0,n.useRef)(0),W=(0,n.useRef)(g);W.current=g;let X=(0,n.useRef)(null),G=(0,n.useRef)(M),V=(0,n.useRef)(A),Z=(0,n.useMemo)(()=>[...new Set([...A.filter(e=>"graph"===e.track).map(e=>e.runId),null==E?void 0:E.runId].filter(e=>!!e))],[A,null==E?void 0:E.runId]);(0,n.useEffect)(()=>{O(x(c))},[c]),(0,n.useEffect)(()=>{V.current=A},[A]),(0,n.useEffect)(()=>{let e=!1,t=new Map,r=async a=>{var n;if(e||!B.current.includes(a)||o(null!=(n=K.current[a])?n:null).settled)return;let s=null;try{s=await (0,i.Gm)(d,a)}catch(e){}e||(K.current={...K.current,[a]:s},J(K.current),B.current.includes(a)&&!o(s).settled?t.set(a,setTimeout(()=>{r(a)},6e4)):t.delete(a))};return $.current=e=>{var a;t.has(e)||o(null!=(a=K.current[e])?a:null).settled||(t.set(e,null),r(e))},B.current.forEach($.current),()=>{for(let r of(e=!0,t.values()))null!==r&&clearTimeout(r);t.clear(),$.current=()=>{}}},[d]),(0,n.useEffect)(()=>{U.forEach($.current)},[U]);let ee=(0,n.useCallback)(e=>{var t,r;O(function(e,t){let r=[e,...x(t)].slice(0,20);try{var a;null==(a=h(t))||a.setItem(p,JSON.stringify(r))}catch(e){}return r}({...e,at:null!=(r=null==c||null==(t=c.now)?void 0:t.call(c))?r:new Date().toISOString()},c))},[c]),et=(0,n.useCallback)(async()=>{let e=g.trim();if(e&&!y){j(!0),w(null),I(null);try{var t;let r=await b(d,"absorb",e);I(null!=(t=r.absorbIds)?t:[]),ee({track:"absorb",preview:r.recentPreview,ids:r.absorbIds})}catch(e){w(e instanceof Error?e.message:String(e))}finally{j(!1)}}},[y,d,ee,g]),er=(0,n.useCallback)(async()=>{var e;let t=g.trim();if(!t||y||!u)return;let r=null!=(e=P.current)?e:crypto.randomUUID();P.current=r,j(!0),w(null),L(null);try{let e=await (0,i.qI)(d,t,u,r);P.current=null,L(e.cardId),ee({track:"split",preview:(0,i.cE)(t),cardId:e.cardId})}catch(e){w(e instanceof Error?e.message:String(e))}finally{j(!1)}},[y,d,ee,u,g]),ea=(0,n.useCallback)(async()=>{let e=g.trim();if(e&&!y){j(!0),w(null),C(null),T(null);try{var t;let r=await b(d,"graph",e);C(null!=(t=r.acceptanceId)?t:null),X.current=Date.now(),ee({track:"graph",preview:r.recentPreview,acceptanceId:r.acceptanceId})}catch(e){w(e instanceof Error?e.message:String(e))}finally{j(!1)}}},[y,d,ee,g]);(0,n.useEffect)(()=>{let e=++Q.current;if(Y(null),!g.trim())return;let t=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e)},a=e.trim();if(!a)return()=>{};let n=r.setTimeout(()=>t(a),500);return()=>r.clearTimeout(n)}(g,t=>{(0,i.sg)(d,t).then(t=>{Q.current===e&&Y(t)},()=>{Q.current===e&&Y(null)})});return()=>{++Q.current,t()}},[d,g]);let en=(0,n.useCallback)(async()=>{let e=g.trim();if(!e||H.current||y||(null==q?void 0:q.reason)!=="rule-unknown")return;let t=++Q.current;H.current=!0,F(!0);try{let r=await (0,i.sg)(d,e,{classify:!0});Q.current===t&&W.current.trim()===e&&Y(r)}catch(r){Q.current===t&&W.current.trim()===e&&Y({track:"ask-human",confidence:0,reason:"classifier-failed:request-error",decidedBy:"classifier"})}finally{H.current=!1,F(!1)}},[y,d,null==q?void 0:q.reason,g]);(0,n.useEffect)(()=>{if(!S)return;let e=!1,t=async()=>{var t,r;if(e)return;let a=null!=(t=X.current)?t:Date.now();if(!(Date.now()-a>3e5))try{let t=await (0,i.PM)(d,S);if(!e&&(T(t),t.runId&&V.current.some(e=>"graph"===e.track&&e.acceptanceId===S&&e.runId!==t.runId))){let e=V.current.map(e=>"graph"===e.track&&e.acceptanceId===S?{...e,runId:t.runId}:e);V.current=e;try{null==(r=h(c))||r.setItem(p,JSON.stringify(e))}catch(e){}O(e)}}catch(e){}};t();let r=setInterval(()=>{t()},5e3);return()=>{e=!0,clearInterval(r)}},[S,d,c]),(0,n.useEffect)(()=>{G.current=M},[M]),(0,n.useEffect)(()=>{let e;if(0===Z.length)return;let t=!1,r=!1,a=async()=>{if(t||r)return;let n=Z.filter(e=>{var t;return!m(null!=(t=G.current[e])?t:[]).done});if(0!==n.length){r=!0;try{let e=await Promise.allSettled(n.map(e=>(0,i.dy)(d,e)));if(t)return;let r={};e.forEach((e,t)=>{"fulfilled"===e.status&&(r[n[t]]=e.value)}),Object.keys(r).length>0&&(G.current={...G.current,...r},D(G.current))}finally{r=!1,!t&&Z.some(e=>{var t;return!m(null!=(t=G.current[e])?t:[]).done})&&(e=setTimeout(()=>{a()},3e4))}}};return a(),()=>{t=!0,e&&clearTimeout(e)}},[d,Z]);let es=null!=r?r:{text:g,busy:y,error:k,absorbIds:N,acceptanceId:S,graph:E,runEvents:M,wishCardId:R,recent:A,route:q},el=(0,n.useMemo)(()=>{var e,t;return es.acceptanceId?{acceptanceId:es.acceptanceId,phase:null==(e=es.graph)?void 0:e.phase,runId:null==(t=es.graph)?void 0:t.runId}:null},[es.acceptanceId,es.graph]),ei=0===es.text.trim().length,ec=null!=(e=es.route)?e:null,ed=ec?"absorb"===(t=ec.track)?"absorb":"tasks"===t?"split":"graph"===t?"graph":null:null,eo=e=>ed===e?"ring-2 ring-ring":void 0;return(0,a.jsxs)("section",{className:"mx-auto flex max-w-lg flex-col gap-4 p-4","data-testid":"intake-front-door",children:[(0,a.jsx)("header",{className:"space-y-1",children:(0,a.jsx)("h1",{className:"font-heading text-lg font-medium",children:"Intake"})}),(0,a.jsx)("textarea",{value:es.text,onChange:e=>{P.current=null,v(e.target.value)},rows:6,disabled:es.busy,"data-testid":"intake-front-door-field","aria-label":"intake",className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-sm shadow-xs focus:outline-none focus:ring-2 focus:ring-ring"}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground","data-testid":"intake-front-door-explainer",children:"보내면 elanous 가 이 글을 처리합니다(흡수 \xb7 작업 분할 \xb7 그래프 실행)."}),ec&&(0,a.jsxs)("div",{"data-testid":"intake-route-chip","data-auto-submit":"0",className:"space-y-0.5 text-sm",children:[(0,a.jsx)("p",{"data-testid":"intake-route-chip-label",children:f[ec.track]}),"classifier"===ec.decidedBy&&(0,a.jsxs)("p",{"data-testid":"intake-route-chip-classifier",children:["분류기 판정 \xb7 확신 ",Math.round(100*ec.confidence),"%"]}),(0,a.jsx)("p",{"data-testid":"intake-route-chip-reason",className:"text-xs text-muted-foreground",children:function(e){if("classifier"!==e.decidedBy)return e.reason;if(e.reason.startsWith("classifier-failed:"))return"분류기가 못 갈랐습니다 — 직접 골라 주세요";if(e.reason.startsWith("classifier-low-confidence:")){var t,r;let a=e.reason.slice(26);return"분류기 추정: ".concat(null!=(r=null==(t=f[a])?void 0:t.slice(2))?r:a," (확신 낮음)")}return e.reason}(ec)}),"rule-unknown"===ec.reason&&(0,a.jsx)(l.$,{type:"button",size:"sm",variant:"outline",disabled:_||es.busy||ei,onClick:()=>void en(),"data-testid":"intake-route-classify",children:"분류기로 가르기"})]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsx)(l.$,{type:"button",size:"sm",className:eo("absorb"),"aria-pressed":"absorb"===ed,disabled:ei||es.busy,onClick:()=>void et(),"data-testid":"intake-absorb","data-emphasized":"absorb"===ed?"true":"false",children:"흡수"}),(0,a.jsx)(l.$,{type:"button",size:"sm",variant:"outline",className:eo("split"),"aria-pressed":"split"===ed,disabled:ei||es.busy||!u,onClick:()=>void er(),"data-testid":"intake-split","data-emphasized":"split"===ed?"true":"false",children:"작업으로 나누기"}),(0,a.jsx)(l.$,{type:"button",size:"sm",variant:"secondary",className:eo("graph"),"aria-pressed":"graph"===ed,disabled:ei||es.busy,onClick:()=>void ea(),"data-testid":"intake-graph","data-emphasized":"graph"===ed?"true":"false",children:"그래프로 실행"})]}),es.absorbIds&&(0,a.jsxs)("div",{"data-testid":"intake-absorb-result",className:"space-y-1 text-sm",children:[(0,a.jsx)("p",{children:"대기열에 넣었습니다(아침 정기 흡수에서 처리)"}),(0,a.jsx)("ul",{children:es.absorbIds.map(e=>(0,a.jsx)("li",{"data-testid":"intake-absorb-id",children:e},e))})]}),el&&(0,a.jsxs)("div",{"data-testid":"intake-graph-result",className:"space-y-1 text-sm",children:[(0,a.jsx)("p",{"data-testid":"intake-acceptance-id",children:el.acceptanceId}),el.phase&&(0,a.jsx)("p",{"data-testid":"intake-graph-phase",children:el.phase}),el.runId&&(0,a.jsx)("p",{"data-testid":"intake-graph-run",children:el.runId})]}),es.error&&(0,a.jsx)("p",{className:"text-sm text-destructive","data-testid":"intake-front-door-error",children:es.error}),es.wishCardId&&(0,a.jsxs)("p",{className:"text-sm","data-testid":"intake-wish-card-id",children:["소원 카드 ",es.wishCardId]}),es.recent.length>0&&(0,a.jsx)("ul",{"data-testid":"intake-recent",className:"space-y-1 text-xs text-muted-foreground",children:es.recent.map((e,t)=>{var r;let n=(e=>{var t,r,a;let n=null!=(r=e.runId)?r:e.acceptanceId===es.acceptanceId?null==el?void 0:el.runId:void 0;return n?m(null!=(a=null==(t=es.runEvents)?void 0:t[n])?a:[]):null})(e);return(0,a.jsxs)("li",{"data-testid":"intake-recent-row",children:[e.track," \xb7 ",e.preview,e.ids?" \xb7 ".concat(e.ids.join(", ")):"","absorb"===e.track&&(null==(r=e.ids)?void 0:r.map(e=>{var t,r;let n=Object.hasOwn(z,e)?o(null!=(t=z[e])?t:null):null;return(0,a.jsxs)("span",{"data-testid":"intake-absorb-status",children:[" \xb7 흡수: ",null!=(r=null==n?void 0:n.label)?r:"조회 중",(null==n?void 0:n.noteRef)?" \xb7 ".concat(n.noteRef):""]},e)})),e.cardId?" \xb7 카드 ".concat(e.cardId):"",e.acceptanceId?" \xb7 ".concat(e.acceptanceId):"",(null==n?void 0:n.stage)&&(0,a.jsxs)("span",{"data-testid":"intake-run-stage",children:[" \xb7 단계: ",n.stage]}),(null==n?void 0:n.lastEventAt)&&(0,a.jsxs)("time",{"data-testid":"intake-run-last-event",dateTime:n.lastEventAt,children:[" \xb7 마지막 사건: ",n.lastEventAt]}),(null==n?void 0:n.done)&&(0,a.jsxs)("span",{"data-testid":"intake-run-outcome",children:[" \xb7 ","completed"===n.outcome?"완료":"failed"===n.outcome?"실패":"결과 미상",n.error?" \xb7 ".concat(n.error.split("\n")[0]):""]})]},"".concat(e.at,"-").concat(t))})})]})}},47761:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>A});var a=r(77194),n=r(49954),s=r(98451),l=r(13164),i=r(35083);function c(e){let{id:t,active:r,children:n}=e;return(0,a.jsx)("div",{role:"tabpanel","data-tab-id":t,"data-active":r?"true":"false",className:(0,i.cn)("h-full min-h-0",r?"block":"hidden"),children:n})}var d=r(75102),o=r(19238),u=r(5717),m=r(77600),p=r(61852),f=r(71454),h=r(32865);function x(e){let{tab:t}=e;switch(t.kind){case"chat":return(0,a.jsx)(d.ChatPanel,{sessionId:t.sessionId,tabId:t.id});case"term":return(0,a.jsx)(o.zV,{});case"intake":return(0,a.jsx)(u.SY,{});case"tasks":return(0,a.jsx)(m.B,{});case"control":return(0,a.jsx)(p.U,{});case"settings":return(0,a.jsx)(f.O,{})}}function b(){return(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-muted-foreground",children:(0,a.jsx)("span",{children:"(이 탭은 절약 모드 — 클릭 시 복원)"})})}function g(){let{state:e,addTab:t,activateTab:r}=(0,l.hA)(),s=(0,h.ub)(e),i=(0,n.useRef)(null);if((0,n.useEffect)(()=>{if(i.current&&!(s.length<=1))return function(e,t){var r,a;let n=null!=(r=t.minDistance)?r:100,s=null!=(a=t.minVelocity)?a:.3,l=0,i=0,c=0,d=!1,o=null,u=e=>{var r;null!=(r=t.shouldIgnore)&&r.call(t,e.target)||(l=e.clientX,i=e.clientY,c=e.timeStamp,d=!0,o=e.pointerId)},m=e=>{if(!d||e.pointerId!==o)return;d=!1,o=null;let r=e.clientX-l,a=e.clientY-i,u=Math.max(1,e.timeStamp-c),m=Math.abs(r),p=Math.abs(a);m<n||p>=m||m/u<s||t.onSwipe(r<0?"left":"right")},p=()=>{d=!1,o=null};return e.addEventListener("pointerdown",u),e.addEventListener("pointerup",m),e.addEventListener("pointercancel",p),()=>{e.removeEventListener("pointerdown",u),e.removeEventListener("pointerup",m),e.removeEventListener("pointercancel",p)}}(i.current,{shouldIgnore:e=>{if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return!!("INPUT"===t||"TEXTAREA"===t||"SELECT"===t||e.closest(".xterm"))||!!e.isContentEditable},onSwipe:t=>{let a=e.activeId?s.findIndex(t=>t.id===e.activeId):-1;if(a<0)return;let n="left"===t?Math.min(s.length-1,a+1):Math.max(0,a-1);n!==a&&r(s[n].id)}})},[s,e.activeId,r]),0===s.length)return(0,a.jsx)("div",{className:"flex h-full flex-col items-center justify-center gap-4 px-6 text-center",children:(0,a.jsxs)("div",{className:"rounded-lg border border-dashed border-border bg-card px-6 py-8 max-w-md",children:[(0,a.jsx)("h2",{className:"text-base font-semibold tracking-tight",children:"워크스페이스 시작"}),(0,a.jsxs)("p",{className:"mt-2 text-sm text-muted-foreground",children:["상단 strip 의"," ",(0,a.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-xs",children:"+"})," ","또는 아래 버튼으로 첫 탭을 추가하세요. 비활성 탭은 닫기 전까지 unmount 되지 않아 입력 중 텍스트가 보존됩니다."]}),(0,a.jsxs)("div",{className:"mt-4 flex flex-wrap justify-center gap-2",children:[(0,a.jsx)("button",{type:"button",onClick:()=>t({kind:"chat"}),className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary",children:"+ chat"}),(0,a.jsx)("button",{type:"button",onClick:()=>t({kind:"term"}),className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary",children:"+ terminal"})]})]})});let d=new Set(e.frozenIds);return(0,a.jsx)("div",{ref:i,className:"relative h-full min-h-0 touch-pan-y",children:s.map(t=>(0,a.jsx)(c,{id:t.id,active:e.activeId===t.id,children:d.has(t.id)?(0,a.jsx)(b,{}):(0,a.jsx)(x,{tab:t})},t.id))})}function v(){let e=(0,l.hA)();return(0,n.useEffect)(()=>{let t=t=>{if(!(t.metaKey||t.ctrlKey))return;let r=(0,h.ub)(e.state),a=e.state.activeId?r.findIndex(t=>t.id===e.state.activeId):-1;if(!t.shiftKey&&"t"===t.key.toLowerCase()){t.preventDefault(),e.openPicker({kind:"addNewChat"});return}if(!t.shiftKey&&"w"===t.key.toLowerCase()){t.preventDefault(),e.state.activeId&&r.length>0&&e.closeTab(e.state.activeId);return}if(t.shiftKey&&("]"===t.key||"["===t.key)){if(t.preventDefault(),r.length<=1||a<0)return;let n="]"===t.key?(a+1)%r.length:(a-1+r.length)%r.length;e.activateTab(r[n].id);return}if(!t.shiftKey&&/^[1-9]$/.test(t.key)){t.preventDefault();let a=parseInt(t.key,10)-1;if(a>=r.length)return;e.activateTab(r[a].id);return}};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[e]),null}var y=r(26603),j=r(42499),k=r(45335),w=r(55844),N=r(8801),I=r(19631),S=r(76153),C=r(26054),E=r(2929);function T(e){var t;let{open:r,session:s,onCancel:l,onConfirm:i,busy:c}=e;if((0,n.useEffect)(()=>{if(!r)return;let e=e=>{"Escape"===e.key&&l()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[r,l]),!r||!s)return null;let d=null!=(t=s.lastMsgPreview)?t:"(빈 대화)";return(0,a.jsx)("div",{role:"alertdialog","aria-modal":"true",className:"fixed inset-0 z-[60] flex items-center justify-center bg-black/40",onClick:l,children:(0,a.jsxs)("div",{onClick:e=>e.stopPropagation(),className:"w-[min(420px,calc(100vw-2rem))] rounded-lg border border-border bg-card p-5 shadow-lg",children:[(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)(w.A,{className:"mt-0.5 h-5 w-5 shrink-0 text-rose-500","aria-hidden":!0}),(0,a.jsxs)("div",{className:"min-w-0 space-y-2",children:[(0,a.jsx)("h2",{className:"text-base font-semibold",children:"대화 지우기"}),(0,a.jsxs)("p",{className:"truncate font-mono text-xs text-muted-foreground",children:['"',d,'"']}),(0,a.jsxs)("p",{className:"text-xs text-muted-foreground",children:[s.origin&&(0,a.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono uppercase mr-1.5",children:s.origin}),s.msgCount," 메시지"]}),(0,a.jsx)("p",{className:"text-sm",children:"이 대화를 영구히 지웁니다. 복구할 수 없습니다. 다른 기기에서 이 대화를 보고 있다면 더 이상 이어갈 수 없습니다."})]})]}),(0,a.jsxs)("div",{className:"mt-4 flex justify-end gap-2",children:[(0,a.jsx)("button",{type:"button",onClick:l,disabled:c,className:"rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-secondary disabled:opacity-50",children:"취소"}),(0,a.jsx)("button",{type:"button",onClick:i,disabled:c,className:"rounded-md bg-rose-500 px-3 py-1.5 text-sm font-medium text-white hover:bg-rose-600 disabled:opacity-50",children:c?"지우는 중…":"지우기"})]})]})})}var M=r(45337);let D={cli:"cli",pwa:"pwa",tg:"tg",dc:"dc"};function R(e){let{open:t,onClose:r,onPick:s,attachedSessions:l}=e,{client:c}=(0,N.Q)(),d=(0,S.hG)(c),o=(0,n.useMemo)(()=>new C.jU(c),[c]),u=(0,E.h)(),[m,p]=(0,n.useState)(""),[f,h]=(0,n.useState)(0),[x,b]=(0,n.useState)(null),[g,v]=(0,n.useState)(!1),[R,L]=(0,n.useState)(!1),[P,A]=(0,n.useState)(null),O=(0,n.useRef)(null),z=(0,n.useRef)(null);(0,n.useEffect)(()=>{t&&(p(""),h(0),A(null),d.forceRefresh())},[t,d]),(0,n.useEffect)(()=>{A(null)},[m]);let J=(0,n.useMemo)(()=>{if(!m.trim())return[...u];let e=m.trim().toLowerCase();return u.filter(t=>!!(t.id.toLowerCase().startsWith(e)||t.lastMsgPreview&&t.lastMsgPreview.toLowerCase().includes(e))||!!t.origin&&e==="[".concat(t.origin,"]")||!!t.origin&&e===t.origin)},[u,m]);if((0,n.useEffect)(()=>{f>=J.length&&h(Math.max(0,J.length-1))},[J.length,f]),(0,n.useEffect)(()=>{var e;if(!t)return;null==(e=O.current)||e.focus();let a=e=>{if("Escape"===e.key){e.preventDefault(),r();return}if((e.metaKey||e.ctrlKey)&&"n"===e.key.toLowerCase()){e.preventDefault(),K();return}if((e.metaKey||e.ctrlKey)&&"f"===e.key.toLowerCase()){var t;e.preventDefault(),null==(t=O.current)||t.focus();return}if("ArrowDown"===e.key)e.preventDefault(),h(e=>Math.min(J.length-1,e+1));else if("ArrowUp"===e.key)e.preventDefault(),h(e=>Math.max(0,e-1));else if("Enter"===e.key){let t=J[f];if(!t){m.trim().length>=4&&(e.preventDefault(),B());return}e.preventDefault(),U(t)}else if("Delete"===e.key||"Backspace"===e.key){if(e.target instanceof HTMLInputElement)return;let t=J[f];t&&(e.preventDefault(),b(t))}};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[t,J,f,r,m,R]),!t)return null;let K=()=>{s({kind:"new",sessionId:(0,I.f6)()})},U=e=>{let t=l.get(e.id);if(t)return void s({kind:"jumpToTab",tabId:t.tabId});s({kind:"existing",sessionId:e.id})},B=async()=>{let e=m.trim().toLowerCase();if(!(e.length<4)&&!R){L(!0);try{var t;let r=await o.list(!0),a=(0,C.nj)(null!=(t=r.sessions)?t:[],e);if("one"===a.kind){let e=l.get(a.id);e?s({kind:"jumpToTab",tabId:e.tabId}):s({kind:"existing",sessionId:a.id})}else"none"===a.kind?A("'".concat(e,"'로 시작하는 대화가 없습니다.")):A("".concat(a.count,"개의 대화가 일치합니다. ID를 더 길게 입력하세요."))}catch(e){A("대화를 찾지 못했습니다: ".concat(e instanceof Error?e.message:String(e)))}finally{L(!1)}}},$=async()=>{if(x){v(!0);try{await d.forget(x.id),b(null)}finally{v(!1)}}};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":"대화 선택",className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40",onClick:r,children:(0,a.jsxs)("div",{onClick:e=>e.stopPropagation(),className:"flex max-h-[min(640px,90vh)] w-[min(640px,calc(100vw-2rem))] flex-col rounded-lg border border-border bg-card shadow-lg",children:[(0,a.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-2 border-b border-border px-4 py-3",children:[(0,a.jsx)("h2",{className:"text-base font-semibold",children:"대화 선택"}),(0,a.jsx)("button",{type:"button","aria-label":"close",onClick:r,className:"rounded-md p-1 text-muted-foreground hover:bg-secondary hover:text-foreground",children:(0,a.jsx)(y.A,{className:"h-4 w-4"})})]}),(0,a.jsx)("div",{className:"shrink-0 px-4 py-3",children:(0,a.jsxs)("button",{type:"button",onClick:K,className:"flex w-full items-center gap-3 rounded-lg border border-primary/40 bg-primary/10 px-3 py-2.5 text-left hover:bg-primary/15",children:[(0,a.jsx)(j.A,{className:"h-5 w-5 text-primary"}),(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("div",{className:"text-sm font-medium",children:"새 대화 시작"}),(0,a.jsx)("div",{className:"text-xs text-muted-foreground",children:"비어있는 새 채팅을 엽니다 (⌘N)"})]})]})}),(0,a.jsx)("div",{className:"shrink-0 border-y border-border bg-muted/30 px-4 py-2",children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(k.A,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),(0,a.jsx)("input",{ref:O,value:m,onChange:e=>p(e.target.value),placeholder:"대화 검색 — 내용 \xb7 ID \xb7 [pwa]/[cli]/[tg]/[dc]",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground/60"}),m&&(0,a.jsx)("button",{type:"button","aria-label":"clear search",onClick:()=>p(""),className:"rounded p-0.5 text-muted-foreground hover:bg-background",children:(0,a.jsx)(y.A,{className:"h-3 w-3"})})]})}),(0,a.jsx)("div",{ref:z,className:"min-h-0 flex-1 overflow-y-auto",children:0===J.length?(0,a.jsxs)("div",{className:"px-4 py-12 text-center",children:[(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:0!==u.length||m.trim()?"검색과 일치하는 대화가 없습니다.":'아직 대화가 없습니다. 위의 "새 대화 시작"으로 첫 대화를 시작하세요.'}),m.trim().length>=4&&(0,a.jsx)("button",{type:"button",disabled:R,onClick:()=>void B(),className:"mt-3 rounded-md border border-violet-500/40 bg-violet-500/10 px-3 py-1.5 text-xs text-violet-300 hover:bg-violet-500/15 disabled:opacity-50",children:R?"찾는 중…":"ID '".concat(m.trim(),"'로 대화 이어가기 (Enter)")}),P&&(0,a.jsx)("p",{className:"mt-2 text-xs text-amber-400",children:P}),0===u.length&&!m.trim()&&(0,a.jsx)("p",{className:"mt-2 text-xs text-muted-foreground",children:"다른 기기(CLI / Telegram / Discord)에서 대화를 시작하면 여기에 자동으로 나타납니다."})]}):(0,a.jsx)("ul",{className:"divide-y divide-border",children:J.map((e,t)=>{var r;let n=l.get(e.id),s=t===f;return(0,a.jsx)("li",{children:(0,a.jsxs)("div",{className:(0,i.cn)("group flex items-center gap-3 px-4 py-2.5 transition-colors",s?"bg-primary/10 ring-1 ring-inset ring-primary/30":"hover:bg-secondary/50"),onMouseEnter:()=>h(t),children:[(0,a.jsxs)("button",{type:"button",onClick:()=>U(e),className:"flex min-w-0 flex-1 flex-col items-start text-left",children:[(0,a.jsxs)("div",{className:"flex w-full items-center gap-2",children:[(0,a.jsx)("span",{className:"truncate text-sm font-medium",children:null!=(r=e.lastMsgPreview)?r:(0,a.jsx)("span",{className:"text-muted-foreground italic",children:"(빈 대화)"})}),n&&(0,a.jsxs)("span",{className:"ml-auto shrink-0 rounded-full bg-primary/15 px-2 py-0.5 text-[10px] font-medium text-primary",children:["✓ ",n.label,"에서 열림"]})]}),(0,a.jsxs)("div",{className:"mt-0.5 flex items-center gap-2 text-[11px] text-muted-foreground",children:[e.origin&&(0,a.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 font-mono",children:D[e.origin]}),(0,a.jsx)("span",{children:function(e){try{let t=new Date(e).getTime();if(!Number.isFinite(t))return"";let r=Date.now()-t,a=Math.floor(r/6e4);if(a<1)return"방금 전";if(a<60)return"".concat(a,"분 전");let n=Math.floor(a/60);if(n<24)return"".concat(n,"시간 전");let s=Math.floor(n/24);if(s<7)return"".concat(s,"일 전");return new Date(t).toLocaleDateString()}catch(e){return""}}(e.lastTurnAt)}),(0,a.jsxs)("span",{children:["\xb7 ",e.msgCount," 메시지"]}),(0,a.jsx)(M.S,{sessionId:e.id,source:"picker",variant:"subtle",showCopyIcon:!1})]})]}),(0,a.jsx)("button",{type:"button","aria-label":"대화 ".concat(e.id," 지우기"),onClick:t=>{t.stopPropagation(),b(e)},className:(0,i.cn)("shrink-0 rounded p-1.5 text-muted-foreground transition-colors hover:bg-rose-500/10 hover:text-rose-500",s?"opacity-100":"opacity-0 group-hover:opacity-100"),children:(0,a.jsx)(w.A,{className:"h-4 w-4"})})]})},e.id)})})}),(0,a.jsxs)("div",{className:"shrink-0 border-t border-border bg-muted/30 px-4 py-2 text-[10px] text-muted-foreground",children:[(0,a.jsx)("span",{className:"mr-3",children:"↑↓ 이동"}),(0,a.jsx)("span",{className:"mr-3",children:"Enter 선택"}),(0,a.jsx)("span",{className:"mr-3",children:"⌘N 새 대화"}),(0,a.jsx)("span",{className:"mr-3",children:"⌘F 검색"}),(0,a.jsx)("span",{children:"Del 지우기"})]})]})}),(0,a.jsx)(T,{open:null!==x,session:x,busy:g,onCancel:()=>b(null),onConfirm:$})]})}let L=new Set(["chat","term","intake","tasks","control","settings"]);function P(){var e;let t=(0,l.hA)(),r=(0,s.useRouter)(),i=(0,s.useSearchParams)(),c=null!=(e=null==i?void 0:i.get("intent"))?e:null,d=(0,n.useRef)(null);(0,n.useEffect)(()=>{if(c&&d.current!==c){if(!L.has(c))return void r.replace("/workspace");if(d.current=c,"chat"===c){let e=(0,h.ub)(t.state).find(e=>"chat"===e.kind);e?t.activateTab(e.id):t.openPicker({kind:"addNewChat"})}else t.activateOrAdd(c);r.replace("/workspace")}},[c,t,r]);let o=(0,n.useMemo)(()=>{let e=new Map,r=0;for(let a of t.state.order){let n=t.state.tabs.find(e=>e.id===a);n&&"chat"===n.kind&&(r+=1,e.set(n.sessionId,{tabId:n.id,label:"chat#".concat(r)}))}return e},[t.state.order,t.state.tabs]);return(0,a.jsxs)("div",{className:"flex h-full flex-col",children:[(0,a.jsx)(v,{}),(0,a.jsx)("div",{className:"flex-1 min-h-0",children:(0,a.jsx)(g,{})}),(0,a.jsx)(R,{open:null!==t.pickerMode,onClose:t.closePicker,onPick:e=>{let r=t.pickerMode;r&&("jumpToTab"===e.kind?t.activateTab(e.tabId):"addNewChat"===r.kind?t.addTab({kind:"chat",sessionId:e.sessionId}):"attachToTab"===r.kind&&(t.updateChatTab(r.tabId,{sessionId:e.sessionId}),t.activateTab(r.tabId)),t.closePicker())},attachedSessions:o})]})}function A(){return(0,a.jsx)(n.Suspense,{fallback:(0,a.jsx)("div",{className:"h-full"}),children:(0,a.jsx)(P,{})})}},61852:(e,t,r)=>{"use strict";r.d(t,{U:()=>p});var a=r(77194),n=r(49954),s=r(8801),l=r(44092),i=r(32576);function c(e){let{items:t}=e;return 0===t.length?(0,a.jsx)("div",{className:"rounded-lg border border-dashed border-border p-6 text-center text-sm text-muted-foreground",children:"No control signals matched the current filter."}):(0,a.jsx)("ul",{className:"space-y-2",children:t.map((e,t)=>{var r,n,s,l,i;let c=[(null==(r=e.scope)?void 0:r.surface)&&"surface=".concat(e.scope.surface),(null==(n=e.scope)?void 0:n.channel)&&"channel=".concat(e.scope.channel),(null==(s=e.scope)?void 0:s.sessionId)&&"session=".concat(e.scope.sessionId)].filter(Boolean).join(" \xb7 ")||"unscoped";return(0,a.jsxs)("li",{className:"rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsxs)("div",{className:"text-sm font-medium",children:[e.kind," \xb7 ",e.urgency]}),(0,a.jsxs)("div",{className:"mt-0.5 font-mono text-[10px] text-muted-foreground",children:[function(e){let t=Date.now()-new Date(e).getTime();return t<6e4?"just now":t<36e5?"".concat(Math.floor(t/6e4),"m ago"):t<864e5?"".concat(Math.floor(t/36e5),"h ago"):"".concat(Math.floor(t/864e5),"d ago")}(e.createdAt)," \xb7 ",null!=(l=e.source)?l:"unknown"," \xb7 ",c]}),(0,a.jsx)("pre",{className:"mt-2 overflow-x-auto rounded-md bg-muted p-2 text-[11px]",children:JSON.stringify(null!=(i=e.payload)?i:{},null,2)})]},t)})})}let d=["background","quick-pass","normal","priority","critical"];class o{async list(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new URLSearchParams;Object.entries(e).forEach(e=>{let[r,a]=e;a&&t.set(r,a)});let r=t.toString();return this.client.fetchJson("/v1/control-signals".concat(r?"?".concat(r):""))}emit(e){return this.client.fetchJson("/v1/control-signals",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)})}constructor(e){this.client=e}}var u=r(46479),m=r(35857);function p(){var e,t,r,p;let{client:f}=(0,s.Q)(),h=(0,n.useMemo)(()=>new o(f),[f]),[x,b]=(0,n.useState)({items:[]}),[g,v]=(0,n.useState)(!1),[y,j]=(0,n.useState)(""),[k,w]=(0,n.useState)(""),[N,I]=(0,n.useState)(""),[S,C]=(0,n.useState)(""),[E,T]=(0,n.useState)(""),[M,D]=(0,n.useState)(""),[R,L]=(0,n.useState)("normal"),[P,A]=(0,n.useState)("operator"),[O,z]=(0,n.useState)(""),[J,K]=(0,n.useState)(""),[U,B]=(0,n.useState)(""),[$,q]=(0,n.useState)(""),[Y,_]=(0,n.useState)(!1),F=(0,n.useCallback)(async()=>{(0,m.cY)("webterm.control.list.refresh",{kind:y,surface:k,minUrgency:N,sessionId:S,limit:E}),v(!0);try{let e=await h.list({kind:y||void 0,surface:k||void 0,minUrgency:N||void 0,sessionId:S||void 0,limit:E||void 0});b(e)}catch(e){u.oR.error("signals list failed: ".concat(e instanceof Error?e.message:e))}finally{v(!1)}},[h,y,k,N,S,E]);(0,n.useEffect)(()=>{F()},[F]);let H=async e=>{if(e.preventDefault(),!M.trim())return void u.oR.error("kind required");let t={};if($.trim())try{t=JSON.parse($)}catch(e){u.oR.error("payload must be valid JSON");return}let r={kind:M.trim(),urgency:R,source:P.trim()||"operator",mayPreempt:Y,payload:t,scope:{...O?{surface:O}:{},...J?{channel:J}:{},...U?{sessionId:U}:{}}};(0,m.cY)("webterm.control.emit",{kind:r.kind,urgency:r.urgency});try{v(!0),await h.emit(r),u.oR.success("signal emitted"),q(""),await F()}catch(e){u.oR.error("emit failed: ".concat(e instanceof Error?e.message:e))}finally{v(!1)}},Q=null!=(e=x.countsByKind)?e:{};return(0,a.jsxs)("div",{className:"mx-auto max-w-5xl space-y-4 p-4",children:[(0,a.jsxs)("header",{className:"space-y-2",children:[(0,a.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Control signals"}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2 text-[11px] text-muted-foreground",children:[(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["total ",null!=(t=x.total)?t:0]}),(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["latest ",null!=(r=x.latest)?r:"-"]}),Object.entries(Q).map(e=>{let[t,r]=e;return(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:[t," ",r]},t)})]})]}),(0,a.jsxs)("form",{onSubmit:e=>{e.preventDefault(),F()},className:"flex flex-wrap items-center gap-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsx)(i.p,{value:y,onChange:e=>j(e.target.value),placeholder:"kind",className:"flex-1 min-w-[140px]"}),(0,a.jsx)(i.p,{value:k,onChange:e=>w(e.target.value),placeholder:"surface",className:"flex-1 min-w-[140px]"}),(0,a.jsxs)("select",{value:N,onChange:e=>I(e.target.value),className:"h-9 flex-1 min-w-[170px] rounded-md border border-input bg-background px-2 text-sm",children:[(0,a.jsx)("option",{value:"",children:"min urgency (any)"}),d.map(e=>(0,a.jsx)("option",{value:e,children:e},e))]}),(0,a.jsx)(i.p,{value:S,onChange:e=>C(e.target.value),placeholder:"session id",className:"flex-1 min-w-[140px]"}),(0,a.jsx)(i.p,{value:E,onChange:e=>T(e.target.value),placeholder:"limit",type:"number",className:"w-[100px]"}),(0,a.jsx)(l.$,{type:"submit",size:"sm",disabled:g,children:"Filter"})]}),(0,a.jsxs)("form",{onSubmit:H,className:"space-y-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold",children:"Emit a signal"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)(i.p,{value:M,onChange:e=>D(e.target.value),placeholder:"kind (required)",className:"flex-1 min-w-[140px]"}),(0,a.jsx)("select",{value:R,onChange:e=>{let t=e.target.value;"string"==typeof t&&d.includes(t)&&L(t)},className:"h-9 rounded-md border border-input bg-background px-2 text-sm",children:d.map(e=>(0,a.jsx)("option",{value:e,children:e},e))}),(0,a.jsx)(i.p,{value:P,onChange:e=>A(e.target.value),placeholder:"source",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:O,onChange:e=>z(e.target.value),placeholder:"scope.surface",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:J,onChange:e=>K(e.target.value),placeholder:"scope.channel",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:U,onChange:e=>B(e.target.value),placeholder:"scope.session",className:"flex-1 min-w-[120px]"}),(0,a.jsxs)("label",{className:"flex items-center gap-1.5 text-xs",children:[(0,a.jsx)("input",{type:"checkbox",checked:Y,onChange:e=>_(e.target.checked)}),"mayPreempt"]})]}),(0,a.jsx)("textarea",{value:$,onChange:e=>q(e.target.value),placeholder:'payload JSON (optional, e.g. {"reason":"manual"})',rows:3,className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 font-mono text-xs"}),(0,a.jsx)(l.$,{type:"submit",size:"sm",disabled:g,children:"Emit"})]}),(0,a.jsx)(c,{items:null!=(p=x.items)?p:[]})]})}},94660:(e,t,r)=>{Promise.resolve().then(r.bind(r,47761))}},e=>{e.O(0,[8085,2566,5194,4862,6479,9917,3525,1314,112,7837,589,9638,5785,5305,7807,9842,4490,3797,4599,2066,1454,5102,9238,7600,2201,6356,7358],()=>e(e.s=94660)),_N_E=e.O()}]);
|
/package/apps/pwa/out/_next/static/{dRS6lEhSRRBr1abbzp7fJ → y1ltt7oCZxVpC6zVPhZ2O}/_buildManifest.js
RENAMED
|
File without changes
|
/package/apps/pwa/out/_next/static/{dRS6lEhSRRBr1abbzp7fJ → y1ltt7oCZxVpC6zVPhZ2O}/_ssgManifest.js
RENAMED
|
File without changes
|