elanous 0.2.14 → 0.2.15
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/LZcstaO9_NXypPFmujolv/_buildManifest.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1307-6e7e0377c1db0bdc.js → 1307-33ffcc49ab45123b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5977-c952712c87a1f757.js +1 -0
- package/apps/pwa/out/_next/static/chunks/899-46946fe8363e1262.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/{page-74383f890f075511.js → page-0e2c57fe6add4b2a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-7b2b4f378354869a.js → page-e05a77df7e005b04.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-f544338193a9a762.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-5491c115b1f9a923.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/{page-1512d91c7491ed62.js → page-b8c49f6b4fa2df91.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-96398e364fbd4548.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/{page-a627db94ec6904a0.js → page-976813c91d7394ea.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/{page-fb260b9283dbf646.js → page-28b9448091776c06.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-1d4901eb7c2d8822.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-72d3e7ff35a8c954.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/{page-fed69f9759d248d0.js → page-60c7a8e1a4fe62ce.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/{page-15374909d8f1aebd.js → page-2a52b316cb143d9c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/field/{page-012a742f81218b01.js → page-c3ce483c8d5db370.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-13c7b53e0c2519a9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/{page-99effd9d893a43dc.js → page-96f074f6538e8a2c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/{layout-938de57ae0315e46.js → layout-e97be5334d83a9f5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-65e484302921a932.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-34d08facaf08f556.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/{page-629e1ede482ec6eb.js → page-955ec2da3be4c560.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-9f88fbc15d9058d1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-27e99b4e54a849d4.js → page-c1343f9499d86f3f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-8739a2e0ae793130.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-c9fc5706b8abaa11.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/{page-32cde713be47cddb.js → page-d23b12bb92242558.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-8d47f45a0dc044ac.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-c7fea475488201a8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/{page-04250f0e2c0d03df.js → page-e2ee2896811e98d0.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/page-83b19dae8619de05.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/{page-e64caff084f7ce21.js → page-5efbf81124c474ae.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-db07eaffba0df7e3.js → page-85f1a1fc0a82738c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/{page-8ac8d71c2adf9c8a.js → page-da6c08aae0f92768.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-06ee266953d9c879.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/{page-86f91034bd5cabe5.js → page-153c2b3bcc89e8de.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/{page-94dc383d3d54db1a.js → page-87a11e6a05f15199.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/{page-b3759cc14da80908.js → page-7d4182964407c09c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/share/{page-ce4d8a1215ce53a3.js → page-0d6d23b40263a7ea.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-7e8c39241f8eb6d0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-008c1a96618a4887.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/{page-274703bc41b71333.js → page-f5597e894c02cd33.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-0337fdf7fb5e37b6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/{page-35bdeae2e2c17147.js → page-73735b64bfe1ae67.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/{page-3b7e821dc492bdfd.js → page-8fcec4c9ea2e7f70.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-f7e631e9b4daf66e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-4881b8f9f63694b4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/{page-2f810b18d89ecba6.js → page-9817c7f9007466cc.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/{page-134c1bc762aee62c.js → page-97f9f43172a3a90e.js} +1 -1
- package/apps/pwa/out/_next/static/css/1f7c958c41ffa3b9.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +14 -14
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +14 -14
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +14 -14
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +14 -14
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +14 -14
- package/apps/pwa/out/ceo/index.html +1 -0
- package/apps/pwa/out/ceo/index.txt +33 -0
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +14 -14
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +14 -14
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +14 -14
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +14 -14
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +14 -14
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +14 -14
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +14 -14
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +14 -14
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +14 -14
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +14 -14
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +14 -14
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +14 -14
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +14 -14
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +14 -14
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +14 -14
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +14 -14
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +14 -14
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +14 -14
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +14 -14
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +14 -14
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +15 -15
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +14 -14
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +14 -14
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +14 -14
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +14 -14
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +14 -14
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +14 -14
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +14 -14
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +14 -14
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +14 -14
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +14 -14
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +14 -14
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +14 -14
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +14 -14
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +14 -14
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +14 -14
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +14 -14
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +14 -14
- package/graphs/heal/heal-loop.yaml +1 -1
- package/graphs/implement-loop.yaml +1 -1
- package/graphs/release/recipes.yaml +3 -0
- package/graphs/release/release-loop.yaml +4 -2
- package/package.json +1 -1
- package/scripts/brand/check.ts +7 -5
- package/scripts/ci-typecheck-changed.ts +50 -18
- package/scripts/docs/generate-graph-anatomy.ts +315 -0
- package/scripts/expose-rubric-suggest.ts +18 -12
- package/scripts/lecture-note/node.ts +31 -11
- package/scripts/lessons/handbook-page.ts +30 -3
- package/scripts/marketing/generate-ax-brief.ts +140 -0
- package/scripts/marketing/generate-feature-map.ts +118 -0
- package/scripts/release-loop/checklist-gate-node.ts +53 -14
- package/scripts/release-loop/gate-node.ts +80 -14
- package/scripts/release-loop/vault-note-node.ts +240 -8
- package/scripts/release-story/draft.ts +57 -9
- package/scripts/rhythm/daily.ts +263 -76
- package/scripts/rhythm/weekly.ts +30 -9
- package/scripts/smart-merge/resync-shadow.ts +147 -0
- package/src/agent-env/profile.ts +161 -0
- package/src/agent-substrate/pr-reviewer.ts +2 -0
- package/src/ask-user-question/pending-questions.ts +5 -0
- package/src/auth/github-app-token.ts +112 -13
- package/src/autopilot/build/llm-conflict-merge.ts +32 -6
- package/src/briefing/brief-items.ts +121 -0
- package/src/claims/claims-render.ts +14 -5
- package/src/cli/agent-env-cli.ts +21 -0
- package/src/cli/decisions-cli.ts +9 -0
- package/src/cli/doctor-cli.ts +23 -1
- package/src/cli/doctor-node-modules.ts +147 -0
- package/src/cli/intake-cli.ts +46 -17
- package/src/cli/pod-cli.ts +2 -0
- package/src/cli/release-cli.ts +61 -27
- package/src/cli/seat-requests-cli.ts +52 -0
- package/src/context-bus/context-now-public.ts +16 -6
- package/src/context-bus/context-now.ts +3 -1
- package/src/context-bus/coord-events.ts +6 -4
- package/src/decisions/decision-cards.ts +33 -7
- package/src/decisions/proact-meter.ts +286 -0
- package/src/decisions/proact1-lite.ts +86 -0
- package/src/decisions/web-push-decision-cards.ts +1 -1
- package/src/domains/alert-audit.ts +271 -0
- package/src/domains/core-tools.ts +4 -3
- package/src/domains/ops-facts-tool.ts +31 -1
- package/src/harness/harness-cli-command.ts +111 -15
- package/src/harness/harness-incidents.ts +2 -0
- package/src/harness/harness-pod-dispatch.ts +100 -11
- package/src/harness/harness-queue.ts +380 -50
- package/src/harness/helper-repair.ts +87 -0
- package/src/harness/helper-scan.ts +16 -4
- package/src/harness/launch-stamp.ts +236 -0
- package/src/harness/ledger-write-guard-child.fixture.ts +12 -0
- package/src/harness/ledger-write-guard.ts +35 -0
- package/src/harness/pod-memory-policy.ts +15 -0
- package/src/harness/repository-name.ts +55 -0
- package/src/hq/fence-audit.ts +90 -0
- package/src/hq/hq.ts +62 -4
- package/src/hq/lease.ts +4 -4
- package/src/hq/move-plan.ts +126 -0
- package/src/hq/promote.ts +31 -0
- package/src/index.ts +77 -7
- package/src/intake-plane/check.ts +63 -0
- package/src/intake-plane/digest.ts +37 -15
- package/src/intake-plane/front-classifier.ts +6 -0
- package/src/intake-plane/items.ts +3 -2
- package/src/intake-plane/lens.ts +177 -0
- package/src/intake-plane/route.ts +145 -1
- package/src/launch-head/seat-goal-queue-lock.fixture.ts +15 -0
- package/src/launch-head/seat-goal-queue.ts +198 -0
- package/src/loops/budget.ts +36 -5
- package/src/loops/checker.ts +2 -2
- package/src/loops/orchestrator/author-depth.ts +65 -9
- package/src/loops/orchestrator/author-input-check.ts +8 -3
- package/src/loops/orchestrator/author-ledger.ts +3 -1
- package/src/loops/orchestrator/seat-share.ts +56 -0
- package/src/loops/orchestrator/tick.ts +11 -4
- package/src/loops/orchestrator/traffic.ts +117 -11
- package/src/loops/registry.ts +142 -61
- package/src/maturity/feature-maturity.ts +2 -1
- package/src/maturity/tui-slash-availability.ts +31 -0
- package/src/mss/logging/log-store.ts +35 -4
- package/src/nexus/api/http-server.ts +28 -14
- package/src/nexus/api/loop-edges.ts +173 -0
- package/src/nexus/api/schedules-read.ts +13 -0
- package/src/nexus/api/seat-requests.ts +79 -56
- package/src/prompt-enhance/enhance.ts +6 -1
- package/src/release-loop/auto-start.ts +6 -3
- package/src/release-loop/checklist.ts +13 -4
- package/src/release-loop/feature-store.ts +58 -31
- package/src/release-loop/merged-pr-checklist.ts +125 -0
- package/src/release-loop/placement.ts +86 -26
- package/src/seat-dispatch/seat-request-eligibility.ts +19 -0
- package/src/seat-dispatch/seat-request-ledger.ts +133 -0
- package/src/seat-loop/seat-loop.ts +126 -10
- package/src/self-dev/dev-pipeline.ts +8 -4
- package/src/self-dev/draft-sweep.ts +90 -10
- package/src/self-dev/draft-triage-rules.ts +25 -8
- package/src/self-dev/orchestrate.ts +15 -1
- package/src/self-dev/review-provider-fallback.ts +6 -1
- package/src/self-dev/run-supervisor.ts +49 -2
- package/src/self-implement/frozen-merges.ts +3 -2
- package/src/self-implement/goal-author.ts +43 -5
- package/src/self-implement/goal-clarification-escalation.ts +5 -0
- package/src/self-implement/heal-intake.ts +120 -2
- package/src/self-implement/host-regate.ts +9 -2
- package/src/self-implement/l8-merge-queue.ts +132 -0
- package/src/self-implement/orchestrator.ts +187 -40
- package/src/self-implement/pipeline-shape.ts +1 -1
- package/src/self-implement/revert-guard.ts +42 -7
- package/src/self-implement/run-ledger.ts +2 -0
- package/src/self-implement/run-status-mapping.ts +2 -0
- package/src/self-implement/seams.ts +1 -1
- package/src/self-implement/self-implement-cli.ts +1 -0
- package/src/self-implement/speed-claims.ts +338 -0
- package/src/steward/triage.ts +74 -3
- package/src/steward/working-backwards.ts +4 -1
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +63 -48
- package/src/task-orchestrator/surfaces/pod-command-job.ts +84 -9
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +48 -0
- package/src/task-orchestrator/surfaces/pod-pool.ts +60 -8
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +147 -36
- package/src/task-orchestrator/surfaces/self-implement.ts +5 -1
- package/src/telegram.ts +25 -4
- package/src/user-config.ts +29 -5
- package/src/version/packed-revision.json +1 -1
- package/src/workflow-runtime/nodes/bash.ts +9 -1
- package/apps/pwa/out/_next/static/chunks/4562-071d8bac44a01069.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5977-2df489622a52a33a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-c496bb16da85385f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-1abfe3aec3be6bdc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-e6b84ab07d3567d5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-61ec1d2e92bdd50a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-fd7e200d4d83fbd7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-d47266766766d227.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-160089123a40dd91.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-2ce5471926761fdd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-e995d30f6800b6bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-39f89c53038a51d4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-e7e10cd3386222e5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-5a753bb4ec0cc511.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-341480ed8e3c1ea8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-e1e47d8d940aba3d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-58043db78ba519ae.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-357750dfb91bf960.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-194dce4a83143fce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-16bef3da05a900c3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-f8da5dc6f3752276.js +0 -1
- package/apps/pwa/out/_next/static/css/2e33713c444d5b39.css +0 -1
- package/apps/pwa/out/_next/static/x6mjI6vqOkVVu0jFuDkz1/_buildManifest.js +0 -1
- /package/apps/pwa/out/_next/static/{x6mjI6vqOkVVu0jFuDkz1 → LZcstaO9_NXypPFmujolv}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8891],{38620:(e,t,n)=>{"use strict";n.d(t,{InsidePage:()=>Y});var r=n(55539),s=n(46124),l=n(58603),a=n(58298);let i=[{id:"mission-fabric",title:"미션 패브릭",oneLine:"들어온 일을 미션으로 정하고 실행에 잇습니다.",docs:["docs/manual/MANUAL-mission-fabric-integration-2026-09-03.md"],code:["src/mission-loop/composite-cycle.ts","src/harness/mission-solve-loop.ts"]},{id:"graph-engineering",title:"그래프 엔지니어링",oneLine:"실행의 노드와 경로를 그래프로 읽습니다.",docs:["docs/manual/MANUAL-graph-operations-2026-09-10.md"],code:["src/self-implement/graph-templates.ts","src/self-implement/graph-authority.ts"]},{id:"pty-intelligence",title:"PTY 인텔리전스",oneLine:"에이전트가 터미널의 실행과 관측을 연결합니다.",docs:["docs/manual/MANUAL-external-agent-pty-missions-2026-08-11.md"],code:["src/self-dev/dev-cli.ts"]},{id:"loop-agent",title:"루프 에이전트",oneLine:"일을 반복 관측하고 다음 행동을 고릅니다.",docs:["docs/manual/MANUAL-execution-and-landing-loops-2026-09-29.md"],code:["src/harness/mission-solve-loop.ts","src/mission-loop/composite-cycle.ts"]},{id:"observation",title:"바닥 \xb7 관측\xb7인지\xb7힐링",oneLine:"본 것을 이해하고 스스로 고치는 바닥입니다.",docs:["docs/manual/MANUAL-self-cognition-observability-2026-07-14.md"],code:["src/self-implement/orchestrator.ts"]},{id:"harness",title:"받침 \xb7 하니스",oneLine:"구현과 검증이 지나가는 실행 받침입니다.",docs:["docs/TECH-harness-execution-anatomy-current-state-2026-08-10.md"],code:["src/self-implement/orchestrator.ts","src/self-dev/dev-cli.ts"]}];var o=n(81969);function d(e){let{entry:t}=e,[n,l]=(0,s.useState)(!1);return(0,r.jsxs)("details",{open:n,style:{minWidth:0,border:"1px solid #68788f",borderRadius:12,padding:18,background:"#16263b"},children:[(0,r.jsx)("summary",{onClick:e=>{e.preventDefault(),l(e=>!e)},style:{cursor:"pointer",fontWeight:700,overflowWrap:"anywhere"},children:(0,o.t)(t.title)}),(0,r.jsx)("p",{children:(0,o.t)(t.oneLine)}),(0,r.jsxs)("div",{children:[(0,r.jsx)("strong",{children:"문서"}),(0,r.jsx)("ul",{children:t.docs.map(e=>(0,r.jsx)("li",{style:{overflowWrap:"anywhere"},children:(0,o.t)(e)},e))}),(0,r.jsx)("strong",{children:"코드"}),(0,r.jsx)("ul",{children:t.code.map(e=>(0,r.jsx)("li",{style:{overflowWrap:"anywhere"},children:(0,o.t)(e)},e))})]})]})}function c(){return(0,r.jsxs)("div",{"data-architecture-scene":!0,style:{width:"100%",maxWidth:1600,margin:"auto",display:"grid",gap:20,fontSize:18},children:[(0,r.jsx)("h2",{style:{fontSize:28,margin:0},children:"엘라누스의 구조"}),(0,r.jsx)("div",{"aria-label":"네 기둥",style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(min(100%, 240px), 1fr))",gap:16},children:i.slice(0,4).map(e=>(0,r.jsx)(d,{entry:e},e.id))}),(0,r.jsx)("div",{"aria-label":"받침",style:{width:"100%",maxWidth:480,justifySelf:"center"},children:(0,r.jsx)(d,{entry:i[5]})}),(0,r.jsx)("div",{"aria-label":"바닥",children:(0,r.jsx)(d,{entry:i[4]})})]})}var u=n(15151),p=n(69370);let m={currentMissionId:null,missions:{}},h=e=>null!==e&&"object"==typeof e&&!Array.isArray(e),f=e=>"string"==typeof e&&e.trim().length>0;function g(e){let t=e;if("string"==typeof t)try{t=JSON.parse(t)}catch(e){return null}if(!t||"object"!=typeof t||Array.isArray(t))return null;let n=t;if("wizard.step"!==n.category||"wizard.step"!==n.event||!n.data||"object"!=typeof n.data||Array.isArray(n.data))return null;let r=n.data;return"string"==typeof r.ts&&Number.isFinite(Date.parse(r.ts))&&"string"==typeof r.wizardId&&r.wizardId&&["request","research","draft","validate","install","done"].includes(r.step)&&"string"==typeof r.text?{ts:r.ts,wizardId:r.wizardId,step:r.step,text:r.text,...void 0===r.detail?{}:{detail:r.detail}}:null}function y(e,t){let n=e.logsStreamUrl({exactCategory:"wizard.step"});return n?(0,p.BX)(n,{events:{log:e=>{let n=g(e.data);n&&t(n)}}}):()=>{}}let b={currentRunId:null,runs:{}},x={start:"border-sky-400 bg-sky-500/15 text-sky-200",ok:"border-green-500 bg-green-500/15 text-green-300",fail:"border-red-500 bg-red-500/15 text-red-300"};function v(e){let{state:t,now:n,receivedAt:s,lastSettlement:l,lastActivityTs:a=null,activityStatus:i="loading",wizardSteps:d=[]}=e,c=t.currentRunId?t.runs[t.currentRunId]:null,u=!c||n-s>6e4,p=null==c?void 0:c.order.some(e=>"start"===c.nodes[e].phase),m=l&&!p&&n-l.receivedAt<15e3,h=l&&!p&&n-l.receivedAt>=15e3,f=c?Math.max(0,Math.floor((n-Date.parse(c.startedAt))/1e3)):0,g=c&&l?Math.max(0,Math.floor((Date.parse(l.ts)-Date.parse(c.startedAt))/1e3)):0,y=h?"fail"===l.phase?"실패 \xb7 ".concat(l.nodeId):"완료 \xb7 ".concat(g,"초"):null;return(0,r.jsxs)("section",{"aria-label":"라이브 트레이스",className:"min-w-0 space-y-6 p-6 text-lg leading-relaxed",children:[d.length>0&&(0,r.jsx)("ol",{"aria-label":"플러그인 마법사 흐름",children:d.map(e=>(0,r.jsxs)("li",{children:["마법사 ",e.step," \xb7 ",(0,o.t)(e.text)]},"".concat(e.wizardId,":").concat(e.step)))}),u?(0,r.jsxs)("div",{className:"space-y-4 text-muted-foreground",children:[(0,r.jsx)("p",{children:"지금 도는 런이 없습니다"}),(0,r.jsxs)("p",{role:"status",children:["마지막 활동: ",a&&Number.isFinite(Date.parse(a))?(0,r.jsxs)("time",{dateTime:a,children:[new Date(a).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"})," KST"]}):"loading"===i?"확인 중":"unavailable"===i?"못 읽음":"기록 없음"]}),(0,r.jsx)("button",{type:"button",className:"rounded-lg border border-border px-5 py-3 text-lg",disabled:!0,children:"녹화 보기"})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("header",{className:"flex flex-wrap items-center gap-x-5 gap-y-2 break-all text-lg",children:[(0,r.jsx)("h2",{className:"font-semibold",children:c.graphId}),(0,r.jsxs)("span",{children:["런 ",c.runId.slice(0,6)]}),(0,r.jsxs)("span",{children:["경과 ",f,"초"]}),y&&(0,r.jsx)("span",{role:"status",children:y})]}),(0,r.jsxs)("div",{role:"list","aria-label":"노드 흐름",className:"flex flex-wrap gap-3",children:[m&&(0,r.jsx)("span",{className:"rounded-lg border border-border bg-muted px-3 py-1 text-sm text-muted-foreground",children:"다음 단계 준비 중"}),c.order.map(e=>{let t=c.nodes[e];return(0,r.jsxs)("div",{role:"listitem",className:"min-w-0 max-w-full break-all rounded-lg border px-5 py-3 ".concat(x[t.phase]),children:[(0,r.jsxs)("span",{className:"start"===t.phase?"animate-pulse":"",children:[t.nodeId," \xb7 ","start"===t.phase?"진행 중":"ok"===t.phase?"ok":"fail"]}),t.retries>0&&(0,r.jsxs)("span",{className:"ml-3","aria-label":"다시 ".concat(t.retries,"회"),children:["↻",t.retries]})]},e)})]})]})]})}function w(){let{client:e,config:t}=(0,u.Q)(),[n,l]=(0,s.useState)(()=>({client:e,baseUrl:t.baseUrl,token:t.token,state:b,receivedAt:0,lastSettlement:null,lastActivityTs:null,activityStatus:"loading"})),[a,i]=(0,s.useState)(0),[o,d]=(0,s.useState)([]),c=n.client===e&&n.baseUrl===t.baseUrl&&n.token===t.token;return(0,s.useEffect)(()=>{let n=!0;l({client:e,baseUrl:t.baseUrl,token:t.token,state:b,receivedAt:0,lastSettlement:null,lastActivityTs:null,activityStatus:"loading"}),d([]),e.listLogs({category:"graph.run",event:"node",limit:"1"}).then(r=>{n&&l(n=>{var s,l;if(n.client!==e||n.baseUrl!==t.baseUrl||n.token!==t.token)return n;let a=null==(l=r.logs)||null==(s=l[0])?void 0:s.ts,i="string"==typeof a&&Number.isFinite(Date.parse(a))?a:null,o=i&&(!n.lastActivityTs||Date.parse(i)>Date.parse(n.lastActivityTs))?i:n.lastActivityTs;return{...n,lastActivityTs:o,activityStatus:r.ok&&Array.isArray(r.logs)?"ready":"unavailable"}})}).catch(()=>{n&&l(n=>n.client===e&&n.baseUrl===t.baseUrl&&n.token===t.token?{...n,activityStatus:"unavailable"}:n)});let r=y(e,e=>{n&&d(t=>"request"===e.step?[e]:[...t.filter(t=>t.wizardId===e.wizardId),e].slice(-6))}),s=function(e,t){let n=e.logsStreamUrl({category:"graph.run"});return n?(0,p.BX)(n,{events:{log:e=>{let n=function(e){let t=e;if("string"==typeof t)try{t=JSON.parse(t)}catch(e){return null}if("object"!=typeof t||null===t||Array.isArray(t))return null;let n=t;if("graph.run"!==n.category||"node"!==n.event)return null;let r=n.data;return"object"!=typeof r||null===r||Array.isArray(r)?null:["graphId","runId","nodeId"].every(e=>"string"==typeof r[e]&&r[e].trim().length>0)&&("start"===r.phase||"ok"===r.phase||"fail"===r.phase)&&"string"==typeof n.ts&&Number.isFinite(Date.parse(n.ts))&&(void 0===r.seconds||"number"==typeof r.seconds&&Number.isFinite(r.seconds)&&!(r.seconds<0))?{kind:"node",graphId:r.graphId,runId:r.runId,nodeId:r.nodeId,phase:r.phase,ts:n.ts,...void 0===r.seconds?{}:{seconds:r.seconds}}:null}(e.data);n&&t(n)}}}):()=>{}}(e,r=>{if(!n)return;let s=Date.now();l(l=>{var a,i;if(!n)return l;let o=l.client===e&&l.baseUrl===t.baseUrl&&l.token===t.token,d=o?l.state:b,c=d.currentRunId===r.runId&&"start"!==r.phase&&(null==(i=d.runs[r.runId])||null==(a=i.nodes[r.nodeId])?void 0:a.phase)===r.phase,u=d.currentRunId!==r.runId&&d.runs[r.runId]?l.lastSettlement:"start"===r.phase||d.currentRunId!==r.runId?null:c?l.lastSettlement:{receivedAt:s,nodeId:r.nodeId,phase:r.phase,ts:r.ts},p=!o||!l.lastActivityTs||Date.parse(r.ts)>Date.parse(l.lastActivityTs)?r.ts:l.lastActivityTs;return{client:e,baseUrl:t.baseUrl,token:t.token,receivedAt:s,lastSettlement:u,lastActivityTs:p,activityStatus:o?l.activityStatus:"loading",state:function(e,t){var n,r,s,l;let a=Object.hasOwn(e.runs,t.runId)?e.runs[t.runId]:void 0,i=a&&Object.hasOwn(a.nodes,t.nodeId)?a.nodes[t.nodeId]:void 0,o={nodeId:t.nodeId,phase:t.phase,retries:(null!=(n=null==i?void 0:i.retries)?n:0)+("start"===t.phase&&i?1:0)},d={graphId:t.graphId,runId:t.runId,startedAt:null!=(r=null==a?void 0:a.startedAt)?r:t.ts,order:i?a.order:[...null!=(s=null==a?void 0:a.order)?s:[],t.nodeId],nodes:{...null==a?void 0:a.nodes,[t.nodeId]:o}};return{currentRunId:a&&null!=(l=e.currentRunId)?l:t.runId,runs:{...e.runs,[t.runId]:d}}}(d,r)}}),i(s)}),a=setInterval(()=>i(Date.now()),1e3);return()=>{n=!1,s(),r(),clearInterval(a)}},[e,t.baseUrl,t.token]),(0,r.jsx)(v,{state:c?n.state:b,now:a,receivedAt:n.receivedAt,lastSettlement:c?n.lastSettlement:null,lastActivityTs:c?n.lastActivityTs:null,activityStatus:c?n.activityStatus:"loading",wizardSteps:c?o:[]})}var j=n(43431),k=n(75764),A=n(55519);let I=A.DN.map(e=>({graph:"harness",kind:e,plugin:null,description:"",schema:{},core:!0})),S=A.CF.map(e=>({graph:"workflow",kind:e,plugin:null,description:"",schema:{},core:!0}));function N(){let{GraphEditor:e=j.F,WorkflowEditor:t=k.N}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[n,l]=(0,s.useState)("harness");return(0,r.jsxs)("section",{"aria-label":"그래프 편집기",className:"flex h-full min-h-[640px] min-w-0 flex-col",children:[(0,r.jsx)("div",{role:"tablist","aria-label":"그래프 편집 모드",className:"flex shrink-0 gap-2 border-b border-border px-4 py-3",children:["harness","workflow"].map(e=>(0,r.jsx)("button",{type:"button",role:"tab",id:"inside-editor-tab-".concat(e),"aria-controls":"inside-editor-panel-".concat(e),"aria-selected":n===e,onClick:()=>l(e),className:"rounded-lg px-4 py-2 text-lg min-[1440px]:text-[22px] ".concat(n===e?"bg-accent/15 text-text-primary":"text-text-tertiary hover:bg-surface-elevated"),children:"harness"===e?"실행 그래프":"워크플로"},e))}),(0,r.jsx)("div",{id:"inside-editor-panel-harness",role:"tabpanel","aria-labelledby":"inside-editor-tab-harness",hidden:"harness"!==n,className:"harness"===n?"flex min-h-0 min-w-0 flex-1 flex-col":"hidden",children:(0,r.jsx)(e,{palette:I,initialGraphId:"self-implement"})}),(0,r.jsx)("div",{id:"inside-editor-panel-workflow",role:"tabpanel","aria-labelledby":"inside-editor-tab-workflow",hidden:"workflow"!==n,className:"workflow"===n?"flex min-h-0 min-w-0 flex-1 flex-col":"hidden",children:(0,r.jsx)(t,{palette:S})})]})}var T=n(43537),U=n(79247),C=n(40385);let D=(0,C.g)(null,null);function O(e){let{view:t,runsUnreadable:n,refreshedAt:s}=e;return(0,r.jsxs)("section",{"aria-label":"루프 에이전트 활동",className:"min-w-0 space-y-6 p-4 text-lg min-[1440px]:text-[22px]",children:[(0,r.jsx)("div",{className:"grid grid-cols-2 gap-3 min-[1440px]:grid-cols-4",children:t.seats.map(e=>(0,r.jsxs)("article",{"aria-label":"".concat(e.seat," 자리"),className:"min-w-0 space-y-3 rounded-2xl border border-border bg-card p-3 min-[1440px]:p-6",children:[(0,r.jsx)("h2",{className:"font-bold",children:e.seat}),(0,r.jsx)("p",{className:"break-words","aria-label":"지금 하는 일",children:e.now}),(0,r.jsxs)("dl",{className:"space-y-1 text-base min-[1440px]:text-[22px]",children:[(0,r.jsxs)("div",{className:"flex flex-wrap justify-between gap-x-2",children:[(0,r.jsx)("dt",{children:"오늘 착지"}),(0,r.jsx)("dd",{children:e.landedToday})]}),(0,r.jsxs)("div",{className:"flex flex-wrap justify-between gap-x-2",children:[(0,r.jsx)("dt",{children:"막힘"}),(0,r.jsx)("dd",{children:e.blocked})]}),(0,r.jsxs)("div",{className:"flex flex-wrap justify-between gap-x-2",children:[(0,r.jsx)("dt",{children:"대표 결정 대기"}),(0,r.jsx)("dd",{children:e.decisionsWaiting})]})]})]},e.seat))}),(0,r.jsxs)("section",{"aria-label":"지금 도는 런",className:"min-w-0 rounded-2xl border border-border bg-card p-4",children:[(0,r.jsx)("h2",{className:"font-semibold",children:"지금 도는 런"}),n?(0,r.jsx)("p",{className:"text-muted-foreground",children:"못 읽음"}):0===t.runs.length?(0,r.jsx)("p",{className:"text-muted-foreground",children:"지금 도는 런이 없습니다"}):(0,r.jsx)("ul",{className:"mt-3 flex flex-wrap gap-3",children:t.runs.map((e,t)=>(0,r.jsxs)("li",{className:"min-w-0 break-words rounded-lg border border-border px-3 py-2",children:["런 ",e.id6," \xb7 ",e.stage," \xb7 경과 ","못 읽음"===e.elapsedSec?e.elapsedSec:"".concat(e.elapsedSec,"초")]},"".concat(e.id6,"-").concat(t)))})]}),(0,r.jsxs)("p",{className:"text-sm text-muted-foreground",children:["마지막 갱신 ",(0,r.jsx)("time",{dateTime:null!=s?s:void 0,children:s?new Date(s).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"}):"못 읽음"})]})]})}function z(){var e,t;let{client:n,config:l}=(0,u.Q)(),[a,i]=(0,s.useState)(null),o="".concat(l.baseUrl,"\0").concat(l.token),d=(null==a?void 0:a.source)===o?a:null;return(0,s.useEffect)(()=>{let e=!0,t=!1,r=(0,U.xX)({baseUrl:l.baseUrl,token:l.token});i({source:o,seats:null,runs:null,runsUnreadable:!0,refreshedAt:null});let s=async()=>{var s;if(!e||t||document.hidden)return;t=!0;let l=new Intl.DateTimeFormat("sv-SE",{timeZone:"Asia/Seoul"}).format(new Date),[a,d]=await Promise.allSettled([(0,T.Nn)(n,l),r.getHarnessRuns()]);if(t=!1,!e)return;let c="fulfilled"===a.status&&"ready"===a.value.kind?a.value.data:null,u="fulfilled"===d.status&&Array.isArray(null==(s=d.value)?void 0:s.entries)?d.value:null;i({source:o,seats:c,runs:u,runsUnreadable:null===u,refreshedAt:c||u?new Date().toISOString():null})};s();let a=window.setInterval(()=>{s()},1e4),d=()=>{document.hidden||s()};return document.addEventListener("visibilitychange",d),()=>{e=!1,window.clearInterval(a),document.removeEventListener("visibilitychange",d)}},[n,l.baseUrl,l.token,o]),(0,r.jsx)(O,{view:d?(0,C.g)(d.seats,d.runs):D,runsUnreadable:null==(e=null==d?void 0:d.runsUnreadable)||e,refreshedAt:null!=(t=null==d?void 0:d.refreshedAt)?t:null})}let E=/^\s*(승인|거부|반려|보류|허용|차단|중단|취소)(?=$|[\s.,!?;:])/;function M(e){let{decisions:t,now:n=Date.now()}=e,s=Object.values(t.missions).flat().filter(e=>"answer"===e.step).sort((e,t)=>Date.parse(t.ts)-Date.parse(e.ts)||t.seq-e.seq),l=s[0],a=l?Math.max(0,Math.floor((n-Date.parse(l.ts))/6e4)):null,i=s.flatMap(e=>{var t;let r=null==(t=E.exec(e.detail.answer))?void 0:t[1];return r&&n-Date.parse(e.ts)<3e5?[{item:e,outcome:r}]:[]});return(0,r.jsxs)("section",{"aria-label":"PTY 인텔리전스",className:"min-w-0 rounded-xl border border-slate-600 p-5 text-lg leading-relaxed min-[1440px]:text-[22px]",children:[(0,r.jsx)("h2",{className:"mb-5 font-semibold",children:"PTY 판단"}),0===i.length?(0,r.jsxs)("p",{role:"status",children:["지금 PTY 판단이 없습니다 — 마지막 판단 ",null===a?"기록 없음":"".concat(a,"분 전")]}):(0,r.jsx)("ol",{"aria-label":"최근 PTY 판단",className:"space-y-4",children:i.slice(0,3).map(e=>{let{item:t,outcome:n}=e;return(0,r.jsxs)("li",{className:"min-w-0 rounded-lg border border-slate-600 p-4",children:[(0,r.jsx)("time",{dateTime:t.ts,children:(0,o.t)(t.ts)})," \xb7 ",(0,o.t)(n)]},"".concat(t.missionId,":").concat(t.seq))})})]})}let R=[{step:"request",label:"요청"},{step:"research",label:"조사"},{step:"draft",label:"초안"},{step:"validate",label:"검증"},{step:"install",label:"설치"},{step:"done",label:"끝"}],L={done:"border-green-500 bg-green-500/15 text-green-300",now:"border-sky-400 bg-sky-500/15 text-sky-200",todo:"border-slate-500 bg-slate-500/15 text-slate-300",failed:"border-red-500 bg-red-500/15 text-red-300"},K={done:"완료",now:"진행 중",todo:"대기",failed:"실패"};function F(e){let{events:t}=e,n=function(e){if(0===e.length)return[];let t=e[e.length-1].wizardId,n=e.filter(e=>e.wizardId===t),r=n[n.length-1],s=R.findIndex(e=>e.step===r.step);return R.map((e,t)=>{let{step:l,label:a}=e,i=n.findLast(e=>e.step===l),o=(null==i?void 0:i.detail)!=null&&"object"==typeof i.detail&&!Array.isArray(i.detail)&&!1===i.detail.ok;return{step:l,label:a,state:"done"===r.step?"done":o?"failed":t<s?"done":t===s?"now":"todo",...i?{text:i.text,at:i.ts}:{}}})}(t);return(0,r.jsx)("section",{"aria-label":"마법사 → 마켓",className:"min-w-0 space-y-6 p-4 text-lg min-[1440px]:text-[22px]",children:0===n.length?(0,r.jsxs)("p",{children:["마법사가 아직 돌지 않았습니다 — ",(0,r.jsx)("code",{children:'elanous plugin make "<한 줄>"'})," 로 시작"]}):(0,r.jsx)("ol",{"aria-label":"마법사 단계",className:"grid grid-cols-1 gap-3 min-[900px]:grid-cols-6",children:n.map(e=>(0,r.jsxs)("li",{"data-wizard-step":e.step,"data-state":e.state,className:"min-w-0 rounded-xl border p-4 ".concat(L[e.state]),children:[(0,r.jsxs)("div",{className:"font-semibold",children:[e.label," ",(0,r.jsxs)("span",{className:"font-normal",children:["\xb7 ",K[e.state]]})]}),e.text&&(0,r.jsx)("p",{className:"mt-3 overflow-hidden text-ellipsis whitespace-nowrap",title:(0,o.t)(e.text),children:(0,o.t)(e.text)})]},e.step))})})}let P=e=>"".concat(e.wizardId,":").concat(e.step,":").concat(e.ts,":").concat(e.text);function _(){let{client:e}=(0,u.Q)(),[t,n]=(0,s.useState)(()=>({client:e,events:[]}));return(0,s.useEffect)(()=>{let t=!0;n({client:e,events:[]});let r=r=>{t&&r.length&&n(t=>({client:e,events:function(e,t){let n=new Map;for(let r of[...e,...t])n.set(P(r),r);return[...n.values()].sort((e,t)=>e.ts.localeCompare(t.ts)).slice(-50)}(t.client===e?t.events:[],r)}))},s=e.fetchJson;"function"==typeof s&&s.call(e,"/v1/logs?exactCategory=wizard.step&limit=".concat(50)).then(e=>{let t=null==e?void 0:e.logs;r(Array.isArray(t)?t.map(g).filter(e=>null!==e):[])}).catch(()=>{});let l=y(e,e=>r([e]));return()=>{t=!1,l()}},[e]),(0,r.jsx)(F,{events:t.client===e?t.events:[]})}let q=["문서 아키텍처","라이브 트레이스","루프 에이전트","그래프 편집기","마법사 → 마켓","PTY 인텔리전스"],Z=q.length,X="elanous.inside.demo";function W(e){return null!==e&&/^[1-9]$/.test(e)&&Number(e)<=Z?Number(e):1}function Y(){let e=(0,l.useSearchParams)();return(0,r.jsx)(B,{search:e})}function B(e){let{search:t,liveTrace:n=(0,r.jsx)(w,{}),editorScene:l=(0,r.jsx)(N,{}),loopScene:i=(0,r.jsx)(z,{}),wizardScene:d=(0,r.jsx)(_,{}),ptyScene:u=(0,r.jsx)(H,{})}=e,[p,m]=(0,s.useState)(()=>W(t.get("scene"))),[h,f]=(0,s.useState)(()=>"1"===t.get("demo")),g=(0,s.useRef)(null),y=(0,s.useRef)(p),b=(0,s.useRef)(h);y.current=p,b.current=h;let x=(0,s.useCallback)(e=>{let t=new URL(window.location.href);for(let[n,r]of Object.entries(e))t.searchParams.set(n,r);window.history.replaceState(window.history.state,"",t.toString())},[]),v=(0,s.useCallback)(e=>{e<1||e>Z||(y.current=e,m(e),x({scene:String(e)}))},[x]),j=(0,s.useCallback)(()=>{let e=!b.current;b.current=e,f(e),x({demo:e?"1":"0"});try{window.localStorage.setItem(X,e?"1":"0")}catch(e){}},[x]);return(0,s.useEffect)(()=>{let e=t.get("demo"),n="1"===e;if(null===e)try{n="1"===window.localStorage.getItem(X)}catch(e){}else try{window.localStorage.setItem(X,n?"1":"0")}catch(e){}b.current=n,f(n);let r=W(t.get("scene"));y.current=r,m(r)},[t]),(0,s.useEffect)(()=>{window.dispatchEvent(new window.Event("elanous:inside-demo"))},[h]),(0,s.useEffect)(()=>{let e=e=>{if(!(e.altKey||e.ctrlKey||e.metaKey||(0,a._i)(e.target))){if("ArrowLeft"===e.key||"ArrowRight"===e.key){e.preventDefault();let t="ArrowRight"===e.key?1:-1;v(Math.min(Z,Math.max(1,y.current+t)))}else if("d"===e.key.toLowerCase())j();else if("f"===e.key.toLowerCase()){var t;"function"==typeof(null==(t=g.current)?void 0:t.requestFullscreen)&&g.current.requestFullscreen().catch(()=>{})}}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[v,j]),(0,r.jsxs)("main",{ref:g,"data-inside-page":!0,style:{width:"100%",minHeight:"100vh",minWidth:0,padding:20,boxSizing:"border-box",background:"#0c1828",color:"#f1f5fa",fontSize:18},children:[(0,r.jsx)("style",{children:'@media (min-width: 1440px) {\n [data-inside-page] h1 { font-size: 40px !important; }\n [data-inside-page] nav button { font-size: 22px !important; }\n [data-inside-page] [data-inside-scene="1"] [data-architecture-scene],\n [data-inside-page] [data-inside-scene="2"] section,\n [data-inside-page] [data-inside-scene="2"] header,\n [data-inside-page] [data-inside-scene="2"] button,\n [data-inside-page] [data-inside-scene="2"] .text-sm { font-size: 22px !important; }\n }'}),(0,r.jsxs)("header",{style:{display:"flex",alignItems:"center",gap:16},children:[(0,r.jsx)("h1",{style:{fontSize:28,margin:0},children:"엘라누스 안쪽"}),h&&(0,r.jsx)("span",{"aria-label":"시연 모드",style:{fontSize:18},children:"시연"})]}),(0,r.jsx)("nav",{"aria-label":"장면 선택",style:{display:"flex",minHeight:48,overflowX:"auto",gap:8,margin:"18px 0",whiteSpace:"nowrap"},children:q.map((e,t)=>(0,r.jsx)("button",{type:"button","aria-current":p===t+1?"page":void 0,onClick:()=>v(t+1),style:{flexShrink:0,minHeight:48,padding:"8px 16px",fontSize:18,borderRadius:8,border:"1px solid #7188a5",color:"#fff",background:p===t+1?"#22558b":"#203147"},children:(0,o.t)("".concat(t+1," ").concat(e))},e))}),q.map((e,t)=>(0,r.jsx)("section",{"data-inside-scene":t+1,hidden:p!==t+1,"aria-label":(0,o.t)("".concat(t+1," ").concat(e)),style:{minWidth:0},children:0===t?(0,r.jsx)(c,{}):1===t?n:2===t?i:3===t?l:4===t?d:u},e))]})}function H(){let{client:e}=(0,u.Q)(),[t,n]=(0,s.useState)(()=>({client:e,decisions:m})),[l,a]=(0,s.useState)(()=>Date.now());return(0,s.useEffect)(()=>{let e=setInterval(()=>a(Date.now()),6e4);return()=>clearInterval(e)},[]),(0,s.useEffect)(()=>{let t=!0;n({client:e,decisions:m});let r=function(e,t){let n=e.logsStreamUrl({exactCategory:"pty.decision"});return n?(0,p.BX)(n,{events:{log:e=>{let n;try{n=JSON.parse(e.data)}catch(e){return}if(!n||"object"!=typeof n||Array.isArray(n))return;let r=n;if("pty.decision"!==r.category)return;let s=function(e){if(!h(e))return null;let{ts:t,missionId:n,seq:r,sessionId:s,terminalId:l,agent:a,step:i,text:o,detail:d}=e;if(!f(t)||!Number.isFinite(Date.parse(t))||!f(n)||!Number.isSafeInteger(r)||r<0||!f(s)||!f(l)||!f(a)||!f(o)||void 0!==d&&!h(d)||h(d)&&(void 0!==d.keys&&"string"!=typeof d.keys||void 0!==d.row&&(!Number.isSafeInteger(d.row)||d.row<0)))return null;let c={ts:t,missionId:n,seq:r,sessionId:s,terminalId:l,agent:a,text:o},u=h(d)?{...void 0!==d.keys?{keys:d.keys}:{},...void 0!==d.row?{row:d.row}:{}}:{};return"answer"===i?h(d)&&f(d.question)&&f(d.answer)?{...c,step:i,detail:{...u,question:d.question,answer:d.answer}}:null:"recover"===i?h(d)&&f(d.blocked)&&f(d.action)?{...c,step:i,detail:{...u,blocked:d.blocked,action:d.action}}:null:"done"===i?h(d)&&h(d.result)&&f(d.result.ref)&&("pr"===d.result.kind||"file"===d.result.kind||"text"===d.result.kind)?{...c,step:i,detail:{...u,result:{kind:d.result.kind,ref:d.result.ref}}}:null:"read"===i||"judge"===i||"input"===i?{...c,step:i,...void 0!==d?{detail:u}:{}}:null}(r.data);s&&r.event===s.step&&t(s)}}}):()=>{}}(e,r=>{t&&n(t=>({client:e,decisions:function(e,t){let n=Object.hasOwn(e.missions,t.missionId)?e.missions[t.missionId]:[];if(n.some(e=>e.seq===t.seq))return e;let r=[...n,t].sort((e,t)=>e.seq-t.seq),s={...e.missions,[t.missionId]:r},l=e.currentMissionId?s[e.currentMissionId]:void 0,a=r.at(-1),i=null==l?void 0:l.at(-1);return{missions:s,currentMissionId:!i||Date.parse(a.ts)>Date.parse(i.ts)?t.missionId:e.currentMissionId}}(t.client===e?t.decisions:m,r)}))});return()=>{t=!1,r()}},[e]),(0,r.jsx)(M,{decisions:t.client===e?t.decisions:m,now:l})}},40385:(e,t,n)=>{"use strict";n.d(t,{g:()=>i,q:()=>a});var r=n(81969);let s=[{id:"OP",seat:"COO"},{id:"MK",seat:"CMO"},{id:"TC",seat:"CTO"},{id:"UX",seat:"CXO"}];function l(e){return(0,r.t)(e.replace(/\s+/g," ")).trim()}function a(e){var t;let n=e.split("\n"),r=(e,t)=>{let n=e.trim();return t&&(n=(n=n.replace(/^\*\*\[[^\]]+\]\*\*\s*/,"")).replace(/^(?:📌\S*\s*)?\d{4}-\d{2}-\d{2}\s+\d{1,2}:\d{2}\s*KST\s*/,"")),l(n=(n=(n=(n=(n=(n=n.replace(/^→\s*(?:[A-Z]{1,4}|전원|전체)(?=\s|·|$)(?:\s*·\s*(?:[A-Z]{1,4}|전원|전체)(?=\s|·|$))*\s*(?:·)?\s*/u,"")).replace(/^—\s*/,"")).replace(/^[-*]\s+/,"").replace(/\*\*|`|__/g,"").replace(/^#+\s*/,"").trim()).replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,"")).replace(RegExp("^(?:\\p{Extended_Pictographic}\\uFE0F?)+\\s*","u"),"")).replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,""))},s=r(null!=(t=n[0])?t:"",!0);if(s)return s;let a=n.slice(1).find(e=>e.trim());return a?r(a,!1):""}function i(e,t){var n;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now();return{seats:s.map(t=>{var n;let{id:r,seat:s}=t,l=null==e?void 0:e.seats.find(e=>e.seat===r);return{seat:s,now:(null==l?void 0:l.now)&&Array.from(a(l.now.text)).slice(0,40).join("")||"못 읽음",landedToday:(null==l?void 0:l.landed)==null?"못 읽음":l.landed.length,blocked:(null==l?void 0:l.blocked)==null?"못 읽음":l.blocked.length,decisionsWaiting:null!=(n=null==l?void 0:l.pendingDecisions)?n:"못 읽음"}}),runs:(null!=(n=null==t?void 0:t.entries)?n:[]).filter(e=>"running"===e.status).sort((e,t)=>{var n,r;return(Date.parse(null!=(n=t.lastActivityTimestamp)?n:"")||0)-(Date.parse(null!=(r=e.lastActivityTimestamp)?r:"")||0)}).slice(0,6).map(e=>{var t;let n=Date.parse(null!=(t=e.lastActivityTimestamp)?t:"");return{id6:function(e){let t=e.replace(/^run-/i,"");return/^[a-z0-9]{6}/i.test(t)&&l(t.slice(0,6))||"못 읽음"}(e.runId),stage:l(e.lastPhase||e.status)||"못 읽음",elapsedSec:Number.isFinite(n)?Math.max(0,Math.floor((r-n)/1e3)):"못 읽음"}})}}},43537:(e,t,n)=>{"use strict";function r(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function s(e){return"string"==typeof e}function l(e){return s(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function a(e){return r(e)&&s(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&s(e.summary)}function i(e){return r(e)&&s(e.runId)&&s(e.status)&&s(e.startedAt)&&(null===e.version||s(e.version))&&Array.isArray(e.path)&&e.path.every(s)&&Array.isArray(e.nodes)&&e.nodes.every(a)}function o(e){return r(e)&&s(e.id)&&s(e.title)&&s(e.status)&&(void 0===e.owner||s(e.owner))&&s(e.updatedAt)&&(void 0===e.evidence||s(e.evidence))}n.d(t,{HG:()=>g,Kh:()=>f,Nn:()=>m,oc:()=>h});let d=e=>Number.isInteger(e)&&e>=0;function c(e){return r(e)&&s(e.id)&&s(e.title)&&(null===e.open||d(e.open))&&(null===e.landed||d(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&s(e.id)&&s(e.title)))}function u(e){return r(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||s(e.role))&&(null===e.now||r(e.now)&&s(e.now.text)&&s(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>r(e)&&d(e.pr)&&s(e.title)&&s(e.at)&&(null===e.checklistId||s(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&s(e.id)&&s(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||d(e.pendingDecisions))&&(null===e.checklist||r(e.checklist)&&["green","yellow","red","done"].every(t=>d(e.checklist[t])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(c))}async function p(e,t,n){try{let r=await e.fetchResponse(t,{method:"GET"});if(403===r.status)return{kind:"forbidden"};if(!r.ok)return{kind:"error",status:r.status};let s=n(await r.json());return null===s?{kind:"error",status:r.status}:{kind:"ready",data:s}}catch(e){return{kind:"error",status:0}}}function m(e,t){return p(e,"/v1/ops/seats".concat(t?"?date=".concat(encodeURIComponent(t)):""),e=>r(e)&&s(e.date)&&Array.isArray(e.seats)&&e.seats.every(u)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function h(e,t){return p(e,"/v1/ops/release/runs".concat(t?"?version=".concat(encodeURIComponent(t)):""),e=>Array.isArray(e)&&e.every(i)?e:null)}function f(e,t,n){return p(e,"/v1/ops/release/runs/".concat(encodeURIComponent(t),"/nodes/").concat(encodeURIComponent(n),"/log"),e=>r(e)&&s(e.log)?{log:e.log}:null)}function g(e,t){return p(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(t)),e=>{var t,n,a,i;if(!(r(e)&&s(e.version)&&(void 0===e.codename||s(e.codename))&&Array.isArray(e.items)&&e.items.every(o)&&["green","yellow","red","done"].every(t=>void 0===e[t]||Number.isInteger(e[t])&&e[t]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(s))&&(void 0===e.byOwner||r(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let d={green:0,yellow:0,red:0,done:0};for(let t of e.items)t.status in d&&d[t.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:r(e.schedule)&&l(e.schedule.cutAt)&&(null===e.schedule.landBy||l(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(t=e.green)?t:d.green,yellow:null!=(n=e.yellow)?n:d.yellow,red:null!=(a=e.red)?a:d.red,done:null!=(i=e.done)?i:d.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}},55499:(e,t,n)=>{Promise.resolve().then(n.bind(n,38620))},58298:(e,t,n)=>{"use strict";function r(e){return e.metaKey||e.ctrlKey}function s(e){let t=e.key.toLowerCase();return!r(e)||e.shiftKey||e.altKey||"k"!==t?r(e)&&e.shiftKey&&!e.altKey&&"j"===t?e.fromEditable?null:"toggle-role-judge":r(e)&&e.shiftKey&&!e.altKey&&"m"===t?e.fromEditable?null:"toggle-voice":r(e)&&e.shiftKey&&!e.altKey&&"y"===t?e.fromEditable?null:"toggle-tts":"?"!==e.key||r(e)||e.altKey?null:e.fromEditable?null:"open-help":"focus-broadcast-input"}function l(e){var t;if(!e)return!1;let n=e.tagName;if(!n)return!1;if("INPUT"===n||"TEXTAREA"===n||"SELECT"===n)return!0;let r=null==(t=e.getAttribute)?void 0:t.call(e,"contenteditable");return""===r||"true"===r}n.d(t,{ZQ:()=>s,_i:()=>l,nm:()=>a});let a=[{id:"focus-broadcast-input",combo:"⌘K / Ctrl+K",effect:"Focus broadcast input"},{id:"toggle-role-judge",combo:"⌘⇧J / Ctrl+⇧J",effect:"Toggle role-judge backend"},{id:"toggle-voice",combo:"⌘⇧M / Ctrl+⇧M",effect:"Toggle voice mode (mic)"},{id:"toggle-tts",combo:"⌘⇧Y / Ctrl+⇧Y",effect:"Toggle TTS mute"},{id:"open-help",combo:"?",effect:"Open this help overlay"}]},81969:(e,t,n)=>{"use strict";n.d(t,{t:()=>u});let r=/\brun-([0-9a-f]{8})-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,s=/(?:\/(?:Users|home|private)\/[\w.%@+~/-]+|\b[A-Za-z]:\\(?:[^\\\s,;<>"']+\\)*[^\\\s,;<>"']+)/g,l=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,a=RegExp("(?<![A-Za-z0-9_-])(?:[A-Za-z0-9_]{40,}|(?:sk|ghp|gho|ghs|github_pat|xox[abpr])[-_][A-Za-z0-9_-]{20,})(?![A-Za-z0-9_-])","g"),i=/\b(?:OP|MK|TC|UX)\b/g,o=/\bmsb(\d+)\b/gi,d=/(?:\u{1F451}|🪑|🅞|🅜|🅣|🅤|🅢|🅕)\uFE0F?/gu,c={OP:"COO",MK:"CMO",TC:"CTO",UX:"CXO"};function u(e){let t,n=e;do t=n,n=n.replace(r,(e,t)=>"run-".concat(t.slice(0,6))).replace(s,"").replace(l,"").replace(d,"").replace(a,"").replace(i,e=>c[e]).replace(o,(e,t)=>"remote-".concat(t));while(n!==t&&function(e){return[r,s,l,a,i,d,o].flatMap(t=>[...e.matchAll(t)].map(e=>e[0]))}(n).length>0);return n}}},e=>{e.O(0,[9901,9182,3324,1844,1866,8868,8060,9247,8949,4554,2463,2196,7358],()=>e(e.s=55499)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3141],{2965:(e,t,a)=>{Promise.resolve().then(a.bind(a,66847))},46044:(e,t,a)=>{"use strict";a.d(t,{A:()=>n});let n=(0,a(3704).A)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]])},51706:(e,t,a)=>{"use strict";a.d(t,{A:()=>n});let n=(0,a(3704).A)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]])},66847:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>L});var n=a(55539),s=a(46124),l=a(21501),r=a(46044),i=a(51706),d=a(94306),o=a(34885),c=a(16241),u=a(21108),x=a(7456),m=a(97479),p=a(44373);let h={PLAN:"text-sky-600 dark:text-sky-400",ROUTE:"text-violet-600 dark:text-violet-400",VERIFY:"text-amber-600 dark:text-amber-400",HEAL:"text-emerald-600 dark:text-emerald-400",ESCALATE:"text-rose-600 dark:text-rose-400",SHIP:"text-green-700 dark:text-green-400 font-semibold"};function g(e){let{board:t,lines:a,mode:s,onSelectRun:l,selectedRunId:r,role:i="owner"}=e,d="max"===s,o="owner"===i,u=t.gauges,{snapshot:x}=t,m=o?0:t.stream.filter(e=>null!=e.why&&(0,c.Yu)(e.why)).length;return(0,n.jsxs)("div",{className:(0,p.cn)("space-y-4",d&&"live-max"),"data-live-mode":s,children:[(0,n.jsxs)("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-3 lg:grid-cols-6",children:[(0,n.jsx)(v,{label:"LIVE",hint:"도는 런",value:String(u.live),tone:u.live>0?"live":"idle",max:d}),(0,n.jsx)(v,{label:"DECISIONS/MIN",hint:"판단 ".concat(u.decisions,"건"),value:String(u.decisionsPerMin),max:d}),(0,n.jsx)(v,{label:"SHIPPED",hint:"병합\xb7PR",value:String(u.shipped),tone:"ok",max:d}),(0,n.jsx)(v,{label:"SELF-HEAL",hint:u.selfHealRuns?"수리 런 ".concat(u.selfHealRuns):"수리 런 없음",value:null===u.selfHealRate?"—":"".concat(u.selfHealRate,"%"),max:d}),(0,n.jsx)(v,{label:"BURN",hint:"토큰/분",value:f(u.burnTokensPerMin),max:d}),(0,n.jsx)(v,{label:"BLOCKED",hint:"막힌 런",value:String(x.counters.blocked),tone:x.counters.blocked?"bad":"idle",max:d})]}),(0,n.jsxs)("section",{className:"space-y-2","aria-label":"런",children:[(0,n.jsxs)("h2",{className:"text-sm font-medium",children:["런 ",(0,n.jsxs)("span",{className:"text-xs text-muted-foreground",children:["최근 ",x.windowMinutes,"분 \xb7 ",x.runs.length]})]}),0===x.runs.length?(0,n.jsx)("p",{className:"rounded-md border border-dashed p-4 text-sm text-muted-foreground","data-live-empty":!0,children:"지금 이 창에 런 신호가 없습니다 — 텔레그램이나 Intake 로 한 줄 보내면 여기에 런이 뜹니다."}):(0,n.jsx)("ul",{className:"space-y-1.5",children:x.runs.slice(0,12).map(e=>(0,n.jsx)(b,{run:e,round:t.rounds[e.runId],max:d,selected:e.runId===r,onSelect:l,owner:o},e.runId))})]}),(0,n.jsxs)("div",{className:"grid gap-4 lg:grid-cols-5",children:[(0,n.jsxs)("section",{className:"space-y-2 lg:col-span-3","aria-label":"판단 스트림",children:[(0,n.jsxs)("h2",{className:"flex flex-wrap items-center gap-2 text-sm font-medium",children:["판단 스트림",c.jg.map(e=>(0,n.jsx)("span",{className:(0,p.cn)("text-[11px] lg:text-[10px] font-mono",h[e]),children:e},e))]}),0===t.stream.length?(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"이 창에 판단 신호가 없습니다."}):(0,n.jsx)("ul",{className:"max-h-80 space-y-1 overflow-auto rounded-md border p-2 font-mono text-[11px]","data-live-stream":!0,children:t.stream.slice(0,40).map((e,t)=>(0,n.jsxs)("li",{className:(0,p.cn)("leading-relaxed",d&&0===t&&"live-line-in",d&&"SHIP"===e.kind&&"live-ship"),children:[(0,n.jsxs)("span",{className:"text-muted-foreground",children:[(0,n.jsx)("span",{title:e.ts,children:(0,c.qo)(e.ts)})," "]}),(0,n.jsxs)("span",{className:h[e.kind],children:["[",e.kind,"]"]})," ",o?e.what:(0,c.hS)(e.what.replace(/run-[0-9a-f]{8}-[^\s]*/gi,""),i),e.why&&(0,n.jsxs)("span",{className:"text-muted-foreground",children:[" \xb7 왜: ",(0,c.hS)(e.why,i)]}),e.purpose&&(0,n.jsxs)("span",{className:"text-muted-foreground",children:[" \xb7 목적: ",e.purpose]}),e.target&&(0,n.jsxs)("span",{className:"text-muted-foreground",children:[" → ",e.target]})]},"".concat(e.ts,"-").concat(t)))})]}),(0,n.jsxs)("section",{className:"space-y-2 lg:col-span-2","aria-label":"성적표",children:[(0,n.jsx)("h2",{className:"text-sm font-medium",children:"모델 성적표"}),0===t.scorecard.length?(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"이 창에 모델 요청이 없습니다."}):(0,n.jsxs)("table",{className:"w-full text-[11px]",children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{className:"text-muted-foreground",children:[(0,n.jsx)("th",{className:"text-left font-normal",children:"모델"}),(0,n.jsx)("th",{className:"text-right font-normal",children:"요청"}),(0,n.jsx)("th",{className:"text-right font-normal",children:"토큰"}),(0,n.jsx)("th",{className:"text-right font-normal",children:"과금"})]})}),(0,n.jsx)("tbody",{children:t.scorecard.slice(0,8).map(e=>{var t;return(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{className:"truncate",children:e.model}),(0,n.jsx)("td",{className:"text-right tabular-nums",children:e.requests}),(0,n.jsx)("td",{className:"text-right tabular-nums",children:f(e.tokens)}),(0,n.jsx)("td",{className:"text-right text-muted-foreground",children:null!=(t=e.billing)?t:"—"})]},e.model)})})]}),(0,n.jsx)("h2",{className:"pt-2 text-sm font-medium",children:"리뷰 판정"}),(0,n.jsx)(j,{items:x.reviewVerdicts,max:d})]})]}),(0,n.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[o?(0,n.jsxs)("section",{className:"space-y-2","aria-label":"흐르는 로그",children:[(0,n.jsx)("h2",{className:"text-sm font-medium",children:"흐르는 로그"}),(0,n.jsx)("pre",{className:"max-h-60 overflow-auto rounded-md border bg-muted/30 p-2 text-[11px] leading-relaxed","data-live-log":!0,children:a.slice(0,60).join("\n")||"—"})]}):m>0?(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","data-live-folded-errors":!0,children:["오류 ",m,"건 접힘"]}):null,(0,n.jsxs)("section",{className:"space-y-2","aria-label":"빈 칸 표",children:[(0,n.jsxs)("h2",{className:"text-sm font-medium",children:["빈 칸 표 ",(0,n.jsx)("span",{className:"text-xs text-muted-foreground",children:"판단 로그에 없는 칸"})]}),0===t.missing.length?(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"빈 칸 없음."}):(0,n.jsx)("table",{className:"w-full text-[11px]","data-live-missing":!0,children:(0,n.jsx)("tbody",{children:t.missing.slice(0,10).map(e=>(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{className:"font-mono",children:e.key}),(0,n.jsx)("td",{className:"text-right tabular-nums",children:e.count}),(0,n.jsx)("td",{className:"pl-2 text-muted-foreground",children:e.lacks.join(" \xb7 ")})]},e.key))})})]})]})]})}function f(e){return e>=1e6?"".concat((e/1e6).toFixed(1),"M"):e>=1e3?"".concat((e/1e3).toFixed(e>=1e5?0:1),"k"):String(e)}function v(e){let{label:t,hint:a,value:s,tone:l="idle",max:r}=e;return(0,n.jsxs)("div",{className:(0,p.cn)("rounded-lg border p-3","live"===l&&"border-primary/50","bad"===l&&"border-error/50","ok"===l&&"border-green-600/40",r&&"live-gauge",r&&"live"===l&&"live-glow"),children:[(0,n.jsx)("div",{className:"font-mono text-[11px] lg:text-[10px] tracking-wider text-muted-foreground",children:t}),(0,n.jsx)("div",{className:(0,p.cn)("text-2xl font-semibold tabular-nums",r&&"live-count"),"data-live-gauge":t,children:s}),(0,n.jsx)("div",{className:"text-[11px] lg:text-[10px] text-muted-foreground",children:a})]})}function b(e){let{run:t,round:a,max:s,selected:l,onSelect:r,owner:i}=e;return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button","data-live-run":t.runId,onClick:()=>null==r?void 0:r(t.runId),className:(0,p.cn)("flex w-full items-center gap-3 rounded-md border px-3 py-2 text-left text-xs hover:bg-muted/40",l&&"ring-1 ring-primary"),children:[(0,n.jsx)("span",{className:"w-24 shrink-0 truncate font-mono text-[11px] text-muted-foreground",children:i?t.runId.replace(/^run-/,"").slice(0,8):"런"}),(0,n.jsx)("span",{className:"flex flex-1 gap-1","aria-label":"단계",children:c.lV.map(e=>{let a=t.stages[e],l=t.current===e;return(0,n.jsx)("span",{title:"".concat(c.fQ[e]," \xb7 ").concat(null!=a?a:"신호 없음"),"data-stage":e,"data-tone":null!=a?a:"none",className:(0,p.cn)("h-2 flex-1 rounded-full bg-muted","info"===a&&"bg-primary/60","ok"===a&&"bg-green-600","bad"===a&&"bg-error",s&&l&&"bad"!==a&&"live-pulse",s&&l&&"bad"===a&&"live-pulse-bad")},e)})}),(0,n.jsx)("span",{className:"w-14 shrink-0 text-right font-mono text-[11px] lg:text-[10px] text-muted-foreground",children:a?"R ".concat(a,"/3"):""}),(0,n.jsx)("span",{className:"w-24 shrink-0 text-right text-[11px]",children:t.blocked?(0,n.jsx)("span",{className:"text-error",children:"막힘"}):"ok"===t.stages.land?(0,n.jsxs)("span",{className:"text-green-700",children:["착지",t.pr?" #".concat(t.pr):""]}):t.current?c.fQ[t.current]:""})]})})}function j(e){let{items:t,max:a}=e,s=Math.max(1,...t.map(e=>e.count));return 0===t.length?(0,n.jsx)("div",{className:"text-[11px] text-muted-foreground",children:"—"}):(0,n.jsx)("ul",{className:"space-y-1",children:t.slice(0,6).map(e=>(0,n.jsxs)("li",{className:"flex items-center gap-2 text-[11px]",children:[(0,n.jsx)("span",{className:"w-24 shrink-0 truncate",children:e.name}),(0,n.jsx)("span",{className:"h-1.5 flex-1 rounded-full bg-muted",children:(0,n.jsx)("span",{className:(0,p.cn)("block h-1.5 rounded-full bg-primary/70",a&&"transition-[width] duration-700"),style:{width:"".concat(e.count/s*100,"%")}})}),(0,n.jsx)("span",{className:"w-8 text-right tabular-nums",children:e.count})]},e.name))})}var N=a(89578),y=a(43422);let w=[15,60,360,1440],k="@active";function S(){return(0,d.Qj)()?(0,n.jsx)(E,{}):(0,n.jsxs)("div",{className:"mx-auto max-w-2xl space-y-2 p-6",children:[(0,n.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Live"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Connect to a NEXUS daemon to watch runs live."})]})}function E(){var e,t,a,p,h,f;let v=(0,m.In)(),[b,j]=(0,s.useState)("practical"),[S,E]=(0,s.useState)(null),[L,A]=(0,s.useState)("all"),[C,R]=(0,s.useState)(!1);(0,s.useEffect)(()=>{try{window.localStorage.removeItem("elanous.live.mode")}catch(e){}},[]),(0,s.useEffect)(()=>{if(!S)return;let e=setTimeout(()=>{j("practical"),E(null)},Math.max(0,S-Date.now()));return()=>clearTimeout(e)},[S]);let H=(0,d.M1)(),[D,P]=(0,s.useState)(null),X=e=>{e.on?(j("max"),A(e.scope&&"all"!==e.scope?"run":"all"),E(e.until?Date.parse(e.until):Date.now()+18e5)):(j("practical"),E(null))};(0,s.useEffect)(()=>{let e=!0;return H.getLiveDetail().then(t=>{e&&X(t)}).catch(()=>{}),()=>{e=!1}},[H]);let q=e=>{R(!1),P(null);let t="run"===e&&F?F:"all";H.setLiveDetail({scope:t,ttlMin:30,by:"pwa-live"}).then(X).catch(e=>P(e instanceof Error?e.message:String(e)))},[O,T]=(0,s.useState)(60),[U,_]=(0,s.useState)(""),B=(0,s.useRef)(!1);(0,s.useEffect)(()=>{"max"!==b||B.current||(B.current=!0,_(k),T(1440)),"max"!==b&&(B.current=!1)},[b]);let[F,K]=(0,s.useState)(null),{logs:V,runs:z,instances:Q}=(0,o.HI)({store:U||void 0,windowMinutes:O}),[Y,G]=(0,s.useState)(()=>Date.now());(0,s.useEffect)(()=>{G(Date.now())},[V.dataUpdatedAt]);let[J,Z]=(0,s.useState)(!1);(0,s.useEffect)(()=>{"public"===new URLSearchParams(window.location.search).get("capture")&&Z(!0)},[]);let W=null!=(p=null==(e=V.data)?void 0:e.logs)?p:M,$=(0,s.useMemo)(()=>J?(0,x.yR)(W):W,[W,J]),ee=(0,l.I)({queryKey:["live","shipped",O],queryFn:()=>H.getLiveShipped("".concat(O,"m")),refetchInterval:6e4}),et=(0,s.useMemo)(()=>{var e,t,a;let n=(0,c.Hc)($,null!=(a=null==(e=z.data)?void 0:e.entries)?a:[],{now:Y,windowMinutes:O}),s=null==(t=ee.data)?void 0:t.merged;if("number"!=typeof s)return n;let l=(0,u.NZ)($).length;return{...n,gauges:{...n.gauges,shipped:s,selfHealRuns:l,selfHealRate:s>0?Math.round(l/s*100):null}}},[$,z.data,Y,O,ee.data]),ea=O>0?Math.round($.length/O*10)/10:0,en=Math.round(JSON.stringify($).length/1024),es=(0,s.useMemo)(()=>$.filter(e=>{var t;return!F||(null==(t=e.data)?void 0:t.runId)===F}).map(e=>(0,c.BP)(e)),[$,F]),el=(null!=(h=null==(t=Q.data)?void 0:t.instances)?h:[]).filter(e=>!1!==e.dbExists&&!e.current);return(0,n.jsxs)("div",{className:"mx-auto ".concat("max"===b?"max-w-none space-y-2 p-2":"max-w-6xl space-y-4 p-4 sm:p-6"),children:[(0,n.jsx)("style",{children:I}),(0,n.jsxs)("header",{className:"flex flex-wrap items-center gap-3 ".concat("max"===b?"justify-end":"justify-between"),children:[(0,n.jsxs)("div",{className:"max"===b?"hidden":"",children:[(0,n.jsxs)("h1",{className:"flex items-center gap-2 text-xl font-semibold tracking-tight",children:[(0,n.jsx)(r.A,{className:"h-5 w-5","aria-hidden":!0})," Live"]}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"하니스 런이 판단하고 기획하는 신호 — 보이는 수는 전부 진짜다."})]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[(0,n.jsx)("select",{"aria-label":"시간 창",value:O,onChange:e=>T(Number(e.target.value)),className:"rounded-md border bg-background px-2 py-1",children:w.map(e=>(0,n.jsx)("option",{value:e,children:e<60?"".concat(e,"분"):"".concat(e/60,"시간")},e))}),(0,n.jsxs)("select",{"aria-label":"신호 출처",value:U,onChange:e=>_(e.target.value),className:"max-w-48 rounded-md border bg-background px-2 py-1",children:[(0,n.jsx)("option",{value:"",children:"이 인스턴스"}),(0,n.jsx)("option",{value:k,children:"전체(연합 \xb7 최근 24시간에 쓰인 우주)"}),el.map(e=>(0,n.jsx)("option",{value:e.name,children:e.name},e.name))]}),(0,n.jsx)("button",{type:"button","data-elanous-action":"live-public-capture","aria-pressed":J,onClick:()=>Z(e=>!e),title:"녹화\xb7스크린샷용 — 계정 이름 → account-N \xb7 크레딧\xb7USD 숨김 \xb7 홈 경로 가림",className:"rounded-md border px-2 py-1 ".concat(J?"border-emerald-500 text-emerald-600 dark:text-emerald-300":"hover:bg-muted"),children:J?"● 공개 캡처 켜짐":"공개 캡처"}),"max"===b?(0,n.jsxs)("button",{type:"button","data-elanous-action":"live-max-off",onClick:()=>{P(null),H.setLiveDetail({scope:"all",ttlMin:0,by:"pwa-live"}).then(X).catch(e=>P(e instanceof Error?e.message:String(e))),j("practical"),E(null)},className:"inline-flex items-center gap-1 rounded-md border border-primary px-2 py-1 text-primary hover:bg-muted",children:[(0,n.jsx)(i.A,{className:"h-3.5 w-3.5","aria-hidden":!0})," 화려함 MAX 켜짐 \xb7 끄기"]}):(0,n.jsxs)("button",{type:"button","data-elanous-action":"live-max-on",onClick:()=>R(!0),className:"inline-flex items-center gap-1 rounded-md border px-2 py-1 hover:bg-muted",children:[(0,n.jsx)(i.A,{className:"h-3.5 w-3.5","aria-hidden":!0})," 화려함 MAX"]})]})]}),C&&(0,n.jsxs)("div",{role:"dialog","aria-label":"화려함 MAX 켜기",className:"space-y-2 rounded-md border border-primary/50 bg-primary/5 p-3 text-sm","data-live-max-confirm":!0,children:[(0,n.jsx)("p",{className:"font-medium",children:"화려함 MAX 를 켤까요?"}),(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["마케팅(시연\xb7녹화)과 상세 런 디버깅용입니다. 켜면 하니스가 판단마다 \xab왜\xb7목적\xb7보낸 곳\xbb을 추가로 기록합니다(부하가 듭니다) — 30분 뒤 자동으로 꺼지고, 다른 기기에서도 같은 상태로 보입니다. 지금 이 화면이 받는 신호: 분당 ",ea,"건 \xb7 응답 약 ",en,"KB."]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-2 text-xs",children:[(0,n.jsx)("button",{type:"button","data-elanous-action":"live-max-all",onClick:()=>q("all"),className:"rounded-md border px-2 py-1 hover:bg-muted",children:"전체로 켜기"}),(0,n.jsx)("button",{type:"button","data-elanous-action":"live-max-run",disabled:!F,onClick:()=>q("run"),className:"rounded-md border px-2 py-1 hover:bg-muted disabled:opacity-50",children:F?"이 런만 켜기":"이 런만 켜기(먼저 런을 고르세요)"}),(0,n.jsx)("button",{type:"button",onClick:()=>R(!1),className:"rounded-md px-2 py-1 text-muted-foreground hover:bg-muted",children:"취소"})]})]}),D&&(0,n.jsxs)("p",{className:"rounded-md bg-error/10 p-2 text-xs text-error",children:["MAX 스위치를 못 바꿨다: ",D]}),"max"===b&&(0,n.jsxs)("p",{className:"rounded-md border border-primary/40 px-3 py-1 text-[11px] lg:text-[10px] text-muted-foreground","data-live-cost-badge":!0,children:["화려함 MAX \xb7 범위 ","run"===L&&F?"런 ".concat(F.replace(/^run-/,"").slice(0,8)):"전체"," \xb7 받는 신호 분당 ",ea,"건 \xb7 응답 약 ",en,"KB",S?" \xb7 ".concat(Math.max(0,Math.round((S-Y)/6e4)),"분 뒤 자동 꺼짐"):""," \xb7 하니스 판단 이벤트 ",et.emitted,"건"]}),V.error?(0,n.jsxs)("p",{className:"rounded-md bg-error/10 p-3 text-sm text-error",children:["신호를 못 읽었다: ",V.error instanceof Error?V.error.message:String(V.error)]}):null,F&&(0,n.jsx)(y.RT,{runId:F,run:null!=(f=et.snapshot.runs.find(e=>e.runId===F))?f:null,lines:es,onClose:()=>K(null)}),"max"===b?(0,n.jsx)(N.xl,{board:et,rows:$,windowMinutes:O,sourceLabel:U===k?"federated":U||"this instance",shippedSource:"number"==typeof(null==(a=ee.data)?void 0:a.merged)?"github":"log",publicCapture:J,role:v,onSelectRun:e=>K(t=>t===e?null:e)}):(0,n.jsx)(g,{board:et,lines:es,mode:b,role:v,selectedRunId:F,onSelectRun:e=>K(t=>t===e?null:e)}),(0,n.jsxs)("p",{className:"text-[11px] text-muted-foreground ".concat("max"===b?"hidden":""),children:["갱신 5초 \xb7 출처 ",(0,n.jsx)("code",{children:"/v1/logs"})," \xb7 ",(0,n.jsx)("code",{children:"/v1/harness/runs"})," \xb7 비밀처럼 보이는 조각은 가린다."]})]})}let M=[],I="\n@keyframes live-pulse { 0%,100% { opacity: 1; box-shadow: 0 0 0 0 rgba(99,102,241,0) } 50% { opacity: .55; box-shadow: 0 0 10px 2px rgba(99,102,241,.55) } }\n@keyframes live-pulse-bad { 0%,100% { opacity: 1 } 50% { opacity: .4; box-shadow: 0 0 10px 2px rgba(239,68,68,.6) } }\n@keyframes live-glow { 0%,100% { box-shadow: 0 0 0 0 rgba(99,102,241,0) } 50% { box-shadow: 0 0 18px 2px rgba(99,102,241,.35) } }\n@keyframes live-line-in { from { transform: translateY(-6px); opacity: 0 } to { transform: none; opacity: 1 } }\n@keyframes live-ship { 0% { background: rgba(34,197,94,.35) } 100% { background: transparent } }\n.live-max .live-pulse { animation: live-pulse 1.4s ease-in-out infinite }\n.live-max .live-pulse-bad { animation: live-pulse-bad 1s ease-in-out infinite }\n.live-max .live-glow { animation: live-glow 2.4s ease-in-out infinite }\n.live-max .live-line-in { animation: live-line-in .45s ease-out }\n.live-max .live-ship { animation: live-ship 2.4s ease-out; font-size: 12px }\n.live-max .live-gauge { background: radial-gradient(120% 120% at 0% 0%, rgba(99,102,241,.10), transparent 60%) }\n.live-max .live-count { text-shadow: 0 0 12px rgba(99,102,241,.45) }\n.live-stage { background: radial-gradient(120% 90% at 50% 0%, rgba(79,70,229,.25), rgba(2,6,23,.98) 60%), #020617; box-shadow: inset 0 0 0 1px rgba(99,102,241,.25) }\n.live-stage .live-line-in { animation: live-line-in .45s ease-out }\n@keyframes live-v5-marquee { from { transform: translateX(0) } to { transform: translateX(-50%) } }\n@keyframes live-v5-blink { 0%,100% { opacity: 1 } 50% { opacity: .45 } }\n@keyframes live-v5-hot { 0%,100% { box-shadow: 0 0 14px #a78bfa55, inset 0 0 14px #a78bfa22 } 50% { box-shadow: 0 0 26px #a78bfa99, inset 0 0 22px #a78bfa44 } }\n.live-v5-marquee { animation: live-v5-marquee linear infinite }\n.live-v5-blink { animation: live-v5-blink 1.6s ease-in-out infinite }\n.live-v5-hot { animation: live-v5-hot 1.8s ease-in-out infinite }\n@media (prefers-reduced-motion: reduce) { .live-max *, .live-v5 * { animation: none !important; transition: none !important } }\n";function L(){return(0,n.jsx)(S,{})}},97479:(e,t,a)=>{"use strict";a.d(t,{GC:()=>s,In:()=>o,OG:()=>i});var n=a(46124);let s="elanous.pwa.role",l="elanous:pwa-role";function r(){try{let e=window.localStorage.getItem(s);if("owner"===e||"contributor"===e||"general"===e)return e}catch(e){}return"general"}function i(e){try{window.localStorage.setItem(s,e)}catch(e){}"function"==typeof window.dispatchEvent&&window.dispatchEvent(new Event(l))}function d(e){if("function"!=typeof window.addEventListener)return()=>{};window.addEventListener(l,e);let t=t=>{(t.key===s||null===t.key)&&e()};return window.addEventListener("storage",t),()=>{window.removeEventListener(l,e),window.removeEventListener("storage",t)}}function o(){return(0,n.useSyncExternalStore)(d,r,()=>"general")}}},e=>{e.O(0,[211,3324,3558,1844,5360,2463,2196,7358],()=>e(e.s=2965)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9902],{1736:(e,t,r)=>{"use strict";r.d(t,{r:()=>o});var s=r(55539),l=r(3558),a=r.n(l);let n=[{key:"autopilot",href:"/autopilot",num:"①",label:"미션",sub:"Autopilot"},{key:"tasks",href:"/tasks",num:"②",label:"작업",sub:"Tasks"},{key:"scheduler",href:"/scheduler",num:"③",label:"스케줄",sub:"Schedules"}];function o(e){let{active:t}=e;return(0,s.jsxs)("nav",{"aria-label":"Mission Fabric 파이프라인","data-testid":"fabric-stage-header",className:"flex flex-wrap items-center gap-1 text-xs",children:[(0,s.jsx)("span",{className:"mr-1 text-muted-foreground",children:"Missions"}),n.map((e,r)=>(0,s.jsxs)("span",{className:"flex items-center gap-1",children:[(0,s.jsxs)(a(),{href:e.href,"aria-current":e.key===t?"page":void 0,className:["rounded px-2 py-1 ring-1 transition-colors",e.key===t?"bg-primary/15 font-medium text-foreground ring-primary/40":"text-muted-foreground ring-border hover:bg-muted hover:text-foreground"].join(" "),children:[(0,s.jsx)("span",{className:"mr-1",children:e.num}),e.label,(0,s.jsx)("span",{className:"ml-1 text-[10px] opacity-70",children:e.sub})]}),r<n.length-1&&(0,s.jsx)("span",{className:"text-muted-foreground/50","aria-hidden":!0,children:"→"})]},e.key))]})}},5997:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>n,f6:()=>l,oD:()=>a});let s="elanous.daemon.sessionId";function l(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(s,e),e):localStorage.getItem(s)}();if(e)return e;let t=l();return localStorage.setItem(s,t),t}function n(){let e=l();return localStorage.setItem(s,e),e}},15151:(e,t,r)=>{"use strict";r.d(t,{C:()=>d,DaemonProvider:()=>u,Q:()=>c});var s=r(55539),l=r(46124),a=r(8101),n=r(5997),o=r(18060),i=r(72215);let d=(0,l.createContext)(null);function u(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[u,c]=(0,l.useState)(r),[m,x]=(0,l.useState)(""),[p]=(0,l.useState)(()=>new o.ki(r));(0,l.useEffect)(()=>{let e=(0,a.Fp)();c(e),p.updateConfig(e),x((0,n.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[p]),(0,l.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();p.updateConfig(t),c(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)},[p]);let f=e=>{c(t=>{let r={...t,...e};return(0,a.Qc)(e),p.updateConfig(r),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},h=e=>{x(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,l.useMemo)(()=>({config:u,setConfig:f,client:p,sessionId:m,setSessionId:h}),[u,p,m]);return(0,s.jsx)(d.Provider,{value:b,children:t})}function c(){let e=(0,l.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},62472:(e,t,r)=>{"use strict";r.d(t,{LoopStatusPanel:()=>f});var s=r(55539),l=r(46124),a=r(3558),n=r.n(a),o=r(15151),i=r(1736);function d(e,t){if(!e.enabled||"off"===e.scheduleState)return"off";if("failed"===e.lastStatus||"error"===e.lastStatus||"failure"===e.lastStatus||"abandoned"===e.lastStatus||"expired"===e.lastStatus)return"failed";if("stale"===e.scheduleState)return"late";let r=null===e.lastRunAt?NaN:Date.parse(e.lastRunAt);if(void 0!==e.secondDueAt){let s=null===e.secondDueAt?NaN:Date.parse(e.secondDueAt);return Number.isFinite(r)&&Number.isFinite(t)&&Number.isFinite(s)&&s>r&&t>s?"late":"alive"}return Number.isFinite(t)&&Number.isFinite(r)&&null!==e.intervalMs&&Number.isFinite(e.intervalMs)&&e.intervalMs>0&&t-r>2*e.intervalMs?"late":"alive"}let u={alive:"살아 있음",late:"늦음",failed:"실패",off:"꺼짐"};async function c(e,t){var r,s,l,a,n,o,i,c,m,x;let[p,f]=await Promise.allSettled([e("/v1/schedules?includeOff=1"),e("/v1/dashboard/loops")]),h="fulfilled"===p.status?null==(r=p.value)?void 0:r.schedules:null,b="fulfilled"===f.status?null==(l=f.value)||null==(s=l.loops)?void 0:s.loops:null;if(!Array.isArray(h)&&!Array.isArray(b))throw Error("loop registries unavailable");if(!Array.isArray(h))throw Error("스케줄 레지스트리 조회 실패");if(!Array.isArray(b))throw Error("루프 레지스트리 조회 실패");let v=(m=h,x=t,m.map(e=>{var t,r,s,l,a,n,o;let i=e.lastRun?Date.parse(e.lastRun.at):NaN,c=d({enabled:"off"!==e.state,lastRunAt:null!=(n=null==(t=e.lastRun)?void 0:t.at)?n:null,lastStatus:(null==(r=e.lastRun)?void 0:r.exit)!=null&&0!==e.lastRun.exit?"failed":(null==(s=e.lastRun)?void 0:s.status)==null||["ok","success","completed"].includes(e.lastRun.status.toLowerCase())?null!=(o=null==(a=e.lastRun)||null==(l=a.status)?void 0:l.toLowerCase())?o:null:"failed",intervalMs:e.cron?null:e.intervalMs,...e.cron?{scheduleState:e.state}:{}},x),m=!e.cron&&!(e.intervalMs&&e.intervalMs>0),p="alive"===c&&(!Number.isFinite(i)||m)?"판정 불가":u[c];return{id:e.id,name:e.name,layer:e.domain||e.category||e.source,owner:"미지정",mode:e.runVia||e.source,lastRun:Number.isFinite(i)?e.lastRun.at:null,verdict:p}})).map(e=>({...e,id:"schedule:".concat(e.id)}));for(let e of b){let r=e.last?Date.parse(e.last.at):NaN,s=d({enabled:!1!==e.armed,lastRunAt:null!=(o=null==(a=e.last)?void 0:a.at)?o:null,lastStatus:null!=(i=null==(n=e.last)?void 0:n.status.toLowerCase())?i:null,intervalMs:null},t);v.push({id:"loop:".concat(e.name),name:e.label,layer:null!=(c=e.category)?c:"루프",owner:"미지정",mode:null===e.armed?"관측":e.armed?"armed":"off",lastRun:Number.isFinite(r)?e.last.at:null,verdict:"alive"===s?"판정 불가":u[s]})}return v}let m={"살아 있음":"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30",늦음:"bg-red-500/15 text-red-300 ring-red-500/30",실패:"bg-red-500/15 text-red-300 ring-red-500/30",꺼짐:"bg-muted text-muted-foreground ring-border","판정 불가":"bg-muted text-muted-foreground ring-border"};function x(e){let{value:t}=e;return(0,s.jsx)("span",{"data-loop-verdict":t,className:"inline-flex shrink-0 rounded-full px-2 py-0.5 text-xs font-semibold ring-1 ".concat(m[t]),children:t})}function p(e){let{rows:t,state:r}=e;return"loading"===r?(0,s.jsx)("p",{role:"status",className:"text-sm text-muted-foreground",children:"루프 현황을 읽는 중…"}):"error"===r?(0,s.jsx)("p",{role:"alert",className:"text-sm text-red-300",children:"루프 현황을 읽지 못했습니다. 일부 레지스트리 조회가 실패했습니다. 데몬 연결을 확인하세요."}):t.length?(0,s.jsxs)("div",{className:"rounded-xl border border-border bg-card",children:[(0,s.jsxs)("table",{className:"hidden w-full table-fixed text-left text-sm md:table",children:[(0,s.jsx)("thead",{className:"border-b border-border text-muted-foreground",children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{scope:"col",className:"w-1/4 px-4 py-3",children:"루프 \xb7 층"}),(0,s.jsx)("th",{scope:"col",className:"px-4 py-3",children:"주인(자리)"}),(0,s.jsx)("th",{scope:"col",className:"px-4 py-3",children:"모드"}),(0,s.jsx)("th",{scope:"col",className:"px-4 py-3",children:"마지막 실행 시각"}),(0,s.jsx)("th",{scope:"col",className:"px-4 py-3",children:"판정"})]})}),(0,s.jsx)("tbody",{children:t.map(e=>{var t;return(0,s.jsxs)("tr",{className:"border-b border-border/60 last:border-0","data-loop-id":e.id,children:[(0,s.jsxs)("th",{scope:"row",className:"break-words px-4 py-3 font-medium",children:[e.name,(0,s.jsx)("span",{className:"block text-xs font-normal text-muted-foreground",children:e.layer})]}),(0,s.jsx)("td",{className:"px-4 py-3",children:e.owner}),(0,s.jsx)("td",{className:"px-4 py-3",children:e.mode}),(0,s.jsx)("td",{className:"px-4 py-3",children:(0,s.jsx)("time",{dateTime:null!=(t=e.lastRun)?t:void 0,children:e.lastRun?new Date(e.lastRun).toLocaleString("ko-KR"):"기록 없음"})}),(0,s.jsx)("td",{className:"px-4 py-3",children:(0,s.jsx)(x,{value:e.verdict})})]},e.id)})})]}),(0,s.jsx)("ul",{className:"divide-y divide-border/60 md:hidden",children:t.map(e=>{var t;return(0,s.jsxs)("li",{className:"min-w-0 px-3 py-3","data-loop-id":e.id,children:[(0,s.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,s.jsx)("strong",{className:"min-w-0 truncate text-sm",title:e.name,children:e.name}),(0,s.jsx)(x,{value:e.verdict})]}),(0,s.jsxs)("div",{className:"mt-1 flex flex-wrap gap-x-2 text-xs text-muted-foreground",children:[(0,s.jsx)("span",{children:e.layer}),(0,s.jsxs)("span",{children:["\xb7 ",e.owner]}),(0,s.jsxs)("span",{children:["\xb7 ",e.mode]}),(0,s.jsxs)("time",{dateTime:null!=(t=e.lastRun)?t:void 0,children:["\xb7 ",e.lastRun?new Date(e.lastRun).toLocaleString("ko-KR"):"기록 없음"]})]})]},e.id)})})]}):(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"등록된 루프\xb7크론이 없습니다."})}function f(){var e,t;let{client:r}=(0,o.Q)(),[a,d]=(0,l.useState)(null);(0,l.useEffect)(()=>{let e=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now,s=0,l=!0;return{async refresh(){let a=++s;try{let n=await c(e,r());l&&a===s&&t({rows:n,state:"ready"})}catch(e){l&&a===s&&t({rows:[],state:"error"})}},dispose(){l=!1}}}(e=>r.fetchJson(e),e=>{let{rows:t,state:s}=e;return d({client:r,rows:t,state:s})});e.refresh();let t=window.setInterval(()=>void e.refresh(),3e4);return()=>{e.dispose(),window.clearInterval(t)}},[r]);let u=(null==a?void 0:a.client)===r?a:null;return(0,s.jsxs)("main",{className:"mx-auto max-w-[1200px] space-y-5 p-4",children:[(0,s.jsx)(i.r,{active:"scheduler"}),(0,s.jsxs)("header",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,s.jsxs)("div",{children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("h1",{className:"text-xl font-semibold",children:"루프 현황"}),(0,s.jsx)("span",{className:"rounded-full border border-border px-2 py-0.5 text-xs text-muted-foreground",children:"beta \xb7 운영용"})]}),(0,s.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:"데몬의 루프\xb7크론 레지스트리 \xb7 늦음은 마지막 실행 후 주기의 2배 초과"})]}),(0,s.jsx)(n(),{href:"/scheduler",className:"rounded-lg border border-border px-3 py-2 text-sm hover:bg-accent",children:"전체 스케줄 →"})]}),(0,s.jsx)(p,{rows:null!=(e=null==u?void 0:u.rows)?e:[],state:null!=(t=null==u?void 0:u.state)?t:"loading"})]})}},73726:(e,t,r)=>{Promise.resolve().then(r.bind(r,62472))}},e=>{e.O(0,[3558,8060,2463,2196,7358],()=>e(e.s=73726)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7398],{47276:(e,t,s)=>{"use strict";s.d(t,{default:()=>d});var a=s(55539),i=s(46124),n=s(58603);class r extends Error{constructor(e,t,s){super("mission-room ".concat(e," on ").concat(t)),this.status=e,this.path=t,this.body=s,this.name="MissionRoomApiError"}}function o(e){var t;let[s,n]=(0,i.useState)({loading:!0,error:null,state:null}),[r,o]=(0,i.useState)(""),[d,u]=(0,i.useState)(""),[m,h]=(0,i.useState)(!1),[x,p]=(0,i.useState)(null),[f,b]=(0,i.useState)(!1),y=(0,i.useRef)(!0);(0,i.useEffect)(()=>()=>{y.current=!1},[]);let g=(0,i.useCallback)(async()=>{n(e=>({...e,loading:!0,error:null}));try{let{state:t}=await e.api.spawn(e.missionId);if(!y.current)return;n({loading:!1,error:null,state:t})}catch(e){if(!y.current)return;n({loading:!1,error:c(e),state:null})}},[e.api,e.missionId]);(0,i.useEffect)(()=>{g()},[g]);let j=(0,i.useCallback)(async()=>{if(r.trim()&&!m){h(!0);try{let t=await e.api.deliberate(e.missionId,r.trim(),d.trim()||void 0);if(!y.current)return;n(e=>e.state?{...e,state:{...e.state,decisions:[...e.state.decisions,t]}}:e),o("")}catch(e){if(!y.current)return;n(t=>({...t,error:c(e)}))}finally{y.current&&h(!1)}}},[e.api,e.missionId,r,d,m]),v=(0,i.useCallback)(async t=>{if(t.trim()&&!x){p(t);try{let s=await e.api.decide(e.missionId,t);if(!y.current)return;n(e=>{if(!e.state)return e;let t=e.state.decisions.slice(),a=t.findIndex(e=>e.ts===s.ts);return a>=0&&(t[a]=s),{...e,state:{...e.state,decisions:t}}})}catch(e){if(!y.current)return;n(t=>({...t,error:c(e)}))}finally{y.current&&p(null)}}},[e.api,e.missionId,x]),N=(0,i.useCallback)(async()=>{if(!f){b(!0);try{var t;let s=await e.api.archive(e.missionId);if(!y.current)return;n(e=>({...e,state:s})),null==(t=e.onArchived)||t.call(e)}catch(e){if(!y.current)return;n(t=>({...t,error:c(e)}))}finally{y.current&&b(!1)}}},[e.api,e.missionId,f,e.onArchived]),w=(null==(t=s.state)?void 0:t.status)==="archived",S=(0,i.useMemo)(()=>s.state?[...s.state.decisions].sort((e,t)=>t.ts-e.ts):[],[s.state]);return s.loading&&!s.state?(0,a.jsx)("div",{className:"p-4 text-sm opacity-70",children:"Loading mission room…"}):(0,a.jsxs)("section",{className:"mission-room-panel flex flex-col gap-4 p-4","data-mission-id":e.missionId,children:[(0,a.jsxs)("header",{className:"flex items-baseline justify-between gap-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:e.missionTitle?"".concat(e.missionTitle," \xb7 deliberation"):"Mission Deliberation Room"}),s.state&&(0,a.jsxs)("p",{className:"text-xs opacity-70",children:["tag: ",(0,a.jsx)("code",{children:s.state.missionTag})," \xb7 status:"," ",(0,a.jsx)("span",{className:w?"text-amber-600":"text-emerald-600",children:s.state.status})," \xb7 ","decisions: ",s.state.decisions.length]})]}),!w&&s.state&&(0,a.jsx)("button",{type:"button",className:"text-xs underline opacity-70 hover:opacity-100",disabled:f,onClick:()=>void N(),children:f?"archiving…":"archive room"})]}),s.error&&(0,a.jsx)("div",{role:"alert",className:"rounded border border-rose-400/50 bg-rose-50 px-3 py-2 text-sm text-rose-900",children:s.error}),!w&&(0,a.jsxs)("form",{className:"flex flex-col gap-2 rounded border border-zinc-200 p-3",onSubmit:e=>{e.preventDefault(),j()},children:[(0,a.jsx)("label",{className:"text-xs uppercase tracking-wide opacity-70",children:"New deliberation"}),(0,a.jsx)("textarea",{className:"min-h-[80px] w-full rounded border border-zinc-300 bg-white p-2 text-sm",placeholder:"Describe the branch you're stuck on…",value:r,onChange:e=>o(e.target.value),disabled:m}),(0,a.jsx)("textarea",{className:"min-h-[40px] w-full rounded border border-zinc-200 bg-zinc-50 p-2 text-xs",placeholder:"Optional mission context (task list digest, etc.)",value:d,onChange:e=>u(e.target.value),disabled:m}),(0,a.jsx)("div",{className:"flex justify-end",children:(0,a.jsx)("button",{type:"submit",className:"rounded bg-zinc-900 px-3 py-1 text-sm text-white disabled:opacity-50",disabled:!r.trim()||m,children:m?"asking lanes…":"ask the lanes"})})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[0===S.length&&(0,a.jsx)("p",{className:"text-sm opacity-70",children:"No deliberations yet."}),S.map(e=>(0,a.jsx)(l,{decision:e,onDecide:w?void 0:v,decidingChoice:x},e.ts))]})]})}function l(e){let{decision:t,onDecide:s,decidingChoice:n}=e,[r,o]=(0,i.useState)(""),l=t.resolution.status,c="decided"===t.resolution.status?t.resolution.chosen:null;return(0,a.jsxs)("article",{className:"rounded border border-zinc-200 bg-white p-3",children:[(0,a.jsxs)("header",{className:"flex items-baseline justify-between gap-2",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:t.question}),(0,a.jsx)("time",{className:"shrink-0 text-xs opacity-60",dateTime:new Date(t.ts).toISOString(),children:new Date(t.ts).toLocaleString()})]}),(0,a.jsx)("ul",{className:"mt-2 flex flex-col gap-2",children:t.opinions.map((e,t)=>(0,a.jsxs)("li",{className:"rounded bg-zinc-50 p-2 text-xs",children:[(0,a.jsxs)("div",{className:"font-medium",children:[e.role,e.modelId?(0,a.jsxs)("span",{className:"opacity-60",children:[" \xb7 ",e.modelId]}):null]}),(0,a.jsx)("pre",{className:"mt-1 whitespace-pre-wrap text-xs leading-snug",children:e.text})]},"".concat(e.role,"-").concat(t)))}),(0,a.jsxs)("footer",{className:"mt-3 flex items-center justify-between gap-2",children:[(0,a.jsxs)("span",{className:"text-xs opacity-70",children:["resolution:"," ","decided"===l?(0,a.jsxs)("span",{className:"font-medium text-emerald-700",children:["decided → ",c]}):(0,a.jsx)("span",{className:"text-amber-700",children:"open"})]}),s&&"open"===l&&(0,a.jsxs)("form",{className:"flex items-center gap-1",onSubmit:e=>{e.preventDefault(),r.trim()&&s(r.trim())},children:[(0,a.jsx)("input",{className:"w-32 rounded border border-zinc-300 px-2 py-0.5 text-xs",placeholder:"chosen…",value:r,onChange:e=>o(e.target.value),disabled:null!==n}),(0,a.jsx)("button",{type:"submit",className:"rounded bg-emerald-700 px-2 py-0.5 text-xs text-white disabled:opacity-50",disabled:!r.trim()||null!==n,children:n===r?"…":"apply"})]})]})]})}function c(e){if(e instanceof r){let t="object"==typeof e.body&&e.body&&"detail"in e.body?e.body.detail:null;return 404===e.status?"Mission room not found.":409===e.status?t?"Conflict: ".concat(t):"Conflict — room may be archived or no open decision.":401===e.status?"Authentication required.":"Mission room error (".concat(e.status,").")}return e instanceof Error?e.message:String(e)}function d(){var e;let t=(0,n.useParams)(),s=decodeURIComponent(null!=(e=null==t?void 0:t.id)?e:""),l=(0,i.useMemo)(()=>(function(e){var t;let s=e.baseUrl.replace(/\/+$/,""),a=null!=(t=e.fetchImpl)?t:fetch,i=e.authHeader;async function n(e,t){let n={"content-type":"application/json"};i&&(n.authorization=i),(null==t?void 0:t.headers)&&Object.assign(n,t.headers);let o=await a("".concat(s).concat(e),{...t,headers:n}),l=await o.json().catch(()=>null);if(!o.ok)throw new r(o.status,e,l);return l}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"/v1/missions/".concat(encodeURIComponent(e),"/showroom").concat(t)}return{spawn:async e=>await n(o(e)),deliberate:async(e,t,s)=>(await n(o(e,"/deliberate"),{method:"POST",body:JSON.stringify({question:t,...void 0!==s?{missionContext:s}:{}})})).decision,decide:async(e,t)=>(await n(o(e,"/decision"),{method:"POST",body:JSON.stringify({chosen:t})})).decision,archive:async e=>(await n(o(e,"/archive"),{method:"POST"})).state}})({baseUrl:window.location.origin}),[]);return s?(0,a.jsx)(o,{missionId:s,api:l}):(0,a.jsx)("div",{className:"p-4 text-sm",children:"Mission id missing in URL."})}},58603:(e,t,s)=>{"use strict";var a=s(99027);s.o(a,"useParams")&&s.d(t,{useParams:function(){return a.useParams}}),s.o(a,"usePathname")&&s.d(t,{usePathname:function(){return a.usePathname}}),s.o(a,"useRouter")&&s.d(t,{useRouter:function(){return a.useRouter}}),s.o(a,"useSearchParams")&&s.d(t,{useSearchParams:function(){return a.useSearchParams}})},95034:(e,t,s)=>{Promise.resolve().then(s.bind(s,47276))}},e=>{e.O(0,[2463,2196,7358],()=>e(e.s=95034)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4345],{89350:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>d});var t=a(55539),l=a(58603),n=a(1369);function d(){let e=(0,l.usePathname)();return(0,t.jsx)("main",{"data-testid":"not-found",className:"min-h-screen bg-gradient-to-b from-background via-background to-muted/40 px-6 py-12 sm:px-10",children:(0,t.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-10",children:[(0,t.jsxs)("header",{className:"flex flex-col gap-3",children:[(0,t.jsx)("p",{className:"text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground",children:"elanous PWA"}),(0,t.jsx)("h1",{className:"text-3xl font-bold leading-tight sm:text-4xl",children:"여기엔 없습니다"}),(0,t.jsxs)("p",{className:"text-sm text-muted-foreground",children:[(0,t.jsx)("code",{children:e||"알 수 없는 주소"})," 주소는 이 앱에 없습니다. 아래에서 지금 갈 수 있는 곳을 선택하거나 참고 주소의 사유를 확인하세요."]})]}),(0,t.jsx)(n.QL,{ariaLabel:"이동 가능한 주소와 참고 주소"})]})})}},95851:(e,s,a)=>{Promise.resolve().then(a.bind(a,89350))}},e=>{e.O(0,[211,3324,3558,5994,5977,224,2463,2196,7358],()=>e(e.s=95851)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6997],{3704:(e,t,s)=>{"use strict";s.d(t,{A:()=>d});var n=s(46124);let r=function(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return t.filter((e,t,s)=>!!e&&""!==e.trim()&&s.indexOf(e)===t).join(" ").trim()},a=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,s)=>s?s.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var l={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let i=(0,n.createContext)({}),o=(0,n.forwardRef)((e,t)=>{var s,a,o;let{color:d,size:c,strokeWidth:u,absoluteStrokeWidth:m,className:p="",children:x,iconNode:h,...f}=e,{size:g=24,strokeWidth:b=2,absoluteStrokeWidth:k=!1,color:v="currentColor",className:j=""}=null!=(s=(0,n.useContext)(i))?s:{},y=(null!=m?m:k)?24*Number(null!=u?u:b)/Number(null!=c?c:g):null!=u?u:b;return(0,n.createElement)("svg",{ref:t,...l,width:null!=(a=null!=c?c:g)?a:l.width,height:null!=(o=null!=c?c:g)?o:l.height,stroke:null!=d?d:v,strokeWidth:y,className:r("lucide",j,p),...!x&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(f)&&{"aria-hidden":"true"},...f},[...h.map(e=>{let[t,s]=e;return(0,n.createElement)(t,s)}),...Array.isArray(x)?x:[x]])}),d=(e,t)=>{let s=(0,n.forwardRef)((s,l)=>{let{className:i,...d}=s;return(0,n.createElement)(o,{ref:l,iconNode:t,className:r("lucide-".concat(a(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),i),...d})});return s.displayName=a(e),s}},5997:(e,t,s)=>{"use strict";s.d(t,{Zr:()=>l,f6:()=>r,oD:()=>a});let n="elanous.daemon.sessionId";function r(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=r();return localStorage.setItem(n,t),t}function l(){let e=r();return localStorage.setItem(n,e),e}},15151:(e,t,s)=>{"use strict";s.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var n=s(55539),r=s(46124),a=s(8101),l=s(5997),i=s(18060),o=s(72215);let d=(0,r.createContext)(null);function c(e){let{children:t}=e,s={baseUrl:"",token:"",provider:""},[c,u]=(0,r.useState)(s),[m,p]=(0,r.useState)(""),[x]=(0,r.useState)(()=>new i.ki(s));(0,r.useEffect)(()=>{let e=(0,a.Fp)();u(e),x.updateConfig(e),p((0,l.oD)()),(0,o.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[x]),(0,r.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();x.updateConfig(t),u(t),(0,o.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(t=>t===e.newValue?t:((0,o.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[x]);let h=e=>{u(t=>{let s={...t,...e};return(0,a.Qc)(e),x.updateConfig(s),(0,o.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),s})},f=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,o.cY)("webterm.provider.daemon.session-set",{sessionId:e})},g=(0,r.useMemo)(()=>({config:c,setConfig:h,client:x,sessionId:m,setSessionId:f}),[c,x,m]);return(0,n.jsx)(d.Provider,{value:g,children:t})}function u(){let e=(0,r.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},18705:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>x});var n=s(55539),r=s(46124),a=s(43691);let l={live:"live",unknown:"unknown",inactive:"inactive"},i={running:"running","probable-running":"probably running","ended-unclosed":"ended, not closed",unknown:"run state unknown"};function o(e){let{label:t,present:s}=e;return(0,n.jsxs)("span",{className:"rounded-full px-2 py-0.5 text-[10px] ".concat(s?"bg-primary/10 text-primary":"bg-muted text-muted-foreground"),children:[t,": ",s?"present":"absent"]})}function d(e){var t,s,l;let{ptyIds:i,onRefresh:o}=e,[d,c]=(0,r.useState)(null!=(t=i[0])?t:""),[u,m]=(0,r.useState)({kind:"loading",ptyId:null!=(s=i[0])?s:""}),[p,x]=(0,r.useState)(0),[h,f]=(0,r.useState)({kind:"idle"}),g=(0,r.useRef)(null),b=i.includes(d)?d:null!=(l=i[0])?l:"",k=u.ptyId===b?u:{kind:"loading",ptyId:b},v="pending"===h.kind,j="idle"===h.kind||h.ptyId===b?h:{kind:"idle"},y="pending"===j.kind;return(0,r.useEffect)(()=>{c(e=>{var t;return i.includes(e)?e:null!=(t=i[0])?t:""})},[i]),(0,r.useEffect)(()=>{if(!b)return;let e=new AbortController;return m({kind:"loading",ptyId:b}),fetch((0,a.xV)(b),{signal:e.signal}).then(async t=>{if(!t.ok)throw Error("GET ".concat((0,a.xV)(b)," failed (").concat(t.status,")"));let s=await t.json();if("string"!=typeof s.frame)throw Error("Terminal frame response did not contain text.");e.signal.aborted||m({kind:"success",ptyId:b,frame:s.frame})}).catch(t=>{e.signal.aborted||m({kind:"error",ptyId:b,message:t instanceof Error?t.message:"Terminal frame request failed."})}),()=>e.abort()},[b,p]),(0,r.useEffect)(()=>(f(e=>"pending"===e.kind&&e.ptyId!==b?{kind:"idle"}:e),()=>{var e;null==(e=g.current)||e.abort(),g.current=null}),[b]),(0,n.jsxs)("div",{className:"space-y-2 rounded-md bg-surface-elevated p-3","data-testid":"terminal-frame-panel",children:[i.length>1&&(0,n.jsxs)("label",{className:"flex w-fit items-center gap-2 text-xs",children:["PTY",(0,n.jsx)("select",{value:b,onChange:e=>c(e.target.value),"aria-label":"Select terminal PTY",disabled:v,children:i.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})]}),b&&(0,n.jsxs)("div",{className:"space-y-1","data-testid":"terminal-takeover",children:[(0,n.jsx)("button",{type:"button",className:"text-xs underline","aria-label":"Take over PTY ownership","data-testid":"terminal-takeover-button",disabled:y,onClick:()=>{var e;if(!b||v)return;null==(e=g.current)||e.abort();let t=new AbortController;g.current=t,f({kind:"pending",ptyId:b}),(0,a.HS)(b,globalThis.fetch,{signal:t.signal}).then(e=>{if(!t.signal.aborted){if(e.ok){f({kind:"success",ptyId:e.ptyId}),x(e=>e+1),null==o||o();return}f({kind:"error",ptyId:e.ptyId,failureKind:e.kind,message:e.message})}})},children:y?"Taking over ownership…":"Take over ownership"}),"pending"===j.kind&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",role:"status","data-testid":"terminal-takeover-pending",children:"Taking over ownership…"}),"success"===j.kind&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",role:"status","data-testid":"terminal-takeover-success",children:"Ownership transferred. Observation refreshed."}),"error"===j.kind&&(0,n.jsx)("p",{className:"text-xs text-destructive",role:"alert","data-testid":"terminal-takeover-error","data-takeover-kind":j.failureKind,children:j.message})]}),"loading"===k.kind&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",role:"status",children:"Loading terminal frame…"}),"error"===k.kind&&(0,n.jsxs)("p",{className:"text-xs text-destructive",role:"alert",children:["Unable to load terminal frame: ",k.message]}),"success"===k.kind&&(0,n.jsx)("pre",{className:"max-h-80 overflow-auto whitespace-pre-wrap break-words rounded bg-background p-3 font-mono text-xs","data-testid":"terminal-frame",children:k.frame||"(Terminal frame is empty.)"})]})}function c(e){let{subject:t,onRefresh:s}=e,[l,i]=(0,r.useState)(!1),o="terminal-frame-".concat(encodeURIComponent(t.id)),c=t.screen.ptyIds;return(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["screen: ",c.length," PTY \xb7 ",t.screen.liveCount," live"]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsx)("button",{type:"button",className:"text-xs underline","aria-expanded":l,"aria-controls":o,onClick:()=>i(e=>!e),children:l?"Hide terminal frame":"Show terminal frame"}),(0,n.jsx)("a",{className:"text-xs underline",href:(0,a.GG)(),children:"Open terminal inspector"})]}),l&&(0,n.jsx)("div",{id:o,children:(0,n.jsx)(d,{ptyIds:c,onRefresh:s})})]})}function u(e){let{subjects:t,runningRuns:s,scope:d,includeIsolatedInstances:u=!1,onIncludeIsolatedInstancesChange:m,progressBySubject:p=new Map,onRefresh:x}=e,[h,f]=(0,r.useState)(!1),g=(0,a.U$)(t,h);return(0,n.jsxs)("section",{className:"space-y-3","aria-label":"Observatory subjects",children:[s&&(0,n.jsxs)("p",{className:"text-sm text-muted-foreground","data-testid":"running-runs-summary",children:["Server run count: ",s.running," running, ",s["probable-running"]," probable-running"," ","(counted statuses: ",s.countedStatuses.join(", "),")"]}),(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsxs)("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm",children:[(0,n.jsx)("input",{type:"checkbox",checked:u,onChange:e=>null==m?void 0:m(e.target.checked),"aria-label":"Include isolated instances"}),"Include isolated instances: ",u?"included":"local only"]}),d&&(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","data-testid":"observatory-scope",children:["Observation scope: ",d.domain,"; ",d.roots," root",1===d.roots?"":"s","; ",d.federated?"federated":"local only","; ",d.hiddenDead," dead hidden",void 0===d.hiddenSubAgentRuns?"":"; ".concat(d.hiddenSubAgentRuns," sub-agent runs hidden")]})]}),(0,n.jsxs)("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm",children:[(0,n.jsx)("input",{type:"checkbox",checked:h,onChange:e=>f(e.target.checked)}),"Show all subjects"]}),0===g.length?(0,n.jsx)("p",{className:"rounded-md border border-border p-4 text-sm text-muted-foreground","data-testid":"subject-list-empty",children:0===t.length?"No observation subjects reported.":"No live or unknown subjects. Turn on Show all subjects to include inactive subjects."}):(0,n.jsx)("ul",{className:"space-y-2","data-testid":"subject-list",children:g.map(e=>{let t=(0,a.XG)(e),s=(0,a.t_)(e),r=p.get(e.id);return(0,n.jsxs)("li",{className:"space-y-2 rounded-md border border-border p-3","data-status":s,children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"font-mono text-sm",children:e.runId||e.id}),(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["origin: ",e.origin]})]}),(0,n.jsx)("span",{className:"rounded-full bg-surface-elevated px-2 py-0.5 text-[10px] font-medium uppercase",children:l[s]})]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-1","aria-label":"Subject surfaces",children:[(0,n.jsx)(o,{label:"\uD83D\uDDE3️ talk",present:t.talk}),(0,n.jsx)(o,{label:"\uD83D\uDDA5️ screen",present:t.screen}),(0,n.jsx)(o,{label:"\uD83E\uDD16 agent",present:t.agent})]}),e.run&&(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","data-testid":"subject-run-assessment","data-run-status":e.run.status,children:["run: ",i[e.run.status]," — reason: ",e.run.reason," (presence: ",e.run.presence,")"]}),(null==r?void 0:r.kind)==="no-screen"&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"progress: no screen"}),(null==r?void 0:r.kind)==="no-progress"&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"progress: no progress reported"}),(null==r?void 0:r.kind)==="progress"&&(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["progress (",r.ptyId,"): ",r.status," — ",r.line,r.hasMissingFrames?" (missing frames)":""]}),t.screen&&(0,n.jsx)(c,{subject:e,onRefresh:x})]},e.id)})})]})}var m=s(2699);let p=new(s(18060)).ki({baseUrl:"",token:"",provider:""});function x(){let[e,t]=(0,r.useState)(null),[s,l]=(0,r.useState)(),[i,o]=(0,r.useState)(),[d,c]=(0,r.useState)(!1),[x,h]=(0,r.useState)(new Map),[f,g]=(0,r.useState)(null),[b,k]=(0,r.useState)(0);return(0,r.useEffect)(()=>{let e=!1;return(async()=>{try{var s,n;let[r,i]=await Promise.all([fetch((0,a.h7)(d)).then(async e=>{if(!e.ok)throw Error("GET ".concat((0,a.h7)(d)," failed (").concat(e.status,")"));return e.json()}),p.listProgressFrames().catch(()=>null)]);if(e)return;let c=null!=(s=r.subjects)?s:[];g(null),t(c),l(r.runningRuns),o(r.scope),h((0,a.vq)(c,i?(0,m.gA)(null!=(n=i.logs)?n:[]):new Map))}catch(t){e||g(t instanceof Error?t.message:"Failed to load observation subjects")}})(),()=>{e=!0}},[d,b]),(0,n.jsxs)("main",{className:"mx-auto max-w-4xl space-y-4 p-6",children:[(0,n.jsxs)("header",{className:"space-y-1",children:[(0,n.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Observatory"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Subject-level view of talk, screen, and agent observation surfaces."}),(0,n.jsx)("button",{type:"button",className:"text-sm underline",onClick:()=>{(0,a.L4)()},children:"Open new terminal"})]}),f?(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsx)("p",{role:"alert",className:"rounded-md border border-error/40 bg-error/5 p-3 text-sm text-error",children:f}),(0,n.jsxs)("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm",children:[(0,n.jsx)("input",{type:"checkbox",checked:d,onChange:e=>c(e.target.checked),"aria-label":"Include isolated instances"}),"Include isolated instances: ",d?"included":"local only"]})]}):null===e?(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Loading observation subjects…"}):(0,n.jsx)(u,{subjects:e,runningRuns:s,scope:i,includeIsolatedInstances:d,onIncludeIsolatedInstancesChange:c,progressBySubject:x,onRefresh:()=>k(e=>e+1)})]})}},27143:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(3704).A)("messages-square",[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]])},51748:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(3704).A)("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]])},53709:(e,t,s)=>{Promise.resolve().then(s.bind(s,18705))},53987:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(3704).A)("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]])},82142:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(3704).A)("minimize-2",[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]])}},e=>{e.O(0,[8060,2699,2463,2196,7358],()=>e(e.s=53709)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6231],{5997:(e,n,r)=>{"use strict";r.d(n,{Zr:()=>o,f6:()=>l,oD:()=>s});let t="elanous.daemon.sessionId";function l(){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 s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(t,e),e):localStorage.getItem(t)}();if(e)return e;let n=l();return localStorage.setItem(t,n),n}function o(){let e=l();return localStorage.setItem(t,e),e}},13755:(e,n,r)=>{Promise.resolve().then(r.bind(r,40140))},15151:(e,n,r)=>{"use strict";r.d(n,{C:()=>u,DaemonProvider:()=>i,Q:()=>c});var t=r(55539),l=r(46124),s=r(8101),o=r(5997),a=r(18060),d=r(72215);let u=(0,l.createContext)(null);function i(e){let{children:n}=e,r={baseUrl:"",token:"",provider:""},[i,c]=(0,l.useState)(r),[m,v]=(0,l.useState)(""),[f]=(0,l.useState)(()=>new a.ki(r));(0,l.useEffect)(()=>{let e=(0,s.Fp)();c(e),f.updateConfig(e),v((0,o.oD)()),(0,d.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,l.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let n=(0,s.Fp)();f.updateConfig(n),c(n),(0,d.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!n.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&v(n=>n===e.newValue?n:((0,d.cY)("webterm.provider.daemon.session-cross-tab",{previous:n||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let y=e=>{c(n=>{let r={...n,...e};return(0,s.Qc)(e),f.updateConfig(r),(0,d.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},p=e=>{v(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,d.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,l.useMemo)(()=>({config:i,setConfig:y,client:f,sessionId:m,setSessionId:p}),[i,f,m]);return(0,t.jsx)(u.Provider,{value:b,children:n})}function c(){let e=(0,l.useContext)(u);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},40140:(e,n,r)=>{"use strict";r.d(n,{ReleaseRunsView:()=>d});var t=r(55539),l=r(46124),s=r(15151),o=r(43537);function a(e){var n;let{result:r,version:l,versions:s=[],selectedRunId:o,openedNodeId:a,log:d,onVersion:u,onRun:i,onNode:c}=e;if((null==r?void 0:r.kind)==="forbidden"||(null==d?void 0:d.kind)==="forbidden")return(0,t.jsx)("p",{children:"운영자만 볼 수 있습니다"});let m=(null==r?void 0:r.kind)==="ready"?r.data:[],v=l?m.filter(e=>e.version===l):m,f=null!=(n=v.find(e=>e.runId===o))?n:v[0],y=[...new Set([...s,...m.map(e=>e.version).filter(e=>!!e)])];l&&!y.includes(l)&&y.push(l);let p=f&&function(e){let n=e.path.find(n=>{var r;return(null==(r=e.nodes.find(e=>e.nodeId===n))?void 0:r.ok)===null});return null!=n?n:e.path.at(-1)}(f);return(0,t.jsxs)("main",{className:"mx-auto w-full min-w-0 max-w-4xl space-y-6 overflow-x-hidden px-4 py-6 text-foreground",children:[(0,t.jsxs)("header",{className:"space-y-1",children:[(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"운영 / 릴리스"}),(0,t.jsx)("h1",{className:"text-2xl font-semibold",children:"릴리스"})]}),(0,t.jsxs)("label",{className:"block space-y-2 text-sm font-medium",children:["판",(0,t.jsx)("input",{"aria-label":"판",list:"ops-release-versions",className:"block w-full max-w-xs rounded-md border bg-background p-2",value:l,onChange:e=>u(e.target.value),placeholder:"전체 판"}),(0,t.jsx)("datalist",{id:"ops-release-versions",children:y.map(e=>(0,t.jsx)("option",{value:e},e))})]}),null===r?(0,t.jsx)("p",{role:"status",children:"런을 불러오는 중…"}):"error"===r.kind?(0,t.jsxs)("p",{role:"alert",children:["런을 불러오지 못했습니다 (",r.status,")"]}):null,(null==r?void 0:r.kind)==="ready"&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("section",{className:"min-w-0 space-y-2","aria-label":"런 목록",children:[(0,t.jsx)("h2",{className:"font-semibold",children:"런 목록"}),0===v.length&&(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"이 판의 런이 없습니다."}),v.map(e=>{var n;return(0,t.jsxs)("button",{type:"button","aria-pressed":(null==f?void 0:f.runId)===e.runId,onClick:()=>i(e.runId),className:"block w-full min-w-0 rounded-md border p-3 text-left hover:bg-muted aria-pressed:border-primary",children:[(0,t.jsxs)("span",{className:"block truncate font-medium",children:[null!=(n=e.version)?n:"판 미상"," \xb7 ",e.status]}),(0,t.jsx)("time",{className:"block break-all text-sm text-muted-foreground",dateTime:e.startedAt,children:e.startedAt})]},e.runId)})]}),f&&(0,t.jsxs)("section",{className:"min-w-0 space-y-2","aria-label":"노드 진행",children:[(0,t.jsx)("h2",{className:"font-semibold",children:"노드 진행"}),f.path.map((e,n)=>{let r=f.nodes.find(n=>n.nodeId===e),l=a===e;return(0,t.jsxs)("div",{className:"min-w-0 rounded-md border",children:[(0,t.jsxs)("button",{type:"button","aria-expanded":l,onClick:()=>c(e),className:"flex w-full min-w-0 items-start gap-2 p-3 text-left hover:bg-muted",children:[(0,t.jsx)("span",{"aria-label":(null==r?void 0:r.ok)===!0?"성공":(null==r?void 0:r.ok)===!1?"실패":"진행 대기",children:(null==r?void 0:r.ok)===!0?"✅":(null==r?void 0:r.ok)===!1?"❌":"⏳"}),(0,t.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,t.jsxs)("span",{className:"block break-all font-medium",children:[e," ",e===p&&(0,t.jsx)("strong",{className:"text-sm text-primary",children:"지금 위치"})]}),(null==r?void 0:r.summary)&&(0,t.jsx)("span",{className:"block break-all text-sm text-muted-foreground",children:r.summary})]})]}),l&&(0,t.jsx)("div",{className:"min-w-0 border-t p-3",children:(null==d?void 0:d.kind)==="ready"?(0,t.jsx)("pre",{className:"max-w-full overflow-x-auto whitespace-pre font-mono text-xs","aria-label":"노드 로그",children:d.data.log}):(0,t.jsx)("p",{role:"status",className:"text-sm",children:(null==d?void 0:d.kind)==="error"?"로그를 불러오지 못했습니다 (".concat(d.status,")"):"로그를 불러오는 중…"})})]},"".concat(e,"-").concat(n))})]})]})]})}function d(){var e,n;let{client:r}=(0,s.Q)(),[d,u]=(0,l.useState)(null),[i,c]=(0,l.useState)([]),[m,v]=(0,l.useState)(null),[f,y]=(0,l.useState)(null),[p,b]=(0,l.useState)(null),[h,k]=(0,l.useState)(null),[w,x]=(0,l.useState)(null),[g,I]=(0,l.useState)(!1),j=(0,l.useRef)(0),N=(0,l.useRef)(!1),A=(0,l.useRef)(null),S=(0,l.useRef)([]),C=(0,l.useRef)(r);(0,l.useEffect)(()=>{let e=!0;return(C.current!==r&&(C.current=r,N.current=!1,I(!1),c([]),A.current=null,v(null)),N.current)?()=>{e=!1}:(j.current++,k(null),x(null),y(null),S.current=[],null===d&&(A.current=null,v(null)),(0,o.oc)(r,d||void 0).then(n=>{if(e&&!N.current&&(y(n),"forbidden"===n.kind&&(N.current=!0,I(!0)),"ready"===n.kind)&&(S.current=n.data,c(e=>[...new Set([...e,...n.data.map(e=>e.version).filter(e=>!!e)])]),null===d&&null===A.current)){var r,t;A.current=null!=(t=null==(r=n.data[0])?void 0:r.version)?t:null,v(A.current)}}),()=>{e=!1})},[r,d]);let R=!g&&((null==f?void 0:f.kind)==="ready"||(null==f?void 0:f.kind)==="error")&&S.current.some(e=>!["completed","failed","cancelled","aborted","success","error"].includes(e.status.toLowerCase()));(0,l.useEffect)(()=>{if(!R)return;let e=!0,n=!1,t=async()=>{if(n||document.hidden||!e||N.current||!S.current.some(e=>!["completed","failed","cancelled","aborted","success","error"].includes(e.status.toLowerCase())))return;n=!0;let t=await (0,o.oc)(r,d||void 0);n=!1,e&&!N.current&&(y(t),"ready"===t.kind&&(S.current=t.data),"forbidden"===t.kind&&(N.current=!0,I(!0)))},l=window.setInterval(()=>{t()},1e4),s=()=>{document.hidden||t()};return document.addEventListener("visibilitychange",s),()=>{e=!1,window.clearInterval(l),document.removeEventListener("visibilitychange",s)}},[r,d,R]);let U=null===d?m:d,E=(null==f?void 0:f.kind)==="ready"?null!=(e=f.data.find(e=>e.runId===p&&(!U||e.version===U)))?e:f.data.find(e=>!U||e.version===U):void 0,D=null!=(n=null!=U?U:null==E?void 0:E.version)?n:"",O=null==E?void 0:E.runId;(0,l.useEffect)(()=>{j.current++,k(null),x(null)},[O]);let L=(0,l.useCallback)(e=>{(e!==m||null!==d)&&(j.current++,v(null),u(e),b(null),k(null),x(null))},[d,m]);if(g)return(0,t.jsx)("p",{children:"운영자만 볼 수 있습니다"});let P=h&&h.runId===O?h.nodeId:null,T=w&&w.runId===O&&w.nodeId===P?w.result:null;return(0,t.jsx)(a,{result:f,version:D,versions:i,selectedRunId:p,openedNodeId:P,log:T,onVersion:L,onRun:e=>{j.current++,b(e),k(null),x(null)},onNode:e=>{if(!E||(null==f?void 0:f.kind)!=="ready")return;let n=++j.current,t=E.runId;if((null==h?void 0:h.runId)===t&&h.nodeId===e){k(null),x(null);return}k({runId:t,nodeId:e}),x(null),(0,o.Kh)(r,t,e).then(r=>{n!==j.current||N.current||("forbidden"===r.kind&&(N.current=!0,I(!0)),x({runId:t,nodeId:e,result:r}))})}})}},43537:(e,n,r)=>{"use strict";function t(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function l(e){return"string"==typeof e}function s(e){return l(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function o(e){return t(e)&&l(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&l(e.summary)}function a(e){return t(e)&&l(e.runId)&&l(e.status)&&l(e.startedAt)&&(null===e.version||l(e.version))&&Array.isArray(e.path)&&e.path.every(l)&&Array.isArray(e.nodes)&&e.nodes.every(o)}function d(e){return t(e)&&l(e.id)&&l(e.title)&&l(e.status)&&(void 0===e.owner||l(e.owner))&&l(e.updatedAt)&&(void 0===e.evidence||l(e.evidence))}r.d(n,{HG:()=>p,Kh:()=>y,Nn:()=>v,oc:()=>f});let u=e=>Number.isInteger(e)&&e>=0;function i(e){return t(e)&&l(e.id)&&l(e.title)&&(null===e.open||u(e.open))&&(null===e.landed||u(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>t(e)&&l(e.id)&&l(e.title)))}function c(e){return t(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||l(e.role))&&(null===e.now||t(e.now)&&l(e.now.text)&&l(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>t(e)&&u(e.pr)&&l(e.title)&&l(e.at)&&(null===e.checklistId||l(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>t(e)&&l(e.id)&&l(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||u(e.pendingDecisions))&&(null===e.checklist||t(e.checklist)&&["green","yellow","red","done"].every(n=>u(e.checklist[n])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(i))}async function m(e,n,r){try{let t=await e.fetchResponse(n,{method:"GET"});if(403===t.status)return{kind:"forbidden"};if(!t.ok)return{kind:"error",status:t.status};let l=r(await t.json());return null===l?{kind:"error",status:t.status}:{kind:"ready",data:l}}catch(e){return{kind:"error",status:0}}}function v(e,n){return m(e,"/v1/ops/seats".concat(n?"?date=".concat(encodeURIComponent(n)):""),e=>t(e)&&l(e.date)&&Array.isArray(e.seats)&&e.seats.every(c)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function f(e,n){return m(e,"/v1/ops/release/runs".concat(n?"?version=".concat(encodeURIComponent(n)):""),e=>Array.isArray(e)&&e.every(a)?e:null)}function y(e,n,r){return m(e,"/v1/ops/release/runs/".concat(encodeURIComponent(n),"/nodes/").concat(encodeURIComponent(r),"/log"),e=>t(e)&&l(e.log)?{log:e.log}:null)}function p(e,n){return m(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(n)),e=>{var n,r,o,a;if(!(t(e)&&l(e.version)&&(void 0===e.codename||l(e.codename))&&Array.isArray(e.items)&&e.items.every(d)&&["green","yellow","red","done"].every(n=>void 0===e[n]||Number.isInteger(e[n])&&e[n]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(l))&&(void 0===e.byOwner||t(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let u={green:0,yellow:0,red:0,done:0};for(let n of e.items)n.status in u&&u[n.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:t(e.schedule)&&s(e.schedule.cutAt)&&(null===e.schedule.landBy||s(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(n=e.green)?n:u.green,yellow:null!=(r=e.yellow)?r:u.yellow,red:null!=(o=e.red)?o:u.red,done:null!=(a=e.done)?a:u.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}}},e=>{e.O(0,[8060,2463,2196,7358],()=>e(e.s=13755)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2624],{5997:(e,n,t)=>{"use strict";t.d(n,{Zr:()=>a,f6:()=>l,oD:()=>s});let r="elanous.daemon.sessionId";function l(){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 s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(r,e),e):localStorage.getItem(r)}();if(e)return e;let n=l();return localStorage.setItem(r,n),n}function a(){let e=l();return localStorage.setItem(r,e),e}},6119:(e,n,t)=>{Promise.resolve().then(t.bind(t,99864))},15151:(e,n,t)=>{"use strict";t.d(n,{C:()=>i,DaemonProvider:()=>c,Q:()=>u});var r=t(55539),l=t(46124),s=t(8101),a=t(5997),o=t(18060),d=t(72215);let i=(0,l.createContext)(null);function c(e){let{children:n}=e,t={baseUrl:"",token:"",provider:""},[c,u]=(0,l.useState)(t),[m,p]=(0,l.useState)(""),[f]=(0,l.useState)(()=>new o.ki(t));(0,l.useEffect)(()=>{let e=(0,s.Fp)();u(e),f.updateConfig(e),p((0,a.oD)()),(0,d.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,l.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let n=(0,s.Fp)();f.updateConfig(n),u(n),(0,d.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!n.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(n=>n===e.newValue?n:((0,d.cY)("webterm.provider.daemon.session-cross-tab",{previous:n||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let b=e=>{u(n=>{let t={...n,...e};return(0,s.Qc)(e),f.updateConfig(t),(0,d.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),t})},h=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,d.cY)("webterm.provider.daemon.session-set",{sessionId:e})},v=(0,l.useMemo)(()=>({config:c,setConfig:b,client:f,sessionId:m,setSessionId:h}),[c,f,m]);return(0,r.jsx)(i.Provider,{value:v,children:n})}function u(){let e=(0,l.useContext)(i);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},37037:(e,n,t)=>{"use strict";t.d(n,{Es:()=>a,Wf:()=>l,q9:()=>s});let r=/\u{1F451}|`[^`]+`|\b(?=[0-9a-f]*\d)(?=[0-9a-f]*[a-f])[0-9a-f]{7,40}\b|\/Users\/|\/(?:home|root)\/|\/\.ssh\/|~\/\.elanous|elt_|\$\s*[-+]?\d[\d,.]*|run-[0-9a-f]{8}\b|\b(?:test|mirror):|\b(?:account|remote)-\d+\b|\bmsb\d+\b|\.ts\.net\b|\bgcpvm\b|user|[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/iu;function l(e){return!r.test(e)}function s(e){return(e.replace(/^\s*\*\*\[[A-Za-z]{1,4}\]\*\*\s*/,"").replace(/^(?:\{\{TS\}\}|\d{4}-\d{2}-\d{2}\s+\d{1,2}:\d{2}(?::\d{2})?\s*(?:KST)?)\s*/,"").replace(/^→\s*(?:(?:[A-Z]{2,4}|전원|전체)(?=[\s·,(]|$)[\s·,]*)+/u,"").replace(/^—\s*/,"").replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,"").trim()||e.trim()).replace(/\*\*/g,"")}function a(e){return e.replace(/#\d{4,6}\b/g,"PR")}},43537:(e,n,t)=>{"use strict";function r(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function l(e){return"string"==typeof e}function s(e){return l(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function a(e){return r(e)&&l(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&l(e.summary)}function o(e){return r(e)&&l(e.runId)&&l(e.status)&&l(e.startedAt)&&(null===e.version||l(e.version))&&Array.isArray(e.path)&&e.path.every(l)&&Array.isArray(e.nodes)&&e.nodes.every(a)}function d(e){return r(e)&&l(e.id)&&l(e.title)&&l(e.status)&&(void 0===e.owner||l(e.owner))&&l(e.updatedAt)&&(void 0===e.evidence||l(e.evidence))}t.d(n,{HG:()=>h,Kh:()=>b,Nn:()=>p,oc:()=>f});let i=e=>Number.isInteger(e)&&e>=0;function c(e){return r(e)&&l(e.id)&&l(e.title)&&(null===e.open||i(e.open))&&(null===e.landed||i(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&l(e.id)&&l(e.title)))}function u(e){return r(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||l(e.role))&&(null===e.now||r(e.now)&&l(e.now.text)&&l(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>r(e)&&i(e.pr)&&l(e.title)&&l(e.at)&&(null===e.checklistId||l(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&l(e.id)&&l(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||i(e.pendingDecisions))&&(null===e.checklist||r(e.checklist)&&["green","yellow","red","done"].every(n=>i(e.checklist[n])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(c))}async function m(e,n,t){try{let r=await e.fetchResponse(n,{method:"GET"});if(403===r.status)return{kind:"forbidden"};if(!r.ok)return{kind:"error",status:r.status};let l=t(await r.json());return null===l?{kind:"error",status:r.status}:{kind:"ready",data:l}}catch(e){return{kind:"error",status:0}}}function p(e,n){return m(e,"/v1/ops/seats".concat(n?"?date=".concat(encodeURIComponent(n)):""),e=>r(e)&&l(e.date)&&Array.isArray(e.seats)&&e.seats.every(u)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function f(e,n){return m(e,"/v1/ops/release/runs".concat(n?"?version=".concat(encodeURIComponent(n)):""),e=>Array.isArray(e)&&e.every(o)?e:null)}function b(e,n,t){return m(e,"/v1/ops/release/runs/".concat(encodeURIComponent(n),"/nodes/").concat(encodeURIComponent(t),"/log"),e=>r(e)&&l(e.log)?{log:e.log}:null)}function h(e,n){return m(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(n)),e=>{var n,t,a,o;if(!(r(e)&&l(e.version)&&(void 0===e.codename||l(e.codename))&&Array.isArray(e.items)&&e.items.every(d)&&["green","yellow","red","done"].every(n=>void 0===e[n]||Number.isInteger(e[n])&&e[n]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(l))&&(void 0===e.byOwner||r(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let i={green:0,yellow:0,red:0,done:0};for(let n of e.items)n.status in i&&i[n.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:r(e.schedule)&&s(e.schedule.cutAt)&&(null===e.schedule.landBy||s(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(n=e.green)?n:i.green,yellow:null!=(t=e.yellow)?t:i.yellow,red:null!=(a=e.red)?a:i.red,done:null!=(o=e.done)?o:i.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}},99864:(e,n,t)=>{"use strict";t.d(n,{SeatBoardView:()=>p});var r=t(55539),l=t(46124),s=t(15151),a=t(43537),o=t(37037);let d=[{seat:"OP",role:"COO"},{seat:"MK",role:"CMO"},{seat:"TC",role:"CTO"},{seat:"UX",role:"CXO"}];function i(e){return null===e?"못 읽음":String(e)}function c(e,n,t){let r=e.split(/\r?\n/);return n?r.filter(e=>(0,o.Wf)(e)&&!t.some(n=>e.includes(n))).map(o.Es):r}function u(e){var n,t,l,s,a,d;let{seat:u,role:m,publicCapture:p,identifiers:f}=e,b=null!=(n=null==u?void 0:u.landed)?n:null,h=null!=(t=null==u?void 0:u.blocked)?t:null,v=null!=(l=null==u?void 0:u.checklist)?l:null;return(0,r.jsxs)("article",{className:"min-w-0 space-y-5 rounded-2xl border bg-card p-5 shadow-sm","aria-label":"".concat(m," 자리"),children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("h2",{className:"text-3xl font-bold tracking-tight",children:m}),(0,r.jsx)("div",{className:"mt-3 min-h-12 break-words text-muted-foreground","aria-label":"지금 하는 일",children:(null==u?void 0:u.now)?c((0,o.q9)(u.now.text),p,f).map((e,n)=>(0,r.jsx)("p",{children:e},n)):"못 읽음"})]}),(0,r.jsxs)("section",{"aria-label":"오늘 착지",children:[(0,r.jsxs)("h3",{className:"font-semibold",children:["오늘 착지 ",(0,r.jsx)("strong",{className:"".concat(p?"text-5xl":"text-3xl"," ").concat(null===b?"text-muted-foreground":""),children:i(null!=(s=null==b?void 0:b.length)?s:null)})]}),b&&(0,r.jsx)("ul",{className:"mt-2 space-y-1",children:b.slice(-5).reverse().flatMap(e=>c(e.title,p,f).map((n,t)=>(0,r.jsx)("li",{className:"break-words",children:p?n:"#".concat(e.pr," \xb7 ").concat(n)},"".concat(e.pr,"-").concat(t))))})]}),(0,r.jsxs)("section",{"aria-label":"막힘",children:[(0,r.jsxs)("h3",{className:"font-semibold text-red-600 dark:text-red-400",children:["막힘 ",(0,r.jsx)("strong",{className:"".concat(p?"text-5xl":"text-3xl"," ").concat(null===h?"text-muted-foreground":""),children:i(null!=(a=null==h?void 0:h.length)?a:null)})]}),h&&(0,r.jsx)("ul",{className:"mt-2 space-y-1 text-red-600 dark:text-red-400",children:h.flatMap(e=>c(e.title,p,f).map((n,t)=>(0,r.jsx)("li",{className:"break-words",children:p?n:"".concat(e.id," \xb7 ").concat(n)},"".concat(e.id,"-").concat(t))))})]}),(0,r.jsxs)("p",{children:["대표 결정 대기 ",(0,r.jsx)("strong",{className:"".concat(p?"text-5xl":"text-3xl"," ").concat((null==u?void 0:u.pendingDecisions)==null?"text-muted-foreground":""),children:i(null!=(d=null==u?void 0:u.pendingDecisions)?d:null)})]}),(0,r.jsx)("section",{"aria-label":"칸 상태",className:"flex flex-wrap gap-2 border-t pt-3",children:v?(0,r.jsx)(r.Fragment,{children:["green","yellow","red","done"].map((e,n)=>(0,r.jsxs)("span",{"aria-label":"".concat(e," ").concat(v[e]),children:[["\uD83D\uDFE2","\uD83D\uDFE1","\uD83D\uDD34","✅"][n]," ",v[e]]},e))}):(0,r.jsx)("span",{className:"text-muted-foreground",children:"못 읽음"})}),(null==u?void 0:u.subSeats)&&u.subSeats.length>0&&(0,r.jsx)("ul",{"aria-label":"하위 자리",className:"space-y-1 border-t pt-3",children:u.subSeats.map(e=>{var n,t,l;let s="└ ".concat(e.id," ").concat(e.title," \xb7 열린 칸 ").concat(i(e.open)," \xb7 오늘 착지 ").concat(i(e.landed)," \xb7 막힘 ").concat(i(null!=(l=null==(n=e.blocked)?void 0:n.length)?l:null)),a=(null==(t=e.blocked)?void 0:t.length)?" \xb7 ".concat(e.blocked.map(e=>e.id).join(", ")):"",o=p?c(s,!0,f):[s],d=p?c(a,!0,f):[a];return o.map((n,t)=>(0,r.jsxs)("li",{className:"break-words",children:[n,d.join("")]},"".concat(e.id,"-").concat(t)))})})]})}function m(e){let{result:n,refreshedAt:t,publicCapture:l=!1}=e;if((null==n?void 0:n.kind)==="forbidden")return(0,r.jsx)("p",{children:"운영자만 볼 수 있습니다"});let s=(null==n?void 0:n.kind)==="ready"?n.data.seats:[],a=s.flatMap(e=>{var n,t,r;return[...(null!=(n=e.landed)?n:[]).flatMap(e=>[String(e.pr),...e.checklistId?[e.checklistId]:[]]),...(null!=(t=e.blocked)?t:[]).map(e=>e.id),...(null!=(r=e.subSeats)?r:[]).flatMap(e=>{var n;return(null!=(n=e.blocked)?n:[]).map(e=>e.id)})]});return(0,r.jsxs)("main",{className:"mx-auto w-full max-w-[1920px] space-y-6 p-4 text-foreground md:p-8 ".concat(l?"flex min-h-screen flex-col text-base":""),children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("p",{className:"text-muted-foreground",children:"운영 / 자리 현황"}),(0,r.jsx)("h1",{className:"text-3xl font-bold",children:"자리 현황"})]}),(0,r.jsxs)("section",{"aria-label":"오늘 합계",className:"flex flex-wrap items-center gap-x-8 gap-y-3 rounded-2xl border bg-card p-5",children:[["landed","blocked","pendingDecisions"].map(e=>{let t=(null==n?void 0:n.kind)!=="ready"||d.some(n=>{var t;let{seat:r}=n;return!s.find(e=>e.seat===r)||(null==(t=s.find(e=>e.seat===r))?void 0:t[e])===null})?"못 읽음":String(s.reduce((n,t)=>n+("pendingDecisions"===e?t.pendingDecisions:t[e].length),0));return(0,r.jsxs)("p",{children:["landed"===e?"오늘 착지":"blocked"===e?"막힘":"결정 대기"," ",(0,r.jsx)("strong",{className:"".concat(l?"text-5xl":"text-3xl").concat("못 읽음"===t?" text-muted-foreground":""),children:t})]},e)}),(0,r.jsxs)("p",{children:["마지막 갱신 ",(0,r.jsx)("time",{dateTime:null!=t?t:void 0,children:t?new Date(t).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"}):"못 읽음"})]})]}),null===n&&(0,r.jsx)("p",{role:"status",children:"자리 현황을 불러오는 중…"}),(null==n?void 0:n.kind)==="error"&&(0,r.jsxs)("p",{role:"alert",children:["자리 현황을 불러오지 못했습니다 (",n.status,")"]}),(null==n?void 0:n.kind)==="ready"&&(0,r.jsx)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 min-[1440px]:grid-cols-4",children:d.map(e=>{let{seat:n,role:t}=e;return(0,r.jsx)(u,{seat:s.find(e=>e.seat===n),role:t,publicCapture:l,identifiers:a},n)})}),l&&(0,r.jsx)("footer",{className:"mt-auto border-t pt-4 text-center font-semibold tracking-wide",children:"PUBLIC CAPTURE \xb7 가린 화면"})]})}function p(){let{client:e}=(0,s.Q)(),[n,t]=(0,l.useState)(null),[o,d]=(0,l.useState)(null),[i,c]=(0,l.useState)(null);return((0,l.useEffect)(()=>{c("public"===new URLSearchParams(window.location.search).get("capture"))},[]),(0,l.useEffect)(()=>{let n=!0,r=!1,l=!1,s=async()=>{if(!n||r||l||document.hidden)return;r=!0;let s=new Intl.DateTimeFormat("sv-SE",{timeZone:"Asia/Seoul"}).format(new Date),o=await (0,a.Nn)(e,s);r=!1,n&&(t(o),"forbidden"===o.kind&&(l=!0),"ready"===o.kind&&d(new Date().toISOString()))};t(null),d(null),s();let o=window.setInterval(()=>{s()},3e4),i=()=>{document.hidden||s()};return document.addEventListener("visibilitychange",i),()=>{n=!1,window.clearInterval(o),document.removeEventListener("visibilitychange",i)}},[e]),null===i)?null:(0,r.jsx)(m,{result:n,refreshedAt:o,publicCapture:i})}}},e=>{e.O(0,[8060,2463,2196,7358],()=>e(e.s=6119)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8974],{97897:(e,s,_)=>{Promise.resolve().then(_.bind(_,1369))}},e=>{e.O(0,[211,3324,3558,5994,5977,224,2463,2196,7358],()=>e(e.s=97897)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1718],{39713:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>r});var a=s(55539),i=s(46124),c=s(42827);class l extends Error{constructor(e,t,s){super("devices ".concat(e," on ").concat(t)),this.status=e,this.path=t,this.body=s,this.name="DevicesApiError"}}function n(e){let{api:t}=e,[s,c]=(0,i.useState)(null),[n,r]=(0,i.useState)(null),[o,d]=(0,i.useState)(!0);return((0,i.useEffect)(()=>{let e=!1;return t.fleet().then(t=>{e||(c(t),d(!1))}).catch(t=>{e||(r(t instanceof l?"(".concat(t.status,") ").concat(t.path):String(t)),d(!1))}),()=>{e=!0}},[t]),o)?(0,a.jsx)("div",{className:"text-sm opacity-70",children:"Loading device fleet…"}):n?(0,a.jsx)("div",{role:"alert",className:"rounded bg-rose-50 px-3 py-2 text-sm text-rose-900",children:n}):s?0===s.totalDevices?(0,a.jsxs)("div",{className:"rounded border border-zinc-200 bg-zinc-50 p-4 text-sm",children:[(0,a.jsx)("p",{className:"font-medium",children:"No Apple devices detected yet."}),(0,a.jsxs)("p",{className:"mt-1 opacity-70",children:["The iOS Companion writes ",(0,a.jsx)("code",{children:"~/.elanous/devices.json"})," on iCloud sync. Install it on at least one Apple device to populate this list."]})]}):(0,a.jsxs)("table",{className:"w-full text-sm",children:[(0,a.jsxs)("caption",{className:"text-xs opacity-60 text-left mb-2",children:["snapshot @ ",new Date(s.snapshotAt).toLocaleString()," \xb7 ",s.totalDevices," devices"]}),(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{className:"border-b border-zinc-200 text-xs uppercase tracking-wide opacity-70",children:[(0,a.jsx)("th",{className:"text-left py-1",children:"kind"}),(0,a.jsx)("th",{className:"text-right py-1",children:"count"}),(0,a.jsx)("th",{className:"text-left py-1 pl-3",children:"capabilities"})]})}),(0,a.jsx)("tbody",{children:s.kinds.map(e=>(0,a.jsxs)("tr",{className:"border-b border-zinc-100 align-top",children:[(0,a.jsx)("td",{className:"py-1 font-medium",children:e.kind}),(0,a.jsx)("td",{className:"py-1 text-right tabular-nums",children:e.count}),(0,a.jsx)("td",{className:"py-1 pl-3 text-xs",children:0===e.capabilities.length?(0,a.jsx)("span",{className:"opacity-50",children:"(none advertised)"}):e.capabilities.map(e=>(0,a.jsx)("span",{className:"mr-1 inline-block rounded bg-zinc-100 px-1.5 py-0.5",children:e},e))})]},e.kind))})]}):(0,a.jsx)("div",{className:"text-sm opacity-70",children:"No fleet data."})}function r(){let e=(0,i.useMemo)(()=>(function(e){var t;let s=e.baseUrl.replace(/\/+$/,""),a=null!=(t=e.fetchImpl)?t:fetch;async function i(t,i){let c={"content-type":"application/json"};e.authHeader&&(c.authorization=e.authHeader);let n=await a("".concat(s).concat(t),{...i,headers:c}),r=await n.json().catch(()=>null);if(!n.ok)throw new l(n.status,t,r);return r}return{fleet:async()=>await i(c.WF),preview:async e=>await i(c.bR,{method:"POST",body:JSON.stringify(e)})}})({baseUrl:window.location.origin}),[]);return(0,a.jsxs)("section",{className:"flex flex-col gap-4 p-4",children:[(0,a.jsxs)("header",{children:[(0,a.jsx)("h1",{className:"text-lg font-semibold",children:"Device fleet"}),(0,a.jsx)("p",{className:"text-xs opacity-70",children:"Detected Apple devices \xb7 OMF v1 templates use this to decide which capabilities to fire vs gracefully degrade. iPhone-only fleets still get full template value via the fallback chain."})]}),(0,a.jsx)(n,{api:e})]})}},42827:(e,t,s)=>{"use strict";s.d(t,{GM:()=>n,J3:()=>l,WF:()=>a,bR:()=>c,m:()=>r,r5:()=>i});let a="/v1/devices",i="/v1/approvals/merges",c="/v1/templates/capability-preview",l="/v1/idle-nudge/preview",n="/v1/morning-digest/showroom",r="/v1/next-fluent/dispatch"},71006:(e,t,s)=>{Promise.resolve().then(s.bind(s,39713))}},e=>{e.O(0,[2463,2196,7358],()=>e(e.s=71006)),_N_E=e.O()}]);
|