elanous 0.2.11 → 0.2.13
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/{1394-556de6d71bbdb0fb.js → 1394-931c9827067b2276.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3869-3cd46526879f454c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3992-2e522a8ac5f2afde.js → 3992-fe5c06d6b31f8b25.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5250-c78ca295585bbf95.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6511-ff8360be3d65aaa4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6588-ba380869b67c4fa7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7758-85c2b53f731da024.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8605-ea5bee9dfae512c7.js → 8605-9da4678f8a310d18.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9906-e7b8b5310a169dfe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-e5b4e1b256f41076.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-6a061bd97f0b9398.js → page-e49b9b76c565a0b1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-b4f032c893b21cc9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-f14987d5850a31e0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-b433308aad13ceb6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/{page-7c97dcdfe2e37a60.js → page-4c1dbb21861beab2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-c85b816e3b269dbb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/{page-5721537ca8a3598c.js → page-f6bc66b919b2ea7d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/{page-b654240a572e4c48.js → page-60603c1e056c9b25.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/{page-b9750abc897508c3.js → page-a0ea8f5a2341ee6b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-45c5bf04b4a605e6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-36c6c4183353ac9e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-cb2eb0fd809980da.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/{page-c8b1ccda6ba7ae98.js → page-31012264da8a341f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/{layout-d6b1d156fb95e74b.js → layout-50309aeb0bdd554a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-bc00e964e855f4df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/{page-9688f5b4f1ff950f.js → page-0696ee3fac9fe56c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-66c27608f651b866.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-35414e0a007b4082.js → page-6ddd2109b7fc3a80.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-4e50b7298c1f69a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/{page-e001823c35c9dd67.js → page-7a2bf830038a2264.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/{page-371423d1a573d64b.js → page-1f327f18694fabca.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/{page-4b764b125339ac17.js → page-e5cef2fe6e4028df.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/{page-cdf8e4b01067bcf1.js → page-cf596128d2b420ba.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/{page-3a24072b35470157.js → page-f672536f14f0969f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/page-b52365662232db89.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-e7a6c80f288b1948.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-d37cb0d52f9b6bd5.js → page-29a709616df9b050.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/{page-686da0df9bf23e5c.js → page-fee842d7c2151129.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/{page-4dc614f3ce043e63.js → page-78b40a344ed22f24.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-75d199f448171014.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/{page-d02c782fc792e2af.js → page-a011dd5b0bff29c5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/{page-239c17b911b84e72.js → page-d92e32d51ab5157e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/share/{page-dc6a79fb003f746c.js → page-5f21aed6932ef375.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/{page-0fffb84cafdc9da6.js → page-1e1a53946804debf.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/{page-1218753c82d585f6.js → page-a1833cd43d832601.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/term/{page-4b5935e67531efb5.js → page-63d14a4d8fe1e1c1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/today/{page-3285bc87caf1eaa5.js → page-2a511d320f762e06.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/{page-ad553b0e06505ecd.js → page-1c3e03f88dac1e21.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/{page-fca096e3e860306f.js → page-c4d5289c2ea97a89.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/{page-9ebfa78f0d9885c3.js → page-b91f8952deaeaf27.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/{page-3dc5f21f7e39622d.js → page-71b43a2588489987.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-2b256feed331546f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-505bb96d69a8622c.js +1 -0
- package/apps/pwa/out/_next/static/css/128fb7fb670b2fbf.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +14 -14
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +14 -14
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +14 -14
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +14 -14
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +14 -14
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +14 -14
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +14 -14
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +14 -14
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +14 -14
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +14 -14
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +14 -14
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +14 -14
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +14 -14
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +14 -14
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +14 -14
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +14 -14
- package/apps/pwa/out/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/examples/teams/personas/backend.yaml +4 -0
- package/examples/teams/personas/pm.yaml +4 -0
- package/examples/teams/personas/qa.yaml +4 -0
- package/examples/teams/small-product.yaml +20 -0
- package/graphs/context/nightly-condense.yaml +21 -0
- package/graphs/context/recipes.yaml +12 -0
- package/graphs/demo/inside-seed.yaml +20 -0
- package/graphs/demo/recipes.yaml +12 -0
- package/graphs/lecture/lecture-note.yaml +28 -0
- package/graphs/lecture/recipes.yaml +17 -0
- package/package.json +2 -1
- package/plugins/card-followup/examples/sample-card.png +0 -0
- package/scripts/context-hooks/emit.ts +36 -14
- package/scripts/coord-channel-watch.sh +1 -0
- package/scripts/discord-seat-probe.ts +144 -0
- package/scripts/hq/hq-standby.sh +65 -0
- package/scripts/hq/standby-promote.ts +173 -0
- package/scripts/hq/standby-role.ts +59 -0
- package/scripts/hq/standby-snapshot.ts +226 -0
- package/scripts/hq/standby-verify.ts +219 -0
- package/scripts/lecture-note/node.ts +256 -0
- package/scripts/lib/telegram-inject-args.ts +31 -0
- package/scripts/measure-pod-memory-by-goal.ts +130 -0
- package/scripts/release-loop/auto-approve-node.ts +1 -1
- package/scripts/release-loop/checklist-gate-node.ts +2 -1
- package/scripts/release-loop/gate-node.ts +61 -17
- package/scripts/release-loop/ops-upgrade-node.ts +59 -6
- package/scripts/release-loop/publish-node.ts +4 -1
- package/scripts/release-loop/version-node.ts +13 -3
- package/scripts/telegram-inject.ts +14 -6
- package/scripts/test-deterministic.ts +53 -3
- package/scripts/test-diet/remeasure-list.ts +112 -0
- package/scripts/ux/demo-rehearsal.ts +17 -13
- package/scripts/ux/demo-seed.ts +108 -0
- package/scripts/ux/lib/rehearsal-verdict.ts +12 -5
- package/skills/omni-crawl/SKILL.md +16 -16
- package/skills/omni-crawl/package-lock.json +1 -544
- package/skills/omni-crawl/package.json +3 -4
- package/skills/omni-crawl/scripts/main.ts +13 -13
- package/skills/omni-crawl/scripts/monitor.ts +8 -8
- package/skills/omni-crawl/src/apify.ts +13 -2
- package/skills/omni-crawl/src/capture.ts +6 -0
- package/skills/omni-crawl/src/registry.ts +2 -2
- package/skills/omni-crawl/src/stdout-json.ts +4 -0
- package/skills/omni-digest/SKILL.md +10 -11
- package/skills/omni-digest/package-lock.json +0 -545
- package/skills/omni-digest/package.json +2 -5
- package/skills/omni-digest/scripts/main.ts +3 -3
- package/skills/omni-digest/src/delegate.ts +5 -5
- package/skills/omni-digest/src/fetch.ts +2 -2
- package/skills/omni-digest/src/media.ts +25 -11
- package/skills/omni-digest/src/visual.ts +3 -2
- package/skills/omni-market/scripts/main.ts +1 -1
- package/skills/omni-market/scripts/stdout-json.ts +4 -0
- package/src/agent/identity-env.ts +11 -0
- package/src/agent-mission/driver.ts +150 -23
- package/src/agent-mission/duo.ts +94 -0
- package/src/agent-mission/pty-decision.ts +2 -2
- package/src/autopilot/pty-control-loop.ts +4 -1
- package/src/autopilot/track-agent-shadow.ts +2 -1
- package/src/autopilot/track-agent.ts +4 -1
- package/src/boot/daemon-prompt-request.ts +3 -0
- package/src/boot/daemon-prompt-turn.ts +6 -2
- package/src/boot/daemon-runtime.ts +48 -16
- package/src/chat/index.ts +1 -0
- package/src/cli/decisions-cli.ts +51 -19
- package/src/cli/outputs-cli.ts +92 -0
- package/src/cli/persona-cli.ts +45 -13
- package/src/cli/pod-cli.ts +27 -3
- package/src/cli/pod-memory-advice.ts +35 -0
- package/src/cli/pr-cli.ts +15 -1
- package/src/cli/release-cli.ts +135 -15
- package/src/context-bus/condense.ts +194 -0
- package/src/context-bus/context-day.ts +82 -0
- package/src/context-bus/context-now-surfaces.ts +32 -2
- package/src/context-bus/context-now.ts +2 -2
- package/src/context-bus/coord-events.ts +2 -2
- package/src/context-bus/long-term-memory.ts +118 -22
- package/src/context-bus/nightly-condense.ts +153 -0
- package/src/context-bus/session-events.ts +35 -0
- package/src/dashboard/dashboard-status-lines.ts +2 -0
- package/src/dashboard/index.ts +8 -0
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +24 -0
- package/src/decisions/decision-cards.ts +13 -7
- package/src/decisions/decision-ledger.ts +43 -17
- package/src/domains/outbound-alert.ts +99 -31
- package/src/domains/outbound-log-probe.ts +8 -0
- package/src/execution-loop/launch-gate.ts +17 -8
- package/src/field-note/telegram.ts +142 -0
- package/src/graph-kinds/registry.ts +2 -2
- package/src/graph-runner/graph-approval-card.ts +2 -2
- package/src/graph-runner/graph-grow-llm.ts +23 -13
- package/src/graph-runner/graph-grow.ts +69 -13
- package/src/graph-runner/graph-tick.ts +9 -2
- package/src/graph-runner/runner.ts +92 -24
- package/src/harness/harness-cli-command.ts +165 -17
- package/src/harness/harness-queue-child.ts +37 -0
- package/src/harness/harness-queue.ts +306 -0
- package/src/hooks/consult-intake.ts +153 -0
- package/src/hooks/github-shadow.ts +72 -2
- package/src/hooks/receiver.ts +82 -3
- package/src/hq/hq.ts +318 -0
- package/src/hq/lease.ts +210 -0
- package/src/hq/ledger-write-target.ts +41 -0
- package/src/index.ts +232 -16
- package/src/intake-plane/discord-seat-work.ts +36 -3
- package/src/intake-plane/linear-wish.ts +44 -0
- package/src/intake-plane/persona-answer.ts +5 -0
- package/src/intake-plane/telegram-seat-work.ts +13 -6
- package/src/intake-plane/wish-card.ts +33 -0
- package/src/llm/difficulty.ts +1 -1
- package/src/loops/checker.ts +178 -0
- package/src/loops/loop-cli.ts +37 -3
- package/src/loops/observe.ts +49 -0
- package/src/loops/orchestrator/overlap.ts +141 -0
- package/src/loops/orchestrator/traffic.ts +150 -0
- package/src/loops/package/verify.ts +125 -0
- package/src/loops/verdict.ts +22 -0
- package/src/maturity/feature-maturity.ts +5 -4
- package/src/memory.ts +37 -4
- package/src/nexus/api/card-followup-route.ts +118 -0
- package/src/nexus/api/decisions-route.ts +68 -0
- package/src/nexus/api/http-server.ts +78 -8
- package/src/nexus/api/outbound-report.ts +40 -7
- package/src/nexus/api/personas.ts +97 -54
- package/src/nexus/api/skill-exec-route.ts +97 -0
- package/src/nexus/api/task-cards-api.ts +19 -0
- package/src/nexus/api/workflow-history.ts +88 -0
- package/src/nexus/api/workflows.ts +52 -0
- package/src/nexus/outbound/delivery-ledger.ts +17 -8
- package/src/nexus/outbound/router.ts +8 -3
- package/src/persona/loader.ts +18 -0
- package/src/persona/persona-todo.ts +14 -9
- package/src/persona/presets.ts +10 -2
- package/src/persona/team.ts +105 -0
- package/src/persona/types.ts +4 -0
- package/src/plugins/maker/market-bundle.ts +2 -1
- package/src/pod-lease/host-lease.ts +130 -20
- package/src/release-loop/checklist.ts +15 -3
- package/src/release-loop/feature-store.ts +24 -10
- package/src/release-loop/landed-but-yellow.ts +60 -0
- package/src/seat-dispatch/seat-ask.ts +57 -12
- package/src/seat-loop/seat-loop.ts +253 -18
- package/src/seat-loop/seat-pack.ts +127 -0
- package/src/self-dev/ask-launch-flow.ts +3 -0
- package/src/self-dev/draft-sweep.ts +44 -10
- package/src/self-dev/draft-triage-rules.ts +54 -2
- package/src/self-implement/budget-gate.ts +29 -12
- package/src/self-implement/gate-candidate-ranking.ts +60 -0
- package/src/self-implement/gate-scope.ts +9 -8
- package/src/self-implement/headless-elanous-driver.ts +7 -2
- package/src/self-implement/l8-merge-queue.ts +157 -1
- package/src/self-implement/orchestrator.ts +15 -0
- package/src/self-implement/test-seams.ts +1 -0
- package/src/steward/launch.ts +5 -1
- package/src/steward/readiness.ts +125 -0
- package/src/steward/rescue.ts +75 -0
- package/src/steward/triage.ts +48 -9
- package/src/task-cards/card-cli.ts +78 -0
- package/src/task-orchestrator/surfaces/pod-command-job.ts +14 -10
- package/src/task-orchestrator/surfaces/pod-lease.ts +18 -6
- package/src/task-orchestrator/surfaces/pod-pool.ts +27 -10
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +46 -8
- package/src/telegram-commands.ts +21 -0
- package/src/telegram-dispatch-forward.ts +1 -1
- package/src/telegram-fabric-plan.ts +90 -0
- package/src/telegram-project-command.ts +84 -4
- package/src/telegram.ts +37 -5
- package/src/tool-runtime/elanous-control-runtimes.ts +2 -1
- package/src/user-config.ts +101 -13
- package/src/version/packed-revision.json +1 -1
- package/src/workflow-runtime/executor.ts +4 -0
- package/src/workflow-runtime/node-catalog.ts +13 -0
- package/src/workflow-runtime/nodes/knowledge.ts +38 -0
- package/src/workflow-runtime/schema.ts +17 -1
- package/src/workflow-runtime/types.ts +13 -1
- package/apps/pwa/out/_next/static/chunks/2310-7a59f043f6db207e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2548-6e316138d347cefe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3869-a39d1d9921e10d43.js +0 -1
- package/apps/pwa/out/_next/static/chunks/507-5acd98bd6dab2d8a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5445-745eb795c5963d79.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9906-482c6619b3fdda20.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-1dcdc58fc2de2454.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-cb95a7432c9ee744.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-b12b6d2f8d2d1aea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-b9efe868bfd36255.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-8fd36984f549270a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-4cd1de371f8ad048.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-d99f89657828421c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-50cb2a0eb15e6c83.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-2a9932ddb62d76bd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-6b15dd6456c5df09.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-e7a529e0507ac86c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-94c82eb0ae5abb32.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-0be8d4b2ced75ba0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-53f80edc6b8dc07c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-c6da2b468454532d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-93bc70e36f595414.js +0 -1
- package/apps/pwa/out/_next/static/css/543f56bcb1f79fca.css +0 -1
- /package/apps/pwa/out/_next/static/{Y4zKzL62sakG5momz3SoQ → D51l8jUBplJrIpWvENsDK}/_buildManifest.js +0 -0
- /package/apps/pwa/out/_next/static/{Y4zKzL62sakG5momz3SoQ → D51l8jUBplJrIpWvENsDK}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7398],{79202:(e,t,s)=>{"use strict";s.d(t,{default:()=>d});var a=s(54456),i=s(60500),n=s(80581);class r extends Error{constructor(e,t,s){super("mission-room ".concat(e," on ").concat(t)),this.status=e,this.path=t,this.body=s,this.name="MissionRoomApiError"}}function o(e){var t;let[s,n]=(0,i.useState)({loading:!0,error:null,state:null}),[r,o]=(0,i.useState)(""),[d,u]=(0,i.useState)(""),[m,h]=(0,i.useState)(!1),[x,p]=(0,i.useState)(null),[f,b]=(0,i.useState)(!1),y=(0,i.useRef)(!0);(0,i.useEffect)(()=>()=>{y.current=!1},[]);let g=(0,i.useCallback)(async()=>{n(e=>({...e,loading:!0,error:null}));try{let{state:t}=await e.api.spawn(e.missionId);if(!y.current)return;n({loading:!1,error:null,state:t})}catch(e){if(!y.current)return;n({loading:!1,error:c(e),state:null})}},[e.api,e.missionId]);(0,i.useEffect)(()=>{g()},[g]);let j=(0,i.useCallback)(async()=>{if(r.trim()&&!m){h(!0);try{let t=await e.api.deliberate(e.missionId,r.trim(),d.trim()||void 0);if(!y.current)return;n(e=>e.state?{...e,state:{...e.state,decisions:[...e.state.decisions,t]}}:e),o("")}catch(e){if(!y.current)return;n(t=>({...t,error:c(e)}))}finally{y.current&&h(!1)}}},[e.api,e.missionId,r,d,m]),v=(0,i.useCallback)(async t=>{if(t.trim()&&!x){p(t);try{let s=await e.api.decide(e.missionId,t);if(!y.current)return;n(e=>{if(!e.state)return e;let t=e.state.decisions.slice(),a=t.findIndex(e=>e.ts===s.ts);return a>=0&&(t[a]=s),{...e,state:{...e.state,decisions:t}}})}catch(e){if(!y.current)return;n(t=>({...t,error:c(e)}))}finally{y.current&&p(null)}}},[e.api,e.missionId,x]),N=(0,i.useCallback)(async()=>{if(!f){b(!0);try{var t;let s=await e.api.archive(e.missionId);if(!y.current)return;n(e=>({...e,state:s})),null==(t=e.onArchived)||t.call(e)}catch(e){if(!y.current)return;n(t=>({...t,error:c(e)}))}finally{y.current&&b(!1)}}},[e.api,e.missionId,f,e.onArchived]),w=(null==(t=s.state)?void 0:t.status)==="archived",S=(0,i.useMemo)(()=>s.state?[...s.state.decisions].sort((e,t)=>t.ts-e.ts):[],[s.state]);return s.loading&&!s.state?(0,a.jsx)("div",{className:"p-4 text-sm opacity-70",children:"Loading mission room…"}):(0,a.jsxs)("section",{className:"mission-room-panel flex flex-col gap-4 p-4","data-mission-id":e.missionId,children:[(0,a.jsxs)("header",{className:"flex items-baseline justify-between gap-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:e.missionTitle?"".concat(e.missionTitle," \xb7 deliberation"):"Mission Deliberation Room"}),s.state&&(0,a.jsxs)("p",{className:"text-xs opacity-70",children:["tag: ",(0,a.jsx)("code",{children:s.state.missionTag})," \xb7 status:"," ",(0,a.jsx)("span",{className:w?"text-amber-600":"text-emerald-600",children:s.state.status})," \xb7 ","decisions: ",s.state.decisions.length]})]}),!w&&s.state&&(0,a.jsx)("button",{type:"button",className:"text-xs underline opacity-70 hover:opacity-100",disabled:f,onClick:()=>void N(),children:f?"archiving…":"archive room"})]}),s.error&&(0,a.jsx)("div",{role:"alert",className:"rounded border border-rose-400/50 bg-rose-50 px-3 py-2 text-sm text-rose-900",children:s.error}),!w&&(0,a.jsxs)("form",{className:"flex flex-col gap-2 rounded border border-zinc-200 p-3",onSubmit:e=>{e.preventDefault(),j()},children:[(0,a.jsx)("label",{className:"text-xs uppercase tracking-wide opacity-70",children:"New deliberation"}),(0,a.jsx)("textarea",{className:"min-h-[80px] w-full rounded border border-zinc-300 bg-white p-2 text-sm",placeholder:"Describe the branch you're stuck on…",value:r,onChange:e=>o(e.target.value),disabled:m}),(0,a.jsx)("textarea",{className:"min-h-[40px] w-full rounded border border-zinc-200 bg-zinc-50 p-2 text-xs",placeholder:"Optional mission context (task list digest, etc.)",value:d,onChange:e=>u(e.target.value),disabled:m}),(0,a.jsx)("div",{className:"flex justify-end",children:(0,a.jsx)("button",{type:"submit",className:"rounded bg-zinc-900 px-3 py-1 text-sm text-white disabled:opacity-50",disabled:!r.trim()||m,children:m?"asking lanes…":"ask the lanes"})})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[0===S.length&&(0,a.jsx)("p",{className:"text-sm opacity-70",children:"No deliberations yet."}),S.map(e=>(0,a.jsx)(l,{decision:e,onDecide:w?void 0:v,decidingChoice:x},e.ts))]})]})}function l(e){let{decision:t,onDecide:s,decidingChoice:n}=e,[r,o]=(0,i.useState)(""),l=t.resolution.status,c="decided"===t.resolution.status?t.resolution.chosen:null;return(0,a.jsxs)("article",{className:"rounded border border-zinc-200 bg-white p-3",children:[(0,a.jsxs)("header",{className:"flex items-baseline justify-between gap-2",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:t.question}),(0,a.jsx)("time",{className:"shrink-0 text-xs opacity-60",dateTime:new Date(t.ts).toISOString(),children:new Date(t.ts).toLocaleString()})]}),(0,a.jsx)("ul",{className:"mt-2 flex flex-col gap-2",children:t.opinions.map((e,t)=>(0,a.jsxs)("li",{className:"rounded bg-zinc-50 p-2 text-xs",children:[(0,a.jsxs)("div",{className:"font-medium",children:[e.role,e.modelId?(0,a.jsxs)("span",{className:"opacity-60",children:[" \xb7 ",e.modelId]}):null]}),(0,a.jsx)("pre",{className:"mt-1 whitespace-pre-wrap text-xs leading-snug",children:e.text})]},"".concat(e.role,"-").concat(t)))}),(0,a.jsxs)("footer",{className:"mt-3 flex items-center justify-between gap-2",children:[(0,a.jsxs)("span",{className:"text-xs opacity-70",children:["resolution:"," ","decided"===l?(0,a.jsxs)("span",{className:"font-medium text-emerald-700",children:["decided → ",c]}):(0,a.jsx)("span",{className:"text-amber-700",children:"open"})]}),s&&"open"===l&&(0,a.jsxs)("form",{className:"flex items-center gap-1",onSubmit:e=>{e.preventDefault(),r.trim()&&s(r.trim())},children:[(0,a.jsx)("input",{className:"w-32 rounded border border-zinc-300 px-2 py-0.5 text-xs",placeholder:"chosen…",value:r,onChange:e=>o(e.target.value),disabled:null!==n}),(0,a.jsx)("button",{type:"submit",className:"rounded bg-emerald-700 px-2 py-0.5 text-xs text-white disabled:opacity-50",disabled:!r.trim()||null!==n,children:n===r?"…":"apply"})]})]})]})}function c(e){if(e instanceof r){let t="object"==typeof e.body&&e.body&&"detail"in e.body?e.body.detail:null;return 404===e.status?"Mission room not found.":409===e.status?t?"Conflict: ".concat(t):"Conflict — room may be archived or no open decision.":401===e.status?"Authentication required.":"Mission room error (".concat(e.status,").")}return e instanceof Error?e.message:String(e)}function d(){var e;let t=(0,n.useParams)(),s=decodeURIComponent(null!=(e=null==t?void 0:t.id)?e:""),l=(0,i.useMemo)(()=>(function(e){var t;let s=e.baseUrl.replace(/\/+$/,""),a=null!=(t=e.fetchImpl)?t:fetch,i=e.authHeader;async function n(e,t){let n={"content-type":"application/json"};i&&(n.authorization=i),(null==t?void 0:t.headers)&&Object.assign(n,t.headers);let o=await a("".concat(s).concat(e),{...t,headers:n}),l=await o.json().catch(()=>null);if(!o.ok)throw new r(o.status,e,l);return l}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"/v1/missions/".concat(encodeURIComponent(e),"/showroom").concat(t)}return{spawn:async e=>await n(o(e)),deliberate:async(e,t,s)=>(await n(o(e,"/deliberate"),{method:"POST",body:JSON.stringify({question:t,...void 0!==s?{missionContext:s}:{}})})).decision,decide:async(e,t)=>(await n(o(e,"/decision"),{method:"POST",body:JSON.stringify({chosen:t})})).decision,archive:async e=>(await n(o(e,"/archive"),{method:"POST"})).state}})({baseUrl:window.location.origin}),[]);return s?(0,a.jsx)(o,{missionId:s,api:l}):(0,a.jsx)("div",{className:"p-4 text-sm",children:"Mission id missing in URL."})}},79327:(e,t,s)=>{Promise.resolve().then(s.bind(s,79202))},80581:(e,t,s)=>{"use strict";var a=s(35793);s.o(a,"useParams")&&s.d(t,{useParams:function(){return a.useParams}}),s.o(a,"usePathname")&&s.d(t,{usePathname:function(){return a.usePathname}}),s.o(a,"useRouter")&&s.d(t,{useRouter:function(){return a.useRouter}}),s.o(a,"useSearchParams")&&s.d(t,{useSearchParams:function(){return a.useSearchParams}})}},e=>{e.O(0,[6390,3170,7358],()=>e(e.s=79327)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9773],{10304:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>h});var n=a(54456),s=a(60500),r=a(98025);class o extends Error{constructor(e,t,a){super("morning-showroom ".concat(e," on ").concat(t)),this.status=e,this.path=t,this.body=a,this.name="MorningShowroomApiError"}}let i={yesterday:"Yesterday",today:"Today",blockers:"Blockers",opportunities:"Opportunities"},d={yesterday:"◐",today:"▶",blockers:"⛔",opportunities:"✦"};function c(e){let[t,a]=(0,s.useState)({kind:"loading"}),[i,d]=(0,s.useState)(0);return(0,s.useEffect)(()=>{var t;let n=!1,s=null!=(t=e.api)?t:function(e){var t;let a=e.baseUrl.replace(/\/+$/,""),n=null!=(t=e.fetchImpl)?t:fetch,s=r.GM;return{async compose(t){let r={"content-type":"application/json"};e.authHeader&&(r.authorization=e.authHeader);let i=await n("".concat(a).concat(s),{method:"POST",headers:r,body:JSON.stringify(t)}),d=await i.json().catch(()=>null);if(!i.ok||!(null==d?void 0:d.card))throw new o(i.status,s,d);return d.card}}}({baseUrl:window.location.origin});return a({kind:"loading"}),s.compose(e.request).then(e=>{n||a(0===e.lanes.length?{kind:"empty"}:{kind:"card",card:e})}).catch(()=>{n||a({kind:"unavailable"})}),()=>{n=!0}},[e.api,e.request.date,e.request.windowStart,e.request.windowEnd,i]),(0,n.jsx)(l,{state:t,onRetry:()=>d(e=>e+1)})}function l(e){let{state:t,onRetry:a}=e;return"loading"===t.kind?(0,n.jsx)("div",{className:"p-4 text-sm opacity-70",children:"Morning showroom을 준비하고 있습니다…"}):"unavailable"===t.kind?(0,n.jsxs)("section",{className:"p-4 text-sm","data-testid":"morning-showroom-unavailable",children:[(0,n.jsx)("h2",{className:"font-semibold",children:"Morning showroom이 아직 연결되지 않았습니다."}),(0,n.jsx)("p",{className:"mt-1 opacity-70",children:"다이제스트를 만들 수 있는 곳이 준비되면 이 화면에 표시됩니다."}),(0,n.jsx)("button",{type:"button",className:"mt-3 underline",onClick:a,children:"다시 시도"})]}):"empty"===t.kind?(0,n.jsxs)("section",{className:"p-4 text-sm","data-testid":"morning-showroom-empty",children:[(0,n.jsx)("h2",{className:"font-semibold",children:"아직 보여 줄 Morning showroom 항목이 없습니다."}),(0,n.jsx)("p",{className:"mt-1 opacity-70",children:"오늘의 실행 기록이 쌓이면 이곳에서 아침 다이제스트를 확인할 수 있습니다."}),(0,n.jsx)("button",{type:"button",className:"mt-3 underline","data-testid":"morning-showroom-empty-retry",onClick:a,children:"새로 고침"})]}):(0,n.jsxs)("section",{className:"morning-showroom p-4","data-date":t.card.date,children:[(0,n.jsxs)("header",{className:"mb-3 flex items-baseline justify-between",children:[(0,n.jsxs)("h2",{className:"text-lg font-semibold",children:["Morning showroom \xb7 ",t.card.date]}),(0,n.jsx)("time",{className:"text-xs opacity-60",dateTime:new Date(t.card.createdAt).toISOString(),children:new Date(t.card.createdAt).toLocaleTimeString()})]}),(0,n.jsx)("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2",children:t.card.lanes.map(e=>(0,n.jsx)(m,{lane:e},e.lane))})]})}function m(e){let{lane:t}=e;return(0,n.jsxs)("article",{className:"rounded border border-zinc-200 bg-white p-3","data-lane":t.lane,children:[(0,n.jsxs)("header",{className:"mb-2 flex items-center gap-2 text-xs uppercase tracking-wide opacity-70",children:[(0,n.jsx)("span",{"aria-hidden":!0,children:d[t.lane]}),(0,n.jsx)("span",{children:i[t.lane]}),t.modelId&&(0,n.jsxs)("span",{className:"ml-auto opacity-60",children:["\xb7 ",t.modelId]})]}),(0,n.jsx)("pre",{className:"whitespace-pre-wrap text-sm leading-snug",children:t.text})]})}function h(){let e=(0,s.useMemo)(()=>{let e=function(){let e=new Date,t=e.getUTCFullYear(),a=String(e.getUTCMonth()+1).padStart(2,"0"),n=String(e.getUTCDate()).padStart(2,"0"),s="".concat(t,"-").concat(a,"-").concat(n),r=new Date(Date.UTC(t,e.getUTCMonth(),e.getUTCDate()-1,22)),o=new Date(Date.UTC(t,e.getUTCMonth(),e.getUTCDate(),8));return{date:s,windowStart:r.toISOString(),windowEnd:o.toISOString()}}();return{date:e.date,windowStart:e.windowStart,windowEnd:e.windowEnd,runs:[],upcoming:[],backlogRecommendations:[]}},[]);return(0,n.jsx)(c,{request:e})}},
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9773],{10304:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>h});var n=a(54456),s=a(60500),r=a(98025);class o extends Error{constructor(e,t,a){super("morning-showroom ".concat(e," on ").concat(t)),this.status=e,this.path=t,this.body=a,this.name="MorningShowroomApiError"}}let i={yesterday:"Yesterday",today:"Today",blockers:"Blockers",opportunities:"Opportunities"},d={yesterday:"◐",today:"▶",blockers:"⛔",opportunities:"✦"};function c(e){let[t,a]=(0,s.useState)({kind:"loading"}),[i,d]=(0,s.useState)(0);return(0,s.useEffect)(()=>{var t;let n=!1,s=null!=(t=e.api)?t:function(e){var t;let a=e.baseUrl.replace(/\/+$/,""),n=null!=(t=e.fetchImpl)?t:fetch,s=r.GM;return{async compose(t){let r={"content-type":"application/json"};e.authHeader&&(r.authorization=e.authHeader);let i=await n("".concat(a).concat(s),{method:"POST",headers:r,body:JSON.stringify(t)}),d=await i.json().catch(()=>null);if(!i.ok||!(null==d?void 0:d.card))throw new o(i.status,s,d);return d.card}}}({baseUrl:window.location.origin});return a({kind:"loading"}),s.compose(e.request).then(e=>{n||a(0===e.lanes.length?{kind:"empty"}:{kind:"card",card:e})}).catch(()=>{n||a({kind:"unavailable"})}),()=>{n=!0}},[e.api,e.request.date,e.request.windowStart,e.request.windowEnd,i]),(0,n.jsx)(l,{state:t,onRetry:()=>d(e=>e+1)})}function l(e){let{state:t,onRetry:a}=e;return"loading"===t.kind?(0,n.jsx)("div",{className:"p-4 text-sm opacity-70",children:"Morning showroom을 준비하고 있습니다…"}):"unavailable"===t.kind?(0,n.jsxs)("section",{className:"p-4 text-sm","data-testid":"morning-showroom-unavailable",children:[(0,n.jsx)("h2",{className:"font-semibold",children:"Morning showroom이 아직 연결되지 않았습니다."}),(0,n.jsx)("p",{className:"mt-1 opacity-70",children:"다이제스트를 만들 수 있는 곳이 준비되면 이 화면에 표시됩니다."}),(0,n.jsx)("button",{type:"button",className:"mt-3 underline",onClick:a,children:"다시 시도"})]}):"empty"===t.kind?(0,n.jsxs)("section",{className:"p-4 text-sm","data-testid":"morning-showroom-empty",children:[(0,n.jsx)("h2",{className:"font-semibold",children:"아직 보여 줄 Morning showroom 항목이 없습니다."}),(0,n.jsx)("p",{className:"mt-1 opacity-70",children:"오늘의 실행 기록이 쌓이면 이곳에서 아침 다이제스트를 확인할 수 있습니다."}),(0,n.jsx)("button",{type:"button",className:"mt-3 underline","data-testid":"morning-showroom-empty-retry",onClick:a,children:"새로 고침"})]}):(0,n.jsxs)("section",{className:"morning-showroom p-4","data-date":t.card.date,children:[(0,n.jsxs)("header",{className:"mb-3 flex items-baseline justify-between",children:[(0,n.jsxs)("h2",{className:"text-lg font-semibold",children:["Morning showroom \xb7 ",t.card.date]}),(0,n.jsx)("time",{className:"text-xs opacity-60",dateTime:new Date(t.card.createdAt).toISOString(),children:new Date(t.card.createdAt).toLocaleTimeString()})]}),(0,n.jsx)("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2",children:t.card.lanes.map(e=>(0,n.jsx)(m,{lane:e},e.lane))})]})}function m(e){let{lane:t}=e;return(0,n.jsxs)("article",{className:"rounded border border-zinc-200 bg-white p-3","data-lane":t.lane,children:[(0,n.jsxs)("header",{className:"mb-2 flex items-center gap-2 text-xs uppercase tracking-wide opacity-70",children:[(0,n.jsx)("span",{"aria-hidden":!0,children:d[t.lane]}),(0,n.jsx)("span",{children:i[t.lane]}),t.modelId&&(0,n.jsxs)("span",{className:"ml-auto opacity-60",children:["\xb7 ",t.modelId]})]}),(0,n.jsx)("pre",{className:"whitespace-pre-wrap text-sm leading-snug",children:t.text})]})}function h(){let e=(0,s.useMemo)(()=>{let e=function(){let e=new Date,t=e.getUTCFullYear(),a=String(e.getUTCMonth()+1).padStart(2,"0"),n=String(e.getUTCDate()).padStart(2,"0"),s="".concat(t,"-").concat(a,"-").concat(n),r=new Date(Date.UTC(t,e.getUTCMonth(),e.getUTCDate()-1,22)),o=new Date(Date.UTC(t,e.getUTCMonth(),e.getUTCDate(),8));return{date:s,windowStart:r.toISOString(),windowEnd:o.toISOString()}}();return{date:e.date,windowStart:e.windowStart,windowEnd:e.windowEnd,runs:[],upcoming:[],backlogRecommendations:[]}},[]);return(0,n.jsx)(c,{request:e})}},57008:(e,t,a)=>{Promise.resolve().then(a.bind(a,10304))},98025:(e,t,a)=>{"use strict";a.d(t,{GM:()=>i,J3:()=>o,WF:()=>n,bR:()=>r,m:()=>d,r5:()=>s});let n="/v1/devices",s="/v1/approvals/merges",r="/v1/templates/capability-preview",o="/v1/idle-nudge/preview",i="/v1/morning-digest/showroom",d="/v1/next-fluent/dispatch"}},e=>{e.O(0,[6390,3170,7358],()=>e(e.s=57008)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4345],{33568:(e,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>d});var t=a(54456),l=a(80581),n=a(47193);function d(){let e=(0,l.usePathname)();return(0,t.jsx)("main",{"data-testid":"not-found",className:"min-h-screen bg-gradient-to-b from-background via-background to-muted/40 px-6 py-12 sm:px-10",children:(0,t.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-10",children:[(0,t.jsxs)("header",{className:"flex flex-col gap-3",children:[(0,t.jsx)("p",{className:"text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground",children:"elanous PWA"}),(0,t.jsx)("h1",{className:"text-3xl font-bold leading-tight sm:text-4xl",children:"여기엔 없습니다"}),(0,t.jsxs)("p",{className:"text-sm text-muted-foreground",children:[(0,t.jsx)("code",{children:e||"알 수 없는 주소"})," 주소는 이 앱에 없습니다. 아래에서 지금 갈 수 있는 곳을 선택하거나 참고 주소의 사유를 확인하세요."]})]}),(0,t.jsx)(n.QL,{ariaLabel:"이동 가능한 주소와 참고 주소"})]})})}},72576:(e,s,a)=>{Promise.resolve().then(a.bind(a,33568))}},e=>{e.O(0,[7777,9538,6048,3454,2176,3638,6390,3170,7358],()=>e(e.s=72576)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6997],{1355:(e,t,s)=>{"use strict";s.d(t,{Zr:()=>l,f6:()=>r,oD:()=>a});let n="elanous.daemon.sessionId";function r(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=r();return localStorage.setItem(n,t),t}function l(){let e=r();return localStorage.setItem(n,e),e}},6045:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(18494).A)("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]])},18494:(e,t,s)=>{"use strict";s.d(t,{A:()=>d});var n=s(60500);let r=function(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return t.filter((e,t,s)=>!!e&&""!==e.trim()&&s.indexOf(e)===t).join(" ").trim()},a=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,s)=>s?s.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var l={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let i=(0,n.createContext)({}),o=(0,n.forwardRef)((e,t)=>{var s,a,o;let{color:d,size:c,strokeWidth:u,absoluteStrokeWidth:m,className:p="",children:x,iconNode:h,...f}=e,{size:g=24,strokeWidth:b=2,absoluteStrokeWidth:k=!1,color:v="currentColor",className:j=""}=null!=(s=(0,n.useContext)(i))?s:{},y=(null!=m?m:k)?24*Number(null!=u?u:b)/Number(null!=c?c:g):null!=u?u:b;return(0,n.createElement)("svg",{ref:t,...l,width:null!=(a=null!=c?c:g)?a:l.width,height:null!=(o=null!=c?c:g)?o:l.height,stroke:null!=d?d:v,strokeWidth:y,className:r("lucide",j,p),...!x&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(f)&&{"aria-hidden":"true"},...f},[...h.map(e=>{let[t,s]=e;return(0,n.createElement)(t,s)}),...Array.isArray(x)?x:[x]])}),d=(e,t)=>{let s=(0,n.forwardRef)((s,l)=>{let{className:i,...d}=s;return(0,n.createElement)(o,{ref:l,iconNode:t,className:r("lucide-".concat(a(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),i),...d})});return s.displayName=a(e),s}},31470:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(18494).A)("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]])},35044:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(18494).A)("minimize-2",[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]])},36581:(e,t,s)=>{"use strict";s.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var n=s(54456),r=s(60500),a=s(86704),l=s(1355),i=s(39906),o=s(50733);let d=(0,r.createContext)(null);function c(e){let{children:t}=e,s={baseUrl:"",token:"",provider:""},[c,u]=(0,r.useState)(s),[m,p]=(0,r.useState)(""),[x]=(0,r.useState)(()=>new i.ki(s));(0,r.useEffect)(()=>{let e=(0,a.Fp)();u(e),x.updateConfig(e),p((0,l.oD)()),(0,o.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[x]),(0,r.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();x.updateConfig(t),u(t),(0,o.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(t=>t===e.newValue?t:((0,o.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[x]);let h=e=>{u(t=>{let s={...t,...e};return(0,a.Qc)(e),x.updateConfig(s),(0,o.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),s})},f=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,o.cY)("webterm.provider.daemon.session-set",{sessionId:e})},g=(0,r.useMemo)(()=>({config:c,setConfig:h,client:x,sessionId:m,setSessionId:f}),[c,x,m]);return(0,n.jsx)(d.Provider,{value:g,children:t})}function u(){let e=(0,r.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},67621:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(18494).A)("messages-square",[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]])},67735:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>x});var n=s(54456),r=s(60500),a=s(1617);let l={live:"live",unknown:"unknown",inactive:"inactive"},i={running:"running","probable-running":"probably running","ended-unclosed":"ended, not closed",unknown:"run state unknown"};function o(e){let{label:t,present:s}=e;return(0,n.jsxs)("span",{className:"rounded-full px-2 py-0.5 text-[10px] ".concat(s?"bg-primary/10 text-primary":"bg-muted text-muted-foreground"),children:[t,": ",s?"present":"absent"]})}function d(e){var t,s,l;let{ptyIds:i,onRefresh:o}=e,[d,c]=(0,r.useState)(null!=(t=i[0])?t:""),[u,m]=(0,r.useState)({kind:"loading",ptyId:null!=(s=i[0])?s:""}),[p,x]=(0,r.useState)(0),[h,f]=(0,r.useState)({kind:"idle"}),g=(0,r.useRef)(null),b=i.includes(d)?d:null!=(l=i[0])?l:"",k=u.ptyId===b?u:{kind:"loading",ptyId:b},v="pending"===h.kind,j="idle"===h.kind||h.ptyId===b?h:{kind:"idle"},y="pending"===j.kind;return(0,r.useEffect)(()=>{c(e=>{var t;return i.includes(e)?e:null!=(t=i[0])?t:""})},[i]),(0,r.useEffect)(()=>{if(!b)return;let e=new AbortController;return m({kind:"loading",ptyId:b}),fetch((0,a.xV)(b),{signal:e.signal}).then(async t=>{if(!t.ok)throw Error("GET ".concat((0,a.xV)(b)," failed (").concat(t.status,")"));let s=await t.json();if("string"!=typeof s.frame)throw Error("Terminal frame response did not contain text.");e.signal.aborted||m({kind:"success",ptyId:b,frame:s.frame})}).catch(t=>{e.signal.aborted||m({kind:"error",ptyId:b,message:t instanceof Error?t.message:"Terminal frame request failed."})}),()=>e.abort()},[b,p]),(0,r.useEffect)(()=>(f(e=>"pending"===e.kind&&e.ptyId!==b?{kind:"idle"}:e),()=>{var e;null==(e=g.current)||e.abort(),g.current=null}),[b]),(0,n.jsxs)("div",{className:"space-y-2 rounded-md bg-surface-elevated p-3","data-testid":"terminal-frame-panel",children:[i.length>1&&(0,n.jsxs)("label",{className:"flex w-fit items-center gap-2 text-xs",children:["PTY",(0,n.jsx)("select",{value:b,onChange:e=>c(e.target.value),"aria-label":"Select terminal PTY",disabled:v,children:i.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})]}),b&&(0,n.jsxs)("div",{className:"space-y-1","data-testid":"terminal-takeover",children:[(0,n.jsx)("button",{type:"button",className:"text-xs underline","aria-label":"Take over PTY ownership","data-testid":"terminal-takeover-button",disabled:y,onClick:()=>{var e;if(!b||v)return;null==(e=g.current)||e.abort();let t=new AbortController;g.current=t,f({kind:"pending",ptyId:b}),(0,a.HS)(b,globalThis.fetch,{signal:t.signal}).then(e=>{if(!t.signal.aborted){if(e.ok){f({kind:"success",ptyId:e.ptyId}),x(e=>e+1),null==o||o();return}f({kind:"error",ptyId:e.ptyId,failureKind:e.kind,message:e.message})}})},children:y?"Taking over ownership…":"Take over ownership"}),"pending"===j.kind&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",role:"status","data-testid":"terminal-takeover-pending",children:"Taking over ownership…"}),"success"===j.kind&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",role:"status","data-testid":"terminal-takeover-success",children:"Ownership transferred. Observation refreshed."}),"error"===j.kind&&(0,n.jsx)("p",{className:"text-xs text-destructive",role:"alert","data-testid":"terminal-takeover-error","data-takeover-kind":j.failureKind,children:j.message})]}),"loading"===k.kind&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",role:"status",children:"Loading terminal frame…"}),"error"===k.kind&&(0,n.jsxs)("p",{className:"text-xs text-destructive",role:"alert",children:["Unable to load terminal frame: ",k.message]}),"success"===k.kind&&(0,n.jsx)("pre",{className:"max-h-80 overflow-auto whitespace-pre-wrap break-words rounded bg-background p-3 font-mono text-xs","data-testid":"terminal-frame",children:k.frame||"(Terminal frame is empty.)"})]})}function c(e){let{subject:t,onRefresh:s}=e,[l,i]=(0,r.useState)(!1),o="terminal-frame-".concat(encodeURIComponent(t.id)),c=t.screen.ptyIds;return(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["screen: ",c.length," PTY \xb7 ",t.screen.liveCount," live"]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsx)("button",{type:"button",className:"text-xs underline","aria-expanded":l,"aria-controls":o,onClick:()=>i(e=>!e),children:l?"Hide terminal frame":"Show terminal frame"}),(0,n.jsx)("a",{className:"text-xs underline",href:(0,a.GG)(),children:"Open terminal inspector"})]}),l&&(0,n.jsx)("div",{id:o,children:(0,n.jsx)(d,{ptyIds:c,onRefresh:s})})]})}function u(e){let{subjects:t,runningRuns:s,scope:d,includeIsolatedInstances:u=!1,onIncludeIsolatedInstancesChange:m,progressBySubject:p=new Map,onRefresh:x}=e,[h,f]=(0,r.useState)(!1),g=(0,a.U$)(t,h);return(0,n.jsxs)("section",{className:"space-y-3","aria-label":"Observatory subjects",children:[s&&(0,n.jsxs)("p",{className:"text-sm text-muted-foreground","data-testid":"running-runs-summary",children:["Server run count: ",s.running," running, ",s["probable-running"]," probable-running"," ","(counted statuses: ",s.countedStatuses.join(", "),")"]}),(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsxs)("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm",children:[(0,n.jsx)("input",{type:"checkbox",checked:u,onChange:e=>null==m?void 0:m(e.target.checked),"aria-label":"Include isolated instances"}),"Include isolated instances: ",u?"included":"local only"]}),d&&(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","data-testid":"observatory-scope",children:["Observation scope: ",d.domain,"; ",d.roots," root",1===d.roots?"":"s","; ",d.federated?"federated":"local only","; ",d.hiddenDead," dead hidden",void 0===d.hiddenSubAgentRuns?"":"; ".concat(d.hiddenSubAgentRuns," sub-agent runs hidden")]})]}),(0,n.jsxs)("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm",children:[(0,n.jsx)("input",{type:"checkbox",checked:h,onChange:e=>f(e.target.checked)}),"Show all subjects"]}),0===g.length?(0,n.jsx)("p",{className:"rounded-md border border-border p-4 text-sm text-muted-foreground","data-testid":"subject-list-empty",children:0===t.length?"No observation subjects reported.":"No live or unknown subjects. Turn on Show all subjects to include inactive subjects."}):(0,n.jsx)("ul",{className:"space-y-2","data-testid":"subject-list",children:g.map(e=>{let t=(0,a.XG)(e),s=(0,a.t_)(e),r=p.get(e.id);return(0,n.jsxs)("li",{className:"space-y-2 rounded-md border border-border p-3","data-status":s,children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"font-mono text-sm",children:e.runId||e.id}),(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["origin: ",e.origin]})]}),(0,n.jsx)("span",{className:"rounded-full bg-surface-elevated px-2 py-0.5 text-[10px] font-medium uppercase",children:l[s]})]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-1","aria-label":"Subject surfaces",children:[(0,n.jsx)(o,{label:"\uD83D\uDDE3️ talk",present:t.talk}),(0,n.jsx)(o,{label:"\uD83D\uDDA5️ screen",present:t.screen}),(0,n.jsx)(o,{label:"\uD83E\uDD16 agent",present:t.agent})]}),e.run&&(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","data-testid":"subject-run-assessment","data-run-status":e.run.status,children:["run: ",i[e.run.status]," — reason: ",e.run.reason," (presence: ",e.run.presence,")"]}),(null==r?void 0:r.kind)==="no-screen"&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"progress: no screen"}),(null==r?void 0:r.kind)==="no-progress"&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"progress: no progress reported"}),(null==r?void 0:r.kind)==="progress"&&(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["progress (",r.ptyId,"): ",r.status," — ",r.line,r.hasMissingFrames?" (missing frames)":""]}),t.screen&&(0,n.jsx)(c,{subject:e,onRefresh:x})]},e.id)})})]})}var m=s(65845);let p=new(s(39906)).ki({baseUrl:"",token:"",provider:""});function x(){let[e,t]=(0,r.useState)(null),[s,l]=(0,r.useState)(),[i,o]=(0,r.useState)(),[d,c]=(0,r.useState)(!1),[x,h]=(0,r.useState)(new Map),[f,g]=(0,r.useState)(null),[b,k]=(0,r.useState)(0);return(0,r.useEffect)(()=>{let e=!1;return(async()=>{try{var s,n;let[r,i]=await Promise.all([fetch((0,a.h7)(d)).then(async e=>{if(!e.ok)throw Error("GET ".concat((0,a.h7)(d)," failed (").concat(e.status,")"));return e.json()}),p.listProgressFrames().catch(()=>null)]);if(e)return;let c=null!=(s=r.subjects)?s:[];g(null),t(c),l(r.runningRuns),o(r.scope),h((0,a.vq)(c,i?(0,m.gA)(null!=(n=i.logs)?n:[]):new Map))}catch(t){e||g(t instanceof Error?t.message:"Failed to load observation subjects")}})(),()=>{e=!0}},[d,b]),(0,n.jsxs)("main",{className:"mx-auto max-w-4xl space-y-4 p-6",children:[(0,n.jsxs)("header",{className:"space-y-1",children:[(0,n.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Observatory"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Subject-level view of talk, screen, and agent observation surfaces."}),(0,n.jsx)("button",{type:"button",className:"text-sm underline",onClick:()=>{(0,a.L4)()},children:"Open new terminal"})]}),f?(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsx)("p",{role:"alert",className:"rounded-md border border-error/40 bg-error/5 p-3 text-sm text-error",children:f}),(0,n.jsxs)("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm",children:[(0,n.jsx)("input",{type:"checkbox",checked:d,onChange:e=>c(e.target.checked),"aria-label":"Include isolated instances"}),"Include isolated instances: ",d?"included":"local only"]})]}):null===e?(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Loading observation subjects…"}):(0,n.jsx)(u,{subjects:e,runningRuns:s,scope:i,includeIsolatedInstances:d,onIncludeIsolatedInstancesChange:c,progressBySubject:x,onRefresh:()=>k(e=>e+1)})]})}},88146:(e,t,s)=>{Promise.resolve().then(s.bind(s,67735))}},e=>{e.O(0,[9906,5845,6390,3170,7358],()=>e(e.s=88146)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6997],{1355:(e,t,s)=>{"use strict";s.d(t,{Zr:()=>l,f6:()=>r,oD:()=>a});let n="elanous.daemon.sessionId";function r(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=r();return localStorage.setItem(n,t),t}function l(){let e=r();return localStorage.setItem(n,e),e}},6045:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(18494).A)("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]])},18494:(e,t,s)=>{"use strict";s.d(t,{A:()=>d});var n=s(60500);let r=function(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return t.filter((e,t,s)=>!!e&&""!==e.trim()&&s.indexOf(e)===t).join(" ").trim()},a=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,s)=>s?s.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var l={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let i=(0,n.createContext)({}),o=(0,n.forwardRef)((e,t)=>{var s,a,o;let{color:d,size:c,strokeWidth:u,absoluteStrokeWidth:m,className:p="",children:x,iconNode:h,...f}=e,{size:g=24,strokeWidth:b=2,absoluteStrokeWidth:k=!1,color:v="currentColor",className:j=""}=null!=(s=(0,n.useContext)(i))?s:{},y=(null!=m?m:k)?24*Number(null!=u?u:b)/Number(null!=c?c:g):null!=u?u:b;return(0,n.createElement)("svg",{ref:t,...l,width:null!=(a=null!=c?c:g)?a:l.width,height:null!=(o=null!=c?c:g)?o:l.height,stroke:null!=d?d:v,strokeWidth:y,className:r("lucide",j,p),...!x&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(f)&&{"aria-hidden":"true"},...f},[...h.map(e=>{let[t,s]=e;return(0,n.createElement)(t,s)}),...Array.isArray(x)?x:[x]])}),d=(e,t)=>{let s=(0,n.forwardRef)((s,l)=>{let{className:i,...d}=s;return(0,n.createElement)(o,{ref:l,iconNode:t,className:r("lucide-".concat(a(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),i),...d})});return s.displayName=a(e),s}},31470:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(18494).A)("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]])},35044:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(18494).A)("minimize-2",[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]])},36581:(e,t,s)=>{"use strict";s.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var n=s(54456),r=s(60500),a=s(86704),l=s(1355),i=s(39906),o=s(50733);let d=(0,r.createContext)(null);function c(e){let{children:t}=e,s={baseUrl:"",token:"",provider:""},[c,u]=(0,r.useState)(s),[m,p]=(0,r.useState)(""),[x]=(0,r.useState)(()=>new i.ki(s));(0,r.useEffect)(()=>{let e=(0,a.Fp)();u(e),x.updateConfig(e),p((0,l.oD)()),(0,o.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[x]),(0,r.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();x.updateConfig(t),u(t),(0,o.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(t=>t===e.newValue?t:((0,o.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[x]);let h=e=>{u(t=>{let s={...t,...e};return(0,a.Qc)(e),x.updateConfig(s),(0,o.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),s})},f=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,o.cY)("webterm.provider.daemon.session-set",{sessionId:e})},g=(0,r.useMemo)(()=>({config:c,setConfig:h,client:x,sessionId:m,setSessionId:f}),[c,x,m]);return(0,n.jsx)(d.Provider,{value:g,children:t})}function u(){let e=(0,r.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},67621:(e,t,s)=>{"use strict";s.d(t,{A:()=>n});let n=(0,s(18494).A)("messages-square",[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]])},67735:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>x});var n=s(54456),r=s(60500),a=s(1617);let l={live:"live",unknown:"unknown",inactive:"inactive"},i={running:"running","probable-running":"probably running","ended-unclosed":"ended, not closed",unknown:"run state unknown"};function o(e){let{label:t,present:s}=e;return(0,n.jsxs)("span",{className:"rounded-full px-2 py-0.5 text-[10px] ".concat(s?"bg-primary/10 text-primary":"bg-muted text-muted-foreground"),children:[t,": ",s?"present":"absent"]})}function d(e){var t,s,l;let{ptyIds:i,onRefresh:o}=e,[d,c]=(0,r.useState)(null!=(t=i[0])?t:""),[u,m]=(0,r.useState)({kind:"loading",ptyId:null!=(s=i[0])?s:""}),[p,x]=(0,r.useState)(0),[h,f]=(0,r.useState)({kind:"idle"}),g=(0,r.useRef)(null),b=i.includes(d)?d:null!=(l=i[0])?l:"",k=u.ptyId===b?u:{kind:"loading",ptyId:b},v="pending"===h.kind,j="idle"===h.kind||h.ptyId===b?h:{kind:"idle"},y="pending"===j.kind;return(0,r.useEffect)(()=>{c(e=>{var t;return i.includes(e)?e:null!=(t=i[0])?t:""})},[i]),(0,r.useEffect)(()=>{if(!b)return;let e=new AbortController;return m({kind:"loading",ptyId:b}),fetch((0,a.xV)(b),{signal:e.signal}).then(async t=>{if(!t.ok)throw Error("GET ".concat((0,a.xV)(b)," failed (").concat(t.status,")"));let s=await t.json();if("string"!=typeof s.frame)throw Error("Terminal frame response did not contain text.");e.signal.aborted||m({kind:"success",ptyId:b,frame:s.frame})}).catch(t=>{e.signal.aborted||m({kind:"error",ptyId:b,message:t instanceof Error?t.message:"Terminal frame request failed."})}),()=>e.abort()},[b,p]),(0,r.useEffect)(()=>(f(e=>"pending"===e.kind&&e.ptyId!==b?{kind:"idle"}:e),()=>{var e;null==(e=g.current)||e.abort(),g.current=null}),[b]),(0,n.jsxs)("div",{className:"space-y-2 rounded-md bg-surface-elevated p-3","data-testid":"terminal-frame-panel",children:[i.length>1&&(0,n.jsxs)("label",{className:"flex w-fit items-center gap-2 text-xs",children:["PTY",(0,n.jsx)("select",{value:b,onChange:e=>c(e.target.value),"aria-label":"Select terminal PTY",disabled:v,children:i.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})]}),b&&(0,n.jsxs)("div",{className:"space-y-1","data-testid":"terminal-takeover",children:[(0,n.jsx)("button",{type:"button",className:"text-xs underline","aria-label":"Take over PTY ownership","data-testid":"terminal-takeover-button",disabled:y,onClick:()=>{var e;if(!b||v)return;null==(e=g.current)||e.abort();let t=new AbortController;g.current=t,f({kind:"pending",ptyId:b}),(0,a.HS)(b,globalThis.fetch,{signal:t.signal}).then(e=>{if(!t.signal.aborted){if(e.ok){f({kind:"success",ptyId:e.ptyId}),x(e=>e+1),null==o||o();return}f({kind:"error",ptyId:e.ptyId,failureKind:e.kind,message:e.message})}})},children:y?"Taking over ownership…":"Take over ownership"}),"pending"===j.kind&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",role:"status","data-testid":"terminal-takeover-pending",children:"Taking over ownership…"}),"success"===j.kind&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",role:"status","data-testid":"terminal-takeover-success",children:"Ownership transferred. Observation refreshed."}),"error"===j.kind&&(0,n.jsx)("p",{className:"text-xs text-destructive",role:"alert","data-testid":"terminal-takeover-error","data-takeover-kind":j.failureKind,children:j.message})]}),"loading"===k.kind&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",role:"status",children:"Loading terminal frame…"}),"error"===k.kind&&(0,n.jsxs)("p",{className:"text-xs text-destructive",role:"alert",children:["Unable to load terminal frame: ",k.message]}),"success"===k.kind&&(0,n.jsx)("pre",{className:"max-h-80 overflow-auto whitespace-pre-wrap break-words rounded bg-background p-3 font-mono text-xs","data-testid":"terminal-frame",children:k.frame||"(Terminal frame is empty.)"})]})}function c(e){let{subject:t,onRefresh:s}=e,[l,i]=(0,r.useState)(!1),o="terminal-frame-".concat(encodeURIComponent(t.id)),c=t.screen.ptyIds;return(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["screen: ",c.length," PTY \xb7 ",t.screen.liveCount," live"]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsx)("button",{type:"button",className:"text-xs underline","aria-expanded":l,"aria-controls":o,onClick:()=>i(e=>!e),children:l?"Hide terminal frame":"Show terminal frame"}),(0,n.jsx)("a",{className:"text-xs underline",href:(0,a.GG)(),children:"Open terminal inspector"})]}),l&&(0,n.jsx)("div",{id:o,children:(0,n.jsx)(d,{ptyIds:c,onRefresh:s})})]})}function u(e){let{subjects:t,runningRuns:s,scope:d,includeIsolatedInstances:u=!1,onIncludeIsolatedInstancesChange:m,progressBySubject:p=new Map,onRefresh:x}=e,[h,f]=(0,r.useState)(!1),g=(0,a.U$)(t,h);return(0,n.jsxs)("section",{className:"space-y-3","aria-label":"Observatory subjects",children:[s&&(0,n.jsxs)("p",{className:"text-sm text-muted-foreground","data-testid":"running-runs-summary",children:["Server run count: ",s.running," running, ",s["probable-running"]," probable-running"," ","(counted statuses: ",s.countedStatuses.join(", "),")"]}),(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsxs)("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm",children:[(0,n.jsx)("input",{type:"checkbox",checked:u,onChange:e=>null==m?void 0:m(e.target.checked),"aria-label":"Include isolated instances"}),"Include isolated instances: ",u?"included":"local only"]}),d&&(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","data-testid":"observatory-scope",children:["Observation scope: ",d.domain,"; ",d.roots," root",1===d.roots?"":"s","; ",d.federated?"federated":"local only","; ",d.hiddenDead," dead hidden",void 0===d.hiddenSubAgentRuns?"":"; ".concat(d.hiddenSubAgentRuns," sub-agent runs hidden")]})]}),(0,n.jsxs)("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm",children:[(0,n.jsx)("input",{type:"checkbox",checked:h,onChange:e=>f(e.target.checked)}),"Show all subjects"]}),0===g.length?(0,n.jsx)("p",{className:"rounded-md border border-border p-4 text-sm text-muted-foreground","data-testid":"subject-list-empty",children:0===t.length?"No observation subjects reported.":"No live or unknown subjects. Turn on Show all subjects to include inactive subjects."}):(0,n.jsx)("ul",{className:"space-y-2","data-testid":"subject-list",children:g.map(e=>{let t=(0,a.XG)(e),s=(0,a.t_)(e),r=p.get(e.id);return(0,n.jsxs)("li",{className:"space-y-2 rounded-md border border-border p-3","data-status":s,children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"font-mono text-sm",children:e.runId||e.id}),(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["origin: ",e.origin]})]}),(0,n.jsx)("span",{className:"rounded-full bg-surface-elevated px-2 py-0.5 text-[10px] font-medium uppercase",children:l[s]})]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-1","aria-label":"Subject surfaces",children:[(0,n.jsx)(o,{label:"\uD83D\uDDE3️ talk",present:t.talk}),(0,n.jsx)(o,{label:"\uD83D\uDDA5️ screen",present:t.screen}),(0,n.jsx)(o,{label:"\uD83E\uDD16 agent",present:t.agent})]}),e.run&&(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","data-testid":"subject-run-assessment","data-run-status":e.run.status,children:["run: ",i[e.run.status]," — reason: ",e.run.reason," (presence: ",e.run.presence,")"]}),(null==r?void 0:r.kind)==="no-screen"&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"progress: no screen"}),(null==r?void 0:r.kind)==="no-progress"&&(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"progress: no progress reported"}),(null==r?void 0:r.kind)==="progress"&&(0,n.jsxs)("p",{className:"text-xs text-muted-foreground",children:["progress (",r.ptyId,"): ",r.status," — ",r.line,r.hasMissingFrames?" (missing frames)":""]}),t.screen&&(0,n.jsx)(c,{subject:e,onRefresh:x})]},e.id)})})]})}var m=s(65845);let p=new(s(39906)).ki({baseUrl:"",token:"",provider:""});function x(){let[e,t]=(0,r.useState)(null),[s,l]=(0,r.useState)(),[i,o]=(0,r.useState)(),[d,c]=(0,r.useState)(!1),[x,h]=(0,r.useState)(new Map),[f,g]=(0,r.useState)(null),[b,k]=(0,r.useState)(0);return(0,r.useEffect)(()=>{let e=!1;return(async()=>{try{var s,n;let[r,i]=await Promise.all([fetch((0,a.h7)(d)).then(async e=>{if(!e.ok)throw Error("GET ".concat((0,a.h7)(d)," failed (").concat(e.status,")"));return e.json()}),p.listProgressFrames().catch(()=>null)]);if(e)return;let c=null!=(s=r.subjects)?s:[];g(null),t(c),l(r.runningRuns),o(r.scope),h((0,a.vq)(c,i?(0,m.gA)(null!=(n=i.logs)?n:[]):new Map))}catch(t){e||g(t instanceof Error?t.message:"Failed to load observation subjects")}})(),()=>{e=!0}},[d,b]),(0,n.jsxs)("main",{className:"mx-auto max-w-4xl space-y-4 p-6",children:[(0,n.jsxs)("header",{className:"space-y-1",children:[(0,n.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Observatory"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Subject-level view of talk, screen, and agent observation surfaces."}),(0,n.jsx)("button",{type:"button",className:"text-sm underline",onClick:()=>{(0,a.L4)()},children:"Open new terminal"})]}),f?(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsx)("p",{role:"alert",className:"rounded-md border border-error/40 bg-error/5 p-3 text-sm text-error",children:f}),(0,n.jsxs)("label",{className:"flex w-fit cursor-pointer items-center gap-2 text-sm",children:[(0,n.jsx)("input",{type:"checkbox",checked:d,onChange:e=>c(e.target.checked),"aria-label":"Include isolated instances"}),"Include isolated instances: ",d?"included":"local only"]})]}):null===e?(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Loading observation subjects…"}):(0,n.jsx)(u,{subjects:e,runningRuns:s,scope:i,includeIsolatedInstances:d,onIncludeIsolatedInstancesChange:c,progressBySubject:x,onRefresh:()=>k(e=>e+1)})]})}},88544:(e,t,s)=>{Promise.resolve().then(s.bind(s,67735))}},e=>{e.O(0,[9906,5845,6390,3170,7358],()=>e(e.s=88544)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5354],{1355:(e,t,n)=>{"use strict";n.d(t,{Zr:()=>a,f6:()=>s,oD:()=>l});let r="elanous.daemon.sessionId";function s(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function l(){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=s();return localStorage.setItem(r,t),t}function a(){let e=s();return localStorage.setItem(r,e),e}},18996:(e,t,n)=>{Promise.resolve().then(n.bind(n,72255))},36581:(e,t,n)=>{"use strict";n.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var r=n(54456),s=n(60500),l=n(86704),a=n(1355),o=n(39906),i=n(50733);let d=(0,s.createContext)(null);function c(e){let{children:t}=e,n={baseUrl:"",token:"",provider:""},[c,u]=(0,s.useState)(n),[m,h]=(0,s.useState)(""),[p]=(0,s.useState)(()=>new o.ki(n));(0,s.useEffect)(()=>{let e=(0,l.Fp)();u(e),p.updateConfig(e),h((0,a.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[p]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,l.Fp)();p.updateConfig(t),u(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&h(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[p]);let y=e=>{u(t=>{let n={...t,...e};return(0,l.Qc)(e),p.updateConfig(n),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),n})},v=e=>{h(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},g=(0,s.useMemo)(()=>({config:c,setConfig:y,client:p,sessionId:m,setSessionId:v}),[c,p,m]);return(0,r.jsx)(d.Provider,{value:g,children:t})}function u(){let e=(0,s.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},72255:(e,t,n)=>{"use strict";n.d(t,{ChecklistView:()=>u});var r=n(54456),s=n(60500),l=n(36581),a=n(96439);function o(e){return"".concat(String(e.getHours()).padStart(2,"0"),":").concat(String(e.getMinutes()).padStart(2,"0"))}function i(e,t){let n=t&&new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime(),r=t&&new Date(t.getFullYear(),t.getMonth(),t.getDate()+1).getTime(),s=new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime(),l=s===n?"오늘":s===r?"내일":"".concat(String(e.getMonth()+1).padStart(2,"0"),"/").concat(String(e.getDate()).padStart(2,"0")," (").concat(["일","월","화","수","목","금","토"][e.getDay()],")");return"".concat(l," ").concat(o(e))}function d(e){let{schedule:t,now:n}=e;if(!t)return(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"판 일정 없음"});let s=new Date(t.cutAt),l=null===t.landBy?null:new Date(t.landBy),a=l&&null!==n?l.getTime()-n:null,d=null!==a&&a>0?Math.ceil(a/6e4):0,c="".concat(Math.floor(d/60)?"".concat(Math.floor(d/60),"시간"):"").concat(d%60?"".concat(Math.floor(d/60)?" ":"").concat(d%60,"분"):d<60?"0분":"");return(0,r.jsxs)("p",{"aria-label":"판 일정",className:"text-sm ".concat(null!==a&&a<=0?"text-red-600":null!==a&&a<=108e5?"text-orange-600":"text-muted-foreground"),children:["컷 ",i(s,null===n?null:new Date(n)),l&&(0,r.jsxs)(r.Fragment,{children:[" \xb7 착지 마감 ",l.toDateString()===s.toDateString()?o(l):i(l,null===n?null:new Date(n)),null!==a&&(0,r.jsxs)(r.Fragment,{children:[" \xb7 ",a<=0?"착지 마감 지남":"마감까지 ".concat(c)]})]})]})}function c(e){var t;let{result:n,version:s,owner:l,status:a,pendingOnly:o,expandedId:i,onVersion:c,onOwner:u,onStatus:m,onPending:h,onExpand:p,now:y=null}=e;if((null==n?void 0:n.kind)==="forbidden")return(0,r.jsx)("p",{children:"운영자만 볼 수 있습니다"});let v=(null==n?void 0:n.kind)==="ready"?n.data:null,g=null!=(t=null==v?void 0:v.items.filter(e=>(!l||e.owner===l)&&(!a||e.status===a)&&(!o||"yellow"===e.status)))?t:[];return(0,r.jsxs)("main",{className:"mx-auto w-full min-w-0 max-w-4xl space-y-6 overflow-x-hidden px-4 py-6 text-foreground",children:[(0,r.jsxs)("header",{className:"space-y-1",children:[(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"운영 / 판별 피처"}),(0,r.jsx)("h1",{className:"text-2xl font-semibold",children:"판별 피처"})]}),(0,r.jsxs)("label",{className:"block space-y-2 text-sm font-medium",children:["판",(0,r.jsx)("input",{"aria-label":"판",list:"ops-checklist-versions",value:s,onChange:e=>c(e.target.value),className:"block w-full max-w-xs rounded-md border bg-background p-2"}),(0,r.jsxs)("datalist",{id:"ops-checklist-versions",children:[(0,r.jsx)("option",{value:"0.2.8"}),(0,r.jsx)("option",{value:"0.2.9"}),(0,r.jsx)("option",{value:"0.2.10"})]})]}),null===n&&(0,r.jsx)("p",{role:"status",children:"칸을 불러오는 중…"}),(null==n?void 0:n.kind)==="error"&&(0,r.jsxs)("p",{role:"alert",children:["칸을 불러오지 못했습니다 (",n.status,")"]}),v&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(d,{schedule:v.schedule,now:y}),(0,r.jsx)("section",{"aria-label":"상태별 수",className:"grid grid-cols-2 gap-2 sm:grid-cols-4",children:[["\uD83D\uDFE2","green"],["\uD83D\uDFE1","yellow"],["\uD83D\uDD34","red"],["✅","done"]].map(e=>{let[t,n]=e;return(0,r.jsxs)("div",{className:"rounded-md border p-3 text-sm",children:[t," ",v[n]]},n)})}),(0,r.jsxs)("section",{className:"flex min-w-0 flex-wrap items-end gap-3","aria-label":"거르기",children:[(0,r.jsxs)("label",{className:"space-y-1 text-sm",children:["자리",(0,r.jsxs)("select",{"aria-label":"자리",className:"block rounded-md border bg-background p-2",value:l,onChange:e=>u(e.target.value),children:[(0,r.jsx)("option",{value:"",children:"전체"}),["OP","MK","TC","UX"].map(e=>(0,r.jsx)("option",{value:e,children:e},e))]})]}),(0,r.jsxs)("label",{className:"space-y-1 text-sm",children:["상태",(0,r.jsxs)("select",{"aria-label":"상태",className:"block rounded-md border bg-background p-2",value:a,onChange:e=>m(e.target.value),children:[(0,r.jsx)("option",{value:"",children:"전체"}),["green","yellow","red","done"].map(e=>(0,r.jsx)("option",{value:e,children:e},e))]})]}),(0,r.jsxs)("label",{className:"flex items-center gap-2 p-2 text-sm",children:[(0,r.jsx)("input",{type:"checkbox",checked:o,onChange:e=>h(e.target.checked)}),"판정 대기만"]})]}),(0,r.jsxs)("section",{className:"min-w-0 space-y-2","aria-label":"칸 목록",children:[(0,r.jsx)("h2",{className:"font-semibold",children:"칸 목록"}),0===g.length&&(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"해당하는 칸이 없습니다."}),g.map(e=>{var t,n;return(0,r.jsxs)("div",{className:"min-w-0 rounded-md border",children:[(0,r.jsxs)("button",{type:"button",className:"flex w-full min-w-0 items-center gap-2 overflow-hidden p-3 text-left hover:bg-muted","aria-expanded":i===e.id,onClick:()=>p(i===e.id?null:e.id),children:[(0,r.jsx)("span",{className:"max-w-[35%] shrink-0 truncate text-sm font-medium",children:e.id}),(0,r.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e.title}),(0,r.jsxs)("span",{className:"shrink-0 text-xs",children:[null!=(t=e.owner)?t:"—"," \xb7 ",e.status]})]}),i===e.id&&(0,r.jsxs)("div",{className:"min-w-0 space-y-2 border-t p-3 text-sm",children:[(0,r.jsx)("p",{className:"break-all font-medium",children:e.title}),(0,r.jsx)("p",{className:"whitespace-pre-wrap break-all",children:null!=(n=e.evidence)?n:"근거 없음"})]})]},e.id)})]})]})]})}function u(){let{client:e}=(0,l.Q)(),[t,n]=(0,s.useState)("0.2.9"),[o,i]=(0,s.useState)(null),[d,u]=(0,s.useState)(""),[m,h]=(0,s.useState)(""),[p,y]=(0,s.useState)(!1),[v,g]=(0,s.useState)(null),[f,x]=(0,s.useState)(null);(0,s.useEffect)(()=>{let e;if("undefined"==typeof document)return;let t=()=>{void 0!==e&&(window.clearInterval(e),e=void 0),document.hidden||(x(Date.now()),e=window.setInterval(()=>x(Date.now()),6e4))};return t(),document.addEventListener("visibilitychange",t),()=>{void 0!==e&&window.clearInterval(e),document.removeEventListener("visibilitychange",t)}},[]);let[b,w]=(0,s.useState)(!1),k=(0,s.useRef)(!1),j=(0,s.useRef)(e);return((0,s.useEffect)(()=>{let n=!0;return(j.current!==e&&(j.current=e,k.current=!1,w(!1)),k.current)?()=>{n=!1}:/^\d+\.\d+\.\d+(?:-(?:rc|alpha|beta)\.\d+)?$/.test(t)?(i(null),(0,a.HG)(e,t).then(e=>{n&&!k.current&&("forbidden"===e.kind&&(k.current=!0,w(!0)),i(e))}),()=>{n=!1}):(i(null),()=>{n=!1})},[e,t]),b)?(0,r.jsx)("p",{children:"운영자만 볼 수 있습니다"}):(0,r.jsx)(c,{result:o,version:t,owner:d,status:m,pendingOnly:p,now:f,expandedId:v,onVersion:e=>{n(e),g(null)},onOwner:u,onStatus:h,onPending:y,onExpand:g})}},96439:(e,t,n)=>{"use strict";function r(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function s(e){return"string"==typeof e}function l(e){return s(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function a(e){return r(e)&&s(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&s(e.summary)}function o(e){return r(e)&&s(e.runId)&&s(e.status)&&s(e.startedAt)&&(null===e.version||s(e.version))&&Array.isArray(e.path)&&e.path.every(s)&&Array.isArray(e.nodes)&&e.nodes.every(a)}function i(e){return r(e)&&s(e.id)&&s(e.title)&&s(e.status)&&(void 0===e.owner||s(e.owner))&&s(e.updatedAt)&&(void 0===e.evidence||s(e.evidence))}n.d(t,{HG:()=>v,Kh:()=>y,Nn:()=>h,oc:()=>p});let d=e=>Number.isInteger(e)&&e>=0;function c(e){return r(e)&&s(e.id)&&s(e.title)&&(null===e.open||d(e.open))&&(null===e.landed||d(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&s(e.id)&&s(e.title)))}function u(e){return r(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||s(e.role))&&(null===e.now||r(e.now)&&s(e.now.text)&&s(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>r(e)&&d(e.pr)&&s(e.title)&&s(e.at)&&(null===e.checklistId||s(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&s(e.id)&&s(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||d(e.pendingDecisions))&&(null===e.checklist||r(e.checklist)&&["green","yellow","red","done"].every(t=>d(e.checklist[t])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(c))}async function m(e,t,n){try{let r=await e.fetchResponse(t,{method:"GET"});if(403===r.status)return{kind:"forbidden"};if(!r.ok)return{kind:"error",status:r.status};let s=n(await r.json());return null===s?{kind:"error",status:r.status}:{kind:"ready",data:s}}catch(e){return{kind:"error",status:0}}}function h(e,t){return m(e,"/v1/ops/seats".concat(t?"?date=".concat(encodeURIComponent(t)):""),e=>r(e)&&s(e.date)&&Array.isArray(e.seats)&&e.seats.every(u)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function p(e,t){return m(e,"/v1/ops/release/runs".concat(t?"?version=".concat(encodeURIComponent(t)):""),e=>Array.isArray(e)&&e.every(o)?e:null)}function y(e,t,n){return m(e,"/v1/ops/release/runs/".concat(encodeURIComponent(t),"/nodes/").concat(encodeURIComponent(n),"/log"),e=>r(e)&&s(e.log)?{log:e.log}:null)}function v(e,t){return m(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(t)),e=>{var t,n,a,o;if(!(r(e)&&s(e.version)&&(void 0===e.codename||s(e.codename))&&Array.isArray(e.items)&&e.items.every(i)&&["green","yellow","red","done"].every(t=>void 0===e[t]||Number.isInteger(e[t])&&e[t]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(s))&&(void 0===e.byOwner||r(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let d={green:0,yellow:0,red:0,done:0};for(let t of e.items)t.status in d&&d[t.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:r(e.schedule)&&l(e.schedule.cutAt)&&(null===e.schedule.landBy||l(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(t=e.green)?t:d.green,yellow:null!=(n=e.yellow)?n:d.yellow,red:null!=(a=e.red)?a:d.red,done:null!=(o=e.done)?o:d.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}}},e=>{e.O(0,[9906,6390,3170,7358],()=>e(e.s=18996)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5354],{1355:(e,t,n)=>{"use strict";n.d(t,{Zr:()=>a,f6:()=>s,oD:()=>l});let r="elanous.daemon.sessionId";function s(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function l(){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=s();return localStorage.setItem(r,t),t}function a(){let e=s();return localStorage.setItem(r,e),e}},36581:(e,t,n)=>{"use strict";n.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var r=n(54456),s=n(60500),l=n(86704),a=n(1355),o=n(39906),i=n(50733);let d=(0,s.createContext)(null);function c(e){let{children:t}=e,n={baseUrl:"",token:"",provider:""},[c,u]=(0,s.useState)(n),[m,h]=(0,s.useState)(""),[p]=(0,s.useState)(()=>new o.ki(n));(0,s.useEffect)(()=>{let e=(0,l.Fp)();u(e),p.updateConfig(e),h((0,a.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[p]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,l.Fp)();p.updateConfig(t),u(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&h(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[p]);let y=e=>{u(t=>{let n={...t,...e};return(0,l.Qc)(e),p.updateConfig(n),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),n})},v=e=>{h(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},g=(0,s.useMemo)(()=>({config:c,setConfig:y,client:p,sessionId:m,setSessionId:v}),[c,p,m]);return(0,r.jsx)(d.Provider,{value:g,children:t})}function u(){let e=(0,s.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},64342:(e,t,n)=>{Promise.resolve().then(n.bind(n,72255))},72255:(e,t,n)=>{"use strict";n.d(t,{ChecklistView:()=>u});var r=n(54456),s=n(60500),l=n(36581),a=n(96439);function o(e){return"".concat(String(e.getHours()).padStart(2,"0"),":").concat(String(e.getMinutes()).padStart(2,"0"))}function i(e,t){let n=t&&new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime(),r=t&&new Date(t.getFullYear(),t.getMonth(),t.getDate()+1).getTime(),s=new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime(),l=s===n?"오늘":s===r?"내일":"".concat(String(e.getMonth()+1).padStart(2,"0"),"/").concat(String(e.getDate()).padStart(2,"0")," (").concat(["일","월","화","수","목","금","토"][e.getDay()],")");return"".concat(l," ").concat(o(e))}function d(e){let{schedule:t,now:n}=e;if(!t)return(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"판 일정 없음"});let s=new Date(t.cutAt),l=null===t.landBy?null:new Date(t.landBy),a=l&&null!==n?l.getTime()-n:null,d=null!==a&&a>0?Math.ceil(a/6e4):0,c="".concat(Math.floor(d/60)?"".concat(Math.floor(d/60),"시간"):"").concat(d%60?"".concat(Math.floor(d/60)?" ":"").concat(d%60,"분"):d<60?"0분":"");return(0,r.jsxs)("p",{"aria-label":"판 일정",className:"text-sm ".concat(null!==a&&a<=0?"text-red-600":null!==a&&a<=108e5?"text-orange-600":"text-muted-foreground"),children:["컷 ",i(s,null===n?null:new Date(n)),l&&(0,r.jsxs)(r.Fragment,{children:[" \xb7 착지 마감 ",l.toDateString()===s.toDateString()?o(l):i(l,null===n?null:new Date(n)),null!==a&&(0,r.jsxs)(r.Fragment,{children:[" \xb7 ",a<=0?"착지 마감 지남":"마감까지 ".concat(c)]})]})]})}function c(e){var t;let{result:n,version:s,owner:l,status:a,pendingOnly:o,expandedId:i,onVersion:c,onOwner:u,onStatus:m,onPending:h,onExpand:p,now:y=null}=e;if((null==n?void 0:n.kind)==="forbidden")return(0,r.jsx)("p",{children:"운영자만 볼 수 있습니다"});let v=(null==n?void 0:n.kind)==="ready"?n.data:null,g=null!=(t=null==v?void 0:v.items.filter(e=>(!l||e.owner===l)&&(!a||e.status===a)&&(!o||"yellow"===e.status)))?t:[];return(0,r.jsxs)("main",{className:"mx-auto w-full min-w-0 max-w-4xl space-y-6 overflow-x-hidden px-4 py-6 text-foreground",children:[(0,r.jsxs)("header",{className:"space-y-1",children:[(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"운영 / 판별 피처"}),(0,r.jsx)("h1",{className:"text-2xl font-semibold",children:"판별 피처"})]}),(0,r.jsxs)("label",{className:"block space-y-2 text-sm font-medium",children:["판",(0,r.jsx)("input",{"aria-label":"판",list:"ops-checklist-versions",value:s,onChange:e=>c(e.target.value),className:"block w-full max-w-xs rounded-md border bg-background p-2"}),(0,r.jsxs)("datalist",{id:"ops-checklist-versions",children:[(0,r.jsx)("option",{value:"0.2.8"}),(0,r.jsx)("option",{value:"0.2.9"}),(0,r.jsx)("option",{value:"0.2.10"})]})]}),null===n&&(0,r.jsx)("p",{role:"status",children:"칸을 불러오는 중…"}),(null==n?void 0:n.kind)==="error"&&(0,r.jsxs)("p",{role:"alert",children:["칸을 불러오지 못했습니다 (",n.status,")"]}),v&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(d,{schedule:v.schedule,now:y}),(0,r.jsx)("section",{"aria-label":"상태별 수",className:"grid grid-cols-2 gap-2 sm:grid-cols-4",children:[["\uD83D\uDFE2","green"],["\uD83D\uDFE1","yellow"],["\uD83D\uDD34","red"],["✅","done"]].map(e=>{let[t,n]=e;return(0,r.jsxs)("div",{className:"rounded-md border p-3 text-sm",children:[t," ",v[n]]},n)})}),(0,r.jsxs)("section",{className:"flex min-w-0 flex-wrap items-end gap-3","aria-label":"거르기",children:[(0,r.jsxs)("label",{className:"space-y-1 text-sm",children:["자리",(0,r.jsxs)("select",{"aria-label":"자리",className:"block rounded-md border bg-background p-2",value:l,onChange:e=>u(e.target.value),children:[(0,r.jsx)("option",{value:"",children:"전체"}),["OP","MK","TC","UX"].map(e=>(0,r.jsx)("option",{value:e,children:e},e))]})]}),(0,r.jsxs)("label",{className:"space-y-1 text-sm",children:["상태",(0,r.jsxs)("select",{"aria-label":"상태",className:"block rounded-md border bg-background p-2",value:a,onChange:e=>m(e.target.value),children:[(0,r.jsx)("option",{value:"",children:"전체"}),["green","yellow","red","done"].map(e=>(0,r.jsx)("option",{value:e,children:e},e))]})]}),(0,r.jsxs)("label",{className:"flex items-center gap-2 p-2 text-sm",children:[(0,r.jsx)("input",{type:"checkbox",checked:o,onChange:e=>h(e.target.checked)}),"판정 대기만"]})]}),(0,r.jsxs)("section",{className:"min-w-0 space-y-2","aria-label":"칸 목록",children:[(0,r.jsx)("h2",{className:"font-semibold",children:"칸 목록"}),0===g.length&&(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"해당하는 칸이 없습니다."}),g.map(e=>{var t,n;return(0,r.jsxs)("div",{className:"min-w-0 rounded-md border",children:[(0,r.jsxs)("button",{type:"button",className:"flex w-full min-w-0 items-center gap-2 overflow-hidden p-3 text-left hover:bg-muted","aria-expanded":i===e.id,onClick:()=>p(i===e.id?null:e.id),children:[(0,r.jsx)("span",{className:"max-w-[35%] shrink-0 truncate text-sm font-medium",children:e.id}),(0,r.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e.title}),(0,r.jsxs)("span",{className:"shrink-0 text-xs",children:[null!=(t=e.owner)?t:"—"," \xb7 ",e.status]})]}),i===e.id&&(0,r.jsxs)("div",{className:"min-w-0 space-y-2 border-t p-3 text-sm",children:[(0,r.jsx)("p",{className:"break-all font-medium",children:e.title}),(0,r.jsx)("p",{className:"whitespace-pre-wrap break-all",children:null!=(n=e.evidence)?n:"근거 없음"})]})]},e.id)})]})]})]})}function u(){let{client:e}=(0,l.Q)(),[t,n]=(0,s.useState)("0.2.9"),[o,i]=(0,s.useState)(null),[d,u]=(0,s.useState)(""),[m,h]=(0,s.useState)(""),[p,y]=(0,s.useState)(!1),[v,g]=(0,s.useState)(null),[f,x]=(0,s.useState)(null);(0,s.useEffect)(()=>{let e;if("undefined"==typeof document)return;let t=()=>{void 0!==e&&(window.clearInterval(e),e=void 0),document.hidden||(x(Date.now()),e=window.setInterval(()=>x(Date.now()),6e4))};return t(),document.addEventListener("visibilitychange",t),()=>{void 0!==e&&window.clearInterval(e),document.removeEventListener("visibilitychange",t)}},[]);let[b,w]=(0,s.useState)(!1),k=(0,s.useRef)(!1),j=(0,s.useRef)(e);return((0,s.useEffect)(()=>{let n=!0;return(j.current!==e&&(j.current=e,k.current=!1,w(!1)),k.current)?()=>{n=!1}:/^\d+\.\d+\.\d+(?:-(?:rc|alpha|beta)\.\d+)?$/.test(t)?(i(null),(0,a.HG)(e,t).then(e=>{n&&!k.current&&("forbidden"===e.kind&&(k.current=!0,w(!0)),i(e))}),()=>{n=!1}):(i(null),()=>{n=!1})},[e,t]),b)?(0,r.jsx)("p",{children:"운영자만 볼 수 있습니다"}):(0,r.jsx)(c,{result:o,version:t,owner:d,status:m,pendingOnly:p,now:f,expandedId:v,onVersion:e=>{n(e),g(null)},onOwner:u,onStatus:h,onPending:y,onExpand:g})}},96439:(e,t,n)=>{"use strict";function r(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function s(e){return"string"==typeof e}function l(e){return s(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function a(e){return r(e)&&s(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&s(e.summary)}function o(e){return r(e)&&s(e.runId)&&s(e.status)&&s(e.startedAt)&&(null===e.version||s(e.version))&&Array.isArray(e.path)&&e.path.every(s)&&Array.isArray(e.nodes)&&e.nodes.every(a)}function i(e){return r(e)&&s(e.id)&&s(e.title)&&s(e.status)&&(void 0===e.owner||s(e.owner))&&s(e.updatedAt)&&(void 0===e.evidence||s(e.evidence))}n.d(t,{HG:()=>v,Kh:()=>y,Nn:()=>h,oc:()=>p});let d=e=>Number.isInteger(e)&&e>=0;function c(e){return r(e)&&s(e.id)&&s(e.title)&&(null===e.open||d(e.open))&&(null===e.landed||d(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&s(e.id)&&s(e.title)))}function u(e){return r(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||s(e.role))&&(null===e.now||r(e.now)&&s(e.now.text)&&s(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>r(e)&&d(e.pr)&&s(e.title)&&s(e.at)&&(null===e.checklistId||s(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&s(e.id)&&s(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||d(e.pendingDecisions))&&(null===e.checklist||r(e.checklist)&&["green","yellow","red","done"].every(t=>d(e.checklist[t])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(c))}async function m(e,t,n){try{let r=await e.fetchResponse(t,{method:"GET"});if(403===r.status)return{kind:"forbidden"};if(!r.ok)return{kind:"error",status:r.status};let s=n(await r.json());return null===s?{kind:"error",status:r.status}:{kind:"ready",data:s}}catch(e){return{kind:"error",status:0}}}function h(e,t){return m(e,"/v1/ops/seats".concat(t?"?date=".concat(encodeURIComponent(t)):""),e=>r(e)&&s(e.date)&&Array.isArray(e.seats)&&e.seats.every(u)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function p(e,t){return m(e,"/v1/ops/release/runs".concat(t?"?version=".concat(encodeURIComponent(t)):""),e=>Array.isArray(e)&&e.every(o)?e:null)}function y(e,t,n){return m(e,"/v1/ops/release/runs/".concat(encodeURIComponent(t),"/nodes/").concat(encodeURIComponent(n),"/log"),e=>r(e)&&s(e.log)?{log:e.log}:null)}function v(e,t){return m(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(t)),e=>{var t,n,a,o;if(!(r(e)&&s(e.version)&&(void 0===e.codename||s(e.codename))&&Array.isArray(e.items)&&e.items.every(i)&&["green","yellow","red","done"].every(t=>void 0===e[t]||Number.isInteger(e[t])&&e[t]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(s))&&(void 0===e.byOwner||r(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let d={green:0,yellow:0,red:0,done:0};for(let t of e.items)t.status in d&&d[t.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:r(e.schedule)&&l(e.schedule.cutAt)&&(null===e.schedule.landBy||l(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(t=e.green)?t:d.green,yellow:null!=(n=e.yellow)?n:d.yellow,red:null!=(a=e.red)?a:d.red,done:null!=(o=e.done)?o:d.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}}},e=>{e.O(0,[9906,6390,3170,7358],()=>e(e.s=64342)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6231],{1355:(e,n,r)=>{"use strict";r.d(n,{Zr:()=>o,f6:()=>l,oD:()=>s});let t="elanous.daemon.sessionId";function l(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(t,e),e):localStorage.getItem(t)}();if(e)return e;let n=l();return localStorage.setItem(t,n),n}function o(){let e=l();return localStorage.setItem(t,e),e}},14470:(e,n,r)=>{"use strict";r.d(n,{ReleaseRunsView:()=>d});var t=r(54456),l=r(60500),s=r(36581),o=r(96439);function a(e){var n;let{result:r,version:l,versions:s=[],selectedRunId:o,openedNodeId:a,log:d,onVersion:u,onRun:i,onNode:c}=e;if((null==r?void 0:r.kind)==="forbidden"||(null==d?void 0:d.kind)==="forbidden")return(0,t.jsx)("p",{children:"운영자만 볼 수 있습니다"});let m=(null==r?void 0:r.kind)==="ready"?r.data:[],v=l?m.filter(e=>e.version===l):m,f=null!=(n=v.find(e=>e.runId===o))?n:v[0],y=[...new Set([...s,...m.map(e=>e.version).filter(e=>!!e)])];l&&!y.includes(l)&&y.push(l);let p=f&&function(e){let n=e.path.find(n=>{var r;return(null==(r=e.nodes.find(e=>e.nodeId===n))?void 0:r.ok)===null});return null!=n?n:e.path.at(-1)}(f);return(0,t.jsxs)("main",{className:"mx-auto w-full min-w-0 max-w-4xl space-y-6 overflow-x-hidden px-4 py-6 text-foreground",children:[(0,t.jsxs)("header",{className:"space-y-1",children:[(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"운영 / 릴리스"}),(0,t.jsx)("h1",{className:"text-2xl font-semibold",children:"릴리스"})]}),(0,t.jsxs)("label",{className:"block space-y-2 text-sm font-medium",children:["판",(0,t.jsx)("input",{"aria-label":"판",list:"ops-release-versions",className:"block w-full max-w-xs rounded-md border bg-background p-2",value:l,onChange:e=>u(e.target.value),placeholder:"전체 판"}),(0,t.jsx)("datalist",{id:"ops-release-versions",children:y.map(e=>(0,t.jsx)("option",{value:e},e))})]}),null===r?(0,t.jsx)("p",{role:"status",children:"런을 불러오는 중…"}):"error"===r.kind?(0,t.jsxs)("p",{role:"alert",children:["런을 불러오지 못했습니다 (",r.status,")"]}):null,(null==r?void 0:r.kind)==="ready"&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("section",{className:"min-w-0 space-y-2","aria-label":"런 목록",children:[(0,t.jsx)("h2",{className:"font-semibold",children:"런 목록"}),0===v.length&&(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"이 판의 런이 없습니다."}),v.map(e=>{var n;return(0,t.jsxs)("button",{type:"button","aria-pressed":(null==f?void 0:f.runId)===e.runId,onClick:()=>i(e.runId),className:"block w-full min-w-0 rounded-md border p-3 text-left hover:bg-muted aria-pressed:border-primary",children:[(0,t.jsxs)("span",{className:"block truncate font-medium",children:[null!=(n=e.version)?n:"판 미상"," \xb7 ",e.status]}),(0,t.jsx)("time",{className:"block break-all text-sm text-muted-foreground",dateTime:e.startedAt,children:e.startedAt})]},e.runId)})]}),f&&(0,t.jsxs)("section",{className:"min-w-0 space-y-2","aria-label":"노드 진행",children:[(0,t.jsx)("h2",{className:"font-semibold",children:"노드 진행"}),f.path.map((e,n)=>{let r=f.nodes.find(n=>n.nodeId===e),l=a===e;return(0,t.jsxs)("div",{className:"min-w-0 rounded-md border",children:[(0,t.jsxs)("button",{type:"button","aria-expanded":l,onClick:()=>c(e),className:"flex w-full min-w-0 items-start gap-2 p-3 text-left hover:bg-muted",children:[(0,t.jsx)("span",{"aria-label":(null==r?void 0:r.ok)===!0?"성공":(null==r?void 0:r.ok)===!1?"실패":"진행 대기",children:(null==r?void 0:r.ok)===!0?"✅":(null==r?void 0:r.ok)===!1?"❌":"⏳"}),(0,t.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,t.jsxs)("span",{className:"block break-all font-medium",children:[e," ",e===p&&(0,t.jsx)("strong",{className:"text-sm text-primary",children:"지금 위치"})]}),(null==r?void 0:r.summary)&&(0,t.jsx)("span",{className:"block break-all text-sm text-muted-foreground",children:r.summary})]})]}),l&&(0,t.jsx)("div",{className:"min-w-0 border-t p-3",children:(null==d?void 0:d.kind)==="ready"?(0,t.jsx)("pre",{className:"max-w-full overflow-x-auto whitespace-pre font-mono text-xs","aria-label":"노드 로그",children:d.data.log}):(0,t.jsx)("p",{role:"status",className:"text-sm",children:(null==d?void 0:d.kind)==="error"?"로그를 불러오지 못했습니다 (".concat(d.status,")"):"로그를 불러오는 중…"})})]},"".concat(e,"-").concat(n))})]})]})]})}function d(){var e,n;let{client:r}=(0,s.Q)(),[d,u]=(0,l.useState)(null),[i,c]=(0,l.useState)([]),[m,v]=(0,l.useState)(null),[f,y]=(0,l.useState)(null),[p,b]=(0,l.useState)(null),[h,k]=(0,l.useState)(null),[w,x]=(0,l.useState)(null),[g,I]=(0,l.useState)(!1),j=(0,l.useRef)(0),N=(0,l.useRef)(!1),A=(0,l.useRef)(null),S=(0,l.useRef)([]),C=(0,l.useRef)(r);(0,l.useEffect)(()=>{let e=!0;return(C.current!==r&&(C.current=r,N.current=!1,I(!1),c([]),A.current=null,v(null)),N.current)?()=>{e=!1}:(j.current++,k(null),x(null),y(null),S.current=[],null===d&&(A.current=null,v(null)),(0,o.oc)(r,d||void 0).then(n=>{if(e&&!N.current&&(y(n),"forbidden"===n.kind&&(N.current=!0,I(!0)),"ready"===n.kind)&&(S.current=n.data,c(e=>[...new Set([...e,...n.data.map(e=>e.version).filter(e=>!!e)])]),null===d&&null===A.current)){var r,t;A.current=null!=(t=null==(r=n.data[0])?void 0:r.version)?t:null,v(A.current)}}),()=>{e=!1})},[r,d]);let R=!g&&((null==f?void 0:f.kind)==="ready"||(null==f?void 0:f.kind)==="error")&&S.current.some(e=>!["completed","failed","cancelled","aborted","success","error"].includes(e.status.toLowerCase()));(0,l.useEffect)(()=>{if(!R)return;let e=!0,n=!1,t=async()=>{if(n||document.hidden||!e||N.current||!S.current.some(e=>!["completed","failed","cancelled","aborted","success","error"].includes(e.status.toLowerCase())))return;n=!0;let t=await (0,o.oc)(r,d||void 0);n=!1,e&&!N.current&&(y(t),"ready"===t.kind&&(S.current=t.data),"forbidden"===t.kind&&(N.current=!0,I(!0)))},l=window.setInterval(()=>{t()},1e4),s=()=>{document.hidden||t()};return document.addEventListener("visibilitychange",s),()=>{e=!1,window.clearInterval(l),document.removeEventListener("visibilitychange",s)}},[r,d,R]);let U=null===d?m:d,E=(null==f?void 0:f.kind)==="ready"?null!=(e=f.data.find(e=>e.runId===p&&(!U||e.version===U)))?e:f.data.find(e=>!U||e.version===U):void 0,D=null!=(n=null!=U?U:null==E?void 0:E.version)?n:"",O=null==E?void 0:E.runId;(0,l.useEffect)(()=>{j.current++,k(null),x(null)},[O]);let L=(0,l.useCallback)(e=>{(e!==m||null!==d)&&(j.current++,v(null),u(e),b(null),k(null),x(null))},[d,m]);if(g)return(0,t.jsx)("p",{children:"운영자만 볼 수 있습니다"});let P=h&&h.runId===O?h.nodeId:null,T=w&&w.runId===O&&w.nodeId===P?w.result:null;return(0,t.jsx)(a,{result:f,version:D,versions:i,selectedRunId:p,openedNodeId:P,log:T,onVersion:L,onRun:e=>{j.current++,b(e),k(null),x(null)},onNode:e=>{if(!E||(null==f?void 0:f.kind)!=="ready")return;let n=++j.current,t=E.runId;if((null==h?void 0:h.runId)===t&&h.nodeId===e){k(null),x(null);return}k({runId:t,nodeId:e}),x(null),(0,o.Kh)(r,t,e).then(r=>{n!==j.current||N.current||("forbidden"===r.kind&&(N.current=!0,I(!0)),x({runId:t,nodeId:e,result:r}))})}})}},36581:(e,n,r)=>{"use strict";r.d(n,{C:()=>u,DaemonProvider:()=>i,Q:()=>c});var t=r(54456),l=r(60500),s=r(86704),o=r(1355),a=r(39906),d=r(50733);let u=(0,l.createContext)(null);function i(e){let{children:n}=e,r={baseUrl:"",token:"",provider:""},[i,c]=(0,l.useState)(r),[m,v]=(0,l.useState)(""),[f]=(0,l.useState)(()=>new a.ki(r));(0,l.useEffect)(()=>{let e=(0,s.Fp)();c(e),f.updateConfig(e),v((0,o.oD)()),(0,d.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,l.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let n=(0,s.Fp)();f.updateConfig(n),c(n),(0,d.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!n.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&v(n=>n===e.newValue?n:((0,d.cY)("webterm.provider.daemon.session-cross-tab",{previous:n||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let y=e=>{c(n=>{let r={...n,...e};return(0,s.Qc)(e),f.updateConfig(r),(0,d.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},p=e=>{v(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,d.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,l.useMemo)(()=>({config:i,setConfig:y,client:f,sessionId:m,setSessionId:p}),[i,f,m]);return(0,t.jsx)(u.Provider,{value:b,children:n})}function c(){let e=(0,l.useContext)(u);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},96314:(e,n,r)=>{Promise.resolve().then(r.bind(r,14470))},96439:(e,n,r)=>{"use strict";function t(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function l(e){return"string"==typeof e}function s(e){return l(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function o(e){return t(e)&&l(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&l(e.summary)}function a(e){return t(e)&&l(e.runId)&&l(e.status)&&l(e.startedAt)&&(null===e.version||l(e.version))&&Array.isArray(e.path)&&e.path.every(l)&&Array.isArray(e.nodes)&&e.nodes.every(o)}function d(e){return t(e)&&l(e.id)&&l(e.title)&&l(e.status)&&(void 0===e.owner||l(e.owner))&&l(e.updatedAt)&&(void 0===e.evidence||l(e.evidence))}r.d(n,{HG:()=>p,Kh:()=>y,Nn:()=>v,oc:()=>f});let u=e=>Number.isInteger(e)&&e>=0;function i(e){return t(e)&&l(e.id)&&l(e.title)&&(null===e.open||u(e.open))&&(null===e.landed||u(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>t(e)&&l(e.id)&&l(e.title)))}function c(e){return t(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||l(e.role))&&(null===e.now||t(e.now)&&l(e.now.text)&&l(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>t(e)&&u(e.pr)&&l(e.title)&&l(e.at)&&(null===e.checklistId||l(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>t(e)&&l(e.id)&&l(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||u(e.pendingDecisions))&&(null===e.checklist||t(e.checklist)&&["green","yellow","red","done"].every(n=>u(e.checklist[n])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(i))}async function m(e,n,r){try{let t=await e.fetchResponse(n,{method:"GET"});if(403===t.status)return{kind:"forbidden"};if(!t.ok)return{kind:"error",status:t.status};let l=r(await t.json());return null===l?{kind:"error",status:t.status}:{kind:"ready",data:l}}catch(e){return{kind:"error",status:0}}}function v(e,n){return m(e,"/v1/ops/seats".concat(n?"?date=".concat(encodeURIComponent(n)):""),e=>t(e)&&l(e.date)&&Array.isArray(e.seats)&&e.seats.every(c)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function f(e,n){return m(e,"/v1/ops/release/runs".concat(n?"?version=".concat(encodeURIComponent(n)):""),e=>Array.isArray(e)&&e.every(a)?e:null)}function y(e,n,r){return m(e,"/v1/ops/release/runs/".concat(encodeURIComponent(n),"/nodes/").concat(encodeURIComponent(r),"/log"),e=>t(e)&&l(e.log)?{log:e.log}:null)}function p(e,n){return m(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(n)),e=>{var n,r,o,a;if(!(t(e)&&l(e.version)&&(void 0===e.codename||l(e.codename))&&Array.isArray(e.items)&&e.items.every(d)&&["green","yellow","red","done"].every(n=>void 0===e[n]||Number.isInteger(e[n])&&e[n]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(l))&&(void 0===e.byOwner||t(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let u={green:0,yellow:0,red:0,done:0};for(let n of e.items)n.status in u&&u[n.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:t(e.schedule)&&s(e.schedule.cutAt)&&(null===e.schedule.landBy||s(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(n=e.green)?n:u.green,yellow:null!=(r=e.yellow)?r:u.yellow,red:null!=(o=e.red)?o:u.red,done:null!=(a=e.done)?a:u.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}}},e=>{e.O(0,[9906,6390,3170,7358],()=>e(e.s=96314)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6231],{1355:(e,n,r)=>{"use strict";r.d(n,{Zr:()=>o,f6:()=>l,oD:()=>s});let t="elanous.daemon.sessionId";function l(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(t,e),e):localStorage.getItem(t)}();if(e)return e;let n=l();return localStorage.setItem(t,n),n}function o(){let e=l();return localStorage.setItem(t,e),e}},14470:(e,n,r)=>{"use strict";r.d(n,{ReleaseRunsView:()=>d});var t=r(54456),l=r(60500),s=r(36581),o=r(96439);function a(e){var n;let{result:r,version:l,versions:s=[],selectedRunId:o,openedNodeId:a,log:d,onVersion:u,onRun:i,onNode:c}=e;if((null==r?void 0:r.kind)==="forbidden"||(null==d?void 0:d.kind)==="forbidden")return(0,t.jsx)("p",{children:"운영자만 볼 수 있습니다"});let m=(null==r?void 0:r.kind)==="ready"?r.data:[],v=l?m.filter(e=>e.version===l):m,f=null!=(n=v.find(e=>e.runId===o))?n:v[0],y=[...new Set([...s,...m.map(e=>e.version).filter(e=>!!e)])];l&&!y.includes(l)&&y.push(l);let p=f&&function(e){let n=e.path.find(n=>{var r;return(null==(r=e.nodes.find(e=>e.nodeId===n))?void 0:r.ok)===null});return null!=n?n:e.path.at(-1)}(f);return(0,t.jsxs)("main",{className:"mx-auto w-full min-w-0 max-w-4xl space-y-6 overflow-x-hidden px-4 py-6 text-foreground",children:[(0,t.jsxs)("header",{className:"space-y-1",children:[(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"운영 / 릴리스"}),(0,t.jsx)("h1",{className:"text-2xl font-semibold",children:"릴리스"})]}),(0,t.jsxs)("label",{className:"block space-y-2 text-sm font-medium",children:["판",(0,t.jsx)("input",{"aria-label":"판",list:"ops-release-versions",className:"block w-full max-w-xs rounded-md border bg-background p-2",value:l,onChange:e=>u(e.target.value),placeholder:"전체 판"}),(0,t.jsx)("datalist",{id:"ops-release-versions",children:y.map(e=>(0,t.jsx)("option",{value:e},e))})]}),null===r?(0,t.jsx)("p",{role:"status",children:"런을 불러오는 중…"}):"error"===r.kind?(0,t.jsxs)("p",{role:"alert",children:["런을 불러오지 못했습니다 (",r.status,")"]}):null,(null==r?void 0:r.kind)==="ready"&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("section",{className:"min-w-0 space-y-2","aria-label":"런 목록",children:[(0,t.jsx)("h2",{className:"font-semibold",children:"런 목록"}),0===v.length&&(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"이 판의 런이 없습니다."}),v.map(e=>{var n;return(0,t.jsxs)("button",{type:"button","aria-pressed":(null==f?void 0:f.runId)===e.runId,onClick:()=>i(e.runId),className:"block w-full min-w-0 rounded-md border p-3 text-left hover:bg-muted aria-pressed:border-primary",children:[(0,t.jsxs)("span",{className:"block truncate font-medium",children:[null!=(n=e.version)?n:"판 미상"," \xb7 ",e.status]}),(0,t.jsx)("time",{className:"block break-all text-sm text-muted-foreground",dateTime:e.startedAt,children:e.startedAt})]},e.runId)})]}),f&&(0,t.jsxs)("section",{className:"min-w-0 space-y-2","aria-label":"노드 진행",children:[(0,t.jsx)("h2",{className:"font-semibold",children:"노드 진행"}),f.path.map((e,n)=>{let r=f.nodes.find(n=>n.nodeId===e),l=a===e;return(0,t.jsxs)("div",{className:"min-w-0 rounded-md border",children:[(0,t.jsxs)("button",{type:"button","aria-expanded":l,onClick:()=>c(e),className:"flex w-full min-w-0 items-start gap-2 p-3 text-left hover:bg-muted",children:[(0,t.jsx)("span",{"aria-label":(null==r?void 0:r.ok)===!0?"성공":(null==r?void 0:r.ok)===!1?"실패":"진행 대기",children:(null==r?void 0:r.ok)===!0?"✅":(null==r?void 0:r.ok)===!1?"❌":"⏳"}),(0,t.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,t.jsxs)("span",{className:"block break-all font-medium",children:[e," ",e===p&&(0,t.jsx)("strong",{className:"text-sm text-primary",children:"지금 위치"})]}),(null==r?void 0:r.summary)&&(0,t.jsx)("span",{className:"block break-all text-sm text-muted-foreground",children:r.summary})]})]}),l&&(0,t.jsx)("div",{className:"min-w-0 border-t p-3",children:(null==d?void 0:d.kind)==="ready"?(0,t.jsx)("pre",{className:"max-w-full overflow-x-auto whitespace-pre font-mono text-xs","aria-label":"노드 로그",children:d.data.log}):(0,t.jsx)("p",{role:"status",className:"text-sm",children:(null==d?void 0:d.kind)==="error"?"로그를 불러오지 못했습니다 (".concat(d.status,")"):"로그를 불러오는 중…"})})]},"".concat(e,"-").concat(n))})]})]})]})}function d(){var e,n;let{client:r}=(0,s.Q)(),[d,u]=(0,l.useState)(null),[i,c]=(0,l.useState)([]),[m,v]=(0,l.useState)(null),[f,y]=(0,l.useState)(null),[p,b]=(0,l.useState)(null),[h,k]=(0,l.useState)(null),[w,x]=(0,l.useState)(null),[g,I]=(0,l.useState)(!1),j=(0,l.useRef)(0),N=(0,l.useRef)(!1),A=(0,l.useRef)(null),S=(0,l.useRef)([]),C=(0,l.useRef)(r);(0,l.useEffect)(()=>{let e=!0;return(C.current!==r&&(C.current=r,N.current=!1,I(!1),c([]),A.current=null,v(null)),N.current)?()=>{e=!1}:(j.current++,k(null),x(null),y(null),S.current=[],null===d&&(A.current=null,v(null)),(0,o.oc)(r,d||void 0).then(n=>{if(e&&!N.current&&(y(n),"forbidden"===n.kind&&(N.current=!0,I(!0)),"ready"===n.kind)&&(S.current=n.data,c(e=>[...new Set([...e,...n.data.map(e=>e.version).filter(e=>!!e)])]),null===d&&null===A.current)){var r,t;A.current=null!=(t=null==(r=n.data[0])?void 0:r.version)?t:null,v(A.current)}}),()=>{e=!1})},[r,d]);let R=!g&&((null==f?void 0:f.kind)==="ready"||(null==f?void 0:f.kind)==="error")&&S.current.some(e=>!["completed","failed","cancelled","aborted","success","error"].includes(e.status.toLowerCase()));(0,l.useEffect)(()=>{if(!R)return;let e=!0,n=!1,t=async()=>{if(n||document.hidden||!e||N.current||!S.current.some(e=>!["completed","failed","cancelled","aborted","success","error"].includes(e.status.toLowerCase())))return;n=!0;let t=await (0,o.oc)(r,d||void 0);n=!1,e&&!N.current&&(y(t),"ready"===t.kind&&(S.current=t.data),"forbidden"===t.kind&&(N.current=!0,I(!0)))},l=window.setInterval(()=>{t()},1e4),s=()=>{document.hidden||t()};return document.addEventListener("visibilitychange",s),()=>{e=!1,window.clearInterval(l),document.removeEventListener("visibilitychange",s)}},[r,d,R]);let U=null===d?m:d,E=(null==f?void 0:f.kind)==="ready"?null!=(e=f.data.find(e=>e.runId===p&&(!U||e.version===U)))?e:f.data.find(e=>!U||e.version===U):void 0,D=null!=(n=null!=U?U:null==E?void 0:E.version)?n:"",O=null==E?void 0:E.runId;(0,l.useEffect)(()=>{j.current++,k(null),x(null)},[O]);let L=(0,l.useCallback)(e=>{(e!==m||null!==d)&&(j.current++,v(null),u(e),b(null),k(null),x(null))},[d,m]);if(g)return(0,t.jsx)("p",{children:"운영자만 볼 수 있습니다"});let P=h&&h.runId===O?h.nodeId:null,T=w&&w.runId===O&&w.nodeId===P?w.result:null;return(0,t.jsx)(a,{result:f,version:D,versions:i,selectedRunId:p,openedNodeId:P,log:T,onVersion:L,onRun:e=>{j.current++,b(e),k(null),x(null)},onNode:e=>{if(!E||(null==f?void 0:f.kind)!=="ready")return;let n=++j.current,t=E.runId;if((null==h?void 0:h.runId)===t&&h.nodeId===e){k(null),x(null);return}k({runId:t,nodeId:e}),x(null),(0,o.Kh)(r,t,e).then(r=>{n!==j.current||N.current||("forbidden"===r.kind&&(N.current=!0,I(!0)),x({runId:t,nodeId:e,result:r}))})}})}},18412:(e,n,r)=>{Promise.resolve().then(r.bind(r,14470))},36581:(e,n,r)=>{"use strict";r.d(n,{C:()=>u,DaemonProvider:()=>i,Q:()=>c});var t=r(54456),l=r(60500),s=r(86704),o=r(1355),a=r(39906),d=r(50733);let u=(0,l.createContext)(null);function i(e){let{children:n}=e,r={baseUrl:"",token:"",provider:""},[i,c]=(0,l.useState)(r),[m,v]=(0,l.useState)(""),[f]=(0,l.useState)(()=>new a.ki(r));(0,l.useEffect)(()=>{let e=(0,s.Fp)();c(e),f.updateConfig(e),v((0,o.oD)()),(0,d.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,l.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let n=(0,s.Fp)();f.updateConfig(n),c(n),(0,d.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!n.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&v(n=>n===e.newValue?n:((0,d.cY)("webterm.provider.daemon.session-cross-tab",{previous:n||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let y=e=>{c(n=>{let r={...n,...e};return(0,s.Qc)(e),f.updateConfig(r),(0,d.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},p=e=>{v(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,d.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,l.useMemo)(()=>({config:i,setConfig:y,client:f,sessionId:m,setSessionId:p}),[i,f,m]);return(0,t.jsx)(u.Provider,{value:b,children:n})}function c(){let e=(0,l.useContext)(u);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},96439:(e,n,r)=>{"use strict";function t(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function l(e){return"string"==typeof e}function s(e){return l(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function o(e){return t(e)&&l(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&l(e.summary)}function a(e){return t(e)&&l(e.runId)&&l(e.status)&&l(e.startedAt)&&(null===e.version||l(e.version))&&Array.isArray(e.path)&&e.path.every(l)&&Array.isArray(e.nodes)&&e.nodes.every(o)}function d(e){return t(e)&&l(e.id)&&l(e.title)&&l(e.status)&&(void 0===e.owner||l(e.owner))&&l(e.updatedAt)&&(void 0===e.evidence||l(e.evidence))}r.d(n,{HG:()=>p,Kh:()=>y,Nn:()=>v,oc:()=>f});let u=e=>Number.isInteger(e)&&e>=0;function i(e){return t(e)&&l(e.id)&&l(e.title)&&(null===e.open||u(e.open))&&(null===e.landed||u(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>t(e)&&l(e.id)&&l(e.title)))}function c(e){return t(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||l(e.role))&&(null===e.now||t(e.now)&&l(e.now.text)&&l(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>t(e)&&u(e.pr)&&l(e.title)&&l(e.at)&&(null===e.checklistId||l(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>t(e)&&l(e.id)&&l(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||u(e.pendingDecisions))&&(null===e.checklist||t(e.checklist)&&["green","yellow","red","done"].every(n=>u(e.checklist[n])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(i))}async function m(e,n,r){try{let t=await e.fetchResponse(n,{method:"GET"});if(403===t.status)return{kind:"forbidden"};if(!t.ok)return{kind:"error",status:t.status};let l=r(await t.json());return null===l?{kind:"error",status:t.status}:{kind:"ready",data:l}}catch(e){return{kind:"error",status:0}}}function v(e,n){return m(e,"/v1/ops/seats".concat(n?"?date=".concat(encodeURIComponent(n)):""),e=>t(e)&&l(e.date)&&Array.isArray(e.seats)&&e.seats.every(c)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function f(e,n){return m(e,"/v1/ops/release/runs".concat(n?"?version=".concat(encodeURIComponent(n)):""),e=>Array.isArray(e)&&e.every(a)?e:null)}function y(e,n,r){return m(e,"/v1/ops/release/runs/".concat(encodeURIComponent(n),"/nodes/").concat(encodeURIComponent(r),"/log"),e=>t(e)&&l(e.log)?{log:e.log}:null)}function p(e,n){return m(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(n)),e=>{var n,r,o,a;if(!(t(e)&&l(e.version)&&(void 0===e.codename||l(e.codename))&&Array.isArray(e.items)&&e.items.every(d)&&["green","yellow","red","done"].every(n=>void 0===e[n]||Number.isInteger(e[n])&&e[n]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(l))&&(void 0===e.byOwner||t(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let u={green:0,yellow:0,red:0,done:0};for(let n of e.items)n.status in u&&u[n.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:t(e.schedule)&&s(e.schedule.cutAt)&&(null===e.schedule.landBy||s(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(n=e.green)?n:u.green,yellow:null!=(r=e.yellow)?r:u.yellow,red:null!=(o=e.red)?o:u.red,done:null!=(a=e.done)?a:u.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}}},e=>{e.O(0,[9906,6390,3170,7358],()=>e(e.s=18412)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2624],{1355:(e,n,t)=>{"use strict";t.d(n,{Zr:()=>a,f6:()=>l,oD:()=>s});let r="elanous.daemon.sessionId";function l(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(r,e),e):localStorage.getItem(r)}();if(e)return e;let n=l();return localStorage.setItem(r,n),n}function a(){let e=l();return localStorage.setItem(r,e),e}},4951:(e,n,t)=>{"use strict";t.d(n,{Es:()=>a,Wf:()=>l,q9:()=>s});let r=/\u{1F451}|`[^`]+`|\b(?=[0-9a-f]*\d)(?=[0-9a-f]*[a-f])[0-9a-f]{7,40}\b|\/Users\/|\/(?:home|root)\/|\/\.ssh\/|~\/\.elanous|elt_|\$\s*[-+]?\d[\d,.]*|run-[0-9a-f]{8}\b|\b(?:test|mirror):|\b(?:account|remote)-\d+\b|\bmsb\d+\b|\.ts\.net\b|\bgcpvm\b|user|[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/iu;function l(e){return!r.test(e)}function s(e){return(e.replace(/^\s*\*\*\[[A-Za-z]{1,4}\]\*\*\s*/,"").replace(/^(?:\{\{TS\}\}|\d{4}-\d{2}-\d{2}\s+\d{1,2}:\d{2}(?::\d{2})?\s*(?:KST)?)\s*/,"").replace(/^→\s*(?:(?:[A-Z]{2,4}|전원|전체)(?=[\s·,(]|$)[\s·,]*)+/u,"").replace(/^—\s*/,"").replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,"").trim()||e.trim()).replace(/\*\*/g,"")}function a(e){return e.replace(/#\d{4,6}\b/g,"PR")}},18358:(e,n,t)=>{"use strict";t.d(n,{SeatBoardView:()=>p});var r=t(54456),l=t(60500),s=t(36581),a=t(96439),o=t(4951);let d=[{seat:"OP",role:"COO"},{seat:"MK",role:"CMO"},{seat:"TC",role:"CTO"},{seat:"UX",role:"CXO"}];function i(e){return null===e?"못 읽음":String(e)}function c(e,n,t){let r=e.split(/\r?\n/);return n?r.filter(e=>(0,o.Wf)(e)&&!t.some(n=>e.includes(n))).map(o.Es):r}function u(e){var n,t,l,s,a,d;let{seat:u,role:m,publicCapture:p,identifiers:f}=e,b=null!=(n=null==u?void 0:u.landed)?n:null,h=null!=(t=null==u?void 0:u.blocked)?t:null,v=null!=(l=null==u?void 0:u.checklist)?l:null;return(0,r.jsxs)("article",{className:"min-w-0 space-y-5 rounded-2xl border bg-card p-5 shadow-sm","aria-label":"".concat(m," 자리"),children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("h2",{className:"text-3xl font-bold tracking-tight",children:m}),(0,r.jsx)("div",{className:"mt-3 min-h-12 break-words text-muted-foreground","aria-label":"지금 하는 일",children:(null==u?void 0:u.now)?c((0,o.q9)(u.now.text),p,f).map((e,n)=>(0,r.jsx)("p",{children:e},n)):"못 읽음"})]}),(0,r.jsxs)("section",{"aria-label":"오늘 착지",children:[(0,r.jsxs)("h3",{className:"font-semibold",children:["오늘 착지 ",(0,r.jsx)("strong",{className:"".concat(p?"text-5xl":"text-3xl"," ").concat(null===b?"text-muted-foreground":""),children:i(null!=(s=null==b?void 0:b.length)?s:null)})]}),b&&(0,r.jsx)("ul",{className:"mt-2 space-y-1",children:b.slice(-5).reverse().flatMap(e=>c(e.title,p,f).map((n,t)=>(0,r.jsx)("li",{className:"break-words",children:p?n:"#".concat(e.pr," \xb7 ").concat(n)},"".concat(e.pr,"-").concat(t))))})]}),(0,r.jsxs)("section",{"aria-label":"막힘",children:[(0,r.jsxs)("h3",{className:"font-semibold text-red-600 dark:text-red-400",children:["막힘 ",(0,r.jsx)("strong",{className:"".concat(p?"text-5xl":"text-3xl"," ").concat(null===h?"text-muted-foreground":""),children:i(null!=(a=null==h?void 0:h.length)?a:null)})]}),h&&(0,r.jsx)("ul",{className:"mt-2 space-y-1 text-red-600 dark:text-red-400",children:h.flatMap(e=>c(e.title,p,f).map((n,t)=>(0,r.jsx)("li",{className:"break-words",children:p?n:"".concat(e.id," \xb7 ").concat(n)},"".concat(e.id,"-").concat(t))))})]}),(0,r.jsxs)("p",{children:["대표 결정 대기 ",(0,r.jsx)("strong",{className:"".concat(p?"text-5xl":"text-3xl"," ").concat((null==u?void 0:u.pendingDecisions)==null?"text-muted-foreground":""),children:i(null!=(d=null==u?void 0:u.pendingDecisions)?d:null)})]}),(0,r.jsx)("section",{"aria-label":"칸 상태",className:"flex flex-wrap gap-2 border-t pt-3",children:v?(0,r.jsx)(r.Fragment,{children:["green","yellow","red","done"].map((e,n)=>(0,r.jsxs)("span",{"aria-label":"".concat(e," ").concat(v[e]),children:[["\uD83D\uDFE2","\uD83D\uDFE1","\uD83D\uDD34","✅"][n]," ",v[e]]},e))}):(0,r.jsx)("span",{className:"text-muted-foreground",children:"못 읽음"})}),(null==u?void 0:u.subSeats)&&u.subSeats.length>0&&(0,r.jsx)("ul",{"aria-label":"하위 자리",className:"space-y-1 border-t pt-3",children:u.subSeats.map(e=>{var n,t,l;let s="└ ".concat(e.id," ").concat(e.title," \xb7 열린 칸 ").concat(i(e.open)," \xb7 오늘 착지 ").concat(i(e.landed)," \xb7 막힘 ").concat(i(null!=(l=null==(n=e.blocked)?void 0:n.length)?l:null)),a=(null==(t=e.blocked)?void 0:t.length)?" \xb7 ".concat(e.blocked.map(e=>e.id).join(", ")):"",o=p?c(s,!0,f):[s],d=p?c(a,!0,f):[a];return o.map((n,t)=>(0,r.jsxs)("li",{className:"break-words",children:[n,d.join("")]},"".concat(e.id,"-").concat(t)))})})]})}function m(e){let{result:n,refreshedAt:t,publicCapture:l=!1}=e;if((null==n?void 0:n.kind)==="forbidden")return(0,r.jsx)("p",{children:"운영자만 볼 수 있습니다"});let s=(null==n?void 0:n.kind)==="ready"?n.data.seats:[],a=s.flatMap(e=>{var n,t,r;return[...(null!=(n=e.landed)?n:[]).flatMap(e=>[String(e.pr),...e.checklistId?[e.checklistId]:[]]),...(null!=(t=e.blocked)?t:[]).map(e=>e.id),...(null!=(r=e.subSeats)?r:[]).flatMap(e=>{var n;return(null!=(n=e.blocked)?n:[]).map(e=>e.id)})]});return(0,r.jsxs)("main",{className:"mx-auto w-full max-w-[1920px] space-y-6 p-4 text-foreground md:p-8 ".concat(l?"flex min-h-screen flex-col text-base":""),children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("p",{className:"text-muted-foreground",children:"운영 / 자리 현황"}),(0,r.jsx)("h1",{className:"text-3xl font-bold",children:"자리 현황"})]}),(0,r.jsxs)("section",{"aria-label":"오늘 합계",className:"flex flex-wrap items-center gap-x-8 gap-y-3 rounded-2xl border bg-card p-5",children:[["landed","blocked","pendingDecisions"].map(e=>{let t=(null==n?void 0:n.kind)!=="ready"||d.some(n=>{var t;let{seat:r}=n;return!s.find(e=>e.seat===r)||(null==(t=s.find(e=>e.seat===r))?void 0:t[e])===null})?"못 읽음":String(s.reduce((n,t)=>n+("pendingDecisions"===e?t.pendingDecisions:t[e].length),0));return(0,r.jsxs)("p",{children:["landed"===e?"오늘 착지":"blocked"===e?"막힘":"결정 대기"," ",(0,r.jsx)("strong",{className:"".concat(l?"text-5xl":"text-3xl").concat("못 읽음"===t?" text-muted-foreground":""),children:t})]},e)}),(0,r.jsxs)("p",{children:["마지막 갱신 ",(0,r.jsx)("time",{dateTime:null!=t?t:void 0,children:t?new Date(t).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"}):"못 읽음"})]})]}),null===n&&(0,r.jsx)("p",{role:"status",children:"자리 현황을 불러오는 중…"}),(null==n?void 0:n.kind)==="error"&&(0,r.jsxs)("p",{role:"alert",children:["자리 현황을 불러오지 못했습니다 (",n.status,")"]}),(null==n?void 0:n.kind)==="ready"&&(0,r.jsx)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 min-[1440px]:grid-cols-4",children:d.map(e=>{let{seat:n,role:t}=e;return(0,r.jsx)(u,{seat:s.find(e=>e.seat===n),role:t,publicCapture:l,identifiers:a},n)})}),l&&(0,r.jsx)("footer",{className:"mt-auto border-t pt-4 text-center font-semibold tracking-wide",children:"PUBLIC CAPTURE \xb7 가린 화면"})]})}function p(){let{client:e}=(0,s.Q)(),[n,t]=(0,l.useState)(null),[o,d]=(0,l.useState)(null),[i,c]=(0,l.useState)(null);return((0,l.useEffect)(()=>{c("public"===new URLSearchParams(window.location.search).get("capture"))},[]),(0,l.useEffect)(()=>{let n=!0,r=!1,l=!1,s=async()=>{if(!n||r||l||document.hidden)return;r=!0;let s=new Intl.DateTimeFormat("sv-SE",{timeZone:"Asia/Seoul"}).format(new Date),o=await (0,a.Nn)(e,s);r=!1,n&&(t(o),"forbidden"===o.kind&&(l=!0),"ready"===o.kind&&d(new Date().toISOString()))};t(null),d(null),s();let o=window.setInterval(()=>{s()},3e4),i=()=>{document.hidden||s()};return document.addEventListener("visibilitychange",i),()=>{n=!1,window.clearInterval(o),document.removeEventListener("visibilitychange",i)}},[e]),null===i)?null:(0,r.jsx)(m,{result:n,refreshedAt:o,publicCapture:i})}},32618:(e,n,t)=>{Promise.resolve().then(t.bind(t,18358))},36581:(e,n,t)=>{"use strict";t.d(n,{C:()=>i,DaemonProvider:()=>c,Q:()=>u});var r=t(54456),l=t(60500),s=t(86704),a=t(1355),o=t(39906),d=t(50733);let i=(0,l.createContext)(null);function c(e){let{children:n}=e,t={baseUrl:"",token:"",provider:""},[c,u]=(0,l.useState)(t),[m,p]=(0,l.useState)(""),[f]=(0,l.useState)(()=>new o.ki(t));(0,l.useEffect)(()=>{let e=(0,s.Fp)();u(e),f.updateConfig(e),p((0,a.oD)()),(0,d.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,l.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let n=(0,s.Fp)();f.updateConfig(n),u(n),(0,d.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!n.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(n=>n===e.newValue?n:((0,d.cY)("webterm.provider.daemon.session-cross-tab",{previous:n||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let b=e=>{u(n=>{let t={...n,...e};return(0,s.Qc)(e),f.updateConfig(t),(0,d.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),t})},h=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,d.cY)("webterm.provider.daemon.session-set",{sessionId:e})},v=(0,l.useMemo)(()=>({config:c,setConfig:b,client:f,sessionId:m,setSessionId:h}),[c,f,m]);return(0,r.jsx)(i.Provider,{value:v,children:n})}function u(){let e=(0,l.useContext)(i);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},96439:(e,n,t)=>{"use strict";function r(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function l(e){return"string"==typeof e}function s(e){return l(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function a(e){return r(e)&&l(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&l(e.summary)}function o(e){return r(e)&&l(e.runId)&&l(e.status)&&l(e.startedAt)&&(null===e.version||l(e.version))&&Array.isArray(e.path)&&e.path.every(l)&&Array.isArray(e.nodes)&&e.nodes.every(a)}function d(e){return r(e)&&l(e.id)&&l(e.title)&&l(e.status)&&(void 0===e.owner||l(e.owner))&&l(e.updatedAt)&&(void 0===e.evidence||l(e.evidence))}t.d(n,{HG:()=>h,Kh:()=>b,Nn:()=>p,oc:()=>f});let i=e=>Number.isInteger(e)&&e>=0;function c(e){return r(e)&&l(e.id)&&l(e.title)&&(null===e.open||i(e.open))&&(null===e.landed||i(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&l(e.id)&&l(e.title)))}function u(e){return r(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||l(e.role))&&(null===e.now||r(e.now)&&l(e.now.text)&&l(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>r(e)&&i(e.pr)&&l(e.title)&&l(e.at)&&(null===e.checklistId||l(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&l(e.id)&&l(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||i(e.pendingDecisions))&&(null===e.checklist||r(e.checklist)&&["green","yellow","red","done"].every(n=>i(e.checklist[n])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(c))}async function m(e,n,t){try{let r=await e.fetchResponse(n,{method:"GET"});if(403===r.status)return{kind:"forbidden"};if(!r.ok)return{kind:"error",status:r.status};let l=t(await r.json());return null===l?{kind:"error",status:r.status}:{kind:"ready",data:l}}catch(e){return{kind:"error",status:0}}}function p(e,n){return m(e,"/v1/ops/seats".concat(n?"?date=".concat(encodeURIComponent(n)):""),e=>r(e)&&l(e.date)&&Array.isArray(e.seats)&&e.seats.every(u)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function f(e,n){return m(e,"/v1/ops/release/runs".concat(n?"?version=".concat(encodeURIComponent(n)):""),e=>Array.isArray(e)&&e.every(o)?e:null)}function b(e,n,t){return m(e,"/v1/ops/release/runs/".concat(encodeURIComponent(n),"/nodes/").concat(encodeURIComponent(t),"/log"),e=>r(e)&&l(e.log)?{log:e.log}:null)}function h(e,n){return m(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(n)),e=>{var n,t,a,o;if(!(r(e)&&l(e.version)&&(void 0===e.codename||l(e.codename))&&Array.isArray(e.items)&&e.items.every(d)&&["green","yellow","red","done"].every(n=>void 0===e[n]||Number.isInteger(e[n])&&e[n]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(l))&&(void 0===e.byOwner||r(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let i={green:0,yellow:0,red:0,done:0};for(let n of e.items)n.status in i&&i[n.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:r(e.schedule)&&s(e.schedule.cutAt)&&(null===e.schedule.landBy||s(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(n=e.green)?n:i.green,yellow:null!=(t=e.yellow)?t:i.yellow,red:null!=(a=e.red)?a:i.red,done:null!=(o=e.done)?o:i.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}}},e=>{e.O(0,[9906,6390,3170,7358],()=>e(e.s=32618)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2624],{1355:(e,n,t)=>{"use strict";t.d(n,{Zr:()=>a,f6:()=>l,oD:()=>s});let r="elanous.daemon.sessionId";function l(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(r,e),e):localStorage.getItem(r)}();if(e)return e;let n=l();return localStorage.setItem(r,n),n}function a(){let e=l();return localStorage.setItem(r,e),e}},4951:(e,n,t)=>{"use strict";t.d(n,{Es:()=>a,Wf:()=>l,q9:()=>s});let r=/\u{1F451}|`[^`]+`|\b(?=[0-9a-f]*\d)(?=[0-9a-f]*[a-f])[0-9a-f]{7,40}\b|\/Users\/|\/(?:home|root)\/|\/\.ssh\/|~\/\.elanous|elt_|\$\s*[-+]?\d[\d,.]*|run-[0-9a-f]{8}\b|\b(?:test|mirror):|\b(?:account|remote)-\d+\b|\bmsb\d+\b|\.ts\.net\b|\bgcpvm\b|user|[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/iu;function l(e){return!r.test(e)}function s(e){return(e.replace(/^\s*\*\*\[[A-Za-z]{1,4}\]\*\*\s*/,"").replace(/^(?:\{\{TS\}\}|\d{4}-\d{2}-\d{2}\s+\d{1,2}:\d{2}(?::\d{2})?\s*(?:KST)?)\s*/,"").replace(/^→\s*(?:(?:[A-Z]{2,4}|전원|전체)(?=[\s·,(]|$)[\s·,]*)+/u,"").replace(/^—\s*/,"").replace(/^(?:보고|요청|정정|결정|사고|안내)\s*·\s*/,"").trim()||e.trim()).replace(/\*\*/g,"")}function a(e){return e.replace(/#\d{4,6}\b/g,"PR")}},18358:(e,n,t)=>{"use strict";t.d(n,{SeatBoardView:()=>p});var r=t(54456),l=t(60500),s=t(36581),a=t(96439),o=t(4951);let d=[{seat:"OP",role:"COO"},{seat:"MK",role:"CMO"},{seat:"TC",role:"CTO"},{seat:"UX",role:"CXO"}];function i(e){return null===e?"못 읽음":String(e)}function c(e,n,t){let r=e.split(/\r?\n/);return n?r.filter(e=>(0,o.Wf)(e)&&!t.some(n=>e.includes(n))).map(o.Es):r}function u(e){var n,t,l,s,a,d;let{seat:u,role:m,publicCapture:p,identifiers:f}=e,b=null!=(n=null==u?void 0:u.landed)?n:null,h=null!=(t=null==u?void 0:u.blocked)?t:null,v=null!=(l=null==u?void 0:u.checklist)?l:null;return(0,r.jsxs)("article",{className:"min-w-0 space-y-5 rounded-2xl border bg-card p-5 shadow-sm","aria-label":"".concat(m," 자리"),children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("h2",{className:"text-3xl font-bold tracking-tight",children:m}),(0,r.jsx)("div",{className:"mt-3 min-h-12 break-words text-muted-foreground","aria-label":"지금 하는 일",children:(null==u?void 0:u.now)?c((0,o.q9)(u.now.text),p,f).map((e,n)=>(0,r.jsx)("p",{children:e},n)):"못 읽음"})]}),(0,r.jsxs)("section",{"aria-label":"오늘 착지",children:[(0,r.jsxs)("h3",{className:"font-semibold",children:["오늘 착지 ",(0,r.jsx)("strong",{className:"".concat(p?"text-5xl":"text-3xl"," ").concat(null===b?"text-muted-foreground":""),children:i(null!=(s=null==b?void 0:b.length)?s:null)})]}),b&&(0,r.jsx)("ul",{className:"mt-2 space-y-1",children:b.slice(-5).reverse().flatMap(e=>c(e.title,p,f).map((n,t)=>(0,r.jsx)("li",{className:"break-words",children:p?n:"#".concat(e.pr," \xb7 ").concat(n)},"".concat(e.pr,"-").concat(t))))})]}),(0,r.jsxs)("section",{"aria-label":"막힘",children:[(0,r.jsxs)("h3",{className:"font-semibold text-red-600 dark:text-red-400",children:["막힘 ",(0,r.jsx)("strong",{className:"".concat(p?"text-5xl":"text-3xl"," ").concat(null===h?"text-muted-foreground":""),children:i(null!=(a=null==h?void 0:h.length)?a:null)})]}),h&&(0,r.jsx)("ul",{className:"mt-2 space-y-1 text-red-600 dark:text-red-400",children:h.flatMap(e=>c(e.title,p,f).map((n,t)=>(0,r.jsx)("li",{className:"break-words",children:p?n:"".concat(e.id," \xb7 ").concat(n)},"".concat(e.id,"-").concat(t))))})]}),(0,r.jsxs)("p",{children:["대표 결정 대기 ",(0,r.jsx)("strong",{className:"".concat(p?"text-5xl":"text-3xl"," ").concat((null==u?void 0:u.pendingDecisions)==null?"text-muted-foreground":""),children:i(null!=(d=null==u?void 0:u.pendingDecisions)?d:null)})]}),(0,r.jsx)("section",{"aria-label":"칸 상태",className:"flex flex-wrap gap-2 border-t pt-3",children:v?(0,r.jsx)(r.Fragment,{children:["green","yellow","red","done"].map((e,n)=>(0,r.jsxs)("span",{"aria-label":"".concat(e," ").concat(v[e]),children:[["\uD83D\uDFE2","\uD83D\uDFE1","\uD83D\uDD34","✅"][n]," ",v[e]]},e))}):(0,r.jsx)("span",{className:"text-muted-foreground",children:"못 읽음"})}),(null==u?void 0:u.subSeats)&&u.subSeats.length>0&&(0,r.jsx)("ul",{"aria-label":"하위 자리",className:"space-y-1 border-t pt-3",children:u.subSeats.map(e=>{var n,t,l;let s="└ ".concat(e.id," ").concat(e.title," \xb7 열린 칸 ").concat(i(e.open)," \xb7 오늘 착지 ").concat(i(e.landed)," \xb7 막힘 ").concat(i(null!=(l=null==(n=e.blocked)?void 0:n.length)?l:null)),a=(null==(t=e.blocked)?void 0:t.length)?" \xb7 ".concat(e.blocked.map(e=>e.id).join(", ")):"",o=p?c(s,!0,f):[s],d=p?c(a,!0,f):[a];return o.map((n,t)=>(0,r.jsxs)("li",{className:"break-words",children:[n,d.join("")]},"".concat(e.id,"-").concat(t)))})})]})}function m(e){let{result:n,refreshedAt:t,publicCapture:l=!1}=e;if((null==n?void 0:n.kind)==="forbidden")return(0,r.jsx)("p",{children:"운영자만 볼 수 있습니다"});let s=(null==n?void 0:n.kind)==="ready"?n.data.seats:[],a=s.flatMap(e=>{var n,t,r;return[...(null!=(n=e.landed)?n:[]).flatMap(e=>[String(e.pr),...e.checklistId?[e.checklistId]:[]]),...(null!=(t=e.blocked)?t:[]).map(e=>e.id),...(null!=(r=e.subSeats)?r:[]).flatMap(e=>{var n;return(null!=(n=e.blocked)?n:[]).map(e=>e.id)})]});return(0,r.jsxs)("main",{className:"mx-auto w-full max-w-[1920px] space-y-6 p-4 text-foreground md:p-8 ".concat(l?"flex min-h-screen flex-col text-base":""),children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("p",{className:"text-muted-foreground",children:"운영 / 자리 현황"}),(0,r.jsx)("h1",{className:"text-3xl font-bold",children:"자리 현황"})]}),(0,r.jsxs)("section",{"aria-label":"오늘 합계",className:"flex flex-wrap items-center gap-x-8 gap-y-3 rounded-2xl border bg-card p-5",children:[["landed","blocked","pendingDecisions"].map(e=>{let t=(null==n?void 0:n.kind)!=="ready"||d.some(n=>{var t;let{seat:r}=n;return!s.find(e=>e.seat===r)||(null==(t=s.find(e=>e.seat===r))?void 0:t[e])===null})?"못 읽음":String(s.reduce((n,t)=>n+("pendingDecisions"===e?t.pendingDecisions:t[e].length),0));return(0,r.jsxs)("p",{children:["landed"===e?"오늘 착지":"blocked"===e?"막힘":"결정 대기"," ",(0,r.jsx)("strong",{className:"".concat(l?"text-5xl":"text-3xl").concat("못 읽음"===t?" text-muted-foreground":""),children:t})]},e)}),(0,r.jsxs)("p",{children:["마지막 갱신 ",(0,r.jsx)("time",{dateTime:null!=t?t:void 0,children:t?new Date(t).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"}):"못 읽음"})]})]}),null===n&&(0,r.jsx)("p",{role:"status",children:"자리 현황을 불러오는 중…"}),(null==n?void 0:n.kind)==="error"&&(0,r.jsxs)("p",{role:"alert",children:["자리 현황을 불러오지 못했습니다 (",n.status,")"]}),(null==n?void 0:n.kind)==="ready"&&(0,r.jsx)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 min-[1440px]:grid-cols-4",children:d.map(e=>{let{seat:n,role:t}=e;return(0,r.jsx)(u,{seat:s.find(e=>e.seat===n),role:t,publicCapture:l,identifiers:a},n)})}),l&&(0,r.jsx)("footer",{className:"mt-auto border-t pt-4 text-center font-semibold tracking-wide",children:"PUBLIC CAPTURE \xb7 가린 화면"})]})}function p(){let{client:e}=(0,s.Q)(),[n,t]=(0,l.useState)(null),[o,d]=(0,l.useState)(null),[i,c]=(0,l.useState)(null);return((0,l.useEffect)(()=>{c("public"===new URLSearchParams(window.location.search).get("capture"))},[]),(0,l.useEffect)(()=>{let n=!0,r=!1,l=!1,s=async()=>{if(!n||r||l||document.hidden)return;r=!0;let s=new Intl.DateTimeFormat("sv-SE",{timeZone:"Asia/Seoul"}).format(new Date),o=await (0,a.Nn)(e,s);r=!1,n&&(t(o),"forbidden"===o.kind&&(l=!0),"ready"===o.kind&&d(new Date().toISOString()))};t(null),d(null),s();let o=window.setInterval(()=>{s()},3e4),i=()=>{document.hidden||s()};return document.addEventListener("visibilitychange",i),()=>{n=!1,window.clearInterval(o),document.removeEventListener("visibilitychange",i)}},[e]),null===i)?null:(0,r.jsx)(m,{result:n,refreshedAt:o,publicCapture:i})}},36581:(e,n,t)=>{"use strict";t.d(n,{C:()=>i,DaemonProvider:()=>c,Q:()=>u});var r=t(54456),l=t(60500),s=t(86704),a=t(1355),o=t(39906),d=t(50733);let i=(0,l.createContext)(null);function c(e){let{children:n}=e,t={baseUrl:"",token:"",provider:""},[c,u]=(0,l.useState)(t),[m,p]=(0,l.useState)(""),[f]=(0,l.useState)(()=>new o.ki(t));(0,l.useEffect)(()=>{let e=(0,s.Fp)();u(e),f.updateConfig(e),p((0,a.oD)()),(0,d.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,l.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let n=(0,s.Fp)();f.updateConfig(n),u(n),(0,d.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!n.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(n=>n===e.newValue?n:((0,d.cY)("webterm.provider.daemon.session-cross-tab",{previous:n||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let b=e=>{u(n=>{let t={...n,...e};return(0,s.Qc)(e),f.updateConfig(t),(0,d.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),t})},h=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,d.cY)("webterm.provider.daemon.session-set",{sessionId:e})},v=(0,l.useMemo)(()=>({config:c,setConfig:b,client:f,sessionId:m,setSessionId:h}),[c,f,m]);return(0,r.jsx)(i.Provider,{value:v,children:n})}function u(){let e=(0,l.useContext)(i);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},96439:(e,n,t)=>{"use strict";function r(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function l(e){return"string"==typeof e}function s(e){return l(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function a(e){return r(e)&&l(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&l(e.summary)}function o(e){return r(e)&&l(e.runId)&&l(e.status)&&l(e.startedAt)&&(null===e.version||l(e.version))&&Array.isArray(e.path)&&e.path.every(l)&&Array.isArray(e.nodes)&&e.nodes.every(a)}function d(e){return r(e)&&l(e.id)&&l(e.title)&&l(e.status)&&(void 0===e.owner||l(e.owner))&&l(e.updatedAt)&&(void 0===e.evidence||l(e.evidence))}t.d(n,{HG:()=>h,Kh:()=>b,Nn:()=>p,oc:()=>f});let i=e=>Number.isInteger(e)&&e>=0;function c(e){return r(e)&&l(e.id)&&l(e.title)&&(null===e.open||i(e.open))&&(null===e.landed||i(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&l(e.id)&&l(e.title)))}function u(e){return r(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||l(e.role))&&(null===e.now||r(e.now)&&l(e.now.text)&&l(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>r(e)&&i(e.pr)&&l(e.title)&&l(e.at)&&(null===e.checklistId||l(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>r(e)&&l(e.id)&&l(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||i(e.pendingDecisions))&&(null===e.checklist||r(e.checklist)&&["green","yellow","red","done"].every(n=>i(e.checklist[n])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(c))}async function m(e,n,t){try{let r=await e.fetchResponse(n,{method:"GET"});if(403===r.status)return{kind:"forbidden"};if(!r.ok)return{kind:"error",status:r.status};let l=t(await r.json());return null===l?{kind:"error",status:r.status}:{kind:"ready",data:l}}catch(e){return{kind:"error",status:0}}}function p(e,n){return m(e,"/v1/ops/seats".concat(n?"?date=".concat(encodeURIComponent(n)):""),e=>r(e)&&l(e.date)&&Array.isArray(e.seats)&&e.seats.every(u)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function f(e,n){return m(e,"/v1/ops/release/runs".concat(n?"?version=".concat(encodeURIComponent(n)):""),e=>Array.isArray(e)&&e.every(o)?e:null)}function b(e,n,t){return m(e,"/v1/ops/release/runs/".concat(encodeURIComponent(n),"/nodes/").concat(encodeURIComponent(t),"/log"),e=>r(e)&&l(e.log)?{log:e.log}:null)}function h(e,n){return m(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(n)),e=>{var n,t,a,o;if(!(r(e)&&l(e.version)&&(void 0===e.codename||l(e.codename))&&Array.isArray(e.items)&&e.items.every(d)&&["green","yellow","red","done"].every(n=>void 0===e[n]||Number.isInteger(e[n])&&e[n]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(l))&&(void 0===e.byOwner||r(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let i={green:0,yellow:0,red:0,done:0};for(let n of e.items)n.status in i&&i[n.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:r(e.schedule)&&s(e.schedule.cutAt)&&(null===e.schedule.landBy||s(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(n=e.green)?n:i.green,yellow:null!=(t=e.yellow)?t:i.yellow,red:null!=(a=e.red)?a:i.red,done:null!=(o=e.done)?o:i.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}},97084:(e,n,t)=>{Promise.resolve().then(t.bind(t,18358))}},e=>{e.O(0,[9906,6390,3170,7358],()=>e(e.s=97084)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4635],{1355:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>a,f6:()=>s,oD:()=>o});let n="elanous.daemon.sessionId";function s(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function o(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=s();return localStorage.setItem(n,t),t}function a(){let e=s();return localStorage.setItem(n,e),e}},36581:(e,t,r)=>{"use strict";r.d(t,{C:()=>c,DaemonProvider:()=>d,Q:()=>u});var n=r(54456),s=r(60500),o=r(86704),a=r(1355),l=r(39906),i=r(50733);let c=(0,s.createContext)(null);function d(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[d,u]=(0,s.useState)(r),[m,f]=(0,s.useState)(""),[p]=(0,s.useState)(()=>new l.ki(r));(0,s.useEffect)(()=>{let e=(0,o.Fp)();u(e),p.updateConfig(e),f((0,a.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[p]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,o.Fp)();p.updateConfig(t),u(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&f(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[p]);let x=e=>{u(t=>{let r={...t,...e};return(0,o.Qc)(e),p.updateConfig(r),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},g=e=>{f(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},h=(0,s.useMemo)(()=>({config:d,setConfig:x,client:p,sessionId:m,setSessionId:g}),[d,p,m]);return(0,n.jsx)(c.Provider,{value:h,children:t})}function u(){let e=(0,s.useContext)(c);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4635],{1355:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>a,f6:()=>s,oD:()=>o});let n="elanous.daemon.sessionId";function s(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function o(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=s();return localStorage.setItem(n,t),t}function a(){let e=s();return localStorage.setItem(n,e),e}},36581:(e,t,r)=>{"use strict";r.d(t,{C:()=>c,DaemonProvider:()=>d,Q:()=>u});var n=r(54456),s=r(60500),o=r(86704),a=r(1355),l=r(39906),i=r(50733);let c=(0,s.createContext)(null);function d(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[d,u]=(0,s.useState)(r),[m,f]=(0,s.useState)(""),[p]=(0,s.useState)(()=>new l.ki(r));(0,s.useEffect)(()=>{let e=(0,o.Fp)();u(e),p.updateConfig(e),f((0,a.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[p]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,o.Fp)();p.updateConfig(t),u(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&f(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[p]);let x=e=>{u(t=>{let r={...t,...e};return(0,o.Qc)(e),p.updateConfig(r),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},g=e=>{f(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},h=(0,s.useMemo)(()=>({config:d,setConfig:x,client:p,sessionId:m,setSessionId:g}),[d,p,m]);return(0,n.jsx)(c.Provider,{value:h,children:t})}function u(){let e=(0,s.useContext)(c);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},77782:(e,t,r)=>{Promise.resolve().then(r.bind(r,81851))},81851:(e,t,r)=>{"use strict";r.d(t,{OutputsList:()=>i});var n=r(54456),s=r(60500),o=r(36581);let a={OP:"COO",MK:"CMO",TC:"CTO",UX:"CXO"},l=new Intl.DateTimeFormat("ko-KR",{timeZone:"Asia/Seoul",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});function i(){let{client:e}=(0,o.Q)(),[t,r]=(0,s.useState)([]),[a,l]=(0,s.useState)("all"),[i,d]=(0,s.useState)("loading");return(0,s.useEffect)(()=>{let t=!0;return(function(e){let{limit:t,source:r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=new URLSearchParams;void 0!==t&&n.set("limit",String(t)),void 0!==r&&n.set("source",r);let s=n.toString();return e.fetchJson("/v1/outputs".concat(s?"?".concat(s):""))})(e).then(e=>{let{outputs:n}=e;t&&(r(n),d("ready"))}).catch(()=>{t&&d("error")}),()=>{t=!1}},[e]),(0,n.jsx)(c,{outputs:t,selected:a,onSelect:l,status:i})}function c(e){let{outputs:t,selected:r,onSelect:s,status:o}=e,i=Array.from(new Map(t.map(e=>[e.kind,e.kindLabel])).entries()),c="all"===r?t:t.filter(e=>e.kind===r);return(0,n.jsxs)("main",{className:"mx-auto w-full max-w-3xl space-y-8 px-5 py-10 sm:py-16",children:[(0,n.jsxs)("header",{className:"space-y-2",children:[(0,n.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"산출물"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"엘라누스가 만든 문서\xb7슬라이드\xb7보고서\xb7영상을 한곳에서 봅니다."})]}),"loading"===o&&(0,n.jsx)("p",{role:"status",className:"text-sm text-muted-foreground",children:"산출물을 불러오는 중…"}),"error"===o&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:"산출물 목록을 읽지 못했습니다"}),"ready"===o&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{role:"group","aria-label":"종류 고르기",className:"flex flex-wrap gap-2",children:[["all","전부"],...i].map(e=>{let[o,a]=e;return(0,n.jsxs)("button",{type:"button",onClick:()=>s(o),"aria-pressed":r===o,className:"rounded-full border px-3 py-1.5 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ".concat(r===o?"border-primary bg-primary text-primary-foreground":"border-border bg-card text-foreground hover:bg-muted"),children:[a," ","all"===o?t.length:t.filter(e=>e.kind===o).length]},o)})}),0===t.length?(0,n.jsx)("p",{className:"rounded-xl border border-dashed border-border px-5 py-10 text-center text-sm text-muted-foreground",children:"아직 만든 산출물이 없습니다 — 일을 맡기면 여기에 쌓입니다"}):(0,n.jsx)("ul",{className:"space-y-3","aria-label":"산출물 목록",children:c.map((e,t)=>{var r;return(0,n.jsxs)("li",{className:"rounded-xl border border-border bg-card p-5 shadow-sm",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs text-muted-foreground",children:[(0,n.jsx)("span",{className:"rounded-md bg-muted px-2 py-1 font-medium text-foreground",children:e.kindLabel}),e.seat&&(0,n.jsx)("span",{children:null!=(r=a[e.seat])?r:e.seat}),(0,n.jsx)("time",{dateTime:e.at,children:function(e){let t=Object.fromEntries(l.formatToParts(new Date(e)).map(e=>{let{type:t,value:r}=e;return[t,r]}));return"".concat(t.month,"월 ").concat(t.day,"일 ").concat(t.hour,":").concat(t.minute)}(e.at)}),(0,n.jsx)("span",{children:"exec"===e.source?"맡긴 일":"현장"})]}),(0,n.jsx)("h2",{className:"mt-3 font-semibold leading-snug",children:e.title}),e.url?(0,n.jsx)("a",{href:e.url,target:"_blank",rel:"noopener",className:"mt-3 inline-block text-sm font-medium text-primary underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:"열기"}):e.fileName&&(0,n.jsx)("p",{className:"mt-3 text-sm text-muted-foreground",children:e.fileName})]},"".concat(e.at,"-").concat(e.kind,"-").concat(t))})})]})]})}}},e=>{e.O(0,[9906,6390,3170,7358],()=>e(e.s=77782)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8974],{19910:(e,s,_)=>{Promise.resolve().then(_.bind(_,47193))}},e=>{e.O(0,[7777,9538,6048,3454,2176,3638,6390,3170,7358],()=>e(e.s=19910)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4538],{1355:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>i,f6:()=>s,oD:()=>a});let n="elanous.daemon.sessionId";function s(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=s();return localStorage.setItem(n,t),t}function i(){let e=s();return localStorage.setItem(n,e),e}},10080:(e,t,r)=>{"use strict";r.d(t,{$:()=>d});var n=r(54456),s=r(80247),a=r(13680),i=r(74591);let o=(0,a.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function d(e){let{className:t,variant:r="default",size:a="default",...d}=e;return(0,n.jsx)(s.$,{"data-slot":"button",className:(0,i.cn)(o({variant:r,size:a,className:t})),...d})}},18494:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(60500);let s=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return t.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim()},a=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,r)=>r?r.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var i={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,n.createContext)({}),d=(0,n.forwardRef)((e,t)=>{var r,a,d;let{color:l,size:c,strokeWidth:u,absoluteStrokeWidth:m,className:p="",children:g,iconNode:f,...x}=e,{size:h=24,strokeWidth:v=2,absoluteStrokeWidth:b=!1,color:w="currentColor",className:y=""}=null!=(r=(0,n.useContext)(o))?r:{},k=(null!=m?m:b)?24*Number(null!=u?u:v)/Number(null!=c?c:h):null!=u?u:v;return(0,n.createElement)("svg",{ref:t,...i,width:null!=(a=null!=c?c:h)?a:i.width,height:null!=(d=null!=c?c:h)?d:i.height,stroke:null!=l?l:w,strokeWidth:k,className:s("lucide",y,p),...!g&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(x)&&{"aria-hidden":"true"},...x},[...f.map(e=>{let[t,r]=e;return(0,n.createElement)(t,r)}),...Array.isArray(g)?g:[g]])}),l=(e,t)=>{let r=(0,n.forwardRef)((r,i)=>{let{className:o,...l}=r;return(0,n.createElement)(d,{ref:i,iconNode:t,className:s("lucide-".concat(a(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),o),...l})});return r.displayName=a(e),r}},21569:(e,t,r)=>{"use strict";r.d(t,{K:()=>n}),r(60500);let n={emit:async function(e){return{ok:!1,reason:"not-configured"}}}},30360:(e,t,r)=>{Promise.resolve().then(r.bind(r,50254)),Promise.resolve().then(r.bind(r,93057))},36581:(e,t,r)=>{"use strict";r.d(t,{C:()=>l,DaemonProvider:()=>c,Q:()=>u});var n=r(54456),s=r(60500),a=r(86704),i=r(1355),o=r(39906),d=r(50733);let l=(0,s.createContext)(null);function c(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[c,u]=(0,s.useState)(r),[m,p]=(0,s.useState)(""),[g]=(0,s.useState)(()=>new o.ki(r));(0,s.useEffect)(()=>{let e=(0,a.Fp)();u(e),g.updateConfig(e),p((0,i.oD)()),(0,d.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[g]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();g.updateConfig(t),u(t),(0,d.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,d.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[g]);let f=e=>{u(t=>{let r={...t,...e};return(0,a.Qc)(e),g.updateConfig(r),(0,d.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},x=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,d.cY)("webterm.provider.daemon.session-set",{sessionId:e})},h=(0,s.useMemo)(()=>({config:c,setConfig:f,client:g,sessionId:m,setSessionId:x}),[c,g,m]);return(0,n.jsx)(l.Provider,{value:h,children:t})}function u(){let e=(0,s.useContext)(l);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},39681:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});let n=(0,r(18494).A)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]])},50254:(e,t,r)=>{"use strict";r.d(t,{DailyReflectionPanel:()=>c});var n=r(54456),s=r(60500),a=r(39681),i=r(36581),o=r(10080);function d(e){let{snapshot:t}=e,r=0===t.notesSaved&&0===t.ocrRuns&&0===t.sessionsToday;return(0,n.jsxs)("article",{"data-testid":"daily-reflection","data-date":t.date,className:"flex flex-col gap-4 rounded-2xl border border-border bg-card p-5 shadow-sm",children:[(0,n.jsxs)("header",{className:"flex items-baseline justify-between gap-2",children:[(0,n.jsx)("h2",{className:"font-heading text-base font-medium","data-testid":"reflection-date",children:t.date}),(0,n.jsxs)("p",{className:"text-xs text-muted-foreground","data-testid":"reflection-generated-at",children:["생성 ",function(e){try{return new Date(e).toLocaleTimeString("ko-KR",{hour:"2-digit",minute:"2-digit"})}catch(t){return e}}(t.generatedAt)]})]}),r?(0,n.jsx)("p",{"data-testid":"reflection-empty",className:"rounded-md bg-muted/50 px-3 py-4 text-center text-sm text-muted-foreground",children:"오늘 기록된 활동이 없습니다."}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("dl",{className:"grid grid-cols-3 gap-3 text-sm",children:[(0,n.jsxs)("div",{className:"rounded-md bg-muted/30 px-3 py-2 text-center",children:[(0,n.jsx)("dt",{className:"text-[10px] uppercase tracking-wide text-muted-foreground",children:"노트 저장"}),(0,n.jsx)("dd",{className:"font-mono text-lg","data-testid":"reflection-notes-saved",children:t.notesSaved})]}),(0,n.jsxs)("div",{className:"rounded-md bg-muted/30 px-3 py-2 text-center",children:[(0,n.jsx)("dt",{className:"text-[10px] uppercase tracking-wide text-muted-foreground",children:"OCR 실행"}),(0,n.jsx)("dd",{className:"font-mono text-lg","data-testid":"reflection-ocr-runs",children:t.ocrRuns})]}),(0,n.jsxs)("div",{className:"rounded-md bg-muted/30 px-3 py-2 text-center",children:[(0,n.jsx)("dt",{className:"text-[10px] uppercase tracking-wide text-muted-foreground",children:"세션"}),(0,n.jsx)("dd",{className:"font-mono text-lg","data-testid":"reflection-sessions-today",children:t.sessionsToday})]})]}),t.topSessions.length>0&&(0,n.jsxs)("section",{children:[(0,n.jsxs)("h3",{className:"mb-2 text-xs font-medium text-muted-foreground",children:["활성 세션 Top ",t.topSessions.length]}),(0,n.jsx)("ul",{"data-testid":"reflection-top-sessions",className:"flex flex-col gap-2 text-xs",children:t.topSessions.map(e=>(0,n.jsxs)("li",{"data-testid":"reflection-session-row","data-session-id":e.id,className:"rounded-md border border-border px-3 py-2",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,n.jsx)("code",{className:"truncate font-mono text-[11px]",children:e.id}),(0,n.jsxs)("span",{className:"shrink-0 text-muted-foreground",children:["msgs ",e.msgCount]})]}),e.lastMsgPreview&&(0,n.jsx)("p",{className:"mt-1 line-clamp-2 text-muted-foreground",children:e.lastMsgPreview})]},e.id))})]})]})]})}let l={date:"",notesSaved:0,ocrRuns:0,sessionsToday:0,topSessions:[],generatedAt:""};function c(){let{config:e}=(0,i.Q)(),[t,r]=(0,s.useState)(l),[c,u]=(0,s.useState)(!1),[m,p]=(0,s.useState)(null),g=(0,s.useCallback)(async()=>{if(e.baseUrl){u(!0);try{let t=await fetch("".concat(e.baseUrl,"/v1/reflection/today"),{...e.token?{headers:{authorization:"Bearer ".concat(e.token)}}:{}});if(!t.ok)return void p("HTTP ".concat(t.status));let n=await t.json();r(n.snapshot),p(null)}catch(e){p(String(e instanceof Error?e.message:e))}finally{u(!1)}}},[e.baseUrl,e.token]);return(0,s.useEffect)(()=>{g();let e=setInterval(()=>{g()},3e5);return()=>clearInterval(e)},[g]),(0,n.jsxs)("section",{"data-testid":"daily-reflection-panel",className:"mx-auto flex max-w-md flex-col gap-3 p-4",children:[(0,n.jsxs)("header",{className:"flex items-start justify-between gap-2",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"font-heading text-lg font-medium",children:"오늘의 회고"}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"오늘 elanous 활동 요약 \xb7 5분마다 자동 갱신"})]}),(0,n.jsx)(o.$,{type:"button",variant:"ghost",size:"sm","aria-label":"refresh reflection",onClick:()=>void g(),disabled:c,children:(0,n.jsx)(a.A,{className:c?"h-3.5 w-3.5 animate-spin":"h-3.5 w-3.5"})})]}),m&&(0,n.jsxs)("p",{"data-testid":"reflection-panel-error",className:"rounded bg-destructive/10 px-2 py-1 text-xs text-destructive",children:["fetch 실패: ",m]}),(0,n.jsx)(d,{snapshot:t})]})}},74591:(e,t,r)=>{"use strict";r.d(t,{cn:()=>a});var n=r(49454),s=r(79946);function a(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,s.QP)((0,n.$)(t))}},93057:(e,t,r)=>{"use strict";r.d(t,{ReflectionRouteIntentBeacon:()=>a});var n=r(60500),s=r(21569);function a(){return(0,n.useEffect)(()=>{let e=function(){try{let e=new URLSearchParams(window.location.search);if("push"===e.get("from"))return"push";let t=document.referrer||"";if(t&&t.startsWith(window.location.origin))return"manual";return"unknown"}catch(e){return"unknown"}}();s.K.emit({surface:"pwa",intent:{layer:"navigation",kind:"pwa.navigation.reflection_opened",target:{kind:"route",id:"/reflection",label:"Reflection"},value:{source:e}},surface_state:{route:"/reflection"}})},[]),null}}},e=>{e.O(0,[7777,3278,9906,6390,3170,7358],()=>e(e.s=30360)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7480],{1355:(e,t,n)=>{"use strict";n.d(t,{Zr:()=>l,f6:()=>a,oD:()=>s});let r="elanous.daemon.sessionId";function a(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function 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=a();return localStorage.setItem(r,t),t}function l(){let e=a();return localStorage.setItem(r,e),e}},10080:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(54456),a=n(80247),s=n(13680),l=n(74591);let o=(0,s.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function i(e){let{className:t,variant:n="default",size:s="default",...i}=e;return(0,r.jsx)(a.$,{"data-slot":"button",className:(0,l.cn)(o({variant:n,size:s,className:t})),...i})}},26486:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>h});var r=n(54456),a=n(60500),s=n(36581),l=n(10080),o=n(71829),i=n(83750);function d(e){var t,n,r,a,s,l,o,i,d,u,c,m,x,g,p,f;return{id:e.id,name:e.name,cron:e.cron,intervalMs:e.intervalMs,category:null!=(l=e.category)?l:e.source,domain:null!=(o=e.domain)?o:null,source:e.source,enabled:"off"!==e.state,runVia:null!=(i=e.runVia)?i:e.source,lastRun:null!=(d=null==(t=e.lastRun)?void 0:t.at)?d:null,lastStatus:null!=(u=null==(n=e.lastRun)?void 0:n.status)?u:null,lastExit:null!=(m=null!=(c=null==(r=e.lastRun)?void 0:r.exit)?c:e.lastExit)?m:null,lastDurationMs:null!=(x=null==(a=e.lastRun)?void 0:a.durationMs)?x:null,lastVia:null!=(g=null==(s=e.lastRun)?void 0:s.via)?g:null,stale:"stale"===e.state,command:null!=(p=e.command)?p:"",note:null!=(f=e.note)?f:null,state:e.state,next:e.next,flags:e.flags}}async function u(e){let t="Unknown error";for(let n of["/v1/schedules?includeOff=1","/v1/dashboard/schedules"])try{let r=function(e){if(!e||"object"!=typeof e)return null;if(Array.isArray(e.schedules))return function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Date().toISOString(),n=e.map(d),r={},a={},s={};for(let e of n){var l,o,i;r[e.category]=(null!=(l=r[e.category])?l:0)+1,a[e.source]=(null!=(o=a[e.source])?o:0)+1,e.state&&(s[e.state]=(null!=(i=s[e.state])?i:0)+1)}return{total:n.length,adopted:n.filter(e=>"elanous"===e.runVia).length,byCategory:r,bySource:a,byState:s,jobs:n,generatedAt:t}}(e.schedules);let t=e.schedules;return t&&Array.isArray(t.jobs)?t:null}(await e(n));if(r)return{kind:"ready",data:r};t="unexpected response from ".concat(n)}catch(e){t=e instanceof Error&&e.message?e.message:"string"==typeof e&&e?e:"Unknown error"}return{kind:"error",reason:t}}let c={live:{label:"켜짐",tone:"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30",tip:"실제 발화 경로(crontab\xb7launchd\xb7trigger)에 올라 있다"},firing:{label:"발화 중",tone:"bg-sky-500/15 text-sky-200 ring-sky-500/30",tip:"발화 경로에 올라 있고 최근 실행 기록이 있다"},stale:{label:"유실 의심",tone:"bg-amber-500/15 text-amber-300 ring-amber-500/30",tip:"예정 시각이 지났는데 실행 기록이 없다"},off:{label:"꺼짐",tone:"bg-muted text-muted-foreground ring-border",tip:"어느 발화 경로에도 없다(레지스트리에만 있다)"}},m={elanous:"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30",daemon:"bg-sky-500/15 text-sky-200 ring-sky-500/30",crontab:"bg-muted text-muted-foreground ring-border"},x={finance:"Finance",elanous:"elanous (core)",general:"General"};function g(e){let{label:t,onClick:n,disabled:a,danger:s}=e;return(0,r.jsx)("button",{type:"button",onClick:n,disabled:a,className:["rounded-md px-1.5 py-0.5 text-[10px] ring-1 transition-colors disabled:opacity-40",s?"text-red-300 ring-red-500/30 hover:bg-red-500/15":"text-muted-foreground ring-border hover:bg-accent/40 hover:text-foreground"].join(" "),children:t})}function p(e){var t,n,a,s,l,o,i;let{job:d,onAction:u,acting:x}=e,p="daemon"===d.runVia||d.id.includes(":"),f=d.state?c[d.state]:null,b=function(e){if(!e)return null;let t=Date.parse(e);if(Number.isNaN(t))return null;let n=Math.round((t-Date.now())/6e4);if(n<1)return"next <1m";if(n<60)return"next ".concat(n,"m");let r=Math.floor(n/60);return r<24?"next ".concat(r,"h"):"next ".concat(Math.floor(r/24),"d")}(null==(t=d.next)?void 0:t[0]),h=d.note||function(e){if(!e)return"—";let t=e.split(/\s*>>?\s*/)[0].trim(),n=t.match(/(\S+\.(?:ts|py|sh|js|mjs))\b/);if(n){let e=n[1],t=e.indexOf("/scripts/");if(t>=0)return e.slice(t+1);let r=e.lastIndexOf("/");return r>=0?e.slice(r+1):e}return t.replace(/^cd\s+\S+\s*&&\s*/,"").trim().slice(0,60)||"—"}(d.command),v=d.note?"".concat(d.note,"\n\n").concat(d.command):d.command;return(0,r.jsxs)("div",{className:["flex flex-col gap-1 rounded-xl border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between",d.enabled?"":"opacity-50"].join(" "),title:v,children:[(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"truncate text-sm font-medium",children:d.name}),f?(0,r.jsx)("span",{className:"shrink-0 whitespace-nowrap rounded-full px-1.5 py-0.5 text-[10px] ring-1 ".concat(f.tone),title:f.tip,"data-schedule-state":d.state,children:f.label}):!d.enabled&&(0,r.jsx)("span",{className:"rounded-full bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:"disabled"}),(null==(n=d.flags)?void 0:n.includes("duplicate"))&&(0,r.jsx)("span",{className:"rounded-full bg-red-500/15 px-1.5 py-0.5 text-[10px] text-red-300 ring-1 ring-red-500/30",title:"같은 명령이 두 번 발화한다",children:"duplicate"})]}),(0,r.jsx)("div",{className:"mt-0.5 truncate text-[11px] ".concat(d.note?"text-muted-foreground":"font-mono text-muted-foreground/70"),children:h})]}),(0,r.jsxs)("div",{className:"flex shrink-0 flex-wrap items-center gap-1.5 text-[11px]",children:[(0,r.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5 font-mono text-muted-foreground",children:d.cron?d.cron:d.intervalMs?"every ".concat(Math.round(d.intervalMs/1e3),"s"):"—"}),b&&d.enabled&&(0,r.jsx)("span",{className:"text-muted-foreground",title:null==(a=d.next)?void 0:a.join("\n"),children:b}),(0,r.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5 text-muted-foreground",children:d.category}),(0,r.jsx)("span",{className:"rounded-full px-2 py-0.5 ring-1 ".concat(null!=(s=m[d.runVia])?s:m.crontab),children:d.runVia}),d.lastStatus&&(0,r.jsxs)("span",{className:"rounded-full px-2 py-0.5 ring-1 ".concat("ok"===d.lastStatus?"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30":"bg-red-500/15 text-red-300 ring-red-500/30"),title:null!=(o=d.lastError)?o:"ok"===d.lastStatus?"마지막 실행 성공":"exit ".concat(null!=(l=d.lastExit)?l:"?"),children:["ok"===d.lastStatus?"✓":"✗",null!=d.lastDurationMs?" ".concat(Math.round(d.lastDurationMs),"ms"):"",d.lastVia&&"crontab"!==d.lastVia?" ".concat(d.lastVia):""]}),d.stale&&!f&&(0,r.jsx)("span",{className:"rounded-full bg-amber-500/15 px-2 py-0.5 text-amber-300 ring-1 ring-amber-500/30",title:"예정 시각이 지났는데 미실행(유실 의심)",children:"stale"}),(0,r.jsx)("span",{className:"text-muted-foreground",title:null!=(i=d.lastRun)?i:"never run",children:function(e){if(!e)return"never";let t=Date.parse(e);if(Number.isNaN(t))return e;let n=Math.max(0,Math.floor((Date.now()-t)/1e3));if(n<60)return"".concat(n,"s ago");let r=Math.floor(n/60);if(r<60)return"".concat(r,"m ago");let a=Math.floor(r/60);return a<24?"".concat(a,"h ago"):"".concat(Math.floor(a/24),"d ago")}(d.lastRun)}),!p&&(0,r.jsxs)("span",{className:"ml-1 flex items-center gap-1",children:["crontab"===d.runVia&&(0,r.jsx)(g,{label:"adopt",onClick:()=>u("adopt",d),disabled:x}),"elanous"===d.runVia&&(0,r.jsx)(g,{label:"release",onClick:()=>u("release",d),disabled:x}),(0,r.jsx)(g,{label:d.enabled?"disable":"enable",onClick:()=>u(d.enabled?"disable":"enable",d),disabled:x}),(0,r.jsx)(g,{label:"✕",onClick:()=>u("delete",d),disabled:x,danger:!0})]})]})]})}function f(e){let{load:t,groups:n,onRefresh:a,onAction:s,busy:o,acting:i}=e;return"loading"===t.kind?(0,r.jsx)("div",{className:"text-sm text-muted-foreground",children:"Loading schedules…"}):"error"===t.kind?(0,r.jsxs)("div",{className:"rounded-xl border border-destructive/40 bg-destructive/10 px-3 py-10 text-center text-sm text-destructive",children:[(0,r.jsx)("p",{children:"Failed to load schedules"}),(0,r.jsx)("p",{className:"mt-1 text-muted-foreground",children:t.reason}),(0,r.jsx)(l.$,{className:"mt-3",size:"sm",variant:"outline",onClick:a,disabled:o,children:"Retry"})]}):0===t.data.jobs.length?(0,r.jsx)("div",{className:"rounded-xl border border-dashed border-border px-3 py-10 text-center text-sm text-muted-foreground",children:"no schedules"}):(0,r.jsx)("div",{className:"space-y-6",children:n.map(e=>{var t;return(0,r.jsxs)("section",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("h2",{className:"text-sm font-semibold",children:null!=(t=x[e.domain])?t:e.domain}),(0,r.jsx)("span",{className:"rounded-full bg-background px-2 py-0.5 text-[11px] text-muted-foreground",children:e.jobs.length})]}),(0,r.jsx)("div",{className:"space-y-2",children:e.jobs.map(e=>(0,r.jsx)(p,{job:e,onAction:s,acting:i},e.id))})]},e.domain)})})}function b(){let{client:e}=(0,s.Q)(),[t,n]=(0,a.useState)({kind:"loading"}),[d,m]=(0,a.useState)(!1),[x,g]=(0,a.useState)(!1),p=(0,a.useRef)(0),b=(0,a.useRef)(null),h="ready"===t.kind?t.data:null,[v,y]=(0,a.useState)(null);(0,a.useEffect)(()=>{y(function(e){let t=new URLSearchParams(e).get("ids");if(!t)return null;let n=t.split(",").map(e=>e.trim()).filter(Boolean);return n.length?n:null}(window.location.search))},[]);let j=(0,a.useCallback)(async()=>{var t,r,a,s,l;if(b.current===e)return;b.current=e;let i=++p.current;m(!0),n({kind:"loading"});try{let s=await u(t=>e.fetchJson(t));t=p.current,r=b.current,i===t&&r===e&&(n(s),"error"===s.kind&&(a=s.reason,(0,o.oR.error)("scheduler load failed: ".concat(a))))}finally{s=p.current,l=b.current,i===s&&l===e&&(b.current=null,m(!1))}},[e]),k=(0,a.useCallback)(async(t,n,r)=>{if("delete"!==t||window.confirm("삭제: ".concat(n.name,"?\n(자동 백업되어 복구 가능)"))){g(!0);try{let a=await e.fetchJson("/v1/schedules/action",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:t,id:n.id,...void 0!==r?{note:r}:{}})});a&&"object"==typeof a&&"error"in a&&a.error?o.oR.error("".concat(t," 실패: ").concat(a.error)):(o.oR.success("note"===t?"설명 저장: ".concat(n.name):"".concat(t,": ").concat(n.name)),await j())}catch(e){o.oR.error("".concat(t," 실패: ").concat(e instanceof Error?e.message:e))}finally{g(!1)}}},[e,j]);(0,a.useEffect)(()=>{j();let e=window.setInterval(()=>void j(),3e4);return()=>window.clearInterval(e)},[j]);let N=(0,a.useMemo)(()=>{if(!h)return[];let e=new Map;for(let r of h.jobs){var t,n;if(v&&!v.includes(r.id))continue;let a=(n=r.domain)&&n.trim()?n:"general",s=null!=(t=e.get(a))?t:[];s.push(r),e.set(a,s)}let r=["finance","elanous","general"];return[...e.entries()].sort((e,t)=>{let n=r.indexOf(e[0]),a=r.indexOf(t[0]);return(n<0?99:n)-(a<0?99:a)}).map(e=>{let[t,n]=e;return{domain:t,jobs:n.sort((e,t)=>{var n,r;return(Date.parse(null!=(n=t.lastRun)?n:"0")||0)-(Date.parse(null!=(r=e.lastRun)?r:"0")||0)})}})},[h,v]);return(0,r.jsxs)("div",{className:"mx-auto max-w-[1200px] space-y-4 p-4",children:[(0,r.jsx)(i.r,{active:"scheduler"}),(0,r.jsxs)("header",{className:"flex flex-col gap-3 lg:flex-row lg:items-end lg:justify-between",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Schedules"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"예약된 모든 잡 한 곳 (crontab \xb7 launchd \xb7 데몬 내부 \xb7 workflow trigger). \xab켜짐\xbb = 실제 발화 경로에 올라 있다."})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"rounded-lg border border-border bg-card px-3 py-2 text-xs",children:[(0,r.jsx)("div",{className:"text-muted-foreground",children:"total"}),(0,r.jsx)("div",{className:"text-sm font-semibold",children:h.total})]}),h.byState?["live","firing","stale","off"].map(e=>{var t,n,a;return(0,r.jsxs)("div",{className:"rounded-lg border border-border bg-card px-3 py-2 text-xs","data-schedule-count":e,children:[(0,r.jsx)("div",{className:"text-muted-foreground",children:c[e].label}),(0,r.jsx)("div",{className:"text-sm font-semibold ".concat("stale"===e&&(null==(t=h.byState)?void 0:t[e])?"text-amber-300":""),children:null!=(a=null==(n=h.byState)?void 0:n[e])?a:0})]},e)}):(0,r.jsxs)("div",{className:"rounded-lg border border-border bg-card px-3 py-2 text-xs",children:[(0,r.jsx)("div",{className:"text-muted-foreground",children:"adopted (elanous)"}),(0,r.jsx)("div",{className:"text-sm font-semibold",children:h.adopted})]})]}),(0,r.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>void j(),disabled:d,children:"Refresh"})]})]}),v&&(0,r.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border border-primary/40 bg-primary/10 px-3 py-2 text-xs","data-schedule-ids-filter":!0,children:[(0,r.jsxs)("span",{children:["미션이 부르는 스케줄만 \xb7 ",v.length]}),h&&N.reduce((e,t)=>e+t.jobs.length,0)<v.length&&(0,r.jsxs)("span",{className:"text-amber-300",children:["— ",v.length-N.reduce((e,t)=>e+t.jobs.length,0),"개는 지금 목록에 없다(지워졌거나 다른 우주)"]}),(0,r.jsx)("button",{type:"button",className:"ml-auto underline",onClick:()=>{y(null),window.history.replaceState(null,"",window.location.pathname)},children:"모두 보기"})]}),(0,r.jsx)(f,{load:t,groups:N,onRefresh:()=>void j(),onAction:k,busy:d,acting:x})]})}function h(){return(0,r.jsx)(b,{})}},36581:(e,t,n)=>{"use strict";n.d(t,{C:()=>d,DaemonProvider:()=>u,Q:()=>c});var r=n(54456),a=n(60500),s=n(86704),l=n(1355),o=n(39906),i=n(50733);let d=(0,a.createContext)(null);function u(e){let{children:t}=e,n={baseUrl:"",token:"",provider:""},[u,c]=(0,a.useState)(n),[m,x]=(0,a.useState)(""),[g]=(0,a.useState)(()=>new o.ki(n));(0,a.useEffect)(()=>{let e=(0,s.Fp)();c(e),g.updateConfig(e),x((0,l.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[g]),(0,a.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,s.Fp)();g.updateConfig(t),c(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&x(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[g]);let p=e=>{c(t=>{let n={...t,...e};return(0,s.Qc)(e),g.updateConfig(n),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),n})},f=e=>{x(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,a.useMemo)(()=>({config:u,setConfig:p,client:g,sessionId:m,setSessionId:f}),[u,g,m]);return(0,r.jsx)(d.Provider,{value:b,children:t})}function c(){let e=(0,a.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},74591:(e,t,n)=>{"use strict";n.d(t,{cn:()=>s});var r=n(49454),a=n(79946);function s(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,a.QP)((0,r.$)(t))}},83750:(e,t,n)=>{"use strict";n.d(t,{r:()=>o});var r=n(54456),a=n(86048),s=n.n(a);let l=[{key:"autopilot",href:"/autopilot",num:"①",label:"미션",sub:"Autopilot"},{key:"tasks",href:"/tasks",num:"②",label:"작업",sub:"Tasks"},{key:"scheduler",href:"/scheduler",num:"③",label:"스케줄",sub:"Schedules"}];function o(e){let{active:t}=e;return(0,r.jsxs)("nav",{"aria-label":"Mission Fabric 파이프라인","data-testid":"fabric-stage-header",className:"flex flex-wrap items-center gap-1 text-xs",children:[(0,r.jsx)("span",{className:"mr-1 text-muted-foreground",children:"Missions"}),l.map((e,n)=>(0,r.jsxs)("span",{className:"flex items-center gap-1",children:[(0,r.jsxs)(s(),{href:e.href,"aria-current":e.key===t?"page":void 0,className:["rounded px-2 py-1 ring-1 transition-colors",e.key===t?"bg-primary/15 font-medium text-foreground ring-primary/40":"text-muted-foreground ring-border hover:bg-muted hover:text-foreground"].join(" "),children:[(0,r.jsx)("span",{className:"mr-1",children:e.num}),e.label,(0,r.jsx)("span",{className:"ml-1 text-[10px] opacity-70",children:e.sub})]}),n<l.length-1&&(0,r.jsx)("span",{className:"text-muted-foreground/50","aria-hidden":!0,children:"→"})]},e.key))]})}},96077:(e,t,n)=>{Promise.resolve().then(n.bind(n,26486))}},e=>{e.O(0,[7777,3278,1829,6048,9906,6390,3170,7358],()=>e(e.s=96077)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7480],{1355:(e,t,n)=>{"use strict";n.d(t,{Zr:()=>l,f6:()=>a,oD:()=>s});let r="elanous.daemon.sessionId";function a(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function 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=a();return localStorage.setItem(r,t),t}function l(){let e=a();return localStorage.setItem(r,e),e}},10080:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(54456),a=n(80247),s=n(13680),l=n(74591);let o=(0,s.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function i(e){let{className:t,variant:n="default",size:s="default",...i}=e;return(0,r.jsx)(a.$,{"data-slot":"button",className:(0,l.cn)(o({variant:n,size:s,className:t})),...i})}},26486:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>h});var r=n(54456),a=n(60500),s=n(36581),l=n(10080),o=n(71829),i=n(83750);function d(e){var t,n,r,a,s,l,o,i,d,u,c,m,x,g,p,f;return{id:e.id,name:e.name,cron:e.cron,intervalMs:e.intervalMs,category:null!=(l=e.category)?l:e.source,domain:null!=(o=e.domain)?o:null,source:e.source,enabled:"off"!==e.state,runVia:null!=(i=e.runVia)?i:e.source,lastRun:null!=(d=null==(t=e.lastRun)?void 0:t.at)?d:null,lastStatus:null!=(u=null==(n=e.lastRun)?void 0:n.status)?u:null,lastExit:null!=(m=null!=(c=null==(r=e.lastRun)?void 0:r.exit)?c:e.lastExit)?m:null,lastDurationMs:null!=(x=null==(a=e.lastRun)?void 0:a.durationMs)?x:null,lastVia:null!=(g=null==(s=e.lastRun)?void 0:s.via)?g:null,stale:"stale"===e.state,command:null!=(p=e.command)?p:"",note:null!=(f=e.note)?f:null,state:e.state,next:e.next,flags:e.flags}}async function u(e){let t="Unknown error";for(let n of["/v1/schedules?includeOff=1","/v1/dashboard/schedules"])try{let r=function(e){if(!e||"object"!=typeof e)return null;if(Array.isArray(e.schedules))return function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Date().toISOString(),n=e.map(d),r={},a={},s={};for(let e of n){var l,o,i;r[e.category]=(null!=(l=r[e.category])?l:0)+1,a[e.source]=(null!=(o=a[e.source])?o:0)+1,e.state&&(s[e.state]=(null!=(i=s[e.state])?i:0)+1)}return{total:n.length,adopted:n.filter(e=>"elanous"===e.runVia).length,byCategory:r,bySource:a,byState:s,jobs:n,generatedAt:t}}(e.schedules);let t=e.schedules;return t&&Array.isArray(t.jobs)?t:null}(await e(n));if(r)return{kind:"ready",data:r};t="unexpected response from ".concat(n)}catch(e){t=e instanceof Error&&e.message?e.message:"string"==typeof e&&e?e:"Unknown error"}return{kind:"error",reason:t}}let c={live:{label:"켜짐",tone:"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30",tip:"실제 발화 경로(crontab\xb7launchd\xb7trigger)에 올라 있다"},firing:{label:"발화 중",tone:"bg-sky-500/15 text-sky-200 ring-sky-500/30",tip:"발화 경로에 올라 있고 최근 실행 기록이 있다"},stale:{label:"유실 의심",tone:"bg-amber-500/15 text-amber-300 ring-amber-500/30",tip:"예정 시각이 지났는데 실행 기록이 없다"},off:{label:"꺼짐",tone:"bg-muted text-muted-foreground ring-border",tip:"어느 발화 경로에도 없다(레지스트리에만 있다)"}},m={elanous:"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30",daemon:"bg-sky-500/15 text-sky-200 ring-sky-500/30",crontab:"bg-muted text-muted-foreground ring-border"},x={finance:"Finance",elanous:"elanous (core)",general:"General"};function g(e){let{label:t,onClick:n,disabled:a,danger:s}=e;return(0,r.jsx)("button",{type:"button",onClick:n,disabled:a,className:["rounded-md px-1.5 py-0.5 text-[10px] ring-1 transition-colors disabled:opacity-40",s?"text-red-300 ring-red-500/30 hover:bg-red-500/15":"text-muted-foreground ring-border hover:bg-accent/40 hover:text-foreground"].join(" "),children:t})}function p(e){var t,n,a,s,l,o,i;let{job:d,onAction:u,acting:x}=e,p="daemon"===d.runVia||d.id.includes(":"),f=d.state?c[d.state]:null,b=function(e){if(!e)return null;let t=Date.parse(e);if(Number.isNaN(t))return null;let n=Math.round((t-Date.now())/6e4);if(n<1)return"next <1m";if(n<60)return"next ".concat(n,"m");let r=Math.floor(n/60);return r<24?"next ".concat(r,"h"):"next ".concat(Math.floor(r/24),"d")}(null==(t=d.next)?void 0:t[0]),h=d.note||function(e){if(!e)return"—";let t=e.split(/\s*>>?\s*/)[0].trim(),n=t.match(/(\S+\.(?:ts|py|sh|js|mjs))\b/);if(n){let e=n[1],t=e.indexOf("/scripts/");if(t>=0)return e.slice(t+1);let r=e.lastIndexOf("/");return r>=0?e.slice(r+1):e}return t.replace(/^cd\s+\S+\s*&&\s*/,"").trim().slice(0,60)||"—"}(d.command),v=d.note?"".concat(d.note,"\n\n").concat(d.command):d.command;return(0,r.jsxs)("div",{className:["flex flex-col gap-1 rounded-xl border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between",d.enabled?"":"opacity-50"].join(" "),title:v,children:[(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"truncate text-sm font-medium",children:d.name}),f?(0,r.jsx)("span",{className:"shrink-0 whitespace-nowrap rounded-full px-1.5 py-0.5 text-[10px] ring-1 ".concat(f.tone),title:f.tip,"data-schedule-state":d.state,children:f.label}):!d.enabled&&(0,r.jsx)("span",{className:"rounded-full bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:"disabled"}),(null==(n=d.flags)?void 0:n.includes("duplicate"))&&(0,r.jsx)("span",{className:"rounded-full bg-red-500/15 px-1.5 py-0.5 text-[10px] text-red-300 ring-1 ring-red-500/30",title:"같은 명령이 두 번 발화한다",children:"duplicate"})]}),(0,r.jsx)("div",{className:"mt-0.5 truncate text-[11px] ".concat(d.note?"text-muted-foreground":"font-mono text-muted-foreground/70"),children:h})]}),(0,r.jsxs)("div",{className:"flex shrink-0 flex-wrap items-center gap-1.5 text-[11px]",children:[(0,r.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5 font-mono text-muted-foreground",children:d.cron?d.cron:d.intervalMs?"every ".concat(Math.round(d.intervalMs/1e3),"s"):"—"}),b&&d.enabled&&(0,r.jsx)("span",{className:"text-muted-foreground",title:null==(a=d.next)?void 0:a.join("\n"),children:b}),(0,r.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5 text-muted-foreground",children:d.category}),(0,r.jsx)("span",{className:"rounded-full px-2 py-0.5 ring-1 ".concat(null!=(s=m[d.runVia])?s:m.crontab),children:d.runVia}),d.lastStatus&&(0,r.jsxs)("span",{className:"rounded-full px-2 py-0.5 ring-1 ".concat("ok"===d.lastStatus?"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30":"bg-red-500/15 text-red-300 ring-red-500/30"),title:null!=(o=d.lastError)?o:"ok"===d.lastStatus?"마지막 실행 성공":"exit ".concat(null!=(l=d.lastExit)?l:"?"),children:["ok"===d.lastStatus?"✓":"✗",null!=d.lastDurationMs?" ".concat(Math.round(d.lastDurationMs),"ms"):"",d.lastVia&&"crontab"!==d.lastVia?" ".concat(d.lastVia):""]}),d.stale&&!f&&(0,r.jsx)("span",{className:"rounded-full bg-amber-500/15 px-2 py-0.5 text-amber-300 ring-1 ring-amber-500/30",title:"예정 시각이 지났는데 미실행(유실 의심)",children:"stale"}),(0,r.jsx)("span",{className:"text-muted-foreground",title:null!=(i=d.lastRun)?i:"never run",children:function(e){if(!e)return"never";let t=Date.parse(e);if(Number.isNaN(t))return e;let n=Math.max(0,Math.floor((Date.now()-t)/1e3));if(n<60)return"".concat(n,"s ago");let r=Math.floor(n/60);if(r<60)return"".concat(r,"m ago");let a=Math.floor(r/60);return a<24?"".concat(a,"h ago"):"".concat(Math.floor(a/24),"d ago")}(d.lastRun)}),!p&&(0,r.jsxs)("span",{className:"ml-1 flex items-center gap-1",children:["crontab"===d.runVia&&(0,r.jsx)(g,{label:"adopt",onClick:()=>u("adopt",d),disabled:x}),"elanous"===d.runVia&&(0,r.jsx)(g,{label:"release",onClick:()=>u("release",d),disabled:x}),(0,r.jsx)(g,{label:d.enabled?"disable":"enable",onClick:()=>u(d.enabled?"disable":"enable",d),disabled:x}),(0,r.jsx)(g,{label:"✕",onClick:()=>u("delete",d),disabled:x,danger:!0})]})]})]})}function f(e){let{load:t,groups:n,onRefresh:a,onAction:s,busy:o,acting:i}=e;return"loading"===t.kind?(0,r.jsx)("div",{className:"text-sm text-muted-foreground",children:"Loading schedules…"}):"error"===t.kind?(0,r.jsxs)("div",{className:"rounded-xl border border-destructive/40 bg-destructive/10 px-3 py-10 text-center text-sm text-destructive",children:[(0,r.jsx)("p",{children:"Failed to load schedules"}),(0,r.jsx)("p",{className:"mt-1 text-muted-foreground",children:t.reason}),(0,r.jsx)(l.$,{className:"mt-3",size:"sm",variant:"outline",onClick:a,disabled:o,children:"Retry"})]}):0===t.data.jobs.length?(0,r.jsx)("div",{className:"rounded-xl border border-dashed border-border px-3 py-10 text-center text-sm text-muted-foreground",children:"no schedules"}):(0,r.jsx)("div",{className:"space-y-6",children:n.map(e=>{var t;return(0,r.jsxs)("section",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("h2",{className:"text-sm font-semibold",children:null!=(t=x[e.domain])?t:e.domain}),(0,r.jsx)("span",{className:"rounded-full bg-background px-2 py-0.5 text-[11px] text-muted-foreground",children:e.jobs.length})]}),(0,r.jsx)("div",{className:"space-y-2",children:e.jobs.map(e=>(0,r.jsx)(p,{job:e,onAction:s,acting:i},e.id))})]},e.domain)})})}function b(){let{client:e}=(0,s.Q)(),[t,n]=(0,a.useState)({kind:"loading"}),[d,m]=(0,a.useState)(!1),[x,g]=(0,a.useState)(!1),p=(0,a.useRef)(0),b=(0,a.useRef)(null),h="ready"===t.kind?t.data:null,[v,y]=(0,a.useState)(null);(0,a.useEffect)(()=>{y(function(e){let t=new URLSearchParams(e).get("ids");if(!t)return null;let n=t.split(",").map(e=>e.trim()).filter(Boolean);return n.length?n:null}(window.location.search))},[]);let j=(0,a.useCallback)(async()=>{var t,r,a,s,l;if(b.current===e)return;b.current=e;let i=++p.current;m(!0),n({kind:"loading"});try{let s=await u(t=>e.fetchJson(t));t=p.current,r=b.current,i===t&&r===e&&(n(s),"error"===s.kind&&(a=s.reason,(0,o.oR.error)("scheduler load failed: ".concat(a))))}finally{s=p.current,l=b.current,i===s&&l===e&&(b.current=null,m(!1))}},[e]),k=(0,a.useCallback)(async(t,n,r)=>{if("delete"!==t||window.confirm("삭제: ".concat(n.name,"?\n(자동 백업되어 복구 가능)"))){g(!0);try{let a=await e.fetchJson("/v1/schedules/action",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:t,id:n.id,...void 0!==r?{note:r}:{}})});a&&"object"==typeof a&&"error"in a&&a.error?o.oR.error("".concat(t," 실패: ").concat(a.error)):(o.oR.success("note"===t?"설명 저장: ".concat(n.name):"".concat(t,": ").concat(n.name)),await j())}catch(e){o.oR.error("".concat(t," 실패: ").concat(e instanceof Error?e.message:e))}finally{g(!1)}}},[e,j]);(0,a.useEffect)(()=>{j();let e=window.setInterval(()=>void j(),3e4);return()=>window.clearInterval(e)},[j]);let N=(0,a.useMemo)(()=>{if(!h)return[];let e=new Map;for(let r of h.jobs){var t,n;if(v&&!v.includes(r.id))continue;let a=(n=r.domain)&&n.trim()?n:"general",s=null!=(t=e.get(a))?t:[];s.push(r),e.set(a,s)}let r=["finance","elanous","general"];return[...e.entries()].sort((e,t)=>{let n=r.indexOf(e[0]),a=r.indexOf(t[0]);return(n<0?99:n)-(a<0?99:a)}).map(e=>{let[t,n]=e;return{domain:t,jobs:n.sort((e,t)=>{var n,r;return(Date.parse(null!=(n=t.lastRun)?n:"0")||0)-(Date.parse(null!=(r=e.lastRun)?r:"0")||0)})}})},[h,v]);return(0,r.jsxs)("div",{className:"mx-auto max-w-[1200px] space-y-4 p-4",children:[(0,r.jsx)(i.r,{active:"scheduler"}),(0,r.jsxs)("header",{className:"flex flex-col gap-3 lg:flex-row lg:items-end lg:justify-between",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Schedules"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"예약된 모든 잡 한 곳 (crontab \xb7 launchd \xb7 데몬 내부 \xb7 workflow trigger). \xab켜짐\xbb = 실제 발화 경로에 올라 있다."})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"rounded-lg border border-border bg-card px-3 py-2 text-xs",children:[(0,r.jsx)("div",{className:"text-muted-foreground",children:"total"}),(0,r.jsx)("div",{className:"text-sm font-semibold",children:h.total})]}),h.byState?["live","firing","stale","off"].map(e=>{var t,n,a;return(0,r.jsxs)("div",{className:"rounded-lg border border-border bg-card px-3 py-2 text-xs","data-schedule-count":e,children:[(0,r.jsx)("div",{className:"text-muted-foreground",children:c[e].label}),(0,r.jsx)("div",{className:"text-sm font-semibold ".concat("stale"===e&&(null==(t=h.byState)?void 0:t[e])?"text-amber-300":""),children:null!=(a=null==(n=h.byState)?void 0:n[e])?a:0})]},e)}):(0,r.jsxs)("div",{className:"rounded-lg border border-border bg-card px-3 py-2 text-xs",children:[(0,r.jsx)("div",{className:"text-muted-foreground",children:"adopted (elanous)"}),(0,r.jsx)("div",{className:"text-sm font-semibold",children:h.adopted})]})]}),(0,r.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>void j(),disabled:d,children:"Refresh"})]})]}),v&&(0,r.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border border-primary/40 bg-primary/10 px-3 py-2 text-xs","data-schedule-ids-filter":!0,children:[(0,r.jsxs)("span",{children:["미션이 부르는 스케줄만 \xb7 ",v.length]}),h&&N.reduce((e,t)=>e+t.jobs.length,0)<v.length&&(0,r.jsxs)("span",{className:"text-amber-300",children:["— ",v.length-N.reduce((e,t)=>e+t.jobs.length,0),"개는 지금 목록에 없다(지워졌거나 다른 우주)"]}),(0,r.jsx)("button",{type:"button",className:"ml-auto underline",onClick:()=>{y(null),window.history.replaceState(null,"",window.location.pathname)},children:"모두 보기"})]}),(0,r.jsx)(f,{load:t,groups:N,onRefresh:()=>void j(),onAction:k,busy:d,acting:x})]})}function h(){return(0,r.jsx)(b,{})}},36581:(e,t,n)=>{"use strict";n.d(t,{C:()=>d,DaemonProvider:()=>u,Q:()=>c});var r=n(54456),a=n(60500),s=n(86704),l=n(1355),o=n(39906),i=n(50733);let d=(0,a.createContext)(null);function u(e){let{children:t}=e,n={baseUrl:"",token:"",provider:""},[u,c]=(0,a.useState)(n),[m,x]=(0,a.useState)(""),[g]=(0,a.useState)(()=>new o.ki(n));(0,a.useEffect)(()=>{let e=(0,s.Fp)();c(e),g.updateConfig(e),x((0,l.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[g]),(0,a.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,s.Fp)();g.updateConfig(t),c(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&x(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[g]);let p=e=>{c(t=>{let n={...t,...e};return(0,s.Qc)(e),g.updateConfig(n),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),n})},f=e=>{x(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,a.useMemo)(()=>({config:u,setConfig:p,client:g,sessionId:m,setSessionId:f}),[u,g,m]);return(0,r.jsx)(d.Provider,{value:b,children:t})}function c(){let e=(0,a.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},74591:(e,t,n)=>{"use strict";n.d(t,{cn:()=>s});var r=n(49454),a=n(79946);function s(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,a.QP)((0,r.$)(t))}},83750:(e,t,n)=>{"use strict";n.d(t,{r:()=>o});var r=n(54456),a=n(86048),s=n.n(a);let l=[{key:"autopilot",href:"/autopilot",num:"①",label:"미션",sub:"Autopilot"},{key:"tasks",href:"/tasks",num:"②",label:"작업",sub:"Tasks"},{key:"scheduler",href:"/scheduler",num:"③",label:"스케줄",sub:"Schedules"}];function o(e){let{active:t}=e;return(0,r.jsxs)("nav",{"aria-label":"Mission Fabric 파이프라인","data-testid":"fabric-stage-header",className:"flex flex-wrap items-center gap-1 text-xs",children:[(0,r.jsx)("span",{className:"mr-1 text-muted-foreground",children:"Missions"}),l.map((e,n)=>(0,r.jsxs)("span",{className:"flex items-center gap-1",children:[(0,r.jsxs)(s(),{href:e.href,"aria-current":e.key===t?"page":void 0,className:["rounded px-2 py-1 ring-1 transition-colors",e.key===t?"bg-primary/15 font-medium text-foreground ring-primary/40":"text-muted-foreground ring-border hover:bg-muted hover:text-foreground"].join(" "),children:[(0,r.jsx)("span",{className:"mr-1",children:e.num}),e.label,(0,r.jsx)("span",{className:"ml-1 text-[10px] opacity-70",children:e.sub})]}),n<l.length-1&&(0,r.jsx)("span",{className:"text-muted-foreground/50","aria-hidden":!0,children:"→"})]},e.key))]})}},88307:(e,t,n)=>{Promise.resolve().then(n.bind(n,26486))}},e=>{e.O(0,[7777,3278,1829,6048,9906,6390,3170,7358],()=>e(e.s=88307)),_N_E=e.O()}]);
|