elanous 0.2.31 → 0.2.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/chunks/{1834-50625904996a8fa8.js → 1834-98b64172bc1efe77.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/69-0a2c8209c6d4a158.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8097-9530c03bcc550f02.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-504204b58c82c253.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-3535a4a69f1fafaa.js → page-a9717a67c2eecbaf.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-5c9ec30aee62dfbf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-584191533721fa16.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-73c4b4bb3ac7ab5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/{page-5a503541353e60a8.js → page-c0f1ca371f710b06.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/{page-6025101384e361a5.js → page-46430d45a9e04eac.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-3b2ebf1dc64ff0be.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/{page-a645f00a06483e9a.js → page-a27b1e5a0d1b308f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-25654b82094f7d22.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/{page-e9bab7413b028b28.js → page-8ea49a4c6dd2c6e7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-ce5113aefea0a8d1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/{page-e547e6ce55f1fb33.js → page-0e5a41fac1c75396.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/field/{page-d27e1b9850fd54bf.js → page-31aaf1ed37c6df9a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-3dcc1fa411e1f4e0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/{page-0fec29c7ba01894b.js → page-c69247e7134d329d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/{layout-339a07410cd6f36b.js → layout-66dc5cd3a0999abe.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-26ff7ff651a7217d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-617b3976981efa96.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/{page-2fd93ed8c9f16580.js → page-d256f5d5d9552823.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/market/{page-9b564dbff0fefc35.js → page-ce8f1907b8a6101c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-33e182a316263116.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-814ba51385225776.js → page-32866485913d6a04.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/{not-found-397d479626e5a459.js → not-found-7607cca9b84950c6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/{page-af1bba4e3251b728.js → page-eeab86176b03dc3b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/{page-3ad3be5e7d3fdce9.js → page-5b93dbae3432b996.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-77a6cb90a9cf2b10.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/{page-4da93ad35d4a8d28.js → page-f47e768b5b242b5a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-eb41aa3367fc2505.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-4d13ab0b8a267e3f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-84dad32ff0fc0831.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-3a658d5fa6d16a25.js → page-95306f892aa2d0ee.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/{page-0157de6e85f8bb6b.js → page-940fb6c217f6b470.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/{page-0a07363b130182a1.js → page-8c66a3b24a745630.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/{page-841d73d4ac44ed49.js → page-7b675dfd35c36fc9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/{page-6f43a3d1146e6377.js → page-8bd0d3cf7665bcfc.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/{page-521ee23ac8c0abfa.js → page-c219f2ed171131be.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/share/{page-a9992ee285efaa83.js → page-40f8fa21bdae955b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/{page-3d48e85fa89ec04f.js → page-468f8313e4f1fbd9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-7bbb8fa353a246c4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-04d00ae9b0890349.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/{page-233c71cd5f68f0d7.js → page-4214b855d9233ea8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/{page-70151d78de2f375e.js → page-936752c7aa58762e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/{page-dcac33a3e2cb72c0.js → page-ec052ad359df1797.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-8305570551091338.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/{page-0448145ccd5c45c1.js → page-fad650e4793adb65.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-d90e64743826e1d8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-a16bcfd49af86a32.js +1 -0
- package/apps/pwa/out/_next/static/css/b5d88eba78a3d7bf.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +14 -14
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +14 -14
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +14 -14
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +14 -14
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +14 -14
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +14 -14
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +14 -14
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +14 -14
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +14 -14
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +14 -14
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +14 -14
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +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 +17 -14
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/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/implement-loop.yaml +5 -0
- package/package.json +1 -1
- package/scripts/ci-typecheck-changed.ts +26 -1
- package/scripts/measure-si-task-cpu.ts +143 -0
- package/scripts/ratchets/test-interference-patterns.allowlist.txt +0 -2
- package/scripts/release-loop/prepare-node.ts +102 -4
- package/src/acp/core-turn-bridge.ts +16 -4
- package/src/acp/elanous-extensions.ts +3 -0
- package/src/acp/server.ts +3 -0
- package/src/acp/tool-trace.ts +186 -11
- package/src/agent/self-ambient-cache.ts +156 -0
- package/src/agent/self-ambient.ts +8 -1
- package/src/agent/task-notification.ts +5 -0
- package/src/agent-substrate/pr-reviewer.ts +3 -1
- package/src/ask-user-question/tool.ts +22 -0
- package/src/autopilot/build/llm-conflict-merge.ts +56 -10
- package/src/autopilot/pr-manager.ts +23 -5
- package/src/capture/frame-state-detect.ts +39 -0
- package/src/capture/tui-self-report.ts +134 -6
- package/src/chat/index.ts +61 -15
- package/src/chat/pickers/modal-runtime.ts +6 -0
- package/src/chat/pickers/modals.ts +8 -2
- package/src/cli/ask-bare.ts +1 -0
- package/src/cli/import-cli.ts +12 -0
- package/src/cli/log-event-names.ts +10 -0
- package/src/cli/msg-cli.ts +1 -0
- package/src/cli/pod-cli.ts +14 -3
- package/src/cli/pr-cli.ts +67 -32
- package/src/cli/pr-land-base-read.ts +34 -0
- package/src/cli/pr-land-heavy-remote.ts +81 -25
- package/src/cli/pr-land-overlap-evidence.ts +46 -2
- package/src/cli/pr-land-pod-shadow-job.ts +26 -3
- package/src/cli/pr-land-refusal.ts +20 -5
- package/src/cli/pty-takeover-cli.ts +88 -14
- package/src/cli/sim-cli.ts +18 -0
- package/src/context-bus/ops-events.ts +6 -2
- package/src/core-turn/run-core-turn.ts +1 -0
- package/src/core-turn/run-goal-loop.ts +21 -0
- package/src/core-turn/types.ts +3 -0
- package/src/dashboard/acp-active-model.ts +42 -1
- package/src/dashboard/background-jobs-status.ts +66 -0
- package/src/dashboard/index.ts +117 -44
- package/src/dashboard/input/agent-wake.ts +242 -0
- package/src/dashboard/input/chat-main-entry-runtime.ts +5 -0
- package/src/dashboard/input/external-input-host.ts +23 -9
- package/src/dashboard/input/mouse-wiring.ts +108 -11
- package/src/dashboard/log-click-runtime.ts +118 -2
- package/src/dashboard/turn-preamble.ts +116 -40
- package/src/dashboard/turn-session-layers.ts +4 -2
- package/src/dashboard/turn-start-segments.ts +222 -0
- package/src/display/prompt-row-owner.ts +146 -0
- package/src/display/resize-listener.ts +33 -2
- package/src/fold-stack.ts +4 -2
- package/src/git-fs/index.ts +263 -36
- package/src/harness/gate-reserve.ts +87 -0
- package/src/harness/harness-incidents.ts +13 -0
- package/src/harness/harness-queue.ts +15 -0
- package/src/index.ts +8 -6
- package/src/input/external-input-queue.ts +34 -9
- package/src/llm/route-decision.ts +36 -0
- package/src/llm/tool-loop-steered-rejection.ts +8 -0
- package/src/llm-request-shape.ts +209 -0
- package/src/llm.ts +166 -267
- package/src/loops/orchestrator/tick.ts +24 -2
- package/src/maturity/feature-maturity.ts +1 -1
- package/src/mss/logging/render-categories.ts +5 -0
- package/src/ops/overview.ts +59 -2
- package/src/pr-tool/census.ts +19 -4
- package/src/pr-tool/inflight-registry.ts +143 -0
- package/src/pty-shell/pty-manifest.ts +12 -3
- package/src/pty-shell/tui-run-state.ts +34 -3
- package/src/seat-loop/traffic-signal.ts +2 -1
- package/src/self-dev/ask-launch-flow.ts +13 -0
- package/src/self-dev/draft-residue.ts +243 -24
- package/src/self-dev/shard-plan.ts +11 -3
- package/src/self-dev/shard-run.ts +103 -10
- package/src/self-implement/elanous-tui-spawn.ts +14 -0
- package/src/self-implement/follow-up-placement.ts +79 -0
- package/src/self-implement/gate-artifacts.ts +15 -4
- package/src/self-implement/gate-baseline.ts +96 -5
- package/src/self-implement/gate-cli.ts +7 -2
- package/src/self-implement/gate-remote.ts +26 -1
- package/src/self-implement/host-regate.ts +36 -4
- package/src/self-implement/orchestrator.ts +101 -11
- package/src/self-implement/run-ledger.ts +16 -14
- package/src/session-runtime/index.ts +22 -267
- package/src/shell-runner/background-surface.ts +15 -5
- package/src/skills/tools/agent.ts +39 -6
- package/src/skills/tools/list-dir.ts +11 -0
- package/src/skills/tools/schedule-wakeup.ts +408 -0
- package/src/skills/tools/shell.ts +245 -3
- package/src/status/bar.ts +26 -0
- package/src/steward/digest-delivery.ts +118 -0
- package/src/steward/hold-hygiene.ts +120 -0
- package/src/steward/triage.ts +10 -0
- package/src/surface/shell-runner-boot.ts +5 -2
- package/src/task-agent/task-hand.ts +24 -0
- package/src/task-orchestrator/surfaces/pod-command-job.ts +65 -11
- package/src/task-orchestrator/surfaces/pod-lease.ts +98 -0
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +1 -1
- package/src/task-orchestrator/surfaces/pod-pool.ts +3 -1
- package/src/task-orchestrator/surfaces/pod-reuse-cleanup.ts +10 -6
- package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +525 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-runner.ts +90 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +156 -2
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +7 -5
- package/src/tui/chat/execution-badge.ts +5 -1
- package/src/tui/input-lag-probe.ts +230 -0
- package/src/tui.ts +4 -0
- package/src/ux-sim/scenario.ts +255 -0
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/8097-92f87bd108322f66.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-bf3634a117322df7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-b9f51447f757fbf2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-2ebb8fd59b9461f9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-a2fc4e49a4fa4ba8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-f4b630cc8b5273cd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-61ac22cbab1ee4ec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-c992eafe028b642e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-805ac2e137b7a121.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-349f2752d8cd37ad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-d5c6dcf31c25cecc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-62f4475d3c38fb9b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-f219ccdbc0bf27df.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-456666766e5ce6fc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-7404e377e8adb8c5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-14456240ed2a36ad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-d2ced71132fac9b2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-f08358bdf251adb9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-149dc1caba411bb9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-9cb0c444903da65d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-17e504c396e0e389.js +0 -1
- package/apps/pwa/out/_next/static/css/3f5fc6f96e2cf7b2.css +0 -1
- /package/apps/pwa/out/_next/static/{LSXfY0u9QtfDbejY0Ukf_ → IVKr3AlRUVLKsw2fh7eXF}/_buildManifest.js +0 -0
- /package/apps/pwa/out/_next/static/{LSXfY0u9QtfDbejY0Ukf_ → IVKr3AlRUVLKsw2fh7eXF}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[69],{48720:()=>{},54568:(e,t,n)=>{"use strict";function a(e,t){var n,a,r;let l=[...new Set(t.map(e=>e.node))],o=new Map;for(let e=1;e<t.length;e+=1){let r=t[e-1],l=null!=(n=o.get(r.node))?n:{},s=null!=(a=r.outcome)?a:"pass";Object.values(l).includes(t[e].node)||(l[l[s]?"".concat(s,"\xb7").concat(t[e].node):s]=t[e].node),o.set(r.node,l)}return{id:e,source:"core",editable:!1,entry_node:null!=(r=l[0])?r:"",terminal_nodes:t.length?[t.at(-1).node]:[],nodes:l.map(e=>({node_id:e,kind:"agent",recipe:"원장에서 본 노드",max_visits:t.filter(t=>t.node===e).length})),edges:[...o.entries()].map(e=>{let[t,n]=e;return{from:t,on:"outcome",map:n}})}}function r(e,t){let n=new Set(e.nodes.map(e=>e.node_id)),a=[...new Set(t.map(e=>e.node))].filter(e=>!n.has(e)),r=t=>e.edges.filter(e=>e.from===t).flatMap(e=>e.map?Object.values(e.map):e.to?[e.to]:[]),l=[];for(let e=1;e<t.length;e+=1){let n=t[e-1].node,a=t[e].node;r(n).includes(a)||l.some(e=>e.from===n&&e.to===a)||l.push({from:n,to:a})}return 0===a.length&&0===l.length?e:{...e,nodes:[...e.nodes,...a.map(e=>({node_id:e,kind:"agent",recipe:"원장에서 본 노드(선언 밖)",max_visits:t.filter(t=>t.node===e).length}))],edges:[...e.edges,...l]}}function l(e){switch(e){case"running":return"● 도는 중";case"completed":return"완료";case"failed":return"실패";case"abandoned":return"버려짐";case"cancelled":return"취소됨";default:return e}}function o(e,t){let n=e=>(function(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:60,a=(null!=(t=null==e?void 0:e.split("\n").map(e=>e.trim()).find(Boolean))?t:"").replace(/\s*\[truncated[^\]]*\]\s*$/,"").replace(/(?:~|\.{0,2})?\/?(?:[\w.@-]+\/)+([\w.@-]+)/g,"$1");return a.length>n?"".concat(a.slice(0,n-1),"…"):a})(e),a=[...e].sort((e,t)=>{var n,a;return Date.parse(null!=(n=t.lastActivityTimestamp)?n:"")-Date.parse(null!=(a=e.lastActivityTimestamp)?a:"")||0}).map(e=>{var t;return{runId:e.runId,label:n(e.objective)||e.runId,live:!0,at:null!=(t=e.lastActivityTimestamp)?t:null}}),r=new Set(a.map(e=>e.runId));return[...a,...t.filter(e=>!r.has(e.runId)).map(e=>({runId:e.runId,label:n(e.objective)||e.runId,live:!1,at:e.endedAt}))]}n.d(t,{D6:()=>r,Q:()=>a,az:()=>l,wk:()=>o})},75058:(e,t,n)=>{"use strict";n.d(t,{EQ:()=>a,F8:()=>l,Fi:()=>r,Oc:()=>d,S0:()=>o,Vc:()=>i,ws:()=>s});let a="group:",r=e=>e.startsWith(a);function l(e){let t=new Map;for(let n of e.nodes){let e="string"==typeof n.group?n.group.trim():"";e&&t.set(n.node_id,e)}return t}function o(e){return[...new Set(l(e).values())]}function s(e,t){let n=l(e),r=e=>{let r=n.get(e);return r&&t.has(r)?"".concat(a).concat(r):e};if(![...n.values()].some(e=>t.has(e)))return{graph:e,resolve:r};let o=[],s=new Set;for(let t of e.nodes){let a=r(t.node_id);if(s.has(a))continue;if(s.add(a),a===t.node_id){o.push(t);continue}let l=n.get(t.node_id),i=e.nodes.filter(e=>n.get(e.node_id)===l);o.push({node_id:a,kind:"subgraph",recipe:"묶음 \xb7 노드 ".concat(i.length,"개"),max_visits:Math.max(...i.map(e=>e.max_visits)),group:l})}let i=[];for(let t of e.edges){let e=r(t.from);if(t.map){let n={};for(let[a,l]of Object.entries(t.map)){let t=r(l);t!==e&&(n[a]=t)}Object.keys(n).length&&i.push({from:e,...t.on?{on:t.on}:{},map:n})}else if(t.to){let n=r(t.to);n!==e&&i.push({from:e,to:n})}}let d=[];for(let e of i){let t=d.find(t=>t.from===e.from&&!!t.map==!!e.map&&(e.map||t.to===e.to));if(!t){d.push(e.map?{...e,map:{...e.map}}:e);continue}if(e.map&&t.map)for(let[n,r]of Object.entries(e.map))n in t.map?t.map[n]===r||Object.values(t.map).includes(r)||(t.map["".concat(n,"\xb7").concat(r.replace(a,""))]=r):t.map[n]=r}let c=r(e.entry_node),u=[...new Set(e.terminal_nodes.map(r))];return{graph:{...e,entry_node:c,terminal_nodes:u,nodes:o,edges:d},resolve:r}}function i(e,t){let n=new Map;for(let l of e){var a;let e=t.get(l.id);!e||r(l.id)||n.set(e,[...null!=(a=n.get(e))?a:[],l])}return[...n.entries()].map(e=>{let[t,n]=e,a=Math.min(...n.map(e=>e.position.x)),r=Math.min(...n.map(e=>e.position.y)),l=Math.max(...n.map(e=>e.position.x+e.width)),o=Math.max(...n.map(e=>e.position.y+e.height));return{id:"box:".concat(t),group:t,members:n.map(e=>e.id),x:a-18,y:r-18-26,width:l-a+36,height:o-r+36+26}})}function d(e){return e.includes("running")?"running":e.includes("failed")?"failed":e.includes("passed")?"passed":"pending"}},87875:(e,t,n)=>{"use strict";n.d(t,{Xf:()=>o,aZ:()=>r,bB:()=>l,vV:()=>s});let a=new Set(["fail","failed","error","blocked","rejected","aborted","unconvergeable","timeout"]);function r(e,t,n,r){let l=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=Object.fromEntries(e.map(e=>[e,"pending"])),s={},i=new Set,d=null,c=Math.min(r,n.length-1);for(let e=0;e<=c;e+=1){var u,p;let r=n[e];if(s[r.node]=(null!=(u=s[r.node])?u:0)+1,o[r.node]=e===c&&l||null===(p=r.outcome)?"running":a.has(p.toLowerCase())?"failed":"passed",e>0){let a=n[e-1],l=function(e,t,n,a){var r;let l=e.filter(e=>e.from===t&&e.to===a);return 0===l.length?null:null!=(r=l.find(e=>null!==n&&e.outcomes.includes(n)))?r:l[0]}(t,a.node,a.outcome,r.node);l&&(i.add(l.id),e===c&&(d=l.id))}}return{nodeState:o,visits:s,takenEdges:i,activeEdge:d,cursor:c}}function l(e,t,n){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:900,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:4e3,l=e[t],o=e[t+1];if(!l||!o)return a/n;let s=Date.parse(o.at)-Date.parse(l.at);return(Number.isFinite(s)?Math.min(r,Math.max(a,s/60)):a)/Math.max(1,n)}function o(e){let t=Date.parse(e);return Number.isFinite(t)?new Date(t+324e5).toISOString().slice(11,19):"—"}function s(e){if(null===e||!Number.isFinite(e)||e<0)return"—";if(e<1e3)return"".concat(Math.round(e),"ms");let t=Math.round(e/1e3);if(t<60)return"".concat(t,"초");let n=Math.floor(t/60);return n<60?"".concat(n,"분 ").concat(t%60,"초"):"".concat(Math.floor(n/60),"시간 ").concat(n%60,"분")}},90069:(e,t,n)=>{"use strict";n.d(t,{Yd:()=>j});var a=n(65863),r=n(24815),l=n(85458),o=n(37343),s=n(1437);n(4265),n(89326),n(48720);var i=n(27346),d=n(94703),c=n(41026),u=n(87875),p=n(54568),m=n(75058),x=n(92579);let h={agent:"#3b82f6",gate:"#f59e0b",git:"#10b981",judge:"#a855f7",observe:"#06b6d4",hitl:"#f43f5e",subgraph:"#8b5cf6"},f={pending:"var(--border, #cbd5e1)",running:"#f59e0b",passed:"var(--chart-2, #16a34a)",failed:"var(--destructive, #ef4444)"},g={pending:"대기",running:"도는 중",passed:"통과",failed:"실패"},b={pending:"workflow-node-status",running:"workflow-node-status workflow-node-status-running",passed:"workflow-node-status workflow-node-status-done",failed:"workflow-node-status workflow-node-status-failed"},v=[1,4,16],y={live:function(e){var t;let{data:n}=e;return(0,a.jsxs)("div",{"data-testid":"live-node-".concat(n.label),"data-state":n.state,className:"relative rounded-lg border-2 bg-surface px-3 py-2 shadow-sm transition-opacity duration-300 ".concat(b[n.state]," ").concat("pending"===n.state?n.unrecorded?"opacity-35":"opacity-60":""),style:{width:d.E,height:n.height,borderColor:f[n.state],borderLeft:"5px solid ".concat(null!=(t=h[n.kind])?t:"#64748b"),outline:n.focused?"2px solid var(--accent, #8b5cf6)":void 0,outlineOffset:3},children:[(0,a.jsx)(o.h7,{id:"in",type:"target",position:s.yX.Left,className:"!pointer-events-none !opacity-0"}),(0,a.jsxs)("div",{"data-testid":"live-node-meta-".concat(n.label),className:"flex items-center gap-1 overflow-hidden text-[11px] text-text-tertiary",children:[(0,a.jsx)("span",{className:"truncate",children:"subgraph"===n.kind?"묶음 \xb7 눌러서 펼치기":n.kind}),n.entry&&(0,a.jsx)("span",{className:"shrink-0 rounded bg-success/15 px-1 text-success",children:"시작"}),n.terminal&&(0,a.jsx)("span",{className:"shrink-0 rounded bg-accent/15 px-1 text-accent",children:"끝"}),(0,a.jsx)("span",{"data-state-word":!0,className:"ml-auto shrink-0 font-medium",style:{color:f[n.state]},children:n.unrecorded?"기록 없음":g[n.state]})]}),(0,a.jsx)("div",{className:"truncate font-mono text-sm font-semibold text-text-primary",children:(0,m.Fi)(n.label)?"▣ ".concat(n.label.slice(m.EQ.length)):n.label}),(0,a.jsxs)("div",{className:"truncate text-[11px] text-text-tertiary",title:n.recipe,children:[n.recipe," \xb7 최대 ",n.maxVisits,"회"]}),n.visits>1&&(0,a.jsxs)("span",{"data-testid":"visit-badge-".concat(n.label),className:"absolute -right-2 -top-2 rounded-full bg-amber-500 px-1.5 text-xs font-bold text-white shadow",children:["\xd7",n.visits]}),(0,a.jsx)(o.h7,{id:"out",type:"source",position:s.yX.Right,className:"!pointer-events-none !opacity-0"})]})},...x.r},w={live:function(e){let{id:t,data:n,markerEnd:r,style:l}=e;if(!(null==n?void 0:n.route))return null;let{route:s}=n,i=c.Bu[s.family],d="back"===s.kind;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.tE,{id:t,path:s.path,markerEnd:r,style:{stroke:i,strokeWidth:n.active?4:n.taken?3:1.5,opacity:n.active||n.taken?1:.22,transition:"opacity 300ms, stroke-width 300ms",...d?{strokeDasharray:"6 4"}:{},...l,...(null==l?void 0:l.stroke)?{opacity:1}:{}}}),n.active&&(0,a.jsxs)("g",{"data-testid":"edge-token-".concat(s.from,"-").concat(s.to),opacity:null==l?void 0:l.opacity,children:[(0,a.jsx)("circle",{r:7,fill:i,opacity:.25,children:(0,a.jsx)("animateMotion",{dur:"".concat(n.tokenMs,"ms"),fill:"freeze",path:s.path})}),(0,a.jsx)("circle",{r:4.5,fill:i,stroke:"var(--background, #fff)",strokeWidth:1.5,children:(0,a.jsx)("animateMotion",{dur:"".concat(n.tokenMs,"ms"),fill:"freeze",path:s.path})})]},n.tokenKey),s.label&&(0,a.jsx)(o.rV,{children:(0,a.jsx)("div",{className:"nodrag nopan pointer-events-none absolute whitespace-nowrap rounded-full border px-1.5 font-mono text-[11px] leading-4",style:{transform:"translate(-50%, -50%) translate(".concat(s.label.x,"px, ").concat(s.label.y,"px)"),width:s.label.width,textAlign:"center",borderColor:i,color:i,background:"var(--background, #fff)",opacity:n.active||n.taken?1:.35,fontWeight:n.active?700:500,...(null==l?void 0:l.opacity)!==void 0?{opacity:l.opacity}:{}},children:s.label.text})})]})}};function j(e){var t,n,s,x,h,f;let{runId:g,initialFolded:b=!1}=e,j=(0,i.M1)(),N=(0,l.I)({queryKey:["harness-run-traversal",g],queryFn:()=>j.getHarnessRunTraversal(g),refetchInterval:e=>{var t;return(null==(t=e.state.data)?void 0:t.status)==="running"&&4e3}}),k=N.data,M=(0,l.I)({queryKey:["run-graph",null==k?void 0:k.graphId],queryFn:()=>j.getRunGraph(k.graphId),enabled:!!(null==k?void 0:k.graphId),retry:!1,staleTime:6e4}),S=(0,r.useMemo)(()=>{var e;return null!=(e=null==k?void 0:k.steps)?e:[]},[k]),C=(0,r.useMemo)(()=>{var e;if(!k)return null;let t=M.data;return t?(0,p.D6)(t,S):M.isLoading&&k.graphId?null:(0,p.Q)(null!=(e=k.graphId)?e:k.runId,S)},[k,M.data,M.isLoading,S]),[_,I]=(0,r.useState)(()=>new Set),E=(0,r.useMemo)(()=>C?(0,m.S0)(C):[],[C]),T=(0,r.useMemo)(()=>C?(0,m.F8)(C):new Map,[C]),V=(0,r.useRef)(!1);(0,r.useEffect)(()=>{b&&!V.current&&0!==E.length&&(V.current=!0,I(new Set(E)))},[b,E]);let z=(0,r.useMemo)(()=>C?(0,m.ws)(C,_):null,[C,_]),F=(0,r.useMemo)(()=>z?(0,d.h)(z.graph):null,[z]),O=(0,r.useMemo)(()=>z?S.map(e=>({...e,node:z.resolve(e.node)})):S,[z,S]),D=(0,r.useMemo)(()=>{var e;return null!=(e=null==F?void 0:F.edges.map(e=>({id:e.id,from:e.source,to:e.target,outcomes:e.data.route.outcomes})))?e:[]},[F]),B=(null==k?void 0:k.status)==="running",[L,Z]=(0,r.useState)(null),R=null!=L?L:B?"live":"replay",[W,A]=(0,r.useState)(-1),[K,X]=(0,r.useState)(!1),[q,Q]=(0,r.useState)(!1),[P,G]=(0,r.useState)(4),[H,$]=(0,r.useState)(null),[Y,J]=(0,r.useState)(null),[U,ee]=(0,r.useState)(!0),et=(0,r.useRef)(null),en=(0,r.useRef)(null),[ea,er]=(0,r.useState)(0),el=(0,r.useRef)(!1),[eo,es]=(0,r.useState)(()=>window.innerWidth>0?window.innerWidth:1024);(0,r.useEffect)(()=>{let e=()=>es(window.innerWidth);return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);let ei=eo<700;(0,r.useEffect)(()=>{k&&!el.current&&0!==S.length&&(el.current=!0,"running"===k.status?(A(S.length-1),X(null===S.at(-1).outcome)):(A(0),X(!0),Q(!0)))},[k,S]),(0,r.useEffect)(()=>{"live"===R&&0!==S.length&&(A(S.length-1),X(null===S.at(-1).outcome))},[R,S]),(0,r.useEffect)(()=>{if("replay"!==R||!q||0===S.length)return;let e=(0,u.bB)(S,W,P),t=window.setTimeout(()=>X(!1),e/2),n=window.setTimeout(()=>{if(W>=S.length-1)return void Q(!1);A(e=>e+1),X(!0)},e);return()=>{window.clearTimeout(t),window.clearTimeout(n)}},[R,q,W,P,S]);let ed=(0,r.useMemo)(()=>new Set(O.map(e=>e.node)),[O]),ec=(0,r.useMemo)(()=>{var e;return(0,u.aZ)(null!=(e=null==F?void 0:F.nodes.map(e=>e.id))?e:[],D,O,W,K)},[F,D,O,W,K]),eu=(0,r.useCallback)(e=>I(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),[]),ep="replay"===R?Math.max(250,.6*(0,u.bB)(S,Math.max(0,W-1),P)):1200,em=(0,r.useMemo)(()=>{var e;return(0,c.d1)((null==F?void 0:F.nodes.some(e=>e.id===Y))?Y:null,null!=(e=null==F?void 0:F.edges.map(e=>({id:e.id,from:e.source,to:e.target})))?e:[])},[Y,F]),ex=(0,r.useMemo)(()=>{if(!F)return[];let e=F.nodes.map(e=>{var t,n;return{...e,type:"live",zIndex:1,...em&&!em.nodes.has(e.id)?{style:{...e.style,opacity:c.zZ.dimNode}}:{},data:{...e.data,state:null!=(t=ec.nodeState[e.id])?t:"pending",visits:null!=(n=ec.visits[e.id])?n:0,focused:H===e.id,unrecorded:!B&&!ed.has(e.id)}}});return[...(0,m.Vc)(F.nodes.map(e=>({id:e.id,position:e.position,width:d.E,height:e.data.height})),T).map(e=>({id:e.id,type:"groupBox",position:{x:e.x,y:e.y},zIndex:0,selectable:!1,draggable:!1,focusable:!1,data:{group:e.group,memberCount:e.members.length,width:e.width,height:e.height,onCollapse:eu,state:(0,m.Oc)(e.members.map(e=>{var t;return null!=(t=ec.nodeState[e])?t:"pending"})),unrecorded:!B&&e.members.every(e=>!ed.has(e))}})),...e]},[F,ec,H,em,B,ed,T,eu]),eh=(0,r.useMemo)(()=>{var e;return null!=(e=null==F?void 0:F.edges.map(e=>({...e,type:"live",...(0,c.f_)(em,e.id),className:(null==em?void 0:em.edges.has(e.id))?"wiring-edge-flow":void 0,data:{...e.data,taken:ec.takenEdges.has(e.id),active:ec.activeEdge===e.id,tokenKey:"".concat(e.id,":").concat(ec.cursor),tokenMs:ep}})))?e:[]},[F,ec,ep,em]),ef=(0,r.useCallback)(e=>{$(e);let t=et.current;t&&(e?t.fitView({nodes:[{id:e}],duration:600,maxZoom:1.4,padding:.6}):t.fitView({duration:600,padding:.08,minZoom:.5}))},[]),eg=null!=(n=null==(t=O[W])?void 0:t.node)?n:null;(0,r.useEffect)(()=>{var e,t,n;if(!U||H||!eg||!F)return;let a=F.nodes.find(e=>e.id===eg),r=et.current;if(!a||!r)return;let l=Math.min(1,Math.max((n=null!=(t=null==(e=en.current)?void 0:e.clientWidth)?t:1e3)<700?.72:.78,n/900));r.setCenter(a.position.x+d.E/2,a.position.y+a.data.height/2,{zoom:l,duration:400})},[U,H,eg,F,ea]);let eb="replay"===R&&!q&&S.length>0&&W===S.length-1;(0,r.useEffect)(()=>{let e=ei?null:.5;if(!eb||!U||H||null===e)return;let t=window.setTimeout(()=>{var t;null==(t=et.current)||t.fitView({nodes:[...ed].map(e=>({id:e})),duration:800,padding:.08,minZoom:e})},1200);return()=>window.clearTimeout(t)},[eb,U,H,ed,ei]);let ev=e=>{Z("replay"),Q(!1),A(e),X(!1)};if(N.isLoading)return(0,a.jsx)("p",{className:"p-4 text-sm text-text-tertiary",children:"런 원장을 읽는 중…"});if(N.isError||!k)return(0,a.jsxs)("p",{role:"alert",className:"p-4 text-sm text-error",children:["이 런의 원장을 읽지 못했습니다 (",g,")."]});let ey=H?S.map((e,t)=>({step:e,index:t})).filter(e=>{var t;let{step:n}=e;return(null!=(t=null==z?void 0:z.resolve(n.node))?t:n.node)===H}):[],ew=W>=0?S[W]:void 0;return(0,a.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col gap-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)("span",{className:"rounded-full px-2 py-0.5 text-xs font-semibold ".concat(B?"bg-amber-500/15 text-amber-600 dark:text-amber-400":"completed"===k.status?"bg-success/15 text-success":"bg-error/15 text-error"),children:(0,p.az)(k.status)}),(0,a.jsx)("h2",{className:"order-first min-w-0 basis-full truncate text-sm font-semibold text-text-primary sm:order-none sm:basis-0 sm:flex-1",title:null!=(s=k.title)?s:void 0,children:null!=(x=k.title)?x:k.runId}),null!==k.prNumber&&(0,a.jsxs)("span",{className:"text-xs text-text-secondary",children:["PR #",k.prNumber]}),(0,a.jsxs)("span",{className:"font-mono text-[11px] text-text-tertiary",children:[k.runId.slice(0,12)," \xb7 ",null!=(h=k.graphId)?h:"그래프 모름",k.substrate?" \xb7 ".concat(k.substrate):""]})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[(0,a.jsxs)("div",{role:"group","aria-label":"보기",className:"flex overflow-hidden rounded border border-border",children:[(0,a.jsx)("button",{type:"button",disabled:!B,onClick:()=>{Z("live"),Q(!1)},className:"px-2 py-1 ".concat("live"===R?"bg-primary text-primary-foreground":""," disabled:opacity-40"),children:"● 라이브"}),(0,a.jsx)("button",{type:"button",onClick:()=>{Z("replay")},className:"px-2 py-1 ".concat("replay"===R?"bg-primary text-primary-foreground":""),children:"리플레이"})]}),"replay"===R&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("button",{type:"button","aria-label":q?"일시정지":"재생",onClick:()=>{!q&&W>=S.length-1&&(A(0),X(!0)),Q(!q)},className:"rounded border border-border px-2.5 py-1 font-semibold",children:q?"⏸ 일시정지":"▶ 재생"}),(0,a.jsx)("button",{type:"button",onClick:()=>{A(0),X(!0),Q(!1)},className:"rounded border border-border px-2 py-1",children:"처음"}),(0,a.jsx)("div",{role:"group","aria-label":"속도",className:"flex overflow-hidden rounded border border-border",children:v.map(e=>(0,a.jsxs)("button",{type:"button",onClick:()=>G(e),"aria-pressed":P===e,className:"px-2 py-1 ".concat(P===e?"bg-accent/20 font-semibold text-text-primary":"text-text-secondary"),children:[e,"\xd7"]},e))}),(0,a.jsx)("input",{type:"range","aria-label":"재생 위치",min:0,max:Math.max(0,S.length-1),value:Math.max(0,W),onChange:e=>ev(Number(e.target.value)),className:"min-w-[120px] flex-1"})]}),(0,a.jsxs)("span",{className:"text-text-tertiary",children:[Math.max(0,W+1),"/",S.length," 단계",ew?" \xb7 ".concat(ew.node," \xd7").concat(ew.visit):""]}),(0,a.jsx)("button",{type:"button",onClick:()=>{ee(!1),ef(null)},className:"rounded border border-border px-2 py-1",children:"전체 보기"}),(0,a.jsx)("button",{type:"button","aria-pressed":U,onClick:()=>{ee(!U),$(null)},className:"rounded border px-2 py-1 ".concat(U?"border-primary text-primary":"border-border"),children:"카메라 따라가기"}),E.length>0&&(0,a.jsx)("button",{type:"button","data-testid":"toggle-units",onClick:()=>{$(null),I(_.size===E.length?new Set:new Set(E))},className:"rounded border border-border px-2 py-1",children:_.size===E.length?"묶음 펼치기 (통합 보기)":"묶음 접기"})]}),(0,a.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col gap-3 lg:flex-row",children:[(0,a.jsxs)("section",{ref:en,"aria-label":"실행 그래프","data-viewport":ei?"narrow":"wide",className:"relative min-w-0 overflow-hidden rounded-lg border border-border bg-surface ".concat(ei?"h-[65dvh] min-h-[380px]":"h-[60dvh] min-h-[340px]"," lg:h-[calc(100dvh-230px)] lg:min-h-[520px] lg:flex-1"),children:[0===S.length&&(0,a.jsx)("p",{className:"absolute left-3 top-3 z-10 text-xs text-text-tertiary",children:"아직 노드에 들어가지 않았습니다(원장에 `pipeline-node-entry` 없음)."}),F&&(0,a.jsxs)(o.Gc,{nodes:ex,edges:eh,nodeTypes:y,edgeTypes:w,onInit:e=>{et.current=e,er(e=>e+1)},onNodeMouseEnter:(e,t)=>{"groupBox"!==t.type&&J(t.id)},onNodeMouseLeave:()=>J(null),onNodeClick:(e,t)=>{if("groupBox"!==t.type){if((0,m.Fi)(t.id)){var n;let e=null!=(n=t.data.group)?n:t.id.slice(6);eu(e),$(null),window.setTimeout(()=>{var t;null==(t=et.current)||t.fitView({nodes:[{id:"box:".concat(e)}],duration:600,maxZoom:1.4,padding:.2})},80);return}ef(H===t.id?null:t.id)}},onPaneClick:()=>{H&&ef(null)},fitView:!0,fitViewOptions:{padding:.08,minZoom:.5},minZoom:.2,maxZoom:2,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,edgesFocusable:!1,deleteKeyCode:null,proOptions:{hideAttribution:!0},className:"!bg-surface",children:[(0,a.jsx)(o.VS,{}),(0,a.jsx)(o.H2,{showInteractive:!1})]},"".concat(null!=(f=null==C?void 0:C.id)?f:"graph",":").concat([..._].sort().join(","))),H&&(0,a.jsxs)("div",{"data-testid":"node-detail",className:"absolute bottom-3 left-3 right-3 z-10 max-h-[45%] overflow-y-auto rounded-lg border border-border bg-background/95 p-3 text-xs shadow-lg backdrop-blur sm:right-auto sm:w-[320px]",children:[(0,a.jsxs)("div",{className:"mb-1 flex items-center gap-2",children:[(0,a.jsx)("span",{className:"font-mono text-sm font-semibold text-text-primary",children:H}),(0,a.jsxs)("span",{className:"text-text-tertiary",children:["방문 ",ey.length,"회"]}),(0,a.jsx)("button",{type:"button",onClick:()=>ef(null),className:"ml-auto rounded border border-border px-1.5",children:"닫기"})]}),0===ey.length&&(0,a.jsx)("p",{className:"text-text-tertiary",children:B?"아직 이 노드에 들어가지 않았습니다.":"기록 없음 — 이 런의 원장에 이 노드의 사건이 없습니다."}),(0,a.jsx)("ul",{className:"space-y-1",children:ey.map(e=>{var t;let{step:n,index:r}=e;return(0,a.jsx)("li",{children:(0,a.jsxs)("button",{type:"button",onClick:()=>ev(r),className:"w-full rounded px-1 py-0.5 text-left hover:bg-surface-elevated",children:[(0,a.jsx)("span",{className:"font-mono text-text-secondary",children:(0,u.Xf)(n.at)})," ",(0,a.jsxs)("span",{className:"font-semibold",children:["\xd7",n.visit]})," ",(0,a.jsx)("span",{className:"fail"===n.outcome?"text-error":null===n.outcome?"text-amber-500":"text-success",children:null!=(t=n.outcome)?t:"도는 중"})," ",(0,a.jsx)("span",{className:"text-text-tertiary",children:(0,u.vV)(n.durationMs)}),n.detail&&(0,a.jsx)("span",{className:"block text-text-secondary",children:n.detail})]})},r)})})]})]}),(0,a.jsxs)("aside",{"aria-label":"실행 타임라인",className:"overflow-y-auto rounded-lg border border-border bg-surface ".concat(ei?"max-h-[300px]":"max-h-[420px]"," lg:max-h-[calc(100dvh-230px)] lg:w-[340px] lg:shrink-0"),children:[(0,a.jsx)("h3",{className:"sticky top-0 border-b border-border bg-surface px-3 py-2 text-xs font-semibold",children:"타임라인 (KST)"}),(0,a.jsx)("ol",{children:S.map((e,t)=>{var n,r;let l=t>W,o=t===W;return(0,a.jsx)("li",{children:(0,a.jsxs)("button",{type:"button",onClick:()=>{var n;ev(t),ef(null!=(n=null==z?void 0:z.resolve(e.node))?n:e.node)},"data-testid":"timeline-step-".concat(t),className:"grid w-full grid-cols-[64px_1fr_auto] items-baseline gap-x-2 border-b border-border/60 px-3 py-1.5 text-left text-xs transition-opacity ".concat(l?"opacity-35":""," ").concat(o?"bg-accent/10":"hover:bg-surface-elevated"),children:[(0,a.jsx)("span",{className:"font-mono text-text-tertiary",children:(0,u.Xf)(e.at)}),(0,a.jsxs)("span",{className:"font-mono font-semibold text-text-primary",children:[e.node,e.visit>1?" \xd7".concat(e.visit):""]}),(0,a.jsx)("span",{className:"fail"===e.outcome?"text-error":null===e.outcome?"text-amber-500":"text-success",children:null===e.outcome?"도는 중":"fail"===e.outcome?"실패":"통과"}),(0,a.jsx)("span",{className:"text-[11px] text-text-tertiary",children:(0,u.vV)(e.durationMs)}),(0,a.jsx)("span",{className:"col-span-2 truncate text-[11px] text-text-secondary",title:null!=(n=e.detail)?n:void 0,children:null!=(r=e.detail)?r:""})]})},t)})})]})]}),(0,a.jsxs)("p",{className:"shrink-0 text-[11px] text-text-tertiary",children:["배선도 디자인: ",(0,a.jsx)("a",{href:"https://malfoy-meme-making.vercel.app/wiring/index.html",target:"_blank",rel:"noopener noreferrer",className:"underline",children:"공냥이 AI 실험실"})]})]})}},92579:(e,t,n)=>{"use strict";n.d(t,{r:()=>o});var a=n(65863);let r={pending:"var(--border, #94a3b8)",running:"#f59e0b",passed:"var(--chart-2, #16a34a)",failed:"var(--destructive, #ef4444)"},l={pending:"대기",running:"도는 중",passed:"통과",failed:"실패"},o={groupBox:function(e){let{data:t}=e,n=r[t.state];return(0,a.jsx)("div",{"data-testid":"group-box-".concat(t.group),"data-state":t.state,className:"pointer-events-none rounded-xl border-2 border-dashed ".concat(t.unrecorded?"opacity-60":""),style:{width:t.width,height:t.height,borderColor:n,background:"color-mix(in srgb, ".concat(n," 6%, transparent)")},children:(0,a.jsxs)("div",{className:"pointer-events-auto flex items-center gap-2 px-2.5 py-1 text-xs",children:[(0,a.jsx)("span",{className:"font-mono font-semibold text-text-primary",children:t.group}),(0,a.jsx)("span",{className:"text-[11px]",style:{color:n},children:t.unrecorded?"기록 없음":l[t.state]}),(0,a.jsx)("span",{className:"text-[11px] text-text-tertiary",children:void 0===t.stepCount?"노드 ".concat(t.memberCount):"걸음 ".concat(t.stepCount)}),t.onCollapse&&(0,a.jsx)("button",{type:"button",onClick:e=>{var n;e.stopPropagation(),null==(n=t.onCollapse)||n.call(t,t.group)},className:"nodrag ml-auto rounded border border-border bg-background px-1.5 text-[11px] text-text-secondary",children:"접기"})]})})}}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8097],{6416:(e,t,n)=>{n.d(t,{Er:()=>s,cj:()=>c,dc:()=>l,yR:()=>i});let a=/^(oauth\.|harness\.decision|llm\.router)/;function s(e){let t=[],n=e=>{"string"==typeof e&&e.trim()&&!t.includes(e.trim())&&t.push(e.trim())};for(let t of e){var s;let e=null!=(s=t.data)?s:{};if(t.category.startsWith("oauth.")){for(let t of["from","to","name","account"])n(e[t]);if(Array.isArray(e.usage))for(let t of e.usage)n(null==t?void 0:t.name);continue}if(a.test(t.category))for(let t of(n(e.account),["what","why","reason"])){let a=e[t];if("string"==typeof a)for(let e of a.matchAll(/계정\s+([A-Za-z0-9][\w.-]*)/g))n(e[1])}}return t}function r(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function l(e){let t=new Map(e.map((e,t)=>[e,"account-".concat(t+1)])),n=e.length?RegExp("(^|[^\\w-])(".concat(e.map(r).sort((e,t)=>t.length-e.length).join("|"),")(?![\\w-])"),"g"):null,a=new Map;return(e,s)=>{let r=e.replace(/\b[a-z0-9-]+\.tail[0-9a-f]+\.ts\.net\b/gi,"tailnet-host").replace(/\bmsb\d+\b/gi,e=>(e=>{let t=e.toLowerCase();a.has(t)||a.set(t,"remote-".concat(a.size+1));let n=a.get(t);return e===e.toUpperCase()?n.toUpperCase():n})(e)).replace(/\bmbp\b/gi,e=>e===e.toUpperCase()?"LOCAL":"local").replace(/\/Users\/[^/\s"']+/g,"~").replace(/(크레딧|credits?|💳)(\s*[:=]?\s*)[\d][\d,.]*/gi,"$1$2•••").replace(/[\d][\d,.]*(\s*)(크레딧|credits?)/gi,"•••$1$2").replace(/\$\s?[\d][\d,.]*/g,"$•••").replace(/(잔량?|remaining|left)(\s*[:=]?\s*)(?:[A-Za-z0-9][\w.-]*\s+)?\d+(?:\.\d+)?\s?%/gi,"$1$2•••");return s&&n&&(r=r.replace(n,(e,n,a)=>{var s;return"".concat(n).concat(null!=(s=t.get(a))?s:"account")})),r}}function o(e,t){if("string"==typeof e)return t(e);if(Array.isArray(e))return e.map(e=>o(e,t));if(e&&"object"==typeof e){let n={};for(let[a,s]of Object.entries(e))"apiEquivalentUsd"===a||"usd"===a||/credit(s|Balance)?$/i.test(a)||(n[a]=o(s,t));return n}return e}function i(e){let t=l(s(e));return e.map(e=>{let n=a.test(e.category);return{...e,event:t(e.event,!1),data:e.data?o(e.data,e=>t(e,n)):e.data}})}function c(e,t){let n=l(t);return o(e,e=>n(e,!0))}},14158:(e,t,n)=>{n.d(t,{RT:()=>h});var a=n(65863),s=n(24815),r=n(38519),l=n.n(r),o=n(85458),i=n(27346),c=n(55210),d=n(16263);let u={"no-screen-key":"이 인스턴스 로그에 이 런의 화면 키가 없다 — 다른 우주(시험\xb7Pod)에서 돈 런이면 그 우주에서 본다.","screen-missing":"화면 키는 있는데 화면 파일이 없다 — 런이 끝나 화면이 정리됐을 수 있다.","log-store-missing":"이 인스턴스에 로그 저장소가 없다.","log-store-unreadable":"로그 저장소를 읽지 못했다."};function p(e){var t,n;let{runId:s,run:r,screen:o,screenError:i,lines:d,stopState:p,stopMessage:h,onStop:m,onConfirmStop:f,onCancelStop:x,onClose:g,max:v}=e,b=!!(null==o?void 0:o.stoppable);return(0,a.jsxs)("section",{className:"space-y-2 rounded-lg border border-primary/40 bg-card/60 p-3","aria-label":"런 서랍","data-live-run-drawer":s,children:[(0,a.jsxs)("header",{className:"flex flex-wrap items-center gap-2 text-sm",children:[(0,a.jsx)("span",{className:"font-mono text-xs text-muted-foreground",children:s}),(null==r?void 0:r.current)&&(0,a.jsx)("span",{className:"rounded bg-primary/15 px-1.5 py-0.5 text-[11px]",children:c.fQ[r.current]}),(null==r?void 0:r.blocked)&&(0,a.jsx)("span",{className:"rounded bg-error/15 px-1.5 py-0.5 text-[11px] text-error",children:"막힘"}),(null==r?void 0:r.pr)&&(0,a.jsxs)("span",{className:"font-mono text-[11px]",children:["PR #",r.pr]}),(0,a.jsxs)("span",{className:"ml-auto flex items-center gap-2",children:[v&&("confirm"===v.state?(0,a.jsxs)("span",{className:"flex items-center gap-1 text-xs",role:"alertdialog","aria-label":"MAX 이 런만 확인",children:[(0,a.jsx)("span",{className:"text-amber-500",children:"이 런만 30분 상세 계측(부하가 든다)?"}),(0,a.jsx)("button",{type:"button",onClick:v.confirm,className:"rounded-md border border-amber-500 px-2 py-1 text-amber-600 hover:bg-amber-500/10","data-elanous-action":"live-run-max-confirm",children:"켜기"}),(0,a.jsx)("button",{type:"button",onClick:v.cancel,className:"rounded-md px-2 py-1 text-muted-foreground hover:bg-muted",children:"취소"})]}):(0,a.jsx)("button",{type:"button",onClick:v.ask,disabled:"on"===v.state,className:"rounded-md border px-2 py-1 text-xs hover:bg-muted disabled:opacity-50","data-elanous-action":"live-run-max",title:"이 런의 판단 \xab왜\xb7목적\xb7어디로\xbb를 30분 자세히 남긴다",children:"on"===v.state?"● MAX 이 런 켜짐":"failed"===v.state?"MAX 못 켬 \xb7 다시":"MAX 이 런만"})),(0,a.jsx)(l(),{href:"/trace?level=L2&run=".concat(encodeURIComponent(s)),className:"rounded-md border px-2 py-1 text-xs hover:bg-muted","data-elanous-action":"live-run-trace",children:"Trace 로 →"}),(0,a.jsx)(l(),{href:"/live-run/?run=".concat(encodeURIComponent(s)),className:"rounded-md border px-2 py-1 text-xs hover:bg-muted","data-elanous-action":"live-run-scene",children:"런 장면 →"}),!!(null==r?void 0:r.pr)&&"ok"!==r.stages.land&&(0,a.jsx)(l(),{href:"/approvals?pr=".concat(encodeURIComponent(r.pr)),className:"rounded-md border px-2 py-1 text-xs hover:bg-muted","data-elanous-action":"live-run-approvals",children:"승인 카드로 →"}),"confirm"===p?(0,a.jsxs)("span",{className:"flex items-center gap-1 text-xs",role:"alertdialog","aria-label":"멈춤 확인",children:[(0,a.jsx)("span",{className:"text-error",children:"이 런을 멈출까요? 되돌릴 수 없습니다."}),(0,a.jsx)("button",{type:"button",onClick:f,className:"rounded-md border border-error px-2 py-1 text-error hover:bg-error/10","data-elanous-action":"live-run-stop-confirm",children:"멈춤"}),(0,a.jsx)("button",{type:"button",onClick:x,className:"rounded-md px-2 py-1 text-muted-foreground hover:bg-muted",children:"취소"})]}):(0,a.jsx)("button",{type:"button",onClick:m,disabled:!b||"stopping"===p||"stopped"===p,title:b?"부드러운 멈춤을 보낸다(확인 한 번)":"살아 있는 화면이 없어 멈출 수 없다",className:"rounded-md border px-2 py-1 text-xs hover:bg-muted disabled:opacity-40","data-elanous-action":"live-run-stop",children:"⏹ 멈춤"}),(0,a.jsx)("button",{type:"button",onClick:g,className:"rounded-md px-2 py-1 text-xs text-muted-foreground hover:bg-muted","aria-label":"서랍 닫기",children:"✕"})]})]}),h&&(0,a.jsx)("p",{className:"text-xs ".concat("failed"===p?"text-error":"text-muted-foreground"),"data-live-run-stop-result":!0,children:h}),(0,a.jsxs)("div",{className:"grid gap-2 lg:grid-cols-2",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("h3",{className:"mb-1 text-xs font-medium text-muted-foreground",children:["화면",(null==o?void 0:o.screenKey)?(0,a.jsxs)("span",{className:"ml-1 font-mono",children:["\xb7 ",o.screenKey]}):null]}),(0,a.jsx)("pre",{className:"max-h-64 overflow-auto rounded-md border bg-muted/30 p-2 text-[11px] leading-relaxed","data-live-run-screen":!0,children:i?"화면을 못 읽었다: ".concat(i):null!=(n=null==o?void 0:o.text)?n:(null==o?void 0:o.reason)?null!=(t=u[o.reason])?t:o.reason:"불러오는 중…"})]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("h3",{className:"mb-1 text-xs font-medium text-muted-foreground",children:["로그 ",(0,a.jsxs)("span",{className:"font-mono",children:["\xb7 ",d.length]})]}),(0,a.jsx)("pre",{className:"max-h-64 overflow-auto rounded-md border bg-muted/30 p-2 text-[11px] leading-relaxed","data-live-run-log":!0,children:d.slice(0,40).join("\n")||"—"})]})]})]})}function h(e){var t;let{runId:n,run:r,lines:l,onClose:c}=e,u=(0,i.M1)(),h=(0,o.I)({queryKey:["live","run-screen",n],queryFn:()=>u.getRunScreen(n,60),refetchInterval:3e3}),[m,f]=(0,s.useState)("idle"),[x,g]=(0,s.useState)(null),[v,b]=(0,s.useState)("idle");return(0,a.jsx)(p,{runId:n,run:r,screen:null!=(t=h.data)?t:null,screenError:h.error?h.error instanceof Error?h.error.message:String(h.error):null,lines:l,stopState:m,stopMessage:x,onStop:()=>f("confirm"),onConfirmStop:()=>{var e;let t=null==(e=h.data)?void 0:e.screenKey;t&&(f("stopping"),u.stopHarness(t).then(e=>{var t;let a=!!e.stopped;(0,d.cY)("pwa.live.run-stop",{runId:n,ok:a}),f(a?"stopped":"failed"),g(a?"멈춤을 보냈다 — 런이 다음 확인 지점에서 멈춘다(".concat(e.stopped,")."):"멈추지 못했다: ".concat(null!=(t=e.error)?t:"알 수 없음"))}).catch(e=>{(0,d.cY)("pwa.live.run-stop",{runId:n,ok:!1}),f("failed"),g("멈추지 못했다: ".concat(e instanceof Error?e.message:String(e)))}))},onCancelStop:()=>f("idle"),onClose:c,max:{state:v,ask:()=>b("confirm"),confirm:()=>{u.setLiveDetail({scope:n,ttlMin:30,by:"pwa-run-drawer"}).then(e=>{b(e.on?"on":"failed"),(0,d.cY)("pwa.live.run-max",{runId:n,on:e.on})}).catch(()=>b("failed"))},cancel:()=>b("idle")}})}},16263:(e,t,n)=>{let a;n.d(t,{cY:()=>d,x8:()=>o});let s={debug:0,info:1,warn:2,error:3},r="/v1/debug-logs/batch",l=null;function o(e){l=e}class i{health(){return{pending:this.queue.length,consecutiveFailures:this.consecutiveFailures,lastOkAt:this.lastOkAt,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches}}push(e){if(!(s[function(e){let t=e.slice(e.lastIndexOf(".")+1).toLowerCase();return/^(error|exception|crash|fail|failed)$/.test(t)?"error":/^(warn|degraded|timeout)$/.test(t)?"warn":/^(boot|ready|start|begin|open|ok|done|resolve|end|stop|close)$/.test(t)?"info":"debug"}(e.category)]<s[this.minLevel])){if(this.queue.push(e),this.queue.length>500){let e=this.queue.length-500;this.droppedByCap+=e,this.queue.splice(0,e)}if(this.queue.length>=100&&!this.inFlight){null!==this.timer&&(clearTimeout(this.timer),this.timer=null),this.flush();return}null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},this.flushMs))}}async flush(){if(this.timer&&(clearTimeout(this.timer),this.timer=null),this.inFlight||0===this.queue.length)return;let e=this.queue.slice(0,100);this.inFlight=!0;let t=!1,n=JSON.stringify({records:e});try{var a,s;t=await (a=this.fetchFn(n),s=this.postTimeoutMs,new Promise((e,t)=>{let n=setTimeout(()=>t(Error("debug-forward timeout after ".concat(s,"ms"))),s);a.then(t=>{clearTimeout(n),e(t)},e=>{clearTimeout(n),t(e)})}))}catch(e){t=!1}finally{this.inFlight=!1}if(!t){if(this.consecutiveFailures+=1,this.consecutiveFailures>=2&&l)try{await l(JSON.stringify({records:[...e,this.blockedNotice()]}))&&(this.fallbackBatches+=1)}catch(e){}this.wasFailing=!0,this.scheduleRetry();return}let r=this.lastOkAt;this.lastOkAt=Date.now();let o=this.consecutiveFailures;this.consecutiveFailures=0,this.queue.splice(0,e.length),this.wasFailing&&(this.wasFailing=!1,this.queue.push({ts:new Date().toISOString(),category:"pwa.debug-forwarder.recovered",event:"recovered",data:{consecutiveFailures:o,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches,pending:this.queue.length,previousOkAt:r},source:{platform:"pwa"}})),this.queue.length>0&&null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},this.flushMs))}scheduleRetry(){if(null!==this.timer||0===this.queue.length)return;let e=Math.min(this.flushMs*2**this.consecutiveFailures,3e4);this.timer=setTimeout(()=>{this.flush()},e)}blockedNotice(){return{ts:new Date().toISOString(),category:"pwa.debug-forwarder.http-blocked",event:"http-blocked",data:{consecutiveFailures:this.consecutiveFailures,pending:this.queue.length,droppedByCap:this.droppedByCap,lastOkAt:this.lastOkAt,via:"acp-fallback"},source:{platform:"pwa"}}}beaconFlush(){if(0!==this.queue.length)try{if("undefined"!=typeof navigator&&"function"==typeof navigator.sendBeacon){let e=this.queue.slice(0,100),t=new Blob([JSON.stringify({records:e})],{type:"application/json"});navigator.sendBeacon(r,t)&&this.queue.splice(0,e.length)}}catch(e){}}get pending(){return this.queue.length}constructor(e=c,t="debug",n=1e4,a=100){this.fetchFn=e,this.minLevel=t,this.postTimeoutMs=n,this.flushMs=a,this.queue=[],this.timer=null,this.inFlight=!1,this.consecutiveFailures=0,this.lastOkAt=null,this.droppedByCap=0,this.fallbackBatches=0,this.wasFailing=!1}}async function c(e){return(await fetch(r,{method:"POST",headers:{"content-type":"application/json"},body:e,keepalive:!0,..."undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout?{signal:AbortSignal.timeout(1e4)}:{}})).ok}function d(e,t){if("undefined"==typeof console)return;let n=new Date().toISOString();if(void 0!==t){let a="";try{let e=new WeakSet;a=JSON.stringify(t,(t,n)=>{if("bigint"==typeof n)return"".concat(n.toString(),"n");if("function"==typeof n)return"[fn ".concat(n.name||"anon","]");if(n&&"object"==typeof n){if(e.has(n))return"[circular]";e.add(n)}return n})}catch(e){a="[unserializable: ".concat(String(e),"]")}a&&a.length>800&&(a=a.slice(0,797)+"..."),console.debug("[".concat(n,"] ").concat(e," ").concat(a),t),u(n,e,a)}else console.debug("[".concat(n,"] ").concat(e)),u(n,e,void 0)}function u(e,t,n){let s,r=function(){if(void 0!==a)return a;let e=function(){try{let e="off"!==window.localStorage.getItem("elanous.pwa.debug.forward"),t=window.localStorage.getItem("elanous.pwa.debug.forwardLevel");return{forward:e,level:"info"===t||"warn"===t||"error"===t?t:"debug"}}catch(e){return{forward:!0,level:"debug"}}}();if(!e.forward)return a=null,null;let t=new i(c,e.level,1e4,1500);try{window.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&t.beaconFlush()})}catch(e){}return a=t,t}();if(!r)return;let l=t.slice(t.lastIndexOf(".")+1)||t;if(void 0!==n&&""!==n)try{s=JSON.parse(n)}catch(e){s=n}r.push({ts:e,category:t,event:l,...void 0!==s?{data:s}:{},source:{platform:"pwa"}})}},22717:(e,t,n)=>{n.d(t,{Es:()=>l,Wf:()=>s,q9:()=>r});let a=/\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 s(e){return!a.test(e)}function r(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 l(e){return e.replace(/#\d{4,6}\b/g,"PR")}},41893:(e,t,n)=>{n.d(t,{cn:()=>r});var a=n(23169),s=n(49637);function r(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,s.QP)((0,a.$)(t))}},52132:(e,t,n)=>{n.d(t,{D3:()=>x,GJ:()=>g,Gp:()=>l,HR:()=>p,IE:()=>f,JW:()=>u,Jo:()=>v,NZ:()=>m,OL:()=>o,cD:()=>h,f:()=>c,fT:()=>b,kJ:()=>i,lb:()=>d});var a=n(55210);let s=e=>"string"==typeof e&&e.trim()?e:null,r=e=>"number"==typeof e&&Number.isFinite(e)?e:0;function l(e){let t=[];for(let i of e){var n,a,l,o;if(!i.category.startsWith("llm.usage"))continue;let e=null!=(n=i.data)?n:{},c=Date.parse(i.ts);if(!Number.isFinite(c))continue;let d=null!=(a=e.cost)?a:{};t.push({ts:i.ts,t:c,model:null!=(l=s(e.model))?l:"unknown",site:null!=(o=s(e.site))?o:"unknown",billing:s(e.billing),provider:s(e.billingProvider),input:r(e.inputTokens),output:r(e.outputTokens),cache:r(e.cacheReadInputTokens),apiUsd:r(d.apiEquivalentUsd)})}return t.sort((e,t)=>t.t-e.t)}function o(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:30,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:6e4,s=Math.floor(t/a)*a-(n-1)*a,r=Array.from({length:n},(e,t)=>({t:s+t*a,count:0,tokens:0,byModel:{}}));for(let t of e){var l;let e=Math.floor((t.t-s)/a);if(e<0||e>=n)continue;let o=r[e];o.count+=1,o.tokens+=t.input+t.output,o.byModel[t.model]=(null!=(l=o.byModel[t.model])?l:0)+1}return r}function i(e,t,n){let a=t-n/2,s=new Map;for(let l of e){var r;if(l.t<t-n)continue;let e=null!=(r=s.get(l.model))?r:{count:0,tokens:0,late:0,early:0};e.count+=1,e.tokens+=l.input+l.output,l.t>=a?e.late+=1:e.early+=1,s.set(l.model,e)}return[...s.entries()].map(e=>{let[t,n]=e;return{model:t,count:n.count,tokens:n.tokens,delta:n.late>n.early?1:n.late<n.early?-1:0}}).sort((e,t)=>t.count-e.count)}function c(e){var t,n,a;let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:7,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:4,l=new Map,o=new Map;for(let a of e)l.set(a.model,(null!=(t=l.get(a.model))?t:0)+1),o.set(a.site,(null!=(n=o.get(a.site))?n:0)+1);let i=[...l.entries()].sort((e,t)=>t[1]-e[1]).slice(0,s).map(e=>{let[t]=e;return t}),c=[...o.entries()].sort((e,t)=>t[1]-e[1]).slice(0,r).map(e=>{let[t]=e;return t}),d={},u=0;for(let t of e){if(!i.includes(t.model)||!c.includes(t.site))continue;let e="".concat(t.model,"|").concat(t.site);d[e]=(null!=(a=d[e])?a:0)+1,u=Math.max(u,d[e])}return{models:i,sites:c,cells:d,max:u}}function d(e){let t=new Map;for(let a of e){var n;let e=s(null==(n=a.data)?void 0:n.runId),r=Date.parse(a.ts);if(!e||!Number.isFinite(r))continue;let l=t.get(e);l?(l.lo=Math.min(l.lo,r),l.hi=Math.max(l.hi,r)):t.set(e,{lo:r,hi:r})}return[...t.entries()].map(e=>{let[t,n]=e;return{runId:t,ms:n.hi-n.lo}})}function u(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:40,n=Array(t).fill(0);if(0===e.length)return{bins:n,lo:0,hi:0,max:0};let a=Math.min(...e),s=Math.max(...e),r=(s-a)/t||1;for(let s of e)n[Math.min(t-1,Math.floor((s-a)/r))]+=1;return{bins:n,lo:a,hi:s,max:Math.max(...n)}}function p(e){let t=Object.fromEntries(a.lV.map(e=>[e,0]));for(let n of e.snapshot.runs)n.current&&(t[n.current]+=1);let n=null;for(let e of a.lV)t[e]>0&&(!n||t[e]>t[n])&&(n=e);return{counts:t,busiest:n}}function h(e){let t=0,n=0;for(let s of e){let e=(0,a.dl)(s);"gate"===e.stage&&("ok"===e.tone?t+=1:"bad"===e.tone&&(n+=1))}return{pass:t,fail:n}}function m(e){let t=new Set,n=new Set;for(let o of e){var a,l;if(!o.category.startsWith("review-loop"))continue;let e=null!=(a=o.data)?a:{},i=null!=(l=s(e.pr))?l:r(e.prNumber)?String(r(e.prNumber)):null;i&&(("rework-start"===o.event||"judge-verdict"===o.event&&r(e.asks)>0)&&t.add(i),/merged/.test(o.event)&&n.add(i))}return[...t].filter(e=>n.has(e))}function f(e){let t=new Map;for(let a of e){var n;let e=s(null==(n=a.data)?void 0:n.runId);e&&a.instance&&!t.has(e)&&t.set(e,a.instance)}return[...t.entries()].map(e=>{let[t,n]=e;return{runId:t,instance:n}})}function x(e){let t=new Map;for(let i of e){var n,a,l,o;let e=s(null==(n=i.data)?void 0:n.runId);if(!e)continue;let c=Date.parse(i.ts),d=null;if("decompose-and-retry.applied"===i.event&&Array.isArray(null==(a=i.data)?void 0:a.pieceFeatures))d=i.data.pieceFeatures.map(e=>"string"==typeof e?e:"").filter(Boolean);else if("goal-steps-decomposed"===i.event&&r(null==(l=i.data)?void 0:l.stepCount)>1){let e=Math.min(12,r(null==(o=i.data)?void 0:o.stepCount));d=Array.from({length:e},(t,n)=>"단계 ".concat(n+1,"/").concat(e))}if(!d||0===d.length)continue;let u=t.get(e);(!u||c>=u.t)&&t.set(e,{t:c,pieces:d.slice(0,12)})}return[...t.entries()].map(e=>{let[t,n]=e;return{runId:t,pieces:n.pieces}})}function g(e){let t=[];for(let a of e){var n;if("harness.substrate"!==a.category||"dispatch-pod"!==a.event)continue;let e=s(null==(n=a.data)?void 0:n.podPool);e&&t.push({pool:e,ts:a.ts})}return t}function v(e){let t=new Map,n=new Map;for(let u of e){var l,o,i,c,d;let e=s(null==(l=u.data)?void 0:l.runId);if(!e)continue;u.category.startsWith("review-loop")&&"rework-start"===u.event&&t.set(e,Math.max(null!=(i=t.get(e))?i:0,r(null==(o=u.data)?void 0:o.round)||(null!=(c=t.get(e))?c:0)+1));let p=(0,a.dl)(u);"gate"===p.stage&&"bad"===p.tone&&n.set(e,(null!=(d=n.get(e))?d:0)+1)}return[...[...t.entries()].map(e=>{let[t,n]=e;return{runId:t,stage:"review",retries:n}}),...[...n.entries()].map(e=>{let[t,n]=e;return{runId:t,stage:"gate",retries:n}})]}function b(e){let t=new Map;for(let r of e){var n;let e=s(null==(n=r.data)?void 0:n.runId);if(!e)continue;let{stage:l,tone:o}=(0,a.dl)(r),i="".concat(e,"|").concat(r.category,".").concat(r.event),c=t.get(i);if(c){c.count+=1,c.bad||(c.bad="bad"===o);continue}t.set(i,{runId:e,key:i,label:r.event,stage:l,count:1,bad:"bad"===o})}return[...t.values()]}},55210:(e,t,n)=>{n.d(t,{jg:()=>v,lV:()=>i,fQ:()=>c,Hc:()=>y,dl:()=>d,qo:()=>m,bh:()=>b,hS:()=>x,Yu:()=>f,BP:()=>g});let a={budget:"예산",placement:"장소",relation:"관계",memory:"기억"},s=e=>null===e||"object"!=typeof e||Array.isArray(e)?null:e,r=new Set(["한도 도달","후보 없음","측정 불가: 시간 초과"]);function l(e){if("string"!=typeof e)return null;let t=e.trim();return r.has(t)?t.slice(0,80):null}function o(e){let t=l(e);return"확인 못 함".concat(t?" \xb7 ".concat(t):"")}let i=["author","decompose","build","gate","review","land"],c={author:"저작",decompose:"분해",build:"구현",gate:"게이트",review:"리뷰",land:"착지"};function d(e){var t;let n=e.category,a=e.event,s="error"===e.level||/(fail|reject|block|abandon|conflict|error|unconvergeable|timeout)/i.test(a)?"bad":/(merged|pass|done|ok|opened|completed|approved)/i.test(a)?"ok":"info";if("self-implement.pod.ledger"===n&&"string"==typeof(null==(t=e.data)?void 0:t.stage)){let t=e.data.stage,n="string"==typeof e.data.status?e.data.status:"",a=/(fail|block|abandon|reject|error)/i.test(n)||/(fail|block|abandon)/i.test(t)?"bad":s,r=/^(implement|repair)/i.test(t)?"build":/^gat/i.test(t)?"gate":/^review/i.test(t)?"review":/(merged|pr-opened|landed|auto-merge)/i.test(t)?"land":null;if(r)return{stage:r,tone:"land"===r&&"bad"!==a?"ok":a}}return n.startsWith("goal-author")||n.startsWith("harness.frontdoor")||"dev-pipeline"===n&&/^(plan|selection|base-selection)$/.test(a)?{stage:"author",tone:s}:n.startsWith("self-dev")&&/decompos/i.test(a)||"self-dev.orchestrate"===n&&"start"===a?{stage:"decompose",tone:s}:n.startsWith("self-dev.spawn")||n.startsWith("harness.substrate")||"self-implement"===n||"dev-pipeline"===n&&"harness.launch"===a?{stage:"build",tone:s}:n.startsWith("self-gate")||n.startsWith("self-dev.reduce")&&/gate/i.test(a)?{stage:"gate",tone:s}:n.startsWith("review-loop")&&/(merged|auto-merge)/i.test(a)?{stage:"land",tone:"ok"}:n.startsWith("review-loop")?{stage:"review",tone:s}:n.startsWith("self-dev.reduce")&&/(pr-opened|merged)/i.test(a)||"dev-pipeline"===n&&"done"===a?{stage:"land",tone:s}:{stage:null,tone:s}}let u=e=>"string"==typeof e&&e.trim()?e:null,p=e=>"number"==typeof e&&Number.isFinite(e)?e:0;function h(e){var t,n,a,s,r;let l=null!=(t=e.data)?t:{},o=null!=(n=u(l.pr))?n:p(l.prNumber)?String(l.prNumber):null;return e.category.startsWith("review-loop")&&"judge-verdict"===e.event?"리뷰 판정: ".concat(null!=(a=u(l.verdict))?a:"?").concat(o?" \xb7 #".concat(o):"").concat(p(l.asks)?" \xb7 요구 ".concat(p(l.asks)):""):e.category.startsWith("review-loop")&&/merged/.test(e.event)?"자동 병합".concat(o?" #".concat(o):""):e.category.startsWith("review-loop")&&"rework-start"===e.event?"리뷰 반영 라운드 ".concat(p(l.round)||"?"," 시작").concat(o?" \xb7 #".concat(o):""):e.category.startsWith("llm.router")&&/fallback/i.test(e.event)?"모델 폴백: ".concat(null!=(s=u(l.from))?s:"?"," → ").concat(null!=(r=u(l.to))?r:"?"):e.category.startsWith("oauth")&&/rotat/i.test(e.event)?"계정 회전".concat(u(l.account)?": ".concat(u(l.account)):""):e.category.startsWith("harness.boundary")?"경계 밖 쓰기 거절".concat(u(l.path)?": ".concat(u(l.path)):""):e.category.startsWith("self-dev.reduce")&&/gate-failed/.test(e.event)?"게이트 실패 → 수리 라운드":"dev-pipeline"===e.category&&"rejected"===e.event?"발사 전 검사가 막았다".concat(u(l.reason)?": ".concat(u(l.reason)):""):null}function m(e,t){let n=new Date(e);return Number.isNaN(n.getTime())?e.slice(11,19):n.toLocaleTimeString("en-GB",{hour12:!1,...t?{timeZone:t}:{}})}function f(e){return/Error:|ENOENT|EACCES|EPERM|ECONN|TypeError|\bstack\b|at\s+\S+\s+\(|\/Users\/|\/home\/|\\/.test(e)}function x(e,t){return null==e?e:"owner"!==t&&f(e)?"실패 — 자세한 사유는 오너 화면에서":e}function g(e,t){var n;let a=null!=(n=e.data)?n:{},s=["runId","pr","verdict","model","provider","round","reason"].map(e=>void 0!==a[e]&&null!==a[e]&&""!==a[e]?"".concat(e,"=").concat(String(a[e]).slice(0,40)):null).filter(Boolean).join(" ");return"".concat(m(e.ts,t)," ").concat(e.category," ").concat(e.event).concat(s?" \xb7 ".concat(s):"").replace(/\b(sk-[A-Za-z0-9_-]{8,}|ghp_[A-Za-z0-9]{8,}|gho_[A-Za-z0-9]{8,}|xox[abpr]-[A-Za-z0-9-]{8,}|AKIA[0-9A-Z]{12,})\b/g,"[redacted]").replace(/(Bearer\s+)[A-Za-z0-9._~+/=-]{8,}/gi,"$1[redacted]").replace(/("?(?:token|secret|password|apiKey|api_key|authorization)"?\s*[:=]\s*")[^"]{4,}"/gi,'$1[redacted]"')}let v=["PLAN","ROUTE","VERIFY","HEAL","ESCALATE","SHIP"];function b(e){let t=e.category,n=e.event;if("harness.decision"===t){var a;let t="string"==typeof(null==(a=e.data)?void 0:a.kind)?e.data.kind.toUpperCase():"";return v.includes(t)?t:null}return t.startsWith("review-loop")&&/merged/.test(n)||t.startsWith("self-dev.reduce")&&/(pr-opened|merged)/.test(n)?"SHIP":/(needs-human|hitl|escalat|parked)/i.test(n)||"dev-pipeline"===t&&"rejected"===n?"ESCALATE":t.startsWith("review-loop")&&/^rework-start$/.test(n)||/repair|rework-round/i.test(n)||t.startsWith("self-dev.supervisor")&&/(resume|retry)/i.test(n)?"HEAL":t.startsWith("review-loop")&&/verdict/.test(n)||t.startsWith("self-gate")||t.startsWith("self-dev.reduce")&&/gate/.test(n)?"VERIFY":t.startsWith("oauth.codex-account")&&/rotation$/.test(n)||t.startsWith("llm.router")&&/fallback/i.test(n)||t.startsWith("harness.role-llm")||t.startsWith("harness.substrate")&&/dispatch/.test(n)||t.startsWith("harness.boundary")?"ROUTE":t.startsWith("goal-author")&&/(done|assembled|phase-end)/.test(n)||t.startsWith("self-dev")&&/decompos/i.test(n)||"dev-pipeline"===t&&"plan"===n?"PLAN":null}function y(e,t,n){let r=function(e,t,n){var a,s,r,l,o,i,c,m,f,x;let g=n.now-6e4*n.windowMinutes,v=e.filter(e=>Date.parse(e.ts)>=g).sort((e,t)=>Date.parse(e.ts)-Date.parse(t.ts)),b=new Map,y=[],w=new Map,k=new Map,j=0,N=0;for(let e of v){let t=null!=(s=e.data)?s:{},n=u(t.runId);if(e.category.startsWith("llm.usage")){j+=1,N+=p(t.inputTokens)+p(t.outputTokens)+p(t.totalTokens&&!t.inputTokens?t.totalTokens:0);let e=null!=(l=null!=(r=u(t.model))?r:u(t.provider))?l:"unknown";w.set(e,(null!=(o=w.get(e))?o:0)+1)}if(e.category.startsWith("review-loop")&&"judge-verdict"===e.event){let e=null!=(i=u(t.verdict))?i:"unknown";k.set(e,(null!=(c=k.get(e))?c:0)+1)}let a=h(e),{stage:x,tone:g}=d(e);if(a&&y.push({ts:e.ts,runId:n,tone:/merged/.test(e.event)?"ok":g,text:a}),!n||!x)continue;let v=null!=(m=b.get(n))?m:{runId:n,stages:{},current:null,lastTs:e.ts,events:0,blocked:!1,pr:null,ledgerStatus:null};v.stages[x]=g,v.current=x,v.lastTs=e.ts,v.events+=1,v.blocked="bad"===g,v.pr=null!=(f=u(t.pr))?f:p(t.prNumber)?String(p(t.prNumber)):v.pr,b.set(n,v)}let M=new Map(t.map(e=>[e.runId,e]));for(let e of b.values())e.ledgerStatus=null!=(x=null==(a=M.get(e.runId))?void 0:a.status)?x:null;let S=[...b.values()].sort((e,t)=>Date.parse(t.lastTs)-Date.parse(e.lastTs)),E=S.filter(e=>"land"!==e.current&&n.now-Date.parse(e.lastTs)<9e5).length,I=e=>[...e.entries()].map(e=>{let[t,n]=e;return{name:t,count:n}}).sort((e,t)=>t.count-e.count);return{runs:S,cards:y.slice(-40).reverse(),counters:{activeRuns:E,llmRequests:j,llmRequestsPerMin:n.windowMinutes>0?Math.round(j/n.windowMinutes*10)/10:0,tokens:N,landed:S.filter(e=>"ok"===e.stages.land).length,blocked:S.filter(e=>e.blocked).length},providers:I(w),reviewVerdicts:I(k),windowMinutes:n.windowMinutes}}(e,t,n),i=n.now-6e4*n.windowMinutes,c=e.filter(e=>Date.parse(e.ts)>=i).sort((e,t)=>Date.parse(e.ts)-Date.parse(t.ts)),m=[],f={},x=new Set,g=new Map,v=new Map,y=new Map,w=0,k=new Set(c.filter(e=>"harness.decision"===e.category).map(e=>b(e)).filter(Boolean));for(let e of c){var j,N,M,S,E,I,A,C,R,T,L,P,O,F,W;let t=null!=(j=e.data)?j:{},n=u(t.runId);if(e.category.startsWith("review-loop")&&p(t.round)&&n&&(f[n]=Math.max(null!=(N=f[n])?N:0,p(t.round))),e.category.startsWith("review-loop")&&"judge-verdict"===e.event&&u(t.pr)&&p(t.round)){let e=null!=(M=y.get(u(t.pr)))?M:new Map;e.set(p(t.round),p(t.asks)),y.set(u(t.pr),e)}if(e.category.startsWith("llm.usage")){let e=p(t.inputTokens)+p(t.outputTokens);w+=e;let n=null!=(S=u(t.model))?S:"unknown",a=null!=(E=v.get(n))?E:{requests:0,tokens:0,billing:u(t.billing)};a.requests+=1,a.tokens+=e,v.set(n,a)}let r=b(e);if(!r||"harness.decision"!==e.category&&k.has(r))continue;let i="harness.decision"===e.category&&"string"==typeof t.what?function(e,t){var n,r;let i,c=/^execution-loop (budget|placement|relation|memory) gate$/.exec(e);if(!c)return null;let d=c[1],u="관문 \xb7 ".concat(a[d]),p=null;try{p=s(JSON.parse(null!=t?t:""))}catch(e){p=null!=(n=function(e,t){if(!t||t.startsWith("{"))return null;if(t.startsWith("unavailable"))return{decision:"unavailable"};let n=new Map;for(let e of t.split(" \xb7 ")){let t=e.indexOf("=");t>0&&!n.has(e.slice(0,t))&&n.set(e.slice(0,t),e.slice(t+1))}if(!n.size)return null;switch(e){case"budget":if(!n.has("action"))return null;return{decision:{action:n.get("action"),...n.get("provider")?{provider:n.get("provider")}:{},reasons:n.get("reason")?[n.get("reason")]:[]}};case"placement":{if(!n.has("substrate"))return null;let e=n.get("pool");return{decision:{substrate:n.get("substrate"),pool:e&&"none"!==e?e:null,...n.get("memory")?{memory:{limit:n.get("memory")}}:{}}}}case"relation":{let e=Number(n.get("overlap"));if(!Number.isInteger(e)||e<0)return null;return{decision:{action:"record",overlappingCards:Array.from({length:e},(e,t)=>"card-".concat(t+1))}}}case"memory":{let e=n.get("context");if("recalled"!==e&&"none"!==e)return null;return{decision:{action:"record",context:"recalled"===e?"recalled":null}}}}}(d,null!=t?t:""))?n:function(e){if(!e.startsWith('{"decision":{'))return null;let t={},n=t=>{var n;return null==(n=new RegExp('"'.concat(t,'":"([^"\\\\]*)"')).exec(e))?void 0:n[1]},a=n("action");a&&(t.action=a);let s=n("provider");s&&(t.provider=s);let r=n("substrate");r&&(t.substrate=r);let l=/"pool":(null|"([^"\\]*)")/.exec(e);l&&(t.pool="null"===l[1]?null:l[2]);let o=/"memory":\{[^}]*"limit":"([^"\\]*)"/.exec(e);o&&(t.memory={limit:o[1]});let i=/"overlappingCards":\[([^\]]*)\]/.exec(e);i&&(t.overlappingCards=i[1].trim()?i[1].split(",").map(e=>e.trim().replace(/^"|"$/g,"")):[]);let c=/"context":(null|")/.exec(e);if(c&&(t.context="null"===c[1]?null:"recalled"),/"reasons":\[/.test(e)){let n=/"reasons":\[((?:"[^"\\]*",?)*)\]/.exec(e);t.reasons=n?[...n[1].matchAll(/"([^"\\]*)"/g)].map(e=>e[1]):[]}return Object.keys(t).length?{decision:t}:null}(null!=t?t:"")}let h=s(null==p?void 0:p.decision),m=null==p?void 0:p.explanation;if(!h)return{what:u,why:o(m)};switch(d){case"budget":{let e,t=h.action,n="string"==typeof(e=h.provider)&&/^(openai-codex|grok|anthropic|openai|google|local|openrouter)$/.test(e)?e:null,a="proceed"===t?"그대로 진행":"next-provider"===t?"다른 제공자로".concat(n?"(".concat(n,")"):""):"wait-reset"===t?"한도 회복까지 대기":"stop"===t?"멈춤":null;if(!a||!Array.isArray(h.reasons))return{what:u,why:o(m)};let s=l(h.reasons[0]);i="".concat(a).concat(s?" \xb7 ".concat(s):"");break}case"placement":{let e,t,n=h.substrate;if("pod"!==n&&"local"!==n&&"unknown"!==n)return{what:u,why:o(m)};let a="string"==typeof(e=h.pool)&&/^(?:fast-\d{1,2}|pool-msb\d{1,2}(?:@msb\d{1,2}:\d{1,2})?)$/.test(e)?e:null,l="string"==typeof(t=null==(r=s(h.memory))?void 0:r.limit)&&/^\d+(?:\.\d+)?\s*(?:[KMGT]i?B?|bytes?)$/i.test(t)?t.replace(/\s+/g," "):null;i="".concat("pod"===n?"Pod".concat(a?" ".concat(a):""):"local"===n?"이 기기":"모름").concat(l?" \xb7 메모리 한도 ".concat(l):"");break}case"relation":if("record"!==h.action||!Array.isArray(h.overlappingCards)||!h.overlappingCards.every(e=>"string"==typeof e))return{what:u,why:o(m)};i=h.overlappingCards.length?"겹치는 카드 ".concat(h.overlappingCards.length,"개"):"겹치는 일 없음";break;case"memory":if("record"!==h.action||"string"!=typeof h.context&&null!==h.context)return{what:u,why:o(m)};i=h.context?"지난 기록 있음":"지난 기록 없음"}return{what:u,why:i}}(t.what,null!=(I=u(t.reason))?I:void 0):null,c=null!=(C=null!=(A=null==i?void 0:i.why)?A:u(t.reason))?C:u(t.why),d=i?null:u(t.purpose),H=i?null:null!=(O=null!=(T=null!=(R=u(t.target))?R:u(t.to))?T:u(t.account))?O:"SHIP"===r&&(null!=(L=u(t.pr))?L:p(t.prNumber)?String(p(t.prNumber)):null)?"#".concat(null!=(P=u(t.pr))?P:p(t.prNumber)):null,q=i?null:n;"HEAL"===r&&n&&x.add(n);let D=p(t.paths)||void 0;m.push({ts:e.ts,kind:r,runId:q,what:null!=(F=null==i?void 0:i.what)?F:function(e,t){var n,a;return"harness.decision"===e.category&&"string"==typeof(null==(n=e.data)?void 0:n.what)?e.data.what:null!=(a=h(e))?a:"".concat(e.category," ").concat(e.event).slice(0,80)}(e,0),why:c,purpose:d,target:H,...D?{paths:D}:{}});let U=[c?null:"why",d?null:"purpose",H?null:"target"].filter(Boolean);if(U.length){let t=i?"harness.decision decision":"".concat(e.category," ").concat(e.event),n=null!=(W=g.get(t))?W:{count:0,lacks:new Set};n.count+=1,U.forEach(e=>n.lacks.add(e)),g.set(t,n)}}let H=[...x],q=H.filter(e=>{var t;return(null==(t=r.runs.find(t=>t.runId===e))?void 0:t.stages.land)==="ok"}).length;return{snapshot:r,gauges:{live:r.counters.activeRuns,decisions:m.length,decisionsPerMin:n.windowMinutes>0?Math.round(m.length/n.windowMinutes*10)/10:0,shipped:m.filter(e=>"SHIP"===e.kind).length,selfHealRate:H.length?Math.round(q/H.length*100):null,selfHealRuns:H.length,burnTokensPerMin:n.windowMinutes>0?Math.round(w/n.windowMinutes):0},stream:m.slice(-80).reverse(),emitted:c.filter(e=>"harness.decision"===e.category).length,rounds:f,convergence:[...y.entries()].map(e=>{let[t,n]=e;return{pr:t,points:[...n.entries()].sort((e,t)=>e[0]-t[0]).map(e=>{let[t,n]=e;return{round:t,asks:n}})}}),scorecard:[...v.entries()].map(e=>{let[t,n]=e;return{model:t,...n}}).sort((e,t)=>t.requests-e.requests),missing:[...g.entries()].map(e=>{let[t,n]=e;return{key:t,count:n.count,lacks:[...n.lacks]}}).sort((e,t)=>t.count-e.count)}}},71733:(e,t,n)=>{n.d(t,{HI:()=>l});var a=n(24815),s=n(85458),r=n(27346);function l(e){var t,n,l;let o=(0,r.M1)(),i=(t,n)=>{var a;return{queryKey:["live","logs",t,null!=(a=e.store)?a:"",e.windowMinutes],queryFn:()=>o.getLogs({category:t,since:"".concat(e.windowMinutes,"m"),limit:n,store:e.store}),refetchInterval:5e3}},c=(0,s.I)(i("goal-author,harness.frontdoor,harness.substrate,harness.boundary,harness.role-llm,dev-pipeline,self-dev,self-gate,review-loop",1500)),d=(0,s.I)(i("llm.usage",2e3)),u=(0,s.I)(i("harness.decision,oauth.codex-account,harness.boundary",300)),p=(0,s.I)(i("research",300)),h=(0,a.useMemo)(()=>{var e,t,n,a,s,r,l,o;return[...null!=(s=null==(e=c.data)?void 0:e.logs)?s:[],...null!=(r=null==(t=d.data)?void 0:t.logs)?r:[],...null!=(l=null==(n=u.data)?void 0:n.logs)?l:[],...null!=(o=null==(a=p.data)?void 0:a.logs)?o:[]]},[c.data,d.data,u.data,p.data]),m={data:(0,a.useMemo)(()=>({ok:!0,logs:h,count:h.length}),[h]),error:null!=(l=null!=(n=null!=(t=c.error)?t:d.error)?n:u.error)?l:null,dataUpdatedAt:Math.max(c.dataUpdatedAt,d.dataUpdatedAt,u.dataUpdatedAt,p.dataUpdatedAt),truncated:[c,d,u].some(e=>e.data&&e.data.count>=(e===d?2e3:e===c?1500:300)),...function(e){let t=new Set,n=new Set,a=null;for(let l of e){var s,r;for(let e of null!=(s=null==l?void 0:l.stores)?s:[])t.add(e);for(let e of null!=(r=null==l?void 0:l.failedStores)?r:[])n.add(e.name);"number"==typeof(null==l?void 0:l.registeredStores)&&(a=Math.max(null!=a?a:0,l.registeredStores))}return{stores:[...t],failedStores:[...n],registeredStores:a}}([c.data,d.data,u.data,p.data])};return{logs:m,runs:(0,s.I)({queryKey:["live","runs"],queryFn:()=>o.getHarnessRuns(),refetchInterval:6e4}),instances:(0,s.I)({queryKey:["live","instances"],queryFn:()=>o.getLogInstances(),staleTime:6e4})}}},99239:(e,t,n)=>{n.d(t,{xl:()=>E});var a=n(65863),s=n(24815),r=n(55210);let l={author:"PLAN",decompose:"PLAN",build:"ROUTE",gate:"VERIFY",review:"VERIFY",land:"SHIP"},o=(e,t)=>"phase:".concat(e,":").concat(t),i=new Set(["model","target","account","universe","pod"]);var c=n(52132),d=n(22717);function u(e,t){return t>=0?"런 ".concat(t+1):"미등록 런"}let p=new Map;function h(e){let t=p.get(e);if(t)return t;let n=p.size+1,a="";for(;n>0;)n-=1,a=String.fromCharCode(65+n%26)+a,n=Math.floor(n/26);let s="계정 ".concat(a);return p.set(e,s),s}let m=new Map,f=new Map;function x(e){if(/^(?:chatgpt|gpt)(?:[-_.\s]|\d|$)/i.test(e))return"GPT";if(/^claude(?:[-_.\s]|\d|$)/i.test(e))return"Claude";if(/^grok(?:[-_.\s]|\d|$)/i.test(e))return"Grok";let t=f.get(e);return t||(t="모델 ".concat(f.size+1),f.set(e,t)),t}let g={ROUTE:"경로 정하기",PLAN:"계획",HEAL:"스스로 수리",SHIP:"착지",VERIFY:"검증",ESCALATE:"사람에게 묻기"};function v(e){let t=g[e];return(0,d.Wf)(t)?t:"신호"}let b={PLAN:"#38bdf8",ROUTE:"#a78bfa",VERIFY:"#fbbf24",HEAL:"#34d399",ESCALATE:"#fb7185",SHIP:"#4ade80"},y={harness:"#e0e7ff",run:"#818cf8",phase:"#c7d2fe",pr:"#4ade80",model:"#f0abfc",target:"#93c5fd",event:"#a5b4fc",site:"#f5d0fe",account:"#fbcfe8",request:"#f0abfc",universe:"#67e8f9",piece:"#7dd3fc",pod:"#fcd34d"},w={ok:"#4ade80",bad:"#fb7185",info:"#c7d2fe"},k=["#f0abfc","#c4b5fd","#93c5fd","#67e8f9","#a7f3d0","#fde68a","#fca5a5"],j={harness:16,run:8,phase:5.5,pr:5,model:7,target:4,event:2.6,site:3,account:6,request:1.2,universe:7,piece:3.4,pod:7},N=new Set(["harness","run","phase","pr","model","account","target","universe","pod"]),M=[];function S(e){return!!(e.why||e.purpose||e.target)}function E(e){var t,n,p,m;let{board:f,rows:E=M,windowMinutes:D=60,sourceLabel:B="this instance",shippedSource:$="log",autoReplay:z=!0,publicCapture:G=!1,onSelectRun:V,role:Y="owner"}=e,_=(0,s.useRef)(null),J=(0,s.useRef)({nodes:[],edges:[]}),K=(0,s.useRef)([]),X=(0,s.useRef)([]),Z=(0,s.useRef)(null),Q=(0,s.useRef)([]),[ee,et]=(0,s.useState)(null),[en,ea]=(0,s.useState)(!1),[es,er]=(0,s.useState)(0),[el,eo]=(0,s.useState)(""),[ei,ec]=(0,s.useState)(5),[ed,eu]=(0,s.useState)({nodes:0,edges:0}),ep=(0,s.useRef)(1500),eh=()=>"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,em=e=>{K.current.push({from:e.from,to:e.to,kind:e.kind,t:0,speed:.022,alpha:1,size:3.6}),"SHIP"===e.kind&&X.current.push({id:e.to,t:0})},ef=(0,s.useMemo)(()=>(0,c.Gp)(E),[E]),ex=(0,s.useMemo)(()=>{var e,t,n;let a=new Map,s=new Set(E.filter(e=>"harness.decision"===e.category).map(r.bh).filter(e=>null!==e)),l=new Map;for(let t of[...E].sort((e,t)=>Date.parse(e.ts)-Date.parse(t.ts))){let n=(0,r.bh)(t);if(!n||"harness.decision"!==t.category&&s.has(n))continue;let a="".concat(t.ts,"|").concat(n),o=null!=(e=l.get(a))?e:[];o.push("harness.decision"===t.category?v(n):function(e,t){let n=(0,r.bh)({category:e,event:t}),a=n?g[n]:"신호";return(0,d.Wf)(a)?a:"신호"}(t.category,t.event)),l.set(a,o)}for(let e of f.stream)a.set(e,null!=(n=null==(t=l.get("".concat(e.ts,"|").concat(e.kind)))?void 0:t.pop())?n:v(e.kind));return a},[f.stream,E]),eg=e=>{var t;return null!=(t=ex.get(e))?t:v(e.kind)},ev=(0,s.useMemo)(()=>{let e=Date.now(),t=6e4*D,n=(0,c.lb)(E).map(e=>e.ms/6e4).filter(e=>e>0),a=ef.map(e=>e.input+e.output).filter(e=>e>0);return{now:e,candles:(0,c.OL)(ef,e,40,Math.max(6e4,6e4*Math.ceil(t/40/6e4))),bucketMin:Math.max(1,Math.ceil(t/40/6e4)),ticker:(0,c.kJ)(ef,e,t),heat:(0,c.f)(ef),hist:(0,c.JW)(n,40),tokHist:(0,c.JW)(a.map(e=>Math.log10(e)),40),spans:n.length,gate:(0,c.cD)(E),load:(0,c.HR)(f),events:(0,c.fT)(E),universes:(0,c.IE)(E),plans:(0,c.D3)(E),pods:(0,c.GJ)(E),retries:(0,c.Jo)(E)}},[ef,E,f,D]),eb=(0,s.useRef)([]);for(let e of f.snapshot.runs)eb.current.includes(e.runId)||eb.current.push(e.runId);for(let e of f.stream)e.runId&&!eb.current.includes(e.runId)&&eb.current.push(e.runId);let ey=e=>(eb.current.includes(e)||eb.current.push(e),u(e,eb.current.indexOf(e))),ew=(0,s.useMemo)(()=>{let e=new Map;return ev.ticker.forEach((t,n)=>e.set(t.model,k[n%k.length])),t=>{var n;return null!=(n=e.get(t))?n:"#a5b4fc"}},[ev.ticker]);(0,s.useEffect)(()=>{let e=()=>{eo(new Date().toLocaleTimeString(void 0,{hour12:!1})),ec(e=>e<=1?5:e-1)};e();let t=window.setInterval(e,1e3);return()=>window.clearInterval(t)},[]),(0,s.useEffect)(()=>{ec(5)},[E]),(0,s.useEffect)(()=>{var e,t;let n=function(e){var t,n,a,s,i,c,d,u;let p=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},h=new Map,m=[],f=function(e,t,n){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,s=h.get(e);if(s)return s.weight+=a,s;let r="harness"===t?{x:.5,y:.5}:function(e){let t=0x811c9dc5;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),0x1000193);let n=(t>>>0)%3600/3600*Math.PI*2,a=.25+(t>>>12)%1e3/1e3*.2;return{x:.5+Math.cos(n)*a,y:.5+Math.sin(n)*a}}(e),l={id:e,kind:t,label:n,weight:a,x:r.x,y:r.y,vx:0,vy:0};return h.set(e,l),l},x=(e,t,n)=>{m.some(a=>a.from===e&&a.to===t&&a.kind===n)||m.push({from:e,to:t,kind:n})};for(let t of(f("harness","harness","harness",3),e.snapshot.runs.slice(0,12).forEach((e,t)=>{let n="run:".concat(e.runId);f(n,"run",e.runId.replace(/^run-/,"").slice(0,6),2),x("harness",n,"PLAN");let a=null;if(t<8){let t=n;for(let n of r.lV){let s=e.stages[n];if(!s&&e.current!==n)continue;let i=o(e.runId,n),c=f(i,"phase",r.fQ[n]);c.current=e.current===n,c.tone=null!=s?s:"info",x(t,i,"bad"===s?"ESCALATE":l[n]),t=i,a=i}}e.pr&&(f("pr:".concat(e.pr),"pr","#".concat(e.pr)),x(null!=a?a:n,"pr:".concat(e.pr),"ok"===e.stages.land?"SHIP":"VERIFY")),e.blocked&&x(n,"harness","ESCALATE")}),e.scorecard.slice(0,6)))f("model:".concat(t.model),"model",t.model.length>18?"".concat(t.model.slice(0,17),"…"):t.model,Math.max(1,Math.round(Math.log2(1+t.requests)))),x("harness","model:".concat(t.model),"ROUTE");let g=0;for(let e of null!=(t=p.events)?t:[]){if(g>=180)break;let t="run:".concat(e.runId);if(!h.has(t))continue;let n=e.stage?o(e.runId,e.stage):null,a=n&&h.has(n)?n:t,s=f("ev:".concat(e.key),"event",e.label,Math.max(1,Math.round(Math.log2(1+e.count))));e.bad&&(s.tone="bad"),x(a,s.id,e.bad?"ESCALATE":e.stage?l[e.stage]:"PLAN"),g+=1}let v=new Set,b=0;for(let e of null!=(n=p.reqs)?n:[]){let t="model:".concat(e.model);if(!h.has(t))continue;let n="site:".concat(e.model,"|").concat(e.site);if(v.has(n)?h.get(n).weight+=.05:(v.add(n),f(n,"site",e.site),x(t,n,"ROUTE")),e.provider){let n="acct:".concat(e.provider);h.has(n)||f(n,"account",e.provider,2),x(n,t,"ROUTE")}b<220&&(x(n,f("req:".concat(e.model,"|").concat(e.site,"|").concat(e.ts,"|").concat(b),"request","",Math.max(1,Math.log10(1+e.input+e.output))).id,"ROUTE"),b+=1)}for(let e of null!=(a=p.universes)?a:[]){let t="run:".concat(e.runId);if(!h.has(t))continue;let n="uni:".concat(e.instance);h.has(n)?h.get(n).weight+=1:f(n,"universe",e.instance,2),x(n,t,"PLAN")}for(let e of null!=(s=p.plans)?s:[]){let t="run:".concat(e.runId);if(!h.has(t))continue;let n=o(e.runId,"decompose"),a=h.has(n)?n:t;e.pieces.forEach((t,n)=>{let s="piece:".concat(e.runId,":").concat(n);f(s,"piece",t.length>22?"".concat(t.slice(0,21),"…"):t,1.5),x(a,s,"PLAN")})}for(let e of null!=(i=p.pods)?i:[]){let t="pod:".concat(e.pool);h.has(t)?h.get(t).weight+=.2:f(t,"pod",null!=(c=e.pool.replace(/^pool-/,"").split("@")[0])?c:e.pool,2),x("harness",t,"ROUTE")}for(let e of null!=(d=p.retries)?d:[]){let t=h.get(o(e.runId,e.stage));t&&(t.retries=Math.max(null!=(u=t.retries)?u:0,e.retries))}let y=0;for(let t of e.stream){let e=t.runId&&h.has("run:".concat(t.runId))?"run:".concat(t.runId):"harness";if("SHIP"===t.kind&&t.target)f("pr:".concat(t.target.replace(/^#/,"")),"pr",t.target),x(e,"pr:".concat(t.target.replace(/^#/,"")),"SHIP");else if(t.target&&y<10&&!t.target.startsWith("#")){let n="target:".concat(t.target);h.has(n)||(y+=1),f(n,"target",t.target.length>18?"".concat(t.target.slice(0,17),"…"):t.target),x(e,n,t.kind)}else("HEAL"===t.kind||"VERIFY"===t.kind)&&x(e,e,t.kind)}return{nodes:[...h.values()],edges:m}}(f,{events:ev.events,reqs:ef,universes:ev.universes,plans:ev.plans,pods:ev.pods,retries:ev.retries}),a=new Map(J.current.nodes.map(e=>[e.id,e]));for(let e of n.nodes){let t=a.get(e.id);t&&(e.x=t.x,e.y=t.y,e.vx=t.vx,e.vy=t.vy)}J.current=n,eu(e=>e.nodes===n.nodes.length&&e.edges===n.edges.length?e:{nodes:n.nodes.length,edges:n.edges.length});let s=ev.pods.map(e=>"pod|".concat(e.ts,"|").concat(e.pool));if(Z.current)for(let e of ev.pods){let t="pod|".concat(e.ts,"|").concat(e.pool);Z.current.has(t)||em({from:"harness",to:"pod:".concat(e.pool),kind:"ROUTE"})}let i=function(e,t){let n=[];for(let s of t.stream){var a;let t="".concat(s.ts,"|").concat(s.kind,"|").concat(null!=(a=s.runId)?a:"","|").concat(s.what);if(e.has(t))continue;let r=s.runId?"run:".concat(s.runId):"harness",l="SHIP"===s.kind&&s.target?"pr:".concat(s.target.replace(/^#/,"")):s.target?"target:".concat(s.target):r;n.push({key:t,kind:s.kind,from:r,to:l})}return n}(null!=(e=Z.current)?e:new Set,f);if(Z.current){let e=new Map(f.stream.map(e=>{var t;return["".concat(e.ts,"|").concat(e.kind,"|").concat(null!=(t=e.runId)?t:"","|").concat(e.what),e]})),t=[...i].reverse();t.forEach((n,a)=>{let s=e.get(n.key);!s||!S(s)||eh()||a<t.length-6?em(n):Q.current.push({key:n.key,line:s,from:n.from,to:n.to})}),er(e=>e+1)}Z.current=new Set([...null!=(t=Z.current)?t:[],...i.map(e=>e.key),...s])},[f,ev.events,ev.universes,ev.plans,ev.pods,ev.retries,ef]),(0,s.useEffect)(()=>{if(ee)return;let e=Q.current.shift();if(!e){en&&ea(!1);return}et({item:e,folding:!1})},[ee,es,en]),(0,s.useEffect)(()=>{if(!ee)return;if(!ee.folding){let e=setTimeout(()=>et({item:ee.item,folding:!0}),ep.current);return()=>clearTimeout(e)}em({from:ee.item.from,to:ee.item.to,kind:ee.item.line.kind});let e=setTimeout(()=>et(null),250);return()=>clearTimeout(e)},[ee]),(0,s.useEffect)(()=>{ep.current=en?550:1500},[en]);let ek=(0,s.useRef)(!1);(0,s.useEffect)(()=>{if(!z||ek.current||0===f.stream.length||eh())return;ek.current=!0;let e=setTimeout(()=>ej(),1200);return()=>clearTimeout(e)},[f.stream.length]);let ej=()=>{Q.current=f.stream.filter(S).slice(0,40).reverse().map(e=>{let t=e.runId?"run:".concat(e.runId):"harness",n="SHIP"===e.kind&&e.target?"pr:".concat(e.target.replace(/^#/,"")):e.target?"target:".concat(e.target):t;return{key:"replay|".concat(e.ts,"|").concat(e.what),line:e,from:t,to:n}}),ea(!0),er(e=>e+1)};(0,s.useEffect)(()=>{let e=_.current;if(!e)return;let t=e.getContext("2d");if(!t)return;let n=eh(),a=new Map,s=e=>{let t=a.get(e);if(t)return t;let n=document.createElement("canvas");n.width=64,n.height=64;let s=n.getContext("2d");if(s){let t=s.createRadialGradient(32,32,0,32,32,32);t.addColorStop(0,"".concat(e,"ff")),t.addColorStop(.25,"".concat(e,"88")),t.addColorStop(1,"".concat(e,"00")),s.fillStyle=t,s.fillRect(0,0,64,64)}return a.set(e,n),n},r=0,l=0,o=()=>{let a=window.devicePixelRatio||1,c=e.clientWidth,d=e.clientHeight;(e.width!==Math.round(c*a)||e.height!==Math.round(d*a))&&(e.width=Math.round(c*a),e.height=Math.round(d*a)),t.setTransform(a,0,0,a,0,0);let p=J.current;n||function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,{nodes:n,edges:a}=e,s=new Map(n.map(e=>[e.id,e])),r=Math.min(1,60/Math.max(1,n.length));for(let e=0;e<n.length;e++)for(let t=e+1;t<n.length;t++){let a=n[e],s=n[t],l=a.x-s.x,o=a.y-s.y,i=l*l+o*o;i<1e-6&&(l=.01,o=.01,i=2e-4);let c=e=>"phase"===e||"request"===e||"event"===e||"piece"===e,d=r*(c(a.kind)||c(s.kind)?"request"===a.kind||"request"===s.kind?12e-6:5e-5:18e-5)/i;a.vx+=l*d,a.vy+=o*d,s.vx-=l*d,s.vy-=o*d}for(let e of a){if(e.from===e.to)continue;let t=s.get(e.from),n=s.get(e.to);if(!t||!n)continue;let a=n.x-t.x,r=n.y-t.y,l=Math.sqrt(a*a+r*r)||.001,o=(l-("request"===n.kind?.035:"site"===n.kind?.06:i.has(t.kind)||i.has(n.kind)?.34:"harness"===t.kind||"harness"===n.kind?.2:"phase"===t.kind||"phase"===n.kind?.07:.12))*("phase"===t.kind||"phase"===n.kind?.05:.02);t.vx+=a/l*o,t.vy+=r/l*o,n.vx-=a/l*o,n.vy-=r/l*o}for(let e of n){if("harness"===e.kind){e.x=.5,e.y=.5,e.vx=0,e.vy=0;continue}if(i.has(e.kind)){let t=e.x-.5,n=e.y-.5,a=Math.sqrt(t*t+n*n)||.001,s=(("universe"===e.kind?.44:.3)-a)*.01;e.vx+=t/a*s,e.vy+=n/a*s}else e.vx+=(.5-e.x)*.003,e.vy+=(.5-e.y)*.003;e.x<.08&&(e.vx+=(.08-e.x)*.06),e.x>.92&&(e.vx-=(e.x-.92)*.06),e.y<.18&&(e.vy+=(.18-e.y)*.06),e.y>.87&&(e.vy-=(e.y-.87)*.06),e.vx*=.86,e.vy*=.86,e.x=Math.min(.97,Math.max(.03,e.x+e.vx*t)),e.y=Math.min(.95,Math.max(.1,e.y+e.vy*t))}}(p),l+=1;let m=new Map(p.nodes.map(e=>[e.id,e])),f=e=>n?0:1.4*Math.sin(l/40+e.id.length%7),g=e=>{let t=m.get(e);return t?{x:t.x*c+f(t),y:t.y*d+.7*f(t)}:null};for(let e of(t.clearRect(0,0,c,d),t.globalCompositeOperation="lighter",p.edges)){let n=g(e.from),a=g(e.to);n&&a&&(t.strokeStyle=b[e.kind],t.globalAlpha=e.to.startsWith("ev:")||e.to.startsWith("site:")?.15:.25,t.lineWidth="SHIP"===e.kind?1.4:.7,t.beginPath(),e.from===e.to?t.arc(n.x+8,n.y-8,8,0,2*Math.PI):(t.moveTo(n.x,n.y),t.lineTo(a.x,a.y)),t.stroke())}if(!n&&p.edges.length&&l%4==0&&K.current.length<110){let e=p.edges[7919*l%p.edges.length];e.from!==e.to&&K.current.push({from:e.from,to:e.to,kind:e.kind,t:0,speed:.008,alpha:.45,size:1.6})}for(let e of(K.current=K.current.filter(e=>e.t<=1),K.current)){let a=g(e.from),r=g(e.to);if(!a||!r){e.t=2;continue}e.t+=n?1:e.speed;let l=a.x+(r.x-a.x)*e.t,o=a.y+(r.y-a.y)*e.t-(e.from===e.to?24*Math.sin(e.t*Math.PI):0),i=5*e.size;t.globalAlpha=e.alpha,t.drawImage(s(b[e.kind]),l-i,o-i,2*i,2*i)}for(let e of(X.current=X.current.filter(e=>e.t<=1),X.current)){let a=g(e.id);if(!a){e.t=2;continue}e.t+=n?1:.014;let r=10+70*Math.min(1,e.t/.3);t.globalAlpha=1-e.t,t.strokeStyle=b.SHIP,t.lineWidth=2.5,t.beginPath(),t.arc(a.x,a.y,r,0,2*Math.PI),t.stroke(),t.drawImage(s(b.SHIP),a.x-r,a.y-r,2*r,2*r)}for(let e of p.nodes){let a=g(e.id),r="phase"===e.kind,o="harness"===e.kind||r&&e.current,i=j[e.kind]+("model"===e.kind||"run"===e.kind?Math.min(4,.4*e.weight):"event"===e.kind?Math.min(3,.5*e.weight):0),c=o&&!n?i*(1+Math.sin(l/(r?9:20))*(r?.35:.12)):i,d=(r||"event"===e.kind)&&e.tone?w[e.tone]:y[e.kind],u=o||"run"===e.kind||"model"===e.kind||"account"===e.kind||"universe"===e.kind,p=c*(u?8:3);if(t.globalAlpha=u?.6:.35,t.drawImage(s(d),a.x-p,a.y-p,2*p,2*p),t.globalAlpha="event"===e.kind?.85:1,t.fillStyle=d,t.beginPath(),t.arc(a.x,a.y,c,0,2*Math.PI),t.fill(),r&&e.retries){t.globalAlpha=.75,t.strokeStyle=b.HEAL,t.lineWidth=1,t.setLineDash([3,3]);for(let s=1;s<=Math.min(4,e.retries);s+=1)t.lineDashOffset=n?0:-(l*(.4+.1*s)),t.beginPath(),t.arc(a.x,a.y,c+4+4*s,0,2*Math.PI),t.stroke();t.setLineDash([])}if(r&&e.current&&!n){let e=l%60/60;t.strokeStyle=d,t.globalAlpha=1-e,t.lineWidth=1.2,t.beginPath(),t.arc(a.x,a.y,c+18*e,0,2*Math.PI),t.stroke()}}for(let e of(t.globalCompositeOperation="source-over",t.globalAlpha=1,p.nodes)){if(!N.has(e.kind))continue;let n=g(e.id);t.fillStyle="harness"===e.kind?"#eef2ff":"phase"===e.kind?"rgba(199,210,254,.65)":"rgba(226,232,240,.82)",t.font=G?"600 14px ui-monospace, SFMono-Regular, monospace":"harness"===e.kind?"600 12px ui-monospace, SFMono-Regular, monospace":"10px ui-monospace, SFMono-Regular, monospace";let a=G?"model"===e.kind?x(e.label):function(e,t){switch(e.kind){case"run":return u(e.id.slice(4),t.indexOf(e.id.slice(4)));case"universe":return e.label,"본부";case"account":return h(e.id.slice(5));case"pod":return h(e.id.slice(4));case"model":case"phase":return e.label;case"pr":return"PR";case"harness":return"ELANOUS HARNESS";default:return"경로"}}(e,eb.current):"harness"===e.kind?"ELANOUS HARNESS":"phase"===e.kind?e.label:e.label.toUpperCase();t.fillText(a,n.x+j[e.kind]+4,n.y+3)}n||(r=requestAnimationFrame(o))};r=requestAnimationFrame(o);let c=t=>{let n=e.getBoundingClientRect(),a=(t.clientX-n.left)/n.width,s=(t.clientY-n.top)/n.height,r=J.current.nodes.find(e=>"run"===e.kind&&.02>Math.hypot(e.x-a,e.y-s));r&&(null==V||V(r.id.replace(/^run:/,"")))};return e.addEventListener("click",c),()=>{cancelAnimationFrame(r),e.removeEventListener("click",c)}},[V,G]);let eN=f.gauges,eM=function(e){var t;let n=e.snapshot.runs.filter(e=>"ok"===e.stages.land);if(n.length)return{run:[...n].sort((t,n)=>{var a,s;return(null!=(a=e.rounds[n.runId])?a:0)-(null!=(s=e.rounds[t.runId])?s:0)||n.events-t.events})[0],why:"merged"};let a=null!=(t=e.snapshot.runs.find(e=>e.current&&!e.blocked))?t:e.snapshot.runs[0];return a?{run:a,why:"in-flight"}:null}(f),eS=null!=(t=null==eM?void 0:eM.run)?t:null,eE=Object.values(f.rounds),eI=r.jg.map(e=>({k:e,n:f.stream.filter(t=>t.kind===e).length})),eA=ef.reduce((e,t)=>e+t.input+t.output,0),eC=ef.reduce((e,t)=>e+t.apiUsd,0),eR=Math.max(1,...ef.slice(0,10).map(e=>e.input+e.output)),eT=eS?r.lV.filter(e=>eS.stages[e]):[];return(0,a.jsxs)("div",{className:"live-stage live-v5 space-y-1.5 rounded-xl p-1.5 text-slate-100","data-live-max-stage":!0,"data-live-v5":!0,children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 rounded-md border border-indigo-400/10 bg-slate-950/60 px-2 py-1",children:[(0,a.jsx)("span",{className:"shrink-0 text-xl tracking-tight text-slate-50",style:{fontFamily:'Georgia, "Times New Roman", serif'},children:"Elanous"}),(0,a.jsx)("span",{className:"hidden shrink-0 font-mono ".concat(G?"text-sm":"text-[11px]"," sm:inline ").concat(G?"text-sm":"lg:text-[10.5px]"," tracking-[.18em] text-indigo-200/80"),children:"\xd7 HARNESS \xb7 판단"}),(0,a.jsx)(C,{publicCapture:G,tone:"live",children:"● LIVE"}),(0,a.jsx)("div",{className:"min-w-0 flex-1",children:(0,a.jsx)(L,{publicCapture:G,ariaLabel:"판단 띠",bare:!0,items:f.stream.slice(0,16).map((e,t)=>(0,a.jsxs)("span",{className:G?"mx-4 whitespace-normal":"mx-4 whitespace-nowrap",children:[(0,a.jsxs)("span",{style:{color:b[e.kind]},children:["▸ ",G?"판단":e.kind]})," ",(0,a.jsx)("span",{className:"text-slate-300",children:G?eg(e):e.what}),!G&&e.target&&(0,a.jsxs)("span",{className:"text-slate-500",children:[" → ",e.target]})]},"".concat(e.ts,"-").concat(t)))})}),(0,a.jsx)("span",{className:"shrink-0 font-mono text-lg tabular-nums text-slate-200",suppressHydrationWarning:!0,children:el})]}),(0,a.jsx)(L,{publicCapture:G,ariaLabel:"모델 띠",slow:!0,items:[(0,a.jsxs)("span",{className:"mx-4 whitespace-nowrap",children:[(0,a.jsx)("span",{className:"text-rose-300",children:"● LIVE RUNS"})," ",eN.live]},"live"),(0,a.jsxs)("span",{className:"mx-4 whitespace-nowrap",children:[(0,a.jsx)("span",{className:"text-emerald-300",children:"SHIPPED"})," ",eN.shipped]},"ship"),(0,a.jsxs)("span",{className:"mx-4 whitespace-nowrap",children:[(0,a.jsx)("span",{className:"text-indigo-300",children:"DECISIONS/MIN"})," ",eN.decisionsPerMin]},"dpm"),(0,a.jsxs)("span",{className:"mx-4 whitespace-nowrap",children:[(0,a.jsx)("span",{className:"text-indigo-300",children:"BURN/MIN"})," ",I(eN.burnTokensPerMin)]},"burn"),...ev.ticker.map(e=>(0,a.jsxs)("span",{className:G?"mx-4 whitespace-normal":"mx-4 whitespace-nowrap",children:[(0,a.jsx)("span",{style:{color:ew(e.model)},children:G?x(e.model):e.model.toUpperCase()})," ",(0,a.jsx)("span",{className:e.delta>0?"text-emerald-300":e.delta<0?"text-rose-300":"text-slate-400",children:e.delta>0?"▲":e.delta<0?"▼":"■"})," ",e.count," req \xb7 ",I(e.tokens)," tok"]},e.model))]}),(0,a.jsxs)("div",{className:"grid grid-cols-12 gap-1.5",children:[(0,a.jsxs)(A,{publicCapture:G,className:"col-span-12 lg:col-span-4",title:"SHIPPED \xb7 병합된 PR",stat:"".concat("github"===$?"GITHUB":"LOG"," \xb7 ").concat(D>=60?"".concat(D/60,"H"):"".concat(D,"M")),children:[(0,a.jsxs)("div",{className:"flex items-end gap-3",children:[(0,a.jsx)(P,{value:eN.shipped,accent:b.SHIP}),(0,a.jsxs)("div",{className:"mb-3 flex flex-col gap-1",children:[(0,a.jsx)(C,{publicCapture:G,tone:"ok",children:"MERGED"}),eN.selfHealRuns>0&&(0,a.jsx)(C,{publicCapture:G,tone:"heal",children:"SELF-HEALED"}),f.snapshot.counters.blocked>0&&(0,a.jsxs)(C,{publicCapture:G,tone:"bad",children:["BLOCKED ",f.snapshot.counters.blocked]})]})]}),(0,a.jsxs)("div",{className:"mt-1 grid grid-cols-3 gap-2 border-t border-indigo-400/10 pt-2",children:[(0,a.jsx)(R,{publicCapture:G,label:"SELF-HEAL",value:null===eN.selfHealRate?"—":"".concat(eN.selfHealRate,"%"),color:b.HEAL}),(0,a.jsx)(R,{publicCapture:G,label:"RUNS",value:String(f.snapshot.runs.length),color:"#c7d2fe"}),(0,a.jsx)(R,{publicCapture:G,label:"DECISIONS",value:String(eN.decisions),color:b.PLAN})]})]}),(0,a.jsx)(A,{publicCapture:G,className:"col-span-12 lg:col-span-4",title:(null==eM?void 0:eM.why)==="merged"?"BEST RUN \xb7 오늘 최고의 런":"NOW \xb7 지금 런",stat:eS?"R ".concat(null!=(n=f.rounds[eS.runId])?n:0,"/3"):"—",children:eS?(0,a.jsxs)("button",{type:"button",className:"block w-full text-left",onClick:()=>null==V?void 0:V(eS.runId),"data-live-v5-best":!0,children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"font-mono ".concat(G?"text-sm":"text-[11px]"," text-slate-400"),children:G?ey(eS.runId):"owner"===Y?eS.runId:"런"}),(null==eM?void 0:eM.why)==="merged"?(0,a.jsxs)(C,{publicCapture:G,tone:"ok",children:["VERIFIED \xb7 MERGED",eS.pr?G?" PR":" #".concat(eS.pr):""]}):(0,a.jsx)(C,{publicCapture:G,tone:"live",children:"IN FLIGHT"})]}),(0,a.jsxs)("div",{className:"mt-1 flex items-baseline gap-3",children:[(0,a.jsx)("span",{className:"font-mono text-6xl font-semibold tabular-nums text-indigo-100",style:{textShadow:"0 0 24px #818cf888"},children:eS.pr?G?"PR":"#".concat(eS.pr):eS.current?r.fQ[eS.current]:"—"}),(0,a.jsxs)("span",{className:"font-mono ".concat(G?"text-sm":"text-xs"," text-slate-400"),children:[eS.events," signals \xb7 라운드 ",null!=(p=f.rounds[eS.runId])?p:0]})]}),(0,a.jsx)("div",{className:"mt-2 flex flex-wrap gap-1",children:eT.map(e=>{let t=eS.stages[e];return(0,a.jsxs)(C,{publicCapture:G,tone:"bad"===t?"bad":"ok"===t?"ok":"dim",children:[r.fQ[e],"ok"===t?" ✓":"bad"===t?" ✗":""]},e)})})]}):(0,a.jsx)("p",{className:"py-6 ".concat(G?"text-sm":"text-xs"," text-slate-500"),children:"이 창에 런 신호가 없다 — ▶ REPLAY 로 최근 판단을 본다."})}),(0,a.jsx)(A,{publicCapture:G,className:"col-span-12 lg:col-span-4",title:"LLM \xb7 ".concat(ev.bucketMin,"분 봉 ⊕ 요청 창"),stat:"".concat(ef.length," REQ \xb7 ").concat(I(eA)," TOK"),children:(0,a.jsxs)("div",{className:"grid grid-cols-5 gap-2",children:[(0,a.jsx)(O,{publicCapture:G,candles:ev.candles,color:ew,unit:"/".concat(ev.bucketMin,"M"),className:"col-span-3"}),(0,a.jsxs)("ul",{className:"col-span-2 ".concat(G?"min-h-28":"h-28"," space-y-0.5 ").concat(G?"overflow-visible":"overflow-hidden"," font-mono ").concat(G?"text-sm":"text-[11px]"," ").concat(G?"text-sm":"lg:text-[10px]"),"data-live-v5-book":!0,children:[ef.slice(0,10).map((e,t)=>(0,a.jsxs)("li",{className:"relative flex justify-between gap-1 ".concat(G?"overflow-visible":"overflow-hidden"," px-1 ").concat(0===t?"live-line-in":""),children:[(0,a.jsx)("span",{className:"absolute inset-y-0 right-0 opacity-20",style:{width:"".concat((e.input+e.output)/eR*100,"%"),background:ew(e.model)}}),(0,a.jsx)("span",{className:G?"relative whitespace-normal break-words":"relative truncate",style:{color:ew(e.model)},children:G?x(e.model):e.model}),(0,a.jsx)("span",{className:"relative tabular-nums text-slate-300",children:I(e.input+e.output)})]},"".concat(e.ts,"-").concat(t))),0===ef.length&&(0,a.jsx)("li",{className:"text-slate-500",children:"요청 없음"})]})]})})]}),(0,a.jsx)(A,{publicCapture:G,title:"EXECUTION CYCLE \xb7 하니스 한 바퀴",stat:"".concat(eS?"ROUND ".concat(null!=(m=f.rounds[eS.runId])?m:0,"/3 \xb7 "):"","NEXT ").concat(ei,"S"),children:(0,a.jsx)("div",{className:"grid grid-cols-3 gap-1.5 sm:grid-cols-6",children:r.lV.map((e,t)=>{let n=eS?eS.current===e:ev.load.busiest===e,s=null==eS?void 0:eS.stages[e];return(0,a.jsxs)("div",{"data-live-v5-stage":e,"data-hot":n?"1":void 0,className:"rounded-md border px-3 py-2 ".concat(n?"live-v5-hot":""),style:n?{borderColor:"#a78bfa",boxShadow:"0 0 18px #a78bfa66, inset 0 0 18px #a78bfa33",background:"rgba(124,58,237,.28)"}:{borderColor:"rgba(99,102,241,.18)",background:"rgba(2,6,23,.55)"},children:[(0,a.jsxs)("div",{className:"flex justify-between font-mono ".concat(G?"text-sm":"text-[11px]"," ").concat(G?"text-sm":"lg:text-[10px]"," text-slate-400"),children:[(0,a.jsx)("span",{children:String(t+1).padStart(2,"0")}),s&&(0,a.jsx)("span",{style:{color:w[s]},children:"ok"===s?"✓":"bad"===s?"✗":"●"})]}),(0,a.jsxs)("div",{className:"flex items-baseline justify-between",children:[(0,a.jsx)("span",{className:n?"text-sm font-semibold text-white":"text-sm text-slate-300",children:r.fQ[e]}),(0,a.jsx)("span",{className:"font-mono ".concat(G?"text-sm":"text-xs"," tabular-nums text-slate-400"),title:"지금 이 단계에 있는 런",children:ev.load.counts[e]})]})]},e)})})}),(0,a.jsxs)("div",{className:"grid grid-cols-12 gap-1.5",children:[(0,a.jsxs)(A,{publicCapture:G,className:"relative col-span-12 xl:col-span-10",title:"JUDGMENT GRAPH \xb7 FORCE",stat:"NODES ".concat(ed.nodes," \xb7 EDGES ").concat(ed.edges),bodyClass:"p-0",hot:!0,children:[(0,a.jsx)("canvas",{ref:_,className:"h-[370px] w-full bg-[radial-gradient(ellipse_at_center,rgba(79,70,229,.26),rgba(2,6,23,.96)_70%)]","aria-label":"판단 그래프"}),(0,a.jsx)("div",{className:"pointer-events-none absolute left-3 top-9 flex flex-col gap-0.5 rounded-md bg-slate-950/60 p-2 font-mono ".concat(G?"text-sm":"text-[11px]"," ").concat(G?"text-sm":"lg:text-[10px]"),children:eI.map(e=>{let{k:t,n}=e;return(0,a.jsxs)("span",{style:{color:b[t]},children:["● ",G?v(t):t," ",(0,a.jsx)("span",{className:"text-slate-400",children:n})]},t)})}),(0,a.jsx)("button",{type:"button",onClick:ej,disabled:en||0===f.stream.length,"data-elanous-action":"live-replay",className:"absolute bottom-3 right-3 rounded-full border border-indigo-400/40 bg-slate-950/70 px-3 py-1 font-mono ".concat(G?"text-sm":"text-[11px]"," ").concat(G?"text-sm":"lg:text-[10px]"," text-indigo-200 hover:bg-indigo-500/20 disabled:opacity-40"),title:"이 창의 판단을 옛것부터 빨리 감기(최근 40)",children:en?"REPLAY \xb7 ".concat(Q.current.length):"▶ REPLAY"}),ee&&(0,a.jsx)(q,{item:ee.item,folding:ee.folding,role:Y,publicCapture:G,runLabel:ey})]}),(0,a.jsx)(A,{publicCapture:G,className:"col-span-12 xl:col-span-2",title:"STATS",stat:"".concat(ei,"S"),children:(0,a.jsxs)("dl",{className:"grid grid-cols-2 gap-x-2 gap-y-1.5 font-mono","data-live-v5-stats":!0,children:[(0,a.jsx)(T,{publicCapture:G,label:"PATHS",value:f.stream.reduce((e,t)=>{var n;return e+(null!=(n=t.paths)?n:0)},0)||"—"}),(0,a.jsx)(T,{publicCapture:G,label:"CONV",value:f.convergence.length?"".concat(f.convergence.filter(e=>{var t;return(null==(t=e.points.at(-1))?void 0:t.asks)===0}).length,"/").concat(f.convergence.length):"—"}),(0,a.jsx)(T,{publicCapture:G,label:"ROUNDS AVG",value:eE.length?(eE.reduce((e,t)=>e+t,0)/eE.length).toFixed(1):"—"}),(0,a.jsx)(T,{publicCapture:G,label:"DECISIONS/MIN",value:eN.decisionsPerMin}),(0,a.jsx)(T,{publicCapture:G,label:"SIGNALS",value:E.length}),(0,a.jsx)(T,{publicCapture:G,label:"LLM REQ",value:ef.length}),G?(0,a.jsx)(T,{publicCapture:G,label:"MODELS",value:ev.ticker.length}):(0,a.jsx)(T,{publicCapture:G,label:"API ≈ USD",value:"$".concat(eC.toFixed(2))}),(0,a.jsx)(T,{publicCapture:G,label:"NEXT POLL",value:"".concat(ei,"s")})]})})]}),(0,a.jsxs)("div",{className:"grid grid-cols-12 gap-1.5",children:[(0,a.jsx)(A,{publicCapture:G,className:"col-span-12 md:col-span-6 xl:col-span-3",title:"MODEL \xd7 SITE \xb7 요청 수",stat:"MAX ".concat(ev.heat.max),children:(0,a.jsx)(F,{heat:ev.heat,color:ew,publicCapture:G})}),(0,a.jsx)(A,{publicCapture:G,className:"col-span-12 md:col-span-6 xl:col-span-3",title:"DISTRIBUTION \xb7 런 소요 ⊕ 요청 토큰",stat:"".concat(ev.spans," RUNS \xb7 ").concat(ef.length," REQ"),children:(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-2",children:[(0,a.jsx)(W,{publicCapture:G,hist:ev.hist,label:e=>"".concat(e.toFixed(0),"분")}),(0,a.jsx)(W,{publicCapture:G,hist:ev.tokHist,label:e=>I(10**e)})]})}),(0,a.jsx)(A,{publicCapture:G,className:"col-span-12 md:col-span-6 xl:col-span-3",title:"CONVERGENCE \xb7 must-fix ⊕ GATE",stat:"".concat(f.convergence.length," PR"),children:(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-2",children:[(0,a.jsx)("div",{className:"col-span-2",children:(0,a.jsx)(U,{publicCapture:G,series:f.convergence})}),(0,a.jsx)(H,{publicCapture:G,pass:ev.gate.pass,fail:ev.gate.fail,verdicts:f.snapshot.reviewVerdicts})]})}),(0,a.jsx)(A,{publicCapture:G,className:"col-span-12 md:col-span-6 xl:col-span-3",title:"EXECUTION LOG \xb7 LIVE",stat:"".concat(f.stream.length),bodyClass:"px-2 py-1",children:(0,a.jsxs)("ul",{className:"".concat(G?"min-h-[124px]":"h-[124px]"," space-y-0.5 ").concat(G?"overflow-visible":"overflow-hidden"," font-mono ").concat(G?"text-sm":"text-[11px]"," ").concat(G?"text-sm":"lg:text-[10.5px]"),"data-live-max-stream":!0,children:[f.stream.slice(0,9).map((e,t)=>(0,a.jsxs)("li",{className:"flex gap-1.5 ".concat(0===t?"live-line-in":""),style:"SHIP"===e.kind?{textShadow:"0 0 10px ".concat(b.SHIP)}:void 0,children:[(0,a.jsx)("span",{className:"shrink-0 text-slate-500",title:e.ts,children:(0,r.qo)(e.ts)}),(0,a.jsx)("span",{className:"w-14 shrink-0 rounded px-1 text-center",style:{color:b[e.kind],background:"".concat(b[e.kind],"1f")},children:G?"판단":e.kind}),(0,a.jsxs)("span",{className:G?"whitespace-normal break-words":"truncate",children:[G?eg(e):e.what,!G&&e.target&&(0,a.jsxs)("span",{className:"text-slate-500",children:[" → ",e.target]})]})]},"".concat(e.ts,"-").concat(t))),0===f.stream.length&&(0,a.jsx)("li",{className:"text-slate-500",children:"이 창에 판단 신호가 없다."})]})})]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-x-6 gap-y-1 rounded-md border border-indigo-400/10 bg-slate-950/60 px-3 py-1 font-mono ".concat(G?"text-sm":"text-[11px]"," ").concat(G?"text-sm":"lg:text-[10px]"," text-slate-400"),children:[(0,a.jsxs)("span",{children:["STACK ",(0,a.jsx)("span",{className:"text-slate-200",children:"elanous-core"})]}),(0,a.jsxs)("span",{children:["SOURCE ",(0,a.jsx)("span",{className:"text-slate-200",children:G?"본부":B})]}),(0,a.jsxs)("span",{children:["SIGNALS ",(0,a.jsx)("span",{className:"text-slate-200",children:E.length})]}),(0,a.jsxs)("span",{children:["LLM ",(0,a.jsxs)("span",{className:"text-slate-200",children:[ef.length," req"]})]}),(0,a.jsxs)("span",{children:["EMITTED ",(0,a.jsx)("span",{className:"text-slate-200",children:f.emitted})]}),G&&(0,a.jsx)("span",{className:"text-emerald-300","data-live-public-capture":!0,children:"PUBLIC CAPTURE \xb7 계정\xb7과금 가림"}),(0,a.jsx)("span",{className:"ml-auto",children:"EVERY NUMBER IS REAL \xb7 보이는 수는 전부 진짜"})]})]})}function I(e){return e>=1e6?"".concat((e/1e6).toFixed(1),"M"):e>=1e3?"".concat((e/1e3).toFixed(e>=1e5?0:1),"k"):String(Math.round(e))}function A(e){let{title:t,stat:n,children:s,className:r="",bodyClass:l="p-2.5",hot:o=!1,publicCapture:i}=e;return(0,a.jsxs)("section",{className:"".concat(i?"overflow-visible":"overflow-hidden"," rounded-lg border bg-slate-950/70 ").concat(r),style:o?{borderColor:"rgba(167,139,250,.7)",boxShadow:"0 0 22px #a78bfa33"}:{borderColor:"rgba(99,102,241,.16)"},"aria-label":t,"data-live-v5-panel":t,children:[(0,a.jsxs)("header",{className:"flex items-center justify-between border-b border-indigo-400/10 px-2.5 py-1 font-mono ".concat(i?"text-sm":"text-[11px]"," ").concat(i?"text-sm":"lg:text-[10.5px]"," tracking-[.08em] text-slate-400"),children:[(0,a.jsxs)("span",{children:["▸ ",t]}),n&&(0,a.jsx)("span",{className:"tabular-nums text-slate-300",children:n})]}),(0,a.jsx)("div",{className:l,children:s})]})}function C(e){let{tone:t,children:n,publicCapture:s}=e,r="ok"===t?b.SHIP:"bad"===t?b.ESCALATE:"heal"===t?b.HEAL:"dim"===t?"#a5b4fc":"#f0abfc";return(0,a.jsx)("span",{className:"inline-block ".concat(s?"whitespace-normal":"whitespace-nowrap"," rounded px-1.5 py-0.5 font-mono ").concat(s?"text-sm":"text-[11px]"," ").concat(s?"text-sm":"lg:text-[10px]"," font-semibold tracking-wider ").concat("live"===t?"live-v5-blink":""),style:{color:r,background:"".concat(r,"22"),boxShadow:"inset 0 0 0 1px ".concat(r,"66")},children:n})}function R(e){let{label:t,value:n,color:s,publicCapture:r}=e;return(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"font-mono ".concat(r?"text-sm":"text-[11px]"," ").concat(r?"text-sm":"lg:text-[9.5px]"," tracking-widest text-slate-500"),children:t}),(0,a.jsx)("div",{className:"font-mono text-3xl font-semibold tabular-nums",style:{color:s,textShadow:"0 0 14px ".concat(s,"55")},children:n})]})}function T(e){let{label:t,value:n,publicCapture:s}=e;return(0,a.jsxs)("div",{className:"border-b border-indigo-400/10 pb-1",children:[(0,a.jsx)("dt",{className:"".concat(s?"text-sm":"text-[11px]"," ").concat(s?"text-sm":"lg:text-[9.5px]"," tracking-widest text-slate-500"),children:t}),(0,a.jsx)("dd",{className:"text-lg font-semibold tabular-nums text-indigo-100",children:n})]})}function L(e){let{items:t,ariaLabel:n,slow:s=!1,bare:r=!1,publicCapture:l}=e;return(0,a.jsx)("div",{className:"relative overflow-hidden font-mono ".concat(l?"text-sm":"text-[11px]"," ").concat(r?"":"rounded-md border border-indigo-400/10 bg-slate-950/60 py-1"),"aria-label":n,children:0===t.length?(0,a.jsx)("span",{className:"px-3 text-slate-500",children:"—"}):(0,a.jsxs)("div",{className:"live-v5-marquee flex w-max",style:{animationDuration:"".concat(Math.max(30,t.length*(s?9:6)),"s")},children:[(0,a.jsx)("div",{className:"flex",children:t}),(0,a.jsx)("div",{className:"flex","aria-hidden":!0,children:t})]})})}function P(e){let{value:t,accent:n}=e,[r,l]=(0,s.useState)(t),[o,i]=(0,s.useState)(!1),c=(0,s.useRef)(t);return(0,s.useEffect)(()=>{let e=c.current;t>e&&(i(!0),setTimeout(()=>i(!1),700)),c.current=t;let n=performance.now(),a=0,s=r=>{let o=Math.min(1,(r-n)/900);l(e+(t-e)*(1-Math.pow(1-o,3))),o<1&&(a=requestAnimationFrame(s))};return a=requestAnimationFrame(s),()=>cancelAnimationFrame(a)},[t]),(0,a.jsx)("div",{className:"font-mono text-[112px] font-semibold leading-none tabular-nums",style:{color:n,textShadow:"0 0 ".concat(o?40:26,"px ").concat(n).concat(o?"cc":"66")},"data-live-max-gauge":"SHIPPED",children:Math.round(r)})}function O(e){let{candles:t,color:n,unit:s,className:r="",publicCapture:l}=e,o=Math.max(1,...t.map(e=>e.count)),i=240/t.length,c=(0,a.jsxs)("svg",{viewBox:"0 0 ".concat(240," ").concat(120),className:l?"h-28 w-full":"h-28 w-full ".concat(r),"data-live-v5-candles":!0,"aria-label":"분당 LLM 요청",children:[[.25,.5,.75].map(e=>(0,a.jsx)("line",{x1:0,x2:240,y1:120*e,y2:120*e,stroke:"#1e293b",strokeDasharray:"2 3"},e)),t.map((e,t)=>{let s=120;return Object.entries(e.byModel).map(e=>{let[r,l]=e,c=l/o*114;return s-=c,(0,a.jsx)("rect",{x:t*i+1,y:s,width:Math.max(1,i-2),height:c,fill:n(r),opacity:.85},"".concat(t,"-").concat(r))})}),!l&&(0,a.jsxs)("text",{x:238,y:10,fill:"#64748b",fontSize:8,fontFamily:"monospace",textAnchor:"end",children:[o,s]})]});return l?(0,a.jsxs)("div",{className:r,children:[c,(0,a.jsxs)("span",{className:"block break-words font-mono text-sm text-slate-400",children:[o,s]})]}):c}function F(e){let{heat:t,color:n,publicCapture:s}=e;return 0===t.models.length?(0,a.jsx)("p",{className:"py-6 ".concat(s?"text-sm":"text-xs"," text-slate-500"),children:"이 창에 요청이 없다."}):(0,a.jsxs)("table",{className:"w-full border-separate border-spacing-0.5 font-mono ".concat(s?"text-sm":"text-[11px]"," ").concat(s?"text-sm":"lg:text-[10px]"),"data-live-v5-heat":!0,children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{}),t.sites.map(e=>(0,a.jsx)("th",{className:s?"max-w-16 whitespace-normal break-words font-normal text-slate-500":"max-w-16 truncate font-normal text-slate-500",children:s?function(e){let t=e.toLowerCase();if("stream-llm"===t||t.startsWith("stream-llm-"))return"대화";if("agent-turn"===t||t.startsWith("agent-turn-"))return"자리 턴";if("pod-rollup"===t||t.startsWith("pod-"))return"파드 작업";if(t.startsWith("stream-"))return"대화 작업";if(t.startsWith("agent-"))return"자리 작업";let n=m.get(e);return n||(n="작업 ".concat(m.size+1),m.set(e,n)),n}(e):e},e))]})}),(0,a.jsx)("tbody",{children:t.models.map(e=>(0,a.jsxs)("tr",{children:[(0,a.jsx)("td",{className:s?"max-w-24 whitespace-normal break-words pr-1":"max-w-24 truncate pr-1",style:{color:n(e)},children:s?x(e):e}),t.sites.map(n=>{var s;let r=null!=(s=t.cells["".concat(e,"|").concat(n)])?s:0,l=0===r?0:Math.min(5,Math.ceil(r/Math.max(1,t.max)*5));return(0,a.jsx)("td",{className:"rounded-sm px-1 py-0.5 text-center tabular-nums",style:{background:l?"rgba(167,139,250,".concat(.12+.15*l,")"):"rgba(30,41,59,.5)",color:l>=4?"#fff":"#cbd5e1"},children:r||"\xb7"},n)})]},e))})]})}function W(e){let{hist:t,label:n,publicCapture:s}=e,r=200/t.bins.length;return(0,a.jsxs)("div",{children:[(0,a.jsxs)("svg",{viewBox:"0 0 ".concat(200," ").concat(90),className:"h-20 w-full","data-live-v5-hist":!0,"aria-label":"분포",children:[(0,a.jsx)("defs",{children:(0,a.jsxs)("linearGradient",{id:"v5hist",x1:"0",x2:"1",y1:"0",y2:"0",children:[(0,a.jsx)("stop",{offset:"0%",stopColor:b.HEAL}),(0,a.jsx)("stop",{offset:"60%",stopColor:b.PLAN}),(0,a.jsx)("stop",{offset:"100%",stopColor:b.ROUTE})]})}),t.bins.map((e,n)=>{let s=t.max?e/t.max*86:0;return(0,a.jsx)("rect",{x:n*r+.5,y:90-s,width:Math.max(1,r-1),height:s,fill:"url(#v5hist)",opacity:.9},n)}),(0,a.jsx)("line",{x1:0,x2:200,y1:89.5,y2:89.5,stroke:"#334155"})]}),(0,a.jsxs)("div",{className:"flex justify-between font-mono ".concat(s?"text-sm":"text-[11px]"," ").concat(s?"text-sm":"lg:text-[9.5px]"," text-slate-500"),children:[(0,a.jsx)("span",{children:t.max?n(t.lo):"—"}),(0,a.jsx)("span",{children:t.max?n(t.hi):""})]})]})}function H(e){let{pass:t,fail:n,verdicts:s,publicCapture:r}=e,l=[{name:"GATE ✓",count:t,c:b.SHIP},{name:"GATE ✗",count:n,c:b.ESCALATE},...s.slice(0,3).map(e=>({name:e.name.toUpperCase(),count:e.count,c:b.VERIFY}))],o=Math.max(1,...l.map(e=>e.count));return(0,a.jsx)("ul",{className:"space-y-1 font-mono ".concat(r?"text-sm":"text-[11px]"," ").concat(r?"text-sm":"lg:text-[9.5px]"),"data-live-v5-gate":!0,children:l.map(e=>(0,a.jsxs)("li",{children:[(0,a.jsxs)("div",{className:"flex justify-between text-slate-400",children:[(0,a.jsx)("span",{className:r?"whitespace-normal break-words":"truncate",children:e.name}),(0,a.jsx)("span",{className:"tabular-nums text-slate-200",children:e.count})]}),(0,a.jsx)("div",{className:"h-1.5 rounded-full bg-slate-800",children:(0,a.jsx)("div",{className:"h-1.5 rounded-full",style:{width:"".concat(e.count/o*100,"%"),background:e.c,boxShadow:"0 0 8px ".concat(e.c,"88")}})})]},e.name))})}function q(e){var t;let{item:n,folding:s,role:l,publicCapture:o,runLabel:i}=e,{line:c}=n,d=b[c.kind];return(0,a.jsxs)("div",{"data-live-decision-card":c.kind,className:"pointer-events-none absolute left-1/2 top-12 w-[min(92%,580px)] rounded-xl border bg-slate-950/85 p-3 backdrop-blur transition-all duration-200",style:{borderColor:"".concat(d,"88"),boxShadow:"0 0 32px ".concat(d,"55"),opacity:+!s,transform:"translateX(-50%) scale(".concat(s&&!o?.6:1,")")},children:[(0,a.jsxs)("div",{className:"mb-2 flex items-center gap-2 font-mono ".concat(o?"text-sm":"text-[11px]"," ").concat(o?"text-sm":"lg:text-[10px]"),children:[(0,a.jsxs)("span",{style:{color:d},children:["● ",c.kind]}),(0,a.jsx)("span",{className:"text-slate-500",children:(0,r.qo)(c.ts)}),(o||"owner"===l)&&c.runId&&(0,a.jsx)("span",{className:"text-slate-500",children:o?i(c.runId):c.runId.replace(/^run-/,"").slice(0,8)}),c.paths?(0,a.jsxs)("span",{className:"ml-auto text-slate-400",children:["PATHS ",c.paths]}):null]}),(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-2 ".concat(o?"text-sm":"text-[11px]"," leading-snug"),children:[(0,a.jsx)(D,{publicCapture:o,label:"무엇 \xb7 WHAT",value:o?v(c.kind):c.what,strong:!0}),(0,a.jsx)(D,{publicCapture:o,label:"왜 \xb7 WHY",value:o?v(c.kind):null!=(t=(0,r.hS)(c.why,l))?t:c.purpose}),(0,a.jsx)(D,{publicCapture:o,label:"어디로 \xb7 TO",value:o?c.target?v(c.kind):null:c.target,accent:d})]})]})}function D(e){let{label:t,value:n,strong:s=!1,accent:r,publicCapture:l}=e;return(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("div",{className:"font-mono ".concat(l?"text-sm":"text-[11px]"," ").concat(l?"text-sm":"lg:text-[9px]"," tracking-widest text-slate-500"),children:t}),(0,a.jsx)("div",{className:s?"".concat(l?"break-words":"line-clamp-3"," font-medium text-slate-100"):"".concat(l?"break-words":"line-clamp-3"," text-slate-300"),style:r&&n?{color:r}:void 0,children:null!=n?n:"—"})]})}function U(e){let{series:t,publicCapture:n}=e,s=Math.max(1,...t.flatMap(e=>e.points.map(e=>e.asks))),r=Math.max(3,...t.flatMap(e=>e.points.map(e=>e.round))),l=e=>20+(e-1)/Math.max(1,r-1)*146,o=e=>84-e/s*72,i=Array.from({length:r},(e,t)=>t+1);return(0,a.jsxs)("div",{"data-live-convergence":!0,children:[0===t.length?(0,a.jsx)("div",{className:"py-8 text-center ".concat(n?"text-sm":"text-[11px]"," text-slate-500"),children:"이 창에 리뷰 라운드가 없다."}):(0,a.jsxs)("svg",{viewBox:"0 0 ".concat(200," ").concat(100),className:"h-24 w-full",children:[(0,a.jsx)("line",{x1:20,y1:84,x2:166,y2:84,stroke:"#334155"}),(0,a.jsx)("line",{x1:20,y1:12,x2:20,y2:84,stroke:"#334155"}),i.map(e=>(0,a.jsxs)("g",{children:[(0,a.jsx)("line",{x1:l(e),y1:12,x2:l(e),y2:84,stroke:"#1e293b",strokeDasharray:"2 3"}),!n&&(0,a.jsxs)("text",{x:l(e),y:96,fill:"#64748b",fontSize:8,fontFamily:"monospace",textAnchor:"middle",children:["R",e]})]},e)),!n&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("text",{x:17,y:o(s)+3,fill:"#64748b",fontSize:8,fontFamily:"monospace",textAnchor:"end",children:s}),(0,a.jsx)("text",{x:17,y:o(0)+3,fill:b.SHIP,fontSize:8,fontFamily:"monospace",textAnchor:"end",children:"0"})]}),t.slice(0,6).map((e,t)=>{let s=e.points.at(-1),r=0===s.asks?b.SHIP:["#818cf8","#fbbf24","#38bdf8","#f0abfc","#fb7185"][t%5];return(0,a.jsxs)("g",{children:[(0,a.jsx)("polyline",{fill:"none",stroke:r,strokeWidth:1.6,points:e.points.map(e=>"".concat(l(e.round),",").concat(o(e.asks))).join(" ")}),e.points.map(e=>(0,a.jsx)("circle",{cx:l(e.round),cy:o(e.asks),r:2.5,fill:r},e.round)),!n&&(0,a.jsxs)("text",{x:l(s.round)+4,y:o(s.asks)-3,fill:r,fontSize:8,fontFamily:"monospace",children:["#",e.pr," ",s.asks]})]},e.pr)})]}),n&&t.length>0&&(0,a.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-1 font-mono text-sm text-slate-400","data-live-convergence-labels":!0,children:[(0,a.jsxs)("span",{className:"flex flex-col",children:[(0,a.jsx)("span",{children:s}),(0,a.jsx)("span",{className:"text-emerald-300",children:"0"})]}),(0,a.jsx)("span",{className:"flex flex-wrap gap-x-2",children:i.map(e=>(0,a.jsxs)("span",{children:["R",e]},e))}),(0,a.jsx)("span",{className:"flex flex-col break-words",children:t.slice(0,6).map((e,t)=>{let n=e.points.at(-1);return(0,a.jsxs)("span",{style:{color:0===n.asks?b.SHIP:["#818cf8","#fbbf24","#38bdf8","#f0abfc","#fb7185"][t%5]},children:["#",e.pr," ",n.asks]},e.pr)})})]})]})}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6605],{15991:(e,t,a)=>{"use strict";a.d(t,{GC:()=>n,In:()=>i,OG:()=>o});var r=a(24815);let n="elanous.pwa.role",s="elanous:pwa-role";function l(){try{let e=window.localStorage.getItem(n);if("owner"===e||"contributor"===e||"general"===e)return e}catch(e){}return"general"}function o(e){try{window.localStorage.setItem(n,e)}catch(e){}"function"==typeof window.dispatchEvent&&window.dispatchEvent(new Event(s))}function c(e){if("function"!=typeof window.addEventListener)return()=>{};window.addEventListener(s,e);let t=t=>{(t.key===n||null===t.key)&&e()};return window.addEventListener("storage",t),()=>{window.removeEventListener(s,e),window.removeEventListener("storage",t)}}function i(){return(0,r.useSyncExternalStore)(c,l,()=>"general")}},31036:(e,t,a)=>{"use strict";a.d(t,{V5:()=>s,tV:()=>l});var r=a(91611);class n extends Error{constructor(e,t,a){super(a||t),this.status=e,this.error=t,this.reason=a,this.name="MergeApprovalsApiError"}}function s(e,t){return e instanceof n?401===e.status||"unauthorized"===e.error?{text:"이 기기에 소유자 토큰이 없어 승인 목록을 못 읽었습니다 — 이미 연결된 기기의 설정 › 연결 토큰 만들기 에서 토큰을 만들어, 이 기기의 설정 › 데몬 연결 › 연결 토큰 칸에 붙이면 바로 보입니다.",href:"/app/settings/#bearer-token"}:"gh-failed"===e.error?{text:"데몬이 GitHub 를 읽지 못했습니다(데몬 기계의 gh 로그인\xb7네트워크) — 잠시 뒤 다시 열어 보세요.".concat(e.reason?" 사유: ".concat(e.reason.split("\n")[0].slice(0,160)):"")}:"gh-invalid-response"===e.error?{text:"GitHub 응답을 해석하지 못했습니다 — 잠시 뒤 다시 열어 보세요."}:"approvals-repo-unknown"===e.error?{text:"승인할 저장소를 모릅니다 — 데몬 설정 intake.approvals.repo(예: owner/repo)를 채워 주세요.",href:"/app/settings/"}:e.reason?{text:e.reason}:{text:"".concat(t," (").concat(e.status," ").concat(e.error,")")}:e instanceof TypeError?{text:"데몬에 닿지 못했습니다 — 데몬이 켜져 있는지, 이 기기가 같은 네트워크(tailnet)에 있는지 확인하세요."}:{text:e instanceof Error&&e.message?e.message:t}}function l(e){var t,a;let s=null!=(t=e.fetchImpl)?t:fetch,l=(null!=(a=e.baseUrl)?a:"").replace(/\/+$/,"");async function o(t,a){let r={...a,headers:{"content-type":"application/json",...e.authHeader?{authorization:e.authHeader}:{}}},o=e.client?await e.client.fetchResponse(t,r):await s("".concat(l).concat(t),r),c=await o.json().catch(()=>null);if(!o.ok){var i;let e=c&&"object"==typeof c?c:{};throw new n(o.status,null!=(i=e.error)?i:"request-failed",e.reason)}return c}return{list:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"open";return o("merged"===e?"".concat(r.r5,"?state=merged"):r.r5)},get:e=>o("".concat(r.r5,"/").concat(e)),check:(e,t)=>o("".concat(r.r5,"/").concat(e,"/check"),{method:"POST",body:JSON.stringify({headSha:t})}),merge:(e,t)=>o("".concat(r.r5,"/").concat(e,"/merge"),{method:"POST",body:JSON.stringify({headSha:t})})}}},36054:(e,t,a)=>{"use strict";a.d(t,{A:()=>r});let r=(0,a(71747).A)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},45695:(e,t,a)=>{"use strict";a.d(t,{C:()=>i,DaemonProvider:()=>d,Q:()=>u});var r=a(65863),n=a(24815),s=a(70086),l=a(89469),o=a(31324),c=a(16263);let i=(0,n.createContext)(null);function d(e){let{children:t}=e,a={baseUrl:"",token:"",provider:""},[d,u]=(0,n.useState)(a),[m,p]=(0,n.useState)(""),[h]=(0,n.useState)(()=>new o.ki(a));(0,n.useEffect)(()=>{let e=(0,s.Fp)();u(e),h.updateConfig(e),p((0,l.oD)()),(0,c.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[h]),(0,n.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,s.Fp)();h.updateConfig(t),u(t),(0,c.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,c.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[h]);let b=e=>{u(t=>{let a={...t,...e};return(0,s.Qc)(e),h.updateConfig(a),(0,c.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),a})},x=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,c.cY)("webterm.provider.daemon.session-set",{sessionId:e})},f=(0,n.useMemo)(()=>({config:d,setConfig:b,client:h,sessionId:m,setSessionId:x}),[d,h,m]);return(0,r.jsx)(i.Provider,{value:f,children:t})}function u(){let e=(0,n.useContext)(i);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},57256:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>j});var r=a(65863),n=a(24815),s=a(23516),l=a(91927),o=a(45695),c=a(15991),i=a(31036);function d(e,t){return"UNKNOWN"===t&&e<3?3e3:null}async function u(e,t){let a,r=0,n=d(0,"UNKNOWN");for(;null!==n;){var s,l,o;if(await t.sleep(n),t.isActive&&!t.isActive())break;r++;try{a=await e(),null==(l=t.onDetail)||l.call(t,a)}catch(e){}null==(s=t.onAttempt)||s.call(t),n=d(r,null!=(o=null==a?void 0:a.mergeable)?o:"UNKNOWN")}return{attempts:r,...a?{last:a}:{}}}var m=a(36054);function p(e){let{view:t,target:a}=e,[s]=(0,n.useState)(()=>Date.now()),[l,o]=(0,n.useState)(s);(0,n.useEffect)(()=>{let e=window.setInterval(()=>o(Date.now()),100);return()=>window.clearInterval(e)},[]);let c=function(e,t,a){let r="".concat((Math.max(0,e)/1e3).toFixed(1),"초");return{title:"merged"===t?"GitHub 에서 반영된 코드 변경을 읽고 있습니다":a?"GitHub 에서 승인을 기다리는 코드 변경과 #".concat(a," 카드를 읽고 있습니다"):"GitHub 에서 승인을 기다리는 코드 변경을 읽고 있습니다",clock:r,hint:e>=8e3?"평소(2~5초)보다 오래 걸립니다 — GitHub 응답을 기다리는 중이며 멈추지 않았습니다.":null}}(l-s,t,a);return(0,r.jsxs)("section",{role:"status","aria-live":"polite","aria-busy":"true",className:"space-y-3","data-approvals-loading":!0,children:[(0,r.jsxs)("div",{className:"flex items-center gap-3 rounded-xl border border-blue-500/40 bg-blue-500/5 p-4",children:[(0,r.jsx)(m.A,{className:"h-6 w-6 shrink-0 text-blue-500 motion-safe:animate-spin","aria-hidden":!0}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("p",{className:"font-medium",children:c.title}),c.hint&&(0,r.jsx)("p",{className:"mt-1 text-sm text-amber-600 dark:text-amber-400",children:c.hint})]}),(0,r.jsx)("span",{className:"font-mono text-lg tabular-nums text-blue-600 dark:text-blue-300","aria-label":"경과 시간",children:c.clock})]}),(0,r.jsx)("div",{className:"h-1 overflow-hidden rounded-full bg-muted","aria-hidden":!0,children:(0,r.jsx)("div",{className:"h-full w-1/3 rounded-full bg-blue-500 motion-safe:animate-[approvals-slide_1.2s_ease-in-out_infinite]"})}),(0,r.jsx)("style",{children:"@keyframes approvals-slide{0%{transform:translateX(-100%)}100%{transform:translateX(300%)}}"}),[0,1].map(e=>(0,r.jsxs)("div",{className:"space-y-3 rounded-xl border border-border bg-card p-5 motion-safe:animate-pulse","aria-hidden":!0,children:[(0,r.jsx)("div",{className:"h-4 w-2/3 rounded bg-muted"}),(0,r.jsx)("div",{className:"h-3 w-full rounded bg-muted"}),(0,r.jsx)("div",{className:"h-3 w-5/6 rounded bg-muted"})]},e))]})}function h(e){let{view:t,onChange:a}=e,n=(e,n)=>(0,r.jsx)("button",{type:"button",role:"tab","aria-selected":t===e,onClick:()=>a(e),className:"rounded-md px-3 py-1 text-sm ".concat(t===e?"bg-foreground text-background":"bg-muted text-foreground"),children:n});return(0,r.jsxs)("div",{role:"tablist","aria-label":"승인 목록 보기",className:"flex gap-2",children:[n("open","승인 대기"),n("merged","완료")]})}function b(e){let{brief:t,lineage:a,summary:n}=e;return(0,r.jsxs)(r.Fragment,{children:[null!==t?(0,r.jsx)("section",{"aria-label":"승인 요약",className:"mt-3 break-words text-sm leading-relaxed [&_a]:text-blue-600 [&_a]:underline [&_blockquote]:border-l-2 [&_blockquote]:pl-3 [&_h3]:mt-3 [&_h3]:font-semibold [&_li]:ml-5 [&_li]:list-disc [&_p]:my-2 [&_table]:block [&_table]:overflow-x-auto",children:(0,r.jsx)(s.oz,{remarkPlugins:[l.A],components:{a:e=>{let{href:t,children:a}=e;return(0,r.jsx)("a",{href:t,target:"_blank",rel:"noreferrer",children:a})}},children:t})}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("p",{className:"mt-3 rounded border border-amber-500/40 bg-amber-500/15 p-3 text-sm text-amber-800 dark:text-amber-300",children:"승인 요약 내용이 없습니다 — GitHub 본문을 보거나 발사자에게 요청하세요"}),(0,r.jsx)("p",{className:"mt-3 whitespace-pre-wrap text-sm",children:n})]}),a&&(0,r.jsxs)("p",{className:"mt-3 text-sm text-muted-foreground",children:["아이디어 원장: ",a]})]})}function x(e){var t;let{gate:a,busy:n,blocked:s,mergeLabel:l,onCheck:o,onMerge:c}=e;return(0,r.jsxs)("div",{className:"mt-3 space-y-2","aria-label":"머지 전 검사",children:["none"===a.status&&(0,r.jsx)("button",{type:"button",onClick:o,disabled:n,className:"rounded-lg border px-3 py-2 text-sm disabled:opacity-50",children:"머지 전 검사 시작"}),"running"===a.status&&(0,r.jsx)("p",{role:"status",className:"text-sm",children:"검사 중…"}),"passed"===a.status&&(0,r.jsxs)("p",{className:"text-sm text-green-700 dark:text-green-400",children:["검사 통과 (",null!=(t=a.os)?t:"unknown",")",a.baseDrifted?" \xb7 검사 뒤 main 이 움직였다 — 머지 때 겹치는 파일이 있으면 다시 검사를 요구한다":""]}),("failed"===a.status||"unmeasured"===a.status)&&(0,r.jsxs)("div",{role:"alert",className:"text-sm text-red-600",children:[(0,r.jsx)("p",{children:"failed"===a.status?"검사 실패":"검사 측정 불가"}),(0,r.jsx)("ul",{className:"list-inside list-disc",children:a.failures.map((e,t)=>(0,r.jsx)("li",{children:e},t))}),(0,r.jsx)("button",{type:"button",onClick:o,disabled:n,className:"mt-2 rounded-lg border px-3 py-2 disabled:opacity-50",children:"머지 전 검사 다시 시작"})]}),(0,r.jsx)("button",{type:"button",onClick:c,disabled:n||s||"passed"!==a.status,className:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white disabled:cursor-not-allowed disabled:opacity-50",children:null!=l?l:"승인하고 머지"})]})}function f(e){let{card:t,api:a,attempt:r,onAttempt:s,onUpdate:l}=e,o="UNKNOWN"===t.mergeable&&!t.merged&&"OPEN"===t.state;return(0,n.useEffect)(()=>{if(!o||r>0)return;let e=!0,n=[];return u(()=>a.get(t.number),{sleep:e=>new Promise(t=>{n.push(window.setTimeout(t,e))}),isActive:()=>e,onDetail:a=>{e&&l(a,t.headSha)},onAttempt:()=>{e&&s(t.number)}}),()=>{for(let t of(e=!1,n))window.clearTimeout(t)}},[a,t.number,o,r,s,l]),null}function g(){let e=(0,c.In)(),{client:t}=(0,o.Q)(),a=(0,n.useMemo)(()=>(0,i.tV)({client:t}),[t]),[s,l]=(0,n.useState)([]),[u,m]=(0,n.useState)(!0),[g,w]=(0,n.useState)(null),[y,v]=(0,n.useState)(null),[N,j]=(0,n.useState)({}),[k,S]=(0,n.useState)({}),[C,I]=(0,n.useState)(null),[E,U]=(0,n.useState)("open"),L=(0,n.useCallback)(e=>{S(t=>{var a;return{...t,[e]:(null!=(a=t[e])?a:0)+1}})},[]),R=(0,n.useCallback)((e,t)=>{l(a=>a.map(a=>a.number!==e.number||a.headSha!==t?a:{...e,gate:e.headSha===t?e.gate:{status:"none",failures:[]},merged:a.merged}))},[]);async function O(e){v(e.number),j(t=>({...t,[e.number]:""}));try{let{gate:t}=await a.check(e.number,e.headSha);l(a=>a.map(a=>a.number===e.number&&a.headSha===e.headSha?{...a,gate:t}:a))}catch(t){j(a=>({...a,[e.number]:(0,i.V5)(t,"검사를 시작하지 못했습니다.").text}))}finally{v(null)}}async function M(e){if(window.confirm("#".concat(e.number," ").concat(e.title,"\n현재 확인한 변경을 승인하고 머지할까요?"))){v(e.number),j(t=>({...t,[e.number]:""}));try{await a.merge(e.number,e.headSha),l(t=>t.map(t=>t.number===e.number?{...t,merged:!0,state:"MERGED"}:t))}catch(t){j(a=>({...a,[e.number]:(0,i.V5)(t,"머지하지 못했습니다.").text}))}finally{v(null)}}}return((0,n.useEffect)(()=>{let e=s.filter(e=>"OPEN"===e.state&&("running"===e.gate.status||"passed"===e.gate.status));if("open"!==E||!e.length)return;let t=!0,r=window.setInterval(()=>{for(let r of e)a.get(r.number).then(e=>{t&&R(e,r.headSha)}).catch(e=>{t&&j(t=>({...t,[r.number]:(0,i.V5)(e,"검사 상태를 불러오지 못했습니다.").text}))})},1e4);return()=>{t=!1,window.clearInterval(r)}},[a,s,R,E]),(0,n.useEffect)(()=>{let e=!0,t=Number(new URLSearchParams(window.location.search).get("pr")),r=Number.isSafeInteger(t)&&t>0?t:null;return(m(!0),w(null),I(r),"merged"===E)?(a.list("merged").then(t=>{let{items:a}=t;e&&l(a)}).catch(t=>{e&&w((0,i.V5)(t,"목록을 불러오지 못했습니다."))}).finally(()=>{e&&m(!1)}),()=>{e=!1}):(a.list().then(async t=>{let{items:n}=t;if(!e)return;let s=n.find(e=>e.number===r);if(r&&!s)try{let t=await a.get(r);e&&l([t,...n])}catch(t){e&&w((0,i.V5)(t,"PR 을 불러오지 못했습니다.")),e&&l(n)}else l(r?[...n].sort((e,t)=>Number(t.number===r)-Number(e.number===r)):n)}).catch(t=>{e&&w((0,i.V5)(t,"목록을 불러오지 못했습니다."))}).finally(()=>{e&&m(!1)}),()=>{e=!1})},[a,E]),"owner"===e||"open"!==E||u||s.length||g)?(0,r.jsxs)("main",{className:"mx-auto max-w-3xl space-y-5 p-4 pb-20 text-foreground sm:p-8",children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("h1",{className:"text-2xl font-semibold",children:"코드 변경 승인"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"자동으로 만든 코드 변경(PR)을 확인하고 승인합니다."})]}),(0,r.jsx)(h,{view:E,onChange:e=>{l([]),U(e)}}),u&&(0,r.jsx)(p,{view:E,target:C}),g&&(0,r.jsxs)("p",{role:"alert",className:"text-red-600","data-approvals-error":!0,children:[g.text,g.href&&(0,r.jsxs)(r.Fragment,{children:[" ",(0,r.jsx)("a",{href:g.href,className:"font-semibold underline underline-offset-2","data-approvals-settings":!0,children:"설정 열기 →"})]})]}),!u&&!s.length&&!g&&(0,r.jsx)("p",{children:"merged"===E?"승인해 반영된 코드 변경이 아직 없습니다.":"승인을 기다리는 코드 변경이 없습니다."}),s.map(e=>{var t,n;let s=e.merged||"MERGED"===e.state,l="OPEN"!==e.state&&!s,o=e.draft?"초안 PR 은 머지할 수 없습니다. GitHub에서 초안을 해제한 뒤 다시 확인하세요.":e.checks.failure>0?"실패한 검사가 있습니다.":e.checks.pending>0?"검사가 아직 끝나지 않았습니다.":"CONFLICTING"===e.mergeable?"머지 충돌이 있습니다.":"MERGEABLE"!==e.mergeable?"머지 가능 여부가 아직 확인되지 않았습니다.":"main"!==e.base?"대상 브랜치가 main 이 아닙니다.":"",c=C===e.number,i=null!=(t=k[e.number])?t:0;return(0,r.jsxs)("article",{className:"rounded-xl border bg-card p-5 shadow-sm ".concat(c?"border-blue-500 ring-2 ring-blue-500/30":"border-border"),children:[(0,r.jsx)(f,{card:e,api:a,attempt:i,onAttempt:L,onUpdate:R}),(0,r.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-2",children:[(0,r.jsxs)("h2",{className:"font-semibold",children:["#",e.number," \xb7 ",e.title]}),(0,r.jsx)("span",{className:"rounded bg-muted px-2 py-1 text-xs",children:s?function(e){if(!e)return"머지됨";let t=new Date(e);if(Number.isNaN(t.getTime()))return"머지됨";let a=new Date(t.getTime()+324e5).toISOString();return"머지됨 ".concat(a.slice(5,10)," ").concat(a.slice(11,16)," KST")}(e.mergedAt):l?"닫힘":e.draft?"초안":"열림"})]}),(0,r.jsx)(b,{brief:e.brief,lineage:e.lineage,summary:e.summary}),(0,r.jsxs)("p",{className:"mt-3 text-sm text-muted-foreground",children:["+",e.additions," 추가 / −",e.deletions," 삭제 \xb7 파일 ",e.changedFiles]}),(0,r.jsxs)("div",{className:"mt-2 flex flex-wrap gap-2 text-xs","aria-label":"검사 상태",children:[(0,r.jsxs)("span",{className:"rounded bg-green-500/15 px-2 py-1",children:["성공 ",e.checks.success]}),(0,r.jsxs)("span",{className:"rounded bg-red-500/15 px-2 py-1",children:["실패 ",e.checks.failure]}),(0,r.jsxs)("span",{className:"rounded bg-yellow-500/15 px-2 py-1",children:["대기 ",e.checks.pending]}),e.checks.success+e.checks.failure+e.checks.pending===0&&(0,r.jsx)("span",{className:"rounded bg-slate-500/15 px-2 py-1",children:"GitHub 검사 없음 — 머지 전 검사는 아래에서 별도로 실행"})]}),(0,r.jsxs)("details",{open:c,className:"mt-3 text-sm",children:[(0,r.jsx)("summary",{className:"cursor-pointer",children:"바뀐 파일 보기"}),(0,r.jsx)("ul",{className:"mt-2 list-inside list-disc break-all",children:e.files.map(e=>(0,r.jsx)("li",{children:e},e))})]}),(0,r.jsxs)("div",{className:"mt-4 flex flex-wrap items-center gap-4",children:[(0,r.jsx)("a",{className:"text-sm text-blue-600 underline",href:e.url,target:"_blank",rel:"noopener noreferrer",children:"GitHub 에서 보기"}),!s&&!l&&(0,r.jsx)(x,{gate:e.gate,busy:null!==y,blocked:!!o,mergeLabel:y===e.number?"머지 중…":"UNKNOWN"!==(n=e.mergeable)?"승인하고 머지":null===d(i,n)?"확인 종료":"확인 중…",onCheck:()=>O(e),onMerge:()=>M(e)})]}),o&&!s&&!l&&(0,r.jsxs)("p",{className:"mt-2 text-sm text-amber-600",children:[o,"UNKNOWN"===e.mergeable&&i>=3?" 자동 확인이 끝났습니다. 최신 상태는 페이지를 새로고침하세요.":""]}),N[e.number]&&(0,r.jsx)("p",{role:"alert",className:"mt-2 text-sm text-red-600",children:N[e.number]})]},e.number)})]}):null}var w=a(66860);function y(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now(),a="release-loop"===e.graphId?"릴리스 발행":"announce-loop"===e.graphId?"공지":e.graphId,r=Date.parse(e.since),n=Number.isNaN(r)?0:Math.max(0,Math.floor((t-r)/6e4)),s=n<1?"방금 전":n<60?"".concat(n,"분 전"):n<1440?"".concat(Math.floor(n/60),"시간 전"):"".concat(Math.floor(n/1440),"일 전");return{title:a,nodeId:e.nodeId,waiting:s,message:e.message,recent:e.recent.map(e=>"".concat(e.ok&&"fail"!==e.outcome&&"error"!==e.outcome?"✓":"✗"," ").concat(e.nodeId).concat(e.outcome?" \xb7 ".concat(e.outcome):"").concat(e.summary?" \xb7 ".concat(e.summary):""))}}function v(e){var t,a,s,l,o,c,i;let{item:d,api:u,onDecided:m,confirm:p}=e,[h,b]=(0,n.useState)(d.feed),[x,f]=(0,n.useState)(()=>(0,w.Mz)(d.feed)),[g,y]=(0,n.useState)(!1),[v,N]=(0,n.useState)(0),[j,k]=(0,n.useState)(!1),[S,C]=(0,n.useState)(!1),[I,E]=(0,n.useState)(""),[U,L]=(0,n.useState)(""),[R,O]=(0,n.useState)(!1),M=(e,t)=>{L((0,w.LP)(e,t)),O((0,w.rH)(e))},[D,A]=(0,n.useState)({}),P=(0,n.useRef)(null),_=null!=p?p:e=>window.confirm(e),H=(i=(0,w.Mz)(h),JSON.stringify(x)!==JSON.stringify(i)),G=(0,n.useMemo)(()=>(function(e,t){let a=[];for(let r of(e.cover.image&&a.push({image:e.cover.image,isCover:!0}),t.slides))r.include&&a.push({image:r.image,caption:r.caption});return a})(h,x),[h,x]),T=G[Math.min(v,Math.max(0,G.length-1))],F=(0,n.useMemo)(()=>[h.cover.image,...h.slides.map(e=>e.image)].filter(e=>!!e),[h]);function V(e){N(t=>Math.max(0,Math.min(G.length-1,t+e)))}function z(e,t){f(a=>({...a,slides:a.slides.map((a,r)=>r===e?{...a,...t}:a)}))}function W(e,t){f(a=>{let r=e+t;if(r<0||r>=a.slides.length)return a;let n=[...a.slides];return[n[e],n[r]]=[n[r],n[e]],{...a,slides:n}})}async function Y(){C(!0),L(""),O(!1),E("");try{let e=await u.saveFeedDraft(d.graphId,d.runId,x);return b(e.feed),f((0,w.Mz)(e.feed)),E("저장했어요 \xb7 수정 ".concat(e.feed.revision," \xb7 아직 게시 전입니다")),!0}catch(e){return M(e,"save"),!1}finally{C(!1)}}async function J(){if(_("게시할까요? 승인하면 이 초안으로 게시 준비 묶음이 텔레그램으로 갑니다.")&&(!H||await Y())){C(!0),L("");try{await u.decide(d.graphId,d.runId,"approved"),m()}catch(e){M(e,"decide")}finally{C(!1)}}}async function K(){if(_("이 게시 초안을 거절할까요?")){C(!0),L("");try{await u.decide(d.graphId,d.runId,"rejected"),m()}catch(e){M(e,"decide")}finally{C(!1)}}}(0,n.useEffect)(()=>{let e=!0,t=[],a="undefined"!=typeof URL&&"function"==typeof URL.createObjectURL;return Promise.all(F.map(async r=>{try{let n=await u.feedMedia(d.graphId,d.runId,r);if(!e||!a)return null;let s=URL.createObjectURL(n);return t.push(s),[r,s]}catch(e){return null}})).then(t=>{e&&A(Object.fromEntries(t.filter(e=>!!e)))}),()=>{e=!1,a&&"function"==typeof URL.revokeObjectURL&&t.forEach(e=>URL.revokeObjectURL(e))}},[u,d.graphId,d.runId,F]);let $=(null==(t=h.brand)?void 0:t.name)||"브랜드",q=$.trim().charAt(0).toUpperCase()||"\xb7",Q=x.hashtags.join(" "),X=x.cover.text!==(null!=(s=h.cover.renderedText)?s:h.cover.text)||x.cover.sub!==(null!=(l=h.cover.renderedSub)?l:h.cover.sub);return(0,r.jsxs)("article",{"aria-label":"피드 미리보기","data-feed-revision":h.revision,className:"mx-auto w-full max-w-md overflow-hidden rounded-xl border border-border bg-card text-foreground shadow-sm",children:[(0,r.jsxs)("header",{className:"flex items-center gap-3 px-3 py-2",children:[(0,r.jsx)("span",{"aria-hidden":!0,className:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm font-semibold",children:q}),(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("p",{className:"truncate text-sm font-semibold",children:$}),(null==(a=h.brand)?void 0:a.handle)&&(0,r.jsx)("p",{className:"truncate text-xs text-muted-foreground",children:h.brand.handle})]}),(0,r.jsxs)("span",{className:"ml-auto shrink-0 text-xs text-muted-foreground",children:["수정 ",h.revision,H?" \xb7 저장 안 됨":""]})]}),(0,r.jsxs)("div",{className:"relative aspect-[4/5] w-full touch-pan-y select-none overflow-hidden bg-muted",onTouchStart:e=>{var t,a;P.current=null!=(a=null==(t=e.touches[0])?void 0:t.clientX)?a:null},onTouchEnd:e=>{var t;let a=P.current;P.current=null;let r=null==(t=e.changedTouches[0])?void 0:t.clientX;null==a||null==r||40>Math.abs(r-a)||V(r<a?1:-1)},children:[(null==T?void 0:T.image)&&D[T.image]?(0,r.jsx)("img",{src:D[T.image],alt:T.isCover?x.cover.text:null!=(o=T.caption)?o:"",className:"h-full w-full object-cover"}):(0,r.jsx)("div",{className:"flex h-full w-full items-center justify-center text-sm text-muted-foreground",children:"이미지 불러오는 중"}),G.length>1&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{type:"button","aria-label":"이전 장",disabled:0===v,onClick:()=>V(-1),className:"absolute left-2 top-1/2 -translate-y-1/2 rounded-full bg-black/40 px-2 py-1 text-white disabled:opacity-0",children:"‹"}),(0,r.jsx)("button",{type:"button","aria-label":"다음 장",disabled:v>=G.length-1,onClick:()=>V(1),className:"absolute right-2 top-1/2 -translate-y-1/2 rounded-full bg-black/40 px-2 py-1 text-white disabled:opacity-0",children:"›"})]})]}),G.length>1&&(0,r.jsx)("div",{"aria-label":"장 표시",className:"flex justify-center gap-1.5 py-2",children:G.map((e,t)=>(0,r.jsx)("span",{"data-dot":t===v?"on":"off",className:"h-1.5 w-1.5 rounded-full ".concat(t===v?"bg-primary":"bg-muted-foreground/40")},t))}),X&&(0,r.jsxs)("p",{"data-cover-pending":!0,className:"mx-3 mb-2 rounded border border-dashed border-border px-2 py-1 text-xs text-muted-foreground",children:["커버 문구 변경 — \xab",x.cover.text,x.cover.sub?" \xb7 ".concat(x.cover.sub):"","\xbb \xb7 게시 때 커버를 다시 그립니다"]}),(0,r.jsxs)("div",{className:"space-y-2 px-3 pb-3 text-sm",children:[(0,r.jsxs)("p",{className:"break-words",children:[(0,r.jsx)("span",{className:"font-semibold",children:$})," ",x.caption.hook]}),x.caption.body&&(j?(0,r.jsx)("p",{className:"whitespace-pre-wrap break-words",children:x.caption.body}):(0,r.jsx)("button",{type:"button",onClick:()=>k(!0),className:"text-muted-foreground",children:"더 보기"})),x.hashtags.length>0&&(0,r.jsx)("p",{className:"flex flex-wrap gap-x-1.5 text-primary",children:x.hashtags.map((e,t)=>(0,r.jsx)("span",{className:"whitespace-nowrap",children:e},"".concat(e,"-").concat(t)))}),x.location&&(0,r.jsxs)("p",{className:"text-xs text-muted-foreground",children:["\uD83D\uDCCD ",x.location]})]}),g&&(0,r.jsxs)("section",{"aria-label":"초안 편집",className:"space-y-3 border-t border-border px-3 py-3 text-sm",children:[(0,r.jsxs)("label",{className:"block",children:["커버 문구",(0,r.jsx)("input",{value:x.cover.text,onChange:e=>f({...x,cover:{...x.cover,text:e.target.value}}),className:"mt-1 w-full rounded border border-border bg-background px-2 py-1"})]}),(0,r.jsxs)("label",{className:"block",children:["커버 부제",(0,r.jsx)("input",{value:x.cover.sub,onChange:e=>f({...x,cover:{...x.cover,sub:e.target.value}}),className:"mt-1 w-full rounded border border-border bg-background px-2 py-1"})]}),(0,r.jsxs)("label",{className:"block",children:["첫 줄",(0,r.jsx)("input",{value:x.caption.hook,onChange:e=>f({...x,caption:{...x.caption,hook:e.target.value}}),className:"mt-1 w-full rounded border border-border bg-background px-2 py-1"})]}),(0,r.jsxs)("label",{className:"block",children:["본문",(0,r.jsx)("textarea",{value:x.caption.body,rows:4,onChange:e=>f({...x,caption:{...x.caption,body:e.target.value}}),className:"mt-1 w-full rounded border border-border bg-background px-2 py-1"})]}),(0,r.jsxs)("label",{className:"block",children:["해시태그(띄어쓰기로 구분)",(0,r.jsx)("input",{value:Q,onChange:e=>f({...x,hashtags:e.target.value.split(/\s+/).filter(Boolean)}),className:"mt-1 w-full rounded border border-border bg-background px-2 py-1"})]}),(0,r.jsxs)("label",{className:"block",children:["위치(비우면 없음)",(0,r.jsx)("input",{value:null!=(c=x.location)?c:"",onChange:e=>f({...x,location:e.target.value.trim()?e.target.value:null}),className:"mt-1 w-full rounded border border-border bg-background px-2 py-1"})]}),(0,r.jsx)("ol",{"aria-label":"사진 순서",className:"space-y-2",children:x.slides.map((e,t)=>(0,r.jsxs)("li",{"data-slide":e.image,className:"rounded border border-border p-2 ".concat(e.include?"":"opacity-50"),children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"w-6 shrink-0 text-xs text-muted-foreground",children:t+1}),(0,r.jsx)("input",{"aria-label":"".concat(t+1,"번 사진 설명"),value:e.caption,onChange:e=>z(t,{caption:e.target.value}),className:"min-w-0 flex-1 rounded border border-border bg-background px-2 py-1"})]}),(0,r.jsxs)("div",{className:"mt-2 flex gap-2",children:[(0,r.jsx)("button",{type:"button",disabled:0===t,onClick:()=>W(t,-1),className:"rounded border px-2 py-0.5 disabled:opacity-40",children:"앞으로"}),(0,r.jsx)("button",{type:"button",disabled:t===x.slides.length-1,onClick:()=>W(t,1),className:"rounded border px-2 py-0.5 disabled:opacity-40",children:"뒤로"}),(0,r.jsx)("button",{type:"button",onClick:()=>z(t,{include:!e.include}),className:"rounded border px-2 py-0.5",children:e.include?"빼기":"되살리기"})]})]},e.image))})]}),(I||U)&&(0,r.jsx)("p",{role:U?"alert":"status",className:"px-3 pb-2 text-sm ".concat(U?"text-red-600":"text-muted-foreground"),children:U||I}),U&&R&&(0,r.jsx)("p",{className:"px-3 pb-2 text-sm",children:(0,r.jsx)("a",{href:w.$Y,className:"font-medium underline","data-connect-token-link":!0,children:"연결 토큰 칸 열기 →"})}),(0,r.jsxs)("footer",{className:"flex flex-wrap gap-2 border-t border-border px-3 py-3",children:[(0,r.jsx)("button",{type:"button",disabled:S,onClick:()=>y(e=>!e),className:"rounded-lg border px-3 py-2 text-sm disabled:opacity-50",children:g?"편집 닫기":"편집"}),(0,r.jsx)("button",{type:"button",disabled:S||!H,onClick:()=>{Y()},className:"rounded-lg border px-3 py-2 text-sm disabled:opacity-50",children:"수정 저장"}),(0,r.jsx)("button",{type:"button",disabled:S,onClick:()=>{J()},className:"rounded-lg bg-blue-600 px-3 py-2 text-sm font-medium text-white disabled:opacity-50",children:"최종 게시"}),(0,r.jsx)("button",{type:"button",disabled:S,onClick:()=>{K()},className:"ml-auto rounded-lg px-3 py-2 text-sm text-muted-foreground disabled:opacity-50",children:"거절"})]})]})}function N(){let e,{client:t}=(0,o.Q)(),a=(0,n.useMemo)(()=>(0,w.ll)({client:t}),[t]),[s,l]=(0,n.useState)([]),[c,i]=(0,n.useState)(""),[d,u]=(0,n.useState)(!1),[m,p]=(0,n.useState)(!1),h=(0,n.useRef)((e=0,{begin:()=>e+=1,isLatest:t=>t===e})).current,b=(0,n.useCallback)(async()=>{let e=h.begin();try{let t=await a.list();if(!h.isLatest(e))return;l(t.items),i(""),u(!1)}catch(t){h.isLatest(e)&&(i((0,w.LP)(t,"list")),u((0,w.rH)(t)))}},[a,h]);async function x(e,t){if("rejected"!==t||window.confirm("".concat(y(e).title," 실행을 거절할까요?"))){p(!0),i(""),h.begin();try{await a.decide(e.graphId,e.runId,t),await b()}catch(e){i((0,w.LP)(e,"decide")),u((0,w.rH)(e))}finally{p(!1)}}}(0,n.useEffect)(()=>{b();let e=window.setInterval(()=>{b()},3e4);return()=>window.clearInterval(e)},[b]);let f=s.filter(e=>!!e.feed),g=s.filter(e=>!e.feed);return s.length||c?(0,r.jsxs)(r.Fragment,{children:[f.length>0&&(0,r.jsxs)("section",{"aria-label":"게시 대기",className:"mx-auto max-w-3xl space-y-4 px-4 pt-6 text-foreground sm:px-8",children:[(0,r.jsx)("h2",{className:"text-xl font-semibold",children:"게시 대기"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"고쳐서 저장해도 대기열에 남습니다. \xab최종 게시\xbb를 눌러야만 올라갑니다."}),f.map(e=>(0,r.jsx)(v,{item:e,api:a,onDecided:()=>{h.begin(),b()}},"".concat(e.graphId,"/").concat(e.runId)))]}),(g.length>0||c)&&(0,r.jsxs)("section",{"aria-label":"실행 승인",className:"mx-auto max-w-3xl space-y-4 px-4 pt-6 text-foreground sm:px-8",children:[(0,r.jsx)("h2",{className:"text-xl font-semibold",children:"실행 승인"}),c&&(0,r.jsx)("p",{role:"alert",className:"text-sm text-red-600",children:c}),c&&d&&(0,r.jsx)("p",{className:"text-sm",children:(0,r.jsx)("a",{href:w.$Y,className:"font-medium underline","data-connect-token-link":!0,children:"연결 토큰 칸 열기 →"})}),g.map(e=>{let t=y(e);return(0,r.jsxs)("article",{className:"rounded-xl border border-border bg-card p-5 shadow-sm",children:[(0,r.jsx)("h3",{className:"font-semibold",children:t.title}),(0,r.jsxs)("p",{className:"mt-1 text-sm text-muted-foreground",children:["멈춘 단계: ",t.nodeId," \xb7 ",t.waiting,"부터 대기 중"]}),(0,r.jsx)("p",{className:"mt-3 whitespace-pre-wrap break-words text-sm",children:t.message}),t.recent.length>0&&(0,r.jsxs)("div",{className:"mt-3 text-sm",children:[(0,r.jsx)("p",{className:"font-medium",children:"최근 단계"}),(0,r.jsx)("ul",{className:"mt-1 space-y-1",children:t.recent.map((e,t)=>(0,r.jsx)("li",{className:"break-words",children:e},t))})]}),(0,r.jsxs)("div",{className:"mt-4 flex gap-2",children:[(0,r.jsx)("button",{type:"button",disabled:m,onClick:()=>{x(e,"approved")},className:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white disabled:opacity-50",children:"승인"}),(0,r.jsx)("button",{type:"button",disabled:m,onClick:()=>{x(e,"rejected")},className:"rounded-lg border px-4 py-2 text-sm disabled:opacity-50",children:"거절"})]})]},"".concat(e.graphId,"/").concat(e.runId))})]})]}):null}function j(){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(N,{}),(0,r.jsx)(g,{})]})}},66860:(e,t,a)=>{"use strict";function r(e){return{slides:e.slides.map(e=>{let{image:t,caption:a,include:r}=e;return{image:t,caption:a,include:r}}),caption:{hook:e.caption.hook,body:e.caption.body},hashtags:[...e.hashtags],cover:{text:e.cover.text,sub:e.cover.sub},location:e.location}}a.d(t,{$Y:()=>l,LP:()=>c,Mz:()=>r,ll:()=>d,rH:()=>o});class n extends Error{constructor(e,t){super(t),this.status=e,this.name="GraphApprovalsApiError"}}let s={list:"목록을 보려면",decide:"승인하려면",save:"초안을 저장하려면"},l="/app/settings/#bearer-token";function o(e){return e instanceof n&&(401===e.status||403===e.status)}function c(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"decide";return e instanceof n?401===e.status||403===e.status?"".concat(s[t]," 이 기기를 데몬에 연결해야 합니다 — 설정 › 데몬 연결 › 연결 토큰 칸에 토큰을 넣어 주세요."):404===e.status?"이 실행을 찾지 못했습니다. 목록을 다시 확인해 주세요.":409===e.status?"이미 결정된 실행입니다. 목록을 다시 확인해 주세요.":400===e.status?"결정 내용을 확인한 뒤 다시 시도해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요.":e instanceof TypeError?"서버에 연결하지 못했습니다. 연결 상태를 확인해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요."}let i="/v1/graph-approvals";function d(e){var t,a;let r=(null!=(t=e.baseUrl)?t:"").replace(/\/+$/,""),s=null!=(a=e.fetchImpl)?a:fetch;async function l(t,a){let l={...a,headers:{"content-type":"application/json",...e.authHeader?{authorization:e.authHeader}:{}}},o=e.client?await e.client.fetchResponse(t,l):await s("".concat(r).concat(t),l),c=await o.json().catch(()=>null);if(!o.ok){let e=c&&"object"==typeof c&&"error"in c&&"string"==typeof c.error?c.error:"request-failed";throw new n(o.status,e)}return c}return{list:()=>l(i),decide:(e,t,a)=>l("".concat(i,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t)),{method:"POST",body:JSON.stringify({decision:a})}),saveFeedDraft:(e,t,a)=>l("".concat(i,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t),"/feed-draft"),{method:"PUT",body:JSON.stringify(a)}),feedMedia:async(t,a,l)=>{let o="".concat(i,"/").concat(encodeURIComponent(t),"/").concat(encodeURIComponent(a),"/media?path=").concat(encodeURIComponent(l)),c={headers:e.authHeader?{authorization:e.authHeader}:{}},d=e.client?await e.client.fetchResponse(o,c):await s("".concat(r).concat(o),c);if(!d.ok)throw new n(d.status,"media-failed");return d.blob()}}}},71747:(e,t,a)=>{"use strict";a.d(t,{A:()=>i});var r=a(24815);let n=function(){for(var e=arguments.length,t=Array(e),a=0;a<e;a++)t[a]=arguments[a];return t.filter((e,t,a)=>!!e&&""!==e.trim()&&a.indexOf(e)===t).join(" ").trim()},s=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,a)=>a?a.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 o=(0,r.createContext)({}),c=(0,r.forwardRef)((e,t)=>{var a,s,c;let{color:i,size:d,strokeWidth:u,absoluteStrokeWidth:m,className:p="",children:h,iconNode:b,...x}=e,{size:f=24,strokeWidth:g=2,absoluteStrokeWidth:w=!1,color:y="currentColor",className:v=""}=null!=(a=(0,r.useContext)(o))?a:{},N=(null!=m?m:w)?24*Number(null!=u?u:g)/Number(null!=d?d:f):null!=u?u:g;return(0,r.createElement)("svg",{ref:t,...l,width:null!=(s=null!=d?d:f)?s:l.width,height:null!=(c=null!=d?d:f)?c:l.height,stroke:null!=i?i:y,strokeWidth:N,className:n("lucide",v,p),...!h&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(x)&&{"aria-hidden":"true"},...x},[...b.map(e=>{let[t,a]=e;return(0,r.createElement)(t,a)}),...Array.isArray(h)?h:[h]])}),i=(e,t)=>{let a=(0,r.forwardRef)((a,l)=>{let{className:o,...i}=a;return(0,r.createElement)(c,{ref:l,iconNode:t,className:n("lucide-".concat(s(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),o),...i})});return a.displayName=s(e),a}},89364:(e,t,a)=>{Promise.resolve().then(a.bind(a,57256))},89469:(e,t,a)=>{"use strict";a.d(t,{Zr:()=>l,f6:()=>n,oD:()=>s});let r="elanous.daemon.sessionId";function n(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function 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 t=n();return localStorage.setItem(r,t),t}function l(){let e=n();return localStorage.setItem(r,e),e}},91611:(e,t,a)=>{"use strict";a.d(t,{GM:()=>o,J3:()=>l,WF:()=>r,bR:()=>s,m:()=>c,r5:()=>n});let r="/v1/devices",n="/v1/approvals/merges",s="/v1/templates/capability-preview",l="/v1/idle-nudge/preview",o="/v1/morning-digest/showroom",c="/v1/next-fluent/dispatch"}},e=>{e.O(0,[7174,1324,5290,607,7358],()=>e(e.s=89364)),_N_E=e.O()}]);
|