elanous 0.2.23 → 0.2.24
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/{272-b23d2e92161d11fd.js → 272-0eed0fb0aab716b6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3961-fbef064c213b2b18.js → 3961-aaae04ed1d32622f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/{page-d5341ac96203a983.js → page-3b9fc39362473ae7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f2b62c19ca68fef8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/{page-55c631c032dcc47e.js → page-d7602d489edf5f37.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-ad3bd8084048bee4.js → page-24282bf9f90031a5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-8b7c5ab6b5bc8d64.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/{page-5c5d0e370f495ef6.js → page-4eb84d454f8c3415.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/{page-c325e21543cd48a8.js → page-b2e494bdad57fcb5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/{page-6168a7c43e6ef8f5.js → page-c0ab229673a8b0eb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-3e2b45f3c36dbac4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-c22aa511b28743ad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-26345242e4049f55.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/{page-25bb425afdb27541.js → page-bf88c0f558d8ef54.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/{page-32d72fdef1afe11a.js → page-52fec523e5b5d3ad.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-67723dfdcde92b31.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/{page-2bd9ce9c020d02d4.js → page-22725e2570f1126b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/{page-a34096245e63b9f2.js → page-1891335950d68b70.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-3267af1ebdc73cf5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/{page-4cc66d22ca4ec502.js → page-c314b75c11234998.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/{page-83b14c729fcea837.js → page-9f9c85415f61782b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-c1d4276059085587.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-833aab587f26ad4c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-ccdb83ed40c8d724.js → page-8526c17ae38e6a50.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-7ad3de8fa06fdea9.js → page-f998637a8402115c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-b7bb53828b17b335.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-1b1850de0257e46d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/{page-786111f30b6f0969.js → page-6f23159fedb41f67.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/{page-48fb31810693c357.js → page-1d809a87139dd024.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/{page-4e17cce5e2ed0fee.js → page-da9e570234d481fd.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/{page-cb154acadb025414.js → page-b92caddb5c715f30.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/page-8ce3a38e210b810a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/{page-c2dd2b19c93f90ab.js → page-57ffeeb6019440fd.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-abbb417bf514630b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/{page-d3c007c8a0ddd7ee.js → page-2c2b3f29cec1efa4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/{page-7837ce2aacb97b04.js → page-9369279f72fc7b51.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-64861f14039499c3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ddc4c93efd8ab94b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-901a1391b81053bc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-68d9bbaac9841a58.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/{page-119be9a0444d2482.js → page-b5c0c996f329371e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/{page-fa806c018833e332.js → page-89881ccbcf728978.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-0e87a803b3d7165e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/{page-d431fbdea6ad93dd.js → page-58d4e5cb30ef4871.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-02ce4c3b5f39e4d2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-e620d1bb8eadcec2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/{page-847c3de6ca8a4416.js → page-acf868c64d77f950.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-54fa605fa6dba457.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/{page-74e69ba2c8e970d4.js → page-bc79f0833533fa84.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/{page-70038f41ae7cf931.js → page-d5c4398eea03d8f3.js} +1 -1
- package/apps/pwa/out/_next/static/css/72becfd42807b50d.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +14 -14
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +14 -14
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +14 -14
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +14 -14
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +14 -14
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +14 -14
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +14 -14
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +14 -14
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +14 -14
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +14 -14
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +14 -14
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +14 -14
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +14 -14
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +14 -14
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +14 -14
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +14 -14
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +14 -14
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +14 -14
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +14 -14
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +14 -14
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +14 -14
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +14 -14
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +14 -14
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +14 -14
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +14 -14
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +14 -14
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +14 -14
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +14 -14
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +15 -15
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +14 -14
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +14 -14
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +14 -14
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +14 -14
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +14 -14
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +14 -14
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +14 -14
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +14 -14
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +14 -14
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +14 -14
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +14 -14
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +14 -14
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +14 -14
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +14 -14
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +14 -14
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +14 -14
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +14 -14
- package/catalog/models/openrouter/deepseek-v4-pro-0813.yaml +39 -0
- package/catalog/models/openrouter/deepseek-v4.1-flash.yaml +38 -0
- package/catalog/models/openrouter/glm-5.3-flash.yaml +35 -0
- package/catalog/providers/openrouter.yaml +2 -0
- package/graphs/implement-loop.yaml +31 -0
- package/graphs/ops/harness-gc.yaml +17 -0
- package/graphs/ops/recipes.yaml +3 -0
- package/graphs/overlays/README.md +1 -1
- package/graphs/overlays/stop-heal-ladder.yaml +105 -0
- package/package.json +1 -1
- package/scripts/add-api-key.sh +1 -1
- package/scripts/ci-typecheck-changed.ts +71 -14
- package/scripts/fleet/bedrock-pod-secret.ts +122 -0
- package/scripts/fleet/node-setup-linux.sh +97 -0
- package/scripts/fleet/node-setup.sh +11 -0
- package/scripts/fleet/zai-pod-secret.ts +86 -0
- package/scripts/land-global-checks.ts +3 -0
- package/scripts/measure-log-diet-2.ts +213 -0
- package/scripts/measure-tsc-affected-roots.ts +289 -0
- package/scripts/release-loop/gate-executor.ts +28 -0
- package/scripts/release-loop/gate-node.ts +262 -26
- package/scripts/release-loop/resume-release.ts +9 -3
- package/scripts/release-loop/resume.ts +41 -0
- package/scripts/release-loop/unattended-release.ts +22 -7
- package/scripts/tsc-baseline-cache.ts +147 -0
- package/scripts/usage-rollup.ts +58 -6
- package/src/agent/run-context.ts +10 -0
- package/src/agent-mission/driver.ts +18 -3
- package/src/agent-mission/resource-ladder.ts +8 -3
- package/src/agent-mission/review-loop.ts +8 -2
- package/src/agent-substrate/acp-implementer.ts +139 -0
- package/src/agent-substrate/pr-reviewer.ts +31 -4
- package/src/agent-substrate/self-review-cli.ts +48 -9
- package/src/autopilot/mission-critique.ts +18 -5
- package/src/autopilot/mission-feasibility-negotiate.ts +11 -10
- package/src/autopilot/mission-trace.ts +12 -1
- package/src/autopilot/system-lookback-run.ts +16 -10
- package/src/bench/bench.ts +183 -0
- package/src/budget/fetchers/grok.ts +15 -5
- package/src/budget/llm-cost.ts +37 -5
- package/src/budget/types.ts +8 -2
- package/src/budget/unified-usage.ts +88 -6
- package/src/cli/bench-cli.ts +34 -0
- package/src/cli/guardian-cli.ts +26 -1
- package/src/cli/image-cli.ts +101 -0
- package/src/cli/log-event-names.ts +4 -0
- package/src/cli/pr-cli.ts +62 -5
- package/src/cli/pr-land-overlap-evidence.ts +160 -12
- package/src/cli/release-cli.ts +18 -9
- package/src/cli/rfc-status.ts +52 -2
- package/src/cli/self-update.ts +104 -0
- package/src/cli/tasks-cli.ts +109 -4
- package/src/cli/usage-cli.ts +91 -8
- package/src/core-turn/run-goal-loop.ts +5 -4
- package/src/dashboard/ad-run-setup-bindings.ts +279 -0
- package/src/dashboard/index.ts +18 -276
- package/src/dashboard/stale-install-check.ts +11 -0
- package/src/debug/log-diet.ts +38 -7
- package/src/debug/log.ts +19 -1
- package/src/domains/release-tool.ts +39 -0
- package/src/error-report/report.ts +21 -4
- package/src/github/pr-labels.ts +1 -0
- package/src/graph-runner/graph-cli.ts +42 -1
- package/src/graph-runner/runner.ts +167 -6
- package/src/grok/usage.ts +23 -2
- package/src/grounding/ref-index.ts +253 -0
- package/src/harness/dispatch-backpressure.ts +10 -2
- package/src/harness/harness-clean.ts +199 -78
- package/src/harness/harness-cli-command.ts +122 -7
- package/src/harness/harness-gc.ts +331 -0
- package/src/harness/harness-stop.ts +4 -2
- package/src/harness/harness-substrate-default.ts +142 -7
- package/src/harness/launch-registry.ts +6 -0
- package/src/harness/worktree-branch-prefix.ts +9 -0
- package/src/hq/fence.ts +187 -0
- package/src/hq/seats.ts +38 -22
- package/src/images/image-ledger.ts +179 -0
- package/src/index.ts +93 -11
- package/src/instance/child-scope.ts +32 -1
- package/src/instance/dev-project.ts +133 -0
- package/src/instance/resolve.ts +24 -0
- package/src/instance/spawn-elanous.ts +45 -0
- package/src/intake-plane/ref-prefetch.ts +110 -0
- package/src/intelligence-map/model-catalog.ts +72 -0
- package/src/llm/bedrock-eventstream.ts +215 -0
- package/src/llm/bedrock-provider.ts +114 -41
- package/src/llm/bedrock.ts +174 -28
- package/src/llm/openrouter-byok-cost.ts +96 -0
- package/src/llm/openrouter-deepseek.ts +151 -0
- package/src/llm/openrouter-upstream-pins.config.ts +25 -0
- package/src/llm/zai-coding-plan.ts +700 -0
- package/src/llm.ts +87 -16
- package/src/loops/checker.ts +148 -9
- package/src/loops/orchestrator/resync-shadow.ts +34 -7
- package/src/maturity/feature-maturity.ts +2 -2
- package/src/model-tier/llm-tier-map.ts +9 -5
- package/src/models/prompts.ts +2 -1
- package/src/mss/logging/log-store.ts +58 -11
- package/src/nexus/api/missions.ts +73 -2
- package/src/nexus/api/ops-api.ts +18 -0
- package/src/nexus/index.ts +7 -75
- package/src/nexus/tools-kind.ts +78 -0
- package/src/oauth/codex-account-rotation.ts +39 -2
- package/src/oauth/codex-account-store.ts +323 -24
- package/src/oauth/fallback-chain.ts +53 -15
- package/src/onboarding/first-run.ts +37 -18
- package/src/onboarding/web-first.ts +20 -2
- package/src/ops/machine-heartbeat.ts +185 -0
- package/src/ops/overview-cache.ts +175 -0
- package/src/ops/overview.ts +8 -0
- package/src/prompt-cache/openai.ts +3 -0
- package/src/prompt-cache/types.ts +5 -0
- package/src/prompt-enhance/enhance.ts +23 -0
- package/src/release-loop/placement.ts +16 -1
- package/src/requirements/requirement-ledger.ts +536 -0
- package/src/retro/daily.ts +5 -5
- package/src/seat-loop/seat-loop.ts +32 -10
- package/src/self-dev/dev-cli.ts +44 -10
- package/src/self-dev/dev-pipeline.ts +7 -2
- package/src/self-dev/draft-residue.ts +14 -2
- package/src/self-dev/draft-sweep.ts +103 -0
- package/src/self-dev/graph-journey-route.ts +6 -0
- package/src/self-dev/orchestrate-cli.ts +25 -3
- package/src/self-dev/orchestrate.ts +41 -6
- package/src/self-dev/run-supervisor.ts +188 -15
- package/src/self-dev/run-types.ts +13 -0
- package/src/self-dev/supervisor-verdict-edges.ts +1 -0
- package/src/self-implement/budget-gate.ts +53 -13
- package/src/self-implement/child-context-composition.ts +139 -0
- package/src/self-implement/child-llm-preference.ts +13 -5
- package/src/self-implement/claude-acp-implement.ts +67 -0
- package/src/self-implement/flex-signals.ts +59 -0
- package/src/self-implement/frozen-merges.ts +8 -3
- package/src/self-implement/goal-author-decompose.ts +10 -2
- package/src/self-implement/goal-author.ts +24 -9
- package/src/self-implement/graph-overlay-condition.ts +28 -0
- package/src/self-implement/graph-overlay-yaml.ts +41 -7
- package/src/self-implement/graph-templates.ts +33 -1
- package/src/self-implement/graph-yaml.ts +56 -0
- package/src/self-implement/heal-intake.ts +5 -1
- package/src/self-implement/orchestrator.ts +144 -15
- package/src/self-implement/running-runs.ts +75 -5
- package/src/self-implement/seams.ts +47 -1
- package/src/self-implement/self-implement-cli.ts +9 -4
- package/src/self-implement/stop-autoheal.ts +69 -2
- package/src/session-runtime/retry-policy.ts +2 -1
- package/src/steward/launch.ts +5 -4
- package/src/steward/triage-budget.ts +62 -0
- package/src/steward/triage.ts +83 -22
- package/src/task-agent/actions.ts +62 -5
- package/src/task-agent/completion-evidence.ts +5 -0
- package/src/task-agent/cover.ts +101 -3
- package/src/task-agent/judge.ts +16 -0
- package/src/task-agent/land-order-ledger.ts +95 -0
- package/src/task-agent/live-move-history.ts +87 -1
- package/src/task-agent/live-moves.ts +350 -20
- package/src/task-agent/rejudge-on-head.ts +75 -20
- package/src/task-agent/review-prior-fix.ts +146 -0
- package/src/task-agent/run-adopt.ts +136 -0
- package/src/task-agent/shadow.ts +53 -9
- package/src/task-agent/task-hand.ts +54 -7
- package/src/task-orchestrator/surfaces/pod-account-broker.ts +38 -5
- package/src/task-orchestrator/surfaces/pod-bedrock-child.ts +74 -0
- package/src/task-orchestrator/surfaces/pod-child-default.ts +50 -0
- package/src/task-orchestrator/surfaces/pod-child-providers.ts +14 -1
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +79 -6
- package/src/task-orchestrator/surfaces/pod-lease.ts +17 -5
- package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +11 -5
- package/src/task-orchestrator/surfaces/pod-pool.ts +20 -4
- package/src/task-orchestrator/surfaces/pod-zai-child.ts +101 -0
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +213 -23
- package/src/task-orchestrator/surfaces/self-implement.ts +19 -1
- package/src/typecheck-ratchet.ts +1 -0
- package/src/user-config.ts +51 -11
- package/src/version/packed-revision.json +1 -1
- package/src/workflow-runtime/triggers/registry.ts +59 -0
- package/src/workflow-runtime/triggers/webhook-source.ts +35 -5
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-0160ab83c8685a12.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-e6784759a2531031.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-31417d3604154a6d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-e9606dc0bdec9305.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-a648bc464c9dc754.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-d27b794c8ba76bbb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-22170f4f00a15496.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-6e2781c523dad761.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-26dd415c8f13f341.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-015c02c4fec4023e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-6b0ae5b5c42f6d2f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-16258e956ea93fc2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-85f35dd1dd96ae87.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-7350ee93f4fe1033.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-00723458575f2b19.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-745d9b6c015076f8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-736d33c7414a8a1a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-c782041b5f5199ba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-0c056abff82b9891.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-242d668e4fbf72c4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-81dd0d8ae923ed72.js +0 -1
- package/apps/pwa/out/_next/static/css/5619d59e87eddf66.css +0 -1
- /package/apps/pwa/out/_next/static/{rfkMm4movqkqMebBrCXiR → Q-7iofoxOEv1WX18S35of}/_buildManifest.js +0 -0
- /package/apps/pwa/out/_next/static/{rfkMm4movqkqMebBrCXiR → Q-7iofoxOEv1WX18S35of}/_ssgManifest.js +0 -0
package/apps/pwa/out/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--rfkMm4movqkqMebBrCXiR--><html lang="ko" class="font-sans __variable_7a3ec7"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/><link rel="preload" href="/app/_next/static/media/22a5144ee8d83bca-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/app/_next/static/css/5619d59e87eddf66.css" data-precedence="next"/><link rel="stylesheet" href="/app/_next/static/css/085673d826b98b62.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/app/_next/static/chunks/webpack-4794f053bd5e4230.js"/><script src="/app/_next/static/chunks/b4e12462-5fab4a813a63dadd.js" async=""></script><script src="/app/_next/static/chunks/4658-7ed9266098a787e4.js" async=""></script><script src="/app/_next/static/chunks/main-app-27893e93b0ec193d.js" async=""></script><script src="/app/_next/static/chunks/8925-2abfb48af477fb7f.js" async=""></script><script src="/app/_next/static/chunks/6038-1e0f7ee1086da4cf.js" async=""></script><script src="/app/_next/static/chunks/5544-871146192d095594.js" async=""></script><script src="/app/_next/static/chunks/1669-da843ed73aa301f5.js" async=""></script><script src="/app/_next/static/chunks/6571-926ddf024a6ad5df.js" async=""></script><script src="/app/_next/static/chunks/7086-8bfa7e8f796a03d9.js" async=""></script><script src="/app/_next/static/chunks/4945-0f4046cfc3228ea3.js" async=""></script><script src="/app/_next/static/chunks/7990-cbf6a01bcbdcb7e6.js" async=""></script><script src="/app/_next/static/chunks/6777-312496b0d774719b.js" async=""></script><script src="/app/_next/static/chunks/4489-bf629de6f04f7681.js" async=""></script><script src="/app/_next/static/chunks/5287-72898b126d722457.js" async=""></script><script src="/app/_next/static/chunks/9400-7498ea90b2e6ee8f.js" async=""></script><script src="/app/_next/static/chunks/8469-1500be57e582296f.js" async=""></script><script src="/app/_next/static/chunks/app/layout-22170f4f00a15496.js" async=""></script><script src="/app/_next/static/chunks/app/not-found-015c02c4fec4023e.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><link rel="preload" as="font" type="font/ttf" href="/app/fonts/JetBrainsMonoNerdFontMono-Regular.ttf" crossorigin="anonymous"/><meta name="theme-color" content="#1e1e2e"/><title>elanous</title><meta name="description" content="elanous — voice · chat · intake · control · terminal."/><meta name="application-name" content="elanous"/><link rel="manifest" href="/app/manifest.webmanifest"/><link rel="icon" href="/app/icons/elanous-32.png" sizes="32x32" type="image/png"/><link rel="icon" href="/app/icons/elanous-16.png" sizes="16x16" type="image/png"/><link rel="apple-touch-icon" href="/app/icons/elanous-180.png" sizes="180x180" type="image/png"/><script src="/app/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="min-h-screen bg-background text-foreground antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-screen w-full flex-col bg-background text-foreground"><header class="flex h-9 shrink-0 items-center gap-1 border-b border-border bg-background px-2 text-xs"><button type="button" aria-label="open menu" title="open menu" class="flex shrink-0 items-center gap-1.5 rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu h-4 w-4" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg><span class="hidden text-[11px] font-medium leading-none sm:inline">메뉴</span></button><div class="ml-auto flex items-center gap-1"><button type="button" data-share-capture-ui="true" aria-label="공유용 캡처" title="공유용 캡처 (beta) — 주소·토큰을 가린 사진을 데몬에 저장" class="rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-50"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-camera h-4 w-4" aria-hidden="true"><path d="M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z"></path><circle cx="12" cy="13" r="3"></circle></svg></button><a aria-label="voice" title="voice (HTTPS Tailscale Serve 필요)" class="rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground" href="/app/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-mic h-4 w-4" aria-hidden="true"><path d="M12 19v3"></path><path d="M19 10v2a7 7 0 0 1-14 0v-2"></path><rect x="9" y="2" width="6" height="13" rx="3"></rect></svg></a><div class="relative"><button type="button" aria-label="settings" title="session — · theme catppuccin-mocha" class="rounded-md p-1.5 hover:bg-accent text-muted-foreground hover:text-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings h-4 w-4" aria-hidden="true"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg></button></div></div></header><div class="flex flex-1 min-h-0"><aside class="hidden md:flex md:w-10 md:flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground"><nav class="flex h-full flex-col"><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><div class="flex-1 space-y-2 px-1 py-2"><section aria-label="오늘"><a title="오늘" aria-label="오늘" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/today/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-inbox h-4 w-4" aria-hidden="true"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12"></polyline><path d="M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"></path></svg></a></section><section aria-label="대화"><a title="대화" aria-label="대화" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/chat/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square h-4 w-4" aria-hidden="true"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg></a></section><section aria-label="일"><a title="일" aria-label="일" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/live/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-compass h-4 w-4" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z"></path></svg></a></section><section aria-label="만들기"><a title="만들기" aria-label="만들기" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/term/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-terminal h-4 w-4" aria-hidden="true"><path d="m7 11 2-2-2-2"></path><path d="M11 13h4"></path><rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect></svg></a></section><section aria-label="자료"><a title="자료" aria-label="자료" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/market/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open h-4 w-4" aria-hidden="true"><path d="M12 7v14"></path><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"></path></svg></a></section><section aria-label="설정"><a title="설정" aria-label="설정" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/settings/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings h-4 w-4" aria-hidden="true"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg></a></section></div></nav></aside><main class="flex-1 overflow-auto min-w-0"><main data-testid="not-found" class="min-h-screen bg-gradient-to-b from-background via-background to-muted/40 px-6 py-12 sm:px-10"><div class="mx-auto flex w-full max-w-5xl flex-col gap-10"><header class="flex flex-col gap-3"><p class="text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground">elanous PWA</p><h1 class="text-3xl font-bold leading-tight sm:text-4xl">여기엔 없습니다</h1><p class="text-sm text-muted-foreground"><code>/_not-found/</code> 주소는 이 앱에 없습니다. 아래에서 지금 갈 수 있는 곳을 선택하거나 참고 주소의 사유를 확인하세요.</p></header><section aria-label="이동 가능한 주소와 참고 주소" class="grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3"><article data-testid="route-guidance-today" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/today/">오늘<!-- --> <code class="text-xs text-muted-foreground">/today</code></a></article><article data-testid="route-guidance-approvals" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/approvals/">승인 대기<!-- --> <code class="text-xs text-muted-foreground">/approvals</code></a></article><article data-testid="route-guidance-intake" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/intake/">넣기<!-- --> <code class="text-xs text-muted-foreground">/intake</code></a></article><article data-testid="route-guidance-chat" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/chat/">채팅<!-- --> <code class="text-xs text-muted-foreground">/chat</code></a></article><article data-testid="route-guidance-exec" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/exec/">COO 에게 맡기기<!-- --> <code class="text-xs text-muted-foreground">/exec</code></a></article><article data-testid="route-guidance-autopilot" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/autopilot/">미션<!-- --> <code class="text-xs text-muted-foreground">/autopilot</code></a></article><article data-testid="route-guidance-outputs" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/outputs/">산출물<!-- --> <code class="text-xs text-muted-foreground">/outputs</code></a></article><article data-testid="route-guidance-scheduler" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/scheduler/">예약<!-- --> <code class="text-xs text-muted-foreground">/scheduler</code></a></article><article data-testid="route-guidance-live" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/live/">Live<!-- --> <code class="text-xs text-muted-foreground">/live</code></a></article><article data-testid="route-guidance-trace" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/trace/">Trace<!-- --> <code class="text-xs text-muted-foreground">/trace</code></a></article><article data-testid="route-guidance-live-run" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/live-run/">런 장면<!-- --> <code class="text-xs text-muted-foreground">/live-run</code></a></article><article data-testid="route-guidance-term" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/term/">터미널<!-- --> <code class="text-xs text-muted-foreground">/term</code></a></article><article data-testid="route-guidance-editor" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/editor/">그래프<!-- --> <code class="text-xs text-muted-foreground">/editor</code></a></article><article data-testid="route-guidance-design-check" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/design-check/">디자인<!-- --> <code class="text-xs text-muted-foreground">/design-check</code></a></article><article data-testid="route-guidance-workspace" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/workspace/">여러 탭<!-- --> <code class="text-xs text-muted-foreground">/workspace</code></a></article><article data-testid="route-guidance-vault" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/vault/">Obsidian 노트<!-- --> <code class="text-xs text-muted-foreground">/vault</code></a></article><article data-testid="route-guidance-field" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/field/">현장 올리기<!-- --> <code class="text-xs text-muted-foreground">/field</code></a></article><article data-testid="route-guidance-market" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/market/">마켓<!-- --> <code class="text-xs text-muted-foreground">/market</code></a></article><article data-testid="route-guidance-settings" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/settings/">설정<!-- --> <code class="text-xs text-muted-foreground">/settings</code></a></article><article data-testid="route-guidance-ceo" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/ceo/">대표 조망판<!-- --> <code class="text-xs text-muted-foreground">/ceo</code></a></article><article data-testid="route-guidance-loops" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/loops/">루프 현황<!-- --> <code class="text-xs text-muted-foreground">/loops</code></a></article><article data-testid="route-guidance-ops-release" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/ops/release/">릴리스<!-- --> <code class="text-xs text-muted-foreground">/ops/release</code></a></article><article data-testid="route-guidance-ops-checklist" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/ops/checklist/">판별 피처<!-- --> <code class="text-xs text-muted-foreground">/ops/checklist</code></a></article><article data-testid="route-guidance-ops-seats" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/ops/seats/">자리 현황<!-- --> <code class="text-xs text-muted-foreground">/ops/seats</code></a></article><article data-testid="route-guidance-bots" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/bots/">봇<!-- --> <code class="text-xs text-muted-foreground">/bots</code></a></article><article data-testid="route-guidance-observatory" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/observatory/">관측<!-- --> <code class="text-xs text-muted-foreground">/observatory</code></a></article><article data-testid="route-guidance-worktrees" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/worktrees/">작업 트리<!-- --> <code class="text-xs text-muted-foreground">/worktrees</code></a></article><article data-testid="route-guidance-control" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/control/">제어<!-- --> <code class="text-xs text-muted-foreground">/control</code></a></article><article data-testid="route-guidance-tasks" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/tasks/">Tasks<!-- --> <code class="text-xs text-muted-foreground">/tasks</code></a></article><article data-testid="route-guidance-board" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/board/">보드<!-- --> <code class="text-xs text-muted-foreground">/board</code></a></article><article data-testid="route-guidance-sessions" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/sessions/">대화 카드<!-- --> <code class="text-xs text-muted-foreground">/sessions</code></a></article><article data-testid="route-guidance-reflection" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/reflection/">Reflection<!-- --> <code class="text-xs text-muted-foreground">/reflection</code></a></article><article data-testid="route-guidance-showroom" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/showroom/">Showroom<!-- --> <code class="text-xs text-muted-foreground">/showroom</code></a></article><article data-testid="route-guidance-share" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/share</code></span><p class="text-sm leading-relaxed text-muted-foreground">운영체제가 공유 동작으로 호출하는 Share Target 진입점.</p></div></article><article data-testid="route-guidance-missions" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/missions</code></span><p class="text-sm leading-relaxed text-muted-foreground">`[id]`를 받는 동적 주소이며 부모 경로 자체는 없다.</p></div></article><article data-testid="route-guidance-setup" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/setup</code></span><p class="text-sm leading-relaxed text-muted-foreground">LLM provider 온보딩 진입점.</p></div></article><article data-testid="route-guidance-setup-done" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/setup/done</code></span><p class="text-sm leading-relaxed text-muted-foreground">LLM provider 온보딩 완료 화면.</p></div></article><article data-testid="route-guidance-settings-devices" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/settings/devices</code></span><p class="text-sm leading-relaxed text-muted-foreground">Settings 아래 Device fleet 하위 화면.</p></div></article><article data-testid="route-guidance-workflows" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/workflows</code></span><p class="text-sm leading-relaxed text-muted-foreground">기존 워크플로 링크를 /editor?mode=workflow 로 전달한다.</p></div></article><article data-testid="route-guidance-workflows-chat-ui" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/workflows/chat-ui</code></span><p class="text-sm leading-relaxed text-muted-foreground">Workflows에서 여는 hosted chat 하위 흐름.</p></div></article><article data-testid="route-guidance-root" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/</code></span><p class="text-sm leading-relaxed text-muted-foreground">첫 방문자를 위한 루트 welcome 화면.</p></div></article><article data-testid="route-guidance-404" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/404</code></span><p class="text-sm leading-relaxed text-muted-foreground">오류 페이지.</p></div></article><article data-testid="route-guidance-decisions" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/decisions</code></span><p class="text-sm leading-relaxed text-muted-foreground">대표 결정 화면(OPS-BOARD #24604) — /ceo 「결정 대기 카드」에서 들어간다(메뉴엔 /ceo 만).</p></div></article><article data-testid="route-guidance-consult" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/consult</code></span><p class="text-sm leading-relaxed text-muted-foreground">AX 도입 상담·과정 문의를 접수하는 입력 화면(CS1 · #22436).</p></div></article><article data-testid="route-guidance-morning" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/morning</code></span><p class="text-sm leading-relaxed text-muted-foreground">부르는 백엔드가 아직 없는 미배선 화면.</p></div></article><article data-testid="route-guidance-inside" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/inside</code></span><p class="text-sm leading-relaxed text-muted-foreground">시연자가 주소로 여는 엘라누스 안쪽 장면 지도(메뉴에는 노출하지 않음).</p></div></article><article data-testid="route-guidance-botlab" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/botlab</code></span><p class="text-sm leading-relaxed text-muted-foreground">봇 화면 «벽»을 한 자리에서 보는 읽기 진단 화면(#15390 · 봇 운영자용).</p></div></article></section></div></main><!--$--><!--/$--></main></div><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--></div><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><script src="/app/_next/static/chunks/webpack-4794f053bd5e4230.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n"])</script><script>self.__next_f.push([1,"2:I[34257,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-22170f4f00a15496.js\"],\"ServiceWorkerRegister\"]\n"])</script><script>self.__next_f.push([1,"3:I[41035,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-22170f4f00a15496.js\"],\"NewBuildBanner\"]\n"])</script><script>self.__next_f.push([1,"4:I[7681,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-22170f4f00a15496.js\"],\"DaemonProvider\"]\n"])</script><script>self.__next_f.push([1,"5:I[2821,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-22170f4f00a15496.js\"],\"OperatorRoleDefault\"]\n"])</script><script>self.__next_f.push([1,"6:I[60621,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-22170f4f00a15496.js\"],\"NexusClientProvider\"]\n"])</script><script>self.__next_f.push([1,"7:I[65558,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-22170f4f00a15496.js\"],\"ThemeProvider\"]\n"])</script><script>self.__next_f.push([1,"8:I[93509,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-22170f4f00a15496.js\"],\"TooltipProvider\"]\n"])</script><script>self.__next_f.push([1,"9:I[1544,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-22170f4f00a15496.js\"],\"ToastProvider\"]\n"])</script><script>self.__next_f.push([1,"a:I[80031,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-22170f4f00a15496.js\"],\"AppShell\"]\n"])</script><script>self.__next_f.push([1,"b:I[51153,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-22170f4f00a15496.js\"],\"MaturityBanner\"]\n"])</script><script>self.__next_f.push([1,"c:I[22261,[],\"\"]\nd:I[24945,[],\"\"]\ne:I[18220,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"4345\",\"static/chunks/app/not-found-015c02c4fec4023e.js\"],\"default\"]\nf:I[54460,[],\"ClientPageRoot\"]\n12:I[32840,[],\"OutletBoundary\"]\n14:I[5537,[],\"AsyncMetadataOutlet\"]\n16:I[32840,[],\"ViewportBoundary\"]\n18:I[32840,[],\"MetadataBoundary\"]\n19:\"$Sreact.suspense\"\n1b:I[88503,[],\"\"]\n:HL[\"/app/_next/static/media/22a5144ee8d83bca-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/app/_next/static/css/5619d59e87eddf66.css\",\"style\"]\n:HL[\"/app/_next/static/css/085673d826b98b62.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"rfkMm4movqkqMebBrCXiR\",\"p\":\"/app\",\"c\":[\"\",\"_not-found\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/app/_next/static/css/5619d59e87eddf66.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/app/_next/static/css/085673d826b98b62.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ko\",\"className\":\"font-sans __variable_7a3ec7\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"link\",null,{\"rel\":\"preload\",\"as\":\"font\",\"type\":\"font/ttf\",\"href\":\"/app/fonts/JetBrainsMonoNerdFontMono-Regular.ttf\",\"crossOrigin\":\"anonymous\"}]}],[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-background text-foreground antialiased\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{}],[\"$\",\"$L4\",null,{\"children\":[[\"$\",\"$L5\",null,{}],[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$La\",null,{\"children\":[[\"$\",\"$Lb\",null,{}],[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$Le\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]}]}]}]]}]]}]]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$Lf\",null,{\"Component\":\"$e\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@10\",\"$@11\"]}],null,[\"$\",\"$L12\",null,{\"children\":[\"$L13\",[\"$\",\"$L14\",null,{\"promise\":\"$@15\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L16\",null,{\"children\":\"$L17\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L18\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$19\",null,{\"fallback\":null,\"children\":\"$L1a\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$1b\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"10:{}\n11:\"$0:f:0:1:2:children:2:children:1:props:children:0:props:params\"\n"])</script><script>self.__next_f.push([1,"17:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#1e1e2e\"}]]\n13:null\n"])</script><script>self.__next_f.push([1,"1c:I[28113,[],\"IconMark\"]\n"])</script><script>self.__next_f.push([1,"15:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"elanous\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"elanous — voice · chat · intake · control · terminal.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"elanous\"}],[\"$\",\"link\",\"3\",{\"rel\":\"manifest\",\"href\":\"/app/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/app/icons/elanous-32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/app/icons/elanous-16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"}],[\"$\",\"link\",\"6\",{\"rel\":\"apple-touch-icon\",\"href\":\"/app/icons/elanous-180.png\",\"sizes\":\"180x180\",\"type\":\"image/png\"}],[\"$\",\"$L1c\",\"7\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"1a:\"$15:metadata\"\n"])</script></body></html>
|
|
1
|
+
<!DOCTYPE html><!--Q_7iofoxOEv1WX18S35of--><html lang="ko" class="font-sans __variable_7a3ec7"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/><link rel="preload" href="/app/_next/static/media/22a5144ee8d83bca-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/app/_next/static/css/72becfd42807b50d.css" data-precedence="next"/><link rel="stylesheet" href="/app/_next/static/css/085673d826b98b62.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/app/_next/static/chunks/webpack-4794f053bd5e4230.js"/><script src="/app/_next/static/chunks/b4e12462-5fab4a813a63dadd.js" async=""></script><script src="/app/_next/static/chunks/4658-7ed9266098a787e4.js" async=""></script><script src="/app/_next/static/chunks/main-app-27893e93b0ec193d.js" async=""></script><script src="/app/_next/static/chunks/8925-2abfb48af477fb7f.js" async=""></script><script src="/app/_next/static/chunks/6038-1e0f7ee1086da4cf.js" async=""></script><script src="/app/_next/static/chunks/5544-871146192d095594.js" async=""></script><script src="/app/_next/static/chunks/1669-da843ed73aa301f5.js" async=""></script><script src="/app/_next/static/chunks/6571-926ddf024a6ad5df.js" async=""></script><script src="/app/_next/static/chunks/7086-8bfa7e8f796a03d9.js" async=""></script><script src="/app/_next/static/chunks/4945-0f4046cfc3228ea3.js" async=""></script><script src="/app/_next/static/chunks/7990-cbf6a01bcbdcb7e6.js" async=""></script><script src="/app/_next/static/chunks/6777-312496b0d774719b.js" async=""></script><script src="/app/_next/static/chunks/4489-bf629de6f04f7681.js" async=""></script><script src="/app/_next/static/chunks/5287-72898b126d722457.js" async=""></script><script src="/app/_next/static/chunks/9400-7498ea90b2e6ee8f.js" async=""></script><script src="/app/_next/static/chunks/8469-1500be57e582296f.js" async=""></script><script src="/app/_next/static/chunks/app/layout-3267af1ebdc73cf5.js" async=""></script><script src="/app/_next/static/chunks/app/not-found-b7bb53828b17b335.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><link rel="preload" as="font" type="font/ttf" href="/app/fonts/JetBrainsMonoNerdFontMono-Regular.ttf" crossorigin="anonymous"/><meta name="theme-color" content="#1e1e2e"/><title>elanous</title><meta name="description" content="elanous — voice · chat · intake · control · terminal."/><meta name="application-name" content="elanous"/><link rel="manifest" href="/app/manifest.webmanifest"/><link rel="icon" href="/app/icons/elanous-32.png" sizes="32x32" type="image/png"/><link rel="icon" href="/app/icons/elanous-16.png" sizes="16x16" type="image/png"/><link rel="apple-touch-icon" href="/app/icons/elanous-180.png" sizes="180x180" type="image/png"/><script src="/app/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="min-h-screen bg-background text-foreground antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-screen w-full flex-col bg-background text-foreground"><header class="flex h-9 shrink-0 items-center gap-1 border-b border-border bg-background px-2 text-xs"><button type="button" aria-label="open menu" title="open menu" class="flex shrink-0 items-center gap-1.5 rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu h-4 w-4" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg><span class="hidden text-[11px] font-medium leading-none sm:inline">메뉴</span></button><div class="ml-auto flex items-center gap-1"><button type="button" data-share-capture-ui="true" aria-label="공유용 캡처" title="공유용 캡처 (beta) — 주소·토큰을 가린 사진을 데몬에 저장" class="rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-50"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-camera h-4 w-4" aria-hidden="true"><path d="M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z"></path><circle cx="12" cy="13" r="3"></circle></svg></button><a aria-label="voice" title="voice (HTTPS Tailscale Serve 필요)" class="rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground" href="/app/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-mic h-4 w-4" aria-hidden="true"><path d="M12 19v3"></path><path d="M19 10v2a7 7 0 0 1-14 0v-2"></path><rect x="9" y="2" width="6" height="13" rx="3"></rect></svg></a><div class="relative"><button type="button" aria-label="settings" title="session — · theme catppuccin-mocha" class="rounded-md p-1.5 hover:bg-accent text-muted-foreground hover:text-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings h-4 w-4" aria-hidden="true"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg></button></div></div></header><div class="flex flex-1 min-h-0"><aside class="hidden md:flex md:w-10 md:flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground"><nav class="flex h-full flex-col"><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><div class="flex-1 space-y-2 px-1 py-2"><section aria-label="오늘"><a title="오늘" aria-label="오늘" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/today/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-inbox h-4 w-4" aria-hidden="true"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12"></polyline><path d="M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"></path></svg></a></section><section aria-label="대화"><a title="대화" aria-label="대화" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/chat/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square h-4 w-4" aria-hidden="true"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg></a></section><section aria-label="일"><a title="일" aria-label="일" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/live/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-compass h-4 w-4" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z"></path></svg></a></section><section aria-label="만들기"><a title="만들기" aria-label="만들기" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/term/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-terminal h-4 w-4" aria-hidden="true"><path d="m7 11 2-2-2-2"></path><path d="M11 13h4"></path><rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect></svg></a></section><section aria-label="자료"><a title="자료" aria-label="자료" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/market/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open h-4 w-4" aria-hidden="true"><path d="M12 7v14"></path><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"></path></svg></a></section><section aria-label="설정"><a title="설정" aria-label="설정" class="relative flex justify-center rounded-md px-1.5 py-2 text-sidebar-foreground/70 hover:bg-sidebar-accent" href="/app/settings/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings h-4 w-4" aria-hidden="true"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg></a></section></div></nav></aside><main class="flex-1 overflow-auto min-w-0"><main data-testid="not-found" class="min-h-screen bg-gradient-to-b from-background via-background to-muted/40 px-6 py-12 sm:px-10"><div class="mx-auto flex w-full max-w-5xl flex-col gap-10"><header class="flex flex-col gap-3"><p class="text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground">elanous PWA</p><h1 class="text-3xl font-bold leading-tight sm:text-4xl">여기엔 없습니다</h1><p class="text-sm text-muted-foreground"><code>/_not-found/</code> 주소는 이 앱에 없습니다. 아래에서 지금 갈 수 있는 곳을 선택하거나 참고 주소의 사유를 확인하세요.</p></header><section aria-label="이동 가능한 주소와 참고 주소" class="grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3"><article data-testid="route-guidance-today" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/today/">오늘<!-- --> <code class="text-xs text-muted-foreground">/today</code></a></article><article data-testid="route-guidance-approvals" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/approvals/">승인 대기<!-- --> <code class="text-xs text-muted-foreground">/approvals</code></a></article><article data-testid="route-guidance-intake" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/intake/">넣기<!-- --> <code class="text-xs text-muted-foreground">/intake</code></a></article><article data-testid="route-guidance-chat" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/chat/">채팅<!-- --> <code class="text-xs text-muted-foreground">/chat</code></a></article><article data-testid="route-guidance-exec" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/exec/">COO 에게 맡기기<!-- --> <code class="text-xs text-muted-foreground">/exec</code></a></article><article data-testid="route-guidance-autopilot" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/autopilot/">미션<!-- --> <code class="text-xs text-muted-foreground">/autopilot</code></a></article><article data-testid="route-guidance-outputs" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/outputs/">산출물<!-- --> <code class="text-xs text-muted-foreground">/outputs</code></a></article><article data-testid="route-guidance-scheduler" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/scheduler/">예약<!-- --> <code class="text-xs text-muted-foreground">/scheduler</code></a></article><article data-testid="route-guidance-live" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/live/">Live<!-- --> <code class="text-xs text-muted-foreground">/live</code></a></article><article data-testid="route-guidance-trace" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/trace/">Trace<!-- --> <code class="text-xs text-muted-foreground">/trace</code></a></article><article data-testid="route-guidance-live-run" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/live-run/">런 장면<!-- --> <code class="text-xs text-muted-foreground">/live-run</code></a></article><article data-testid="route-guidance-term" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/term/">터미널<!-- --> <code class="text-xs text-muted-foreground">/term</code></a></article><article data-testid="route-guidance-editor" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/editor/">그래프<!-- --> <code class="text-xs text-muted-foreground">/editor</code></a></article><article data-testid="route-guidance-design-check" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/design-check/">디자인<!-- --> <code class="text-xs text-muted-foreground">/design-check</code></a></article><article data-testid="route-guidance-workspace" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/workspace/">여러 탭<!-- --> <code class="text-xs text-muted-foreground">/workspace</code></a></article><article data-testid="route-guidance-vault" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/vault/">Obsidian 노트<!-- --> <code class="text-xs text-muted-foreground">/vault</code></a></article><article data-testid="route-guidance-field" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/field/">현장 올리기<!-- --> <code class="text-xs text-muted-foreground">/field</code></a></article><article data-testid="route-guidance-market" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/market/">마켓<!-- --> <code class="text-xs text-muted-foreground">/market</code></a></article><article data-testid="route-guidance-settings" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/settings/">설정<!-- --> <code class="text-xs text-muted-foreground">/settings</code></a></article><article data-testid="route-guidance-ceo" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/ceo/">대표 조망판<!-- --> <code class="text-xs text-muted-foreground">/ceo</code></a></article><article data-testid="route-guidance-loops" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/loops/">루프 현황<!-- --> <code class="text-xs text-muted-foreground">/loops</code></a></article><article data-testid="route-guidance-ops-release" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/ops/release/">릴리스<!-- --> <code class="text-xs text-muted-foreground">/ops/release</code></a></article><article data-testid="route-guidance-ops-checklist" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/ops/checklist/">판별 피처<!-- --> <code class="text-xs text-muted-foreground">/ops/checklist</code></a></article><article data-testid="route-guidance-ops-seats" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/ops/seats/">자리 현황<!-- --> <code class="text-xs text-muted-foreground">/ops/seats</code></a></article><article data-testid="route-guidance-bots" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/bots/">봇<!-- --> <code class="text-xs text-muted-foreground">/bots</code></a></article><article data-testid="route-guidance-observatory" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/observatory/">관측<!-- --> <code class="text-xs text-muted-foreground">/observatory</code></a></article><article data-testid="route-guidance-worktrees" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/worktrees/">작업 트리<!-- --> <code class="text-xs text-muted-foreground">/worktrees</code></a></article><article data-testid="route-guidance-control" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/control/">제어<!-- --> <code class="text-xs text-muted-foreground">/control</code></a></article><article data-testid="route-guidance-tasks" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/tasks/">Tasks<!-- --> <code class="text-xs text-muted-foreground">/tasks</code></a></article><article data-testid="route-guidance-board" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/board/">보드<!-- --> <code class="text-xs text-muted-foreground">/board</code></a></article><article data-testid="route-guidance-sessions" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/sessions/">대화 카드<!-- --> <code class="text-xs text-muted-foreground">/sessions</code></a></article><article data-testid="route-guidance-reflection" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/reflection/">Reflection<!-- --> <code class="text-xs text-muted-foreground">/reflection</code></a></article><article data-testid="route-guidance-showroom" data-route-kind="destination" class="rounded-2xl border border-border/60 bg-card/60 p-5 shadow-sm"><a class="font-semibold underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" href="/app/showroom/">Showroom<!-- --> <code class="text-xs text-muted-foreground">/showroom</code></a></article><article data-testid="route-guidance-share" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/share</code></span><p class="text-sm leading-relaxed text-muted-foreground">운영체제가 공유 동작으로 호출하는 Share Target 진입점.</p></div></article><article data-testid="route-guidance-missions" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/missions</code></span><p class="text-sm leading-relaxed text-muted-foreground">`[id]`를 받는 동적 주소이며 부모 경로 자체는 없다.</p></div></article><article data-testid="route-guidance-setup" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/setup</code></span><p class="text-sm leading-relaxed text-muted-foreground">LLM provider 온보딩 진입점.</p></div></article><article data-testid="route-guidance-setup-done" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/setup/done</code></span><p class="text-sm leading-relaxed text-muted-foreground">LLM provider 온보딩 완료 화면.</p></div></article><article data-testid="route-guidance-settings-devices" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/settings/devices</code></span><p class="text-sm leading-relaxed text-muted-foreground">Settings 아래 Device fleet 하위 화면.</p></div></article><article data-testid="route-guidance-workflows" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/workflows</code></span><p class="text-sm leading-relaxed text-muted-foreground">기존 워크플로 링크를 /editor?mode=workflow 로 전달한다.</p></div></article><article data-testid="route-guidance-workflows-chat-ui" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/workflows/chat-ui</code></span><p class="text-sm leading-relaxed text-muted-foreground">Workflows에서 여는 hosted chat 하위 흐름.</p></div></article><article data-testid="route-guidance-root" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/</code></span><p class="text-sm leading-relaxed text-muted-foreground">첫 방문자를 위한 루트 welcome 화면.</p></div></article><article data-testid="route-guidance-404" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/404</code></span><p class="text-sm leading-relaxed text-muted-foreground">오류 페이지.</p></div></article><article data-testid="route-guidance-decisions" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/decisions</code></span><p class="text-sm leading-relaxed text-muted-foreground">대표 결정 화면(OPS-BOARD #24604) — /ceo 「결정 대기 카드」에서 들어간다(메뉴엔 /ceo 만).</p></div></article><article data-testid="route-guidance-consult" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/consult</code></span><p class="text-sm leading-relaxed text-muted-foreground">AX 도입 상담·과정 문의를 접수하는 입력 화면(CS1 · #22436).</p></div></article><article data-testid="route-guidance-morning" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/morning</code></span><p class="text-sm leading-relaxed text-muted-foreground">부르는 백엔드가 아직 없는 미배선 화면.</p></div></article><article data-testid="route-guidance-inside" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/inside</code></span><p class="text-sm leading-relaxed text-muted-foreground">시연자가 주소로 여는 엘라누스 안쪽 장면 지도(메뉴에는 노출하지 않음).</p></div></article><article data-testid="route-guidance-botlab" data-route-kind="reference" class="rounded-2xl border border-border/60 p-5 shadow-sm bg-muted/40"><div class="flex flex-col gap-2"><span class="font-semibold">참고 주소 <code class="text-xs text-muted-foreground">/botlab</code></span><p class="text-sm leading-relaxed text-muted-foreground">봇 화면 «벽»을 한 자리에서 보는 읽기 진단 화면(#15390 · 봇 운영자용).</p></div></article></section></div></main><!--$--><!--/$--></main></div><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--></div><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><script src="/app/_next/static/chunks/webpack-4794f053bd5e4230.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n"])</script><script>self.__next_f.push([1,"2:I[34257,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-3267af1ebdc73cf5.js\"],\"ServiceWorkerRegister\"]\n"])</script><script>self.__next_f.push([1,"3:I[41035,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-3267af1ebdc73cf5.js\"],\"NewBuildBanner\"]\n"])</script><script>self.__next_f.push([1,"4:I[7681,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-3267af1ebdc73cf5.js\"],\"DaemonProvider\"]\n"])</script><script>self.__next_f.push([1,"5:I[2821,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-3267af1ebdc73cf5.js\"],\"OperatorRoleDefault\"]\n"])</script><script>self.__next_f.push([1,"6:I[60621,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-3267af1ebdc73cf5.js\"],\"NexusClientProvider\"]\n"])</script><script>self.__next_f.push([1,"7:I[65558,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-3267af1ebdc73cf5.js\"],\"ThemeProvider\"]\n"])</script><script>self.__next_f.push([1,"8:I[93509,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-3267af1ebdc73cf5.js\"],\"TooltipProvider\"]\n"])</script><script>self.__next_f.push([1,"9:I[1544,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-3267af1ebdc73cf5.js\"],\"ToastProvider\"]\n"])</script><script>self.__next_f.push([1,"a:I[80031,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-3267af1ebdc73cf5.js\"],\"AppShell\"]\n"])</script><script>self.__next_f.push([1,"b:I[51153,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"1669\",\"static/chunks/1669-da843ed73aa301f5.js\",\"6571\",\"static/chunks/6571-926ddf024a6ad5df.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"4945\",\"static/chunks/4945-0f4046cfc3228ea3.js\",\"7990\",\"static/chunks/7990-cbf6a01bcbdcb7e6.js\",\"6777\",\"static/chunks/6777-312496b0d774719b.js\",\"4489\",\"static/chunks/4489-bf629de6f04f7681.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"9400\",\"static/chunks/9400-7498ea90b2e6ee8f.js\",\"8469\",\"static/chunks/8469-1500be57e582296f.js\",\"7177\",\"static/chunks/app/layout-3267af1ebdc73cf5.js\"],\"MaturityBanner\"]\n"])</script><script>self.__next_f.push([1,"c:I[22261,[],\"\"]\nd:I[24945,[],\"\"]\ne:I[18220,[\"8925\",\"static/chunks/8925-2abfb48af477fb7f.js\",\"6038\",\"static/chunks/6038-1e0f7ee1086da4cf.js\",\"5544\",\"static/chunks/5544-871146192d095594.js\",\"7086\",\"static/chunks/7086-8bfa7e8f796a03d9.js\",\"5287\",\"static/chunks/5287-72898b126d722457.js\",\"4345\",\"static/chunks/app/not-found-b7bb53828b17b335.js\"],\"default\"]\nf:I[54460,[],\"ClientPageRoot\"]\n12:I[32840,[],\"OutletBoundary\"]\n14:I[5537,[],\"AsyncMetadataOutlet\"]\n16:I[32840,[],\"ViewportBoundary\"]\n18:I[32840,[],\"MetadataBoundary\"]\n19:\"$Sreact.suspense\"\n1b:I[88503,[],\"\"]\n:HL[\"/app/_next/static/media/22a5144ee8d83bca-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/app/_next/static/css/72becfd42807b50d.css\",\"style\"]\n:HL[\"/app/_next/static/css/085673d826b98b62.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"Q-7iofoxOEv1WX18S35of\",\"p\":\"/app\",\"c\":[\"\",\"_not-found\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/app/_next/static/css/72becfd42807b50d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/app/_next/static/css/085673d826b98b62.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ko\",\"className\":\"font-sans __variable_7a3ec7\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"link\",null,{\"rel\":\"preload\",\"as\":\"font\",\"type\":\"font/ttf\",\"href\":\"/app/fonts/JetBrainsMonoNerdFontMono-Regular.ttf\",\"crossOrigin\":\"anonymous\"}]}],[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-background text-foreground antialiased\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{}],[\"$\",\"$L4\",null,{\"children\":[[\"$\",\"$L5\",null,{}],[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$La\",null,{\"children\":[[\"$\",\"$Lb\",null,{}],[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$Le\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]}]}]}]]}]]}]]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$Lf\",null,{\"Component\":\"$e\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@10\",\"$@11\"]}],null,[\"$\",\"$L12\",null,{\"children\":[\"$L13\",[\"$\",\"$L14\",null,{\"promise\":\"$@15\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L16\",null,{\"children\":\"$L17\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L18\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$19\",null,{\"fallback\":null,\"children\":\"$L1a\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$1b\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"10:{}\n11:\"$0:f:0:1:2:children:2:children:1:props:children:0:props:params\"\n"])</script><script>self.__next_f.push([1,"17:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#1e1e2e\"}]]\n13:null\n"])</script><script>self.__next_f.push([1,"1c:I[28113,[],\"IconMark\"]\n"])</script><script>self.__next_f.push([1,"15:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"elanous\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"elanous — voice · chat · intake · control · terminal.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"elanous\"}],[\"$\",\"link\",\"3\",{\"rel\":\"manifest\",\"href\":\"/app/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/app/icons/elanous-32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/app/icons/elanous-16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"}],[\"$\",\"link\",\"6\",{\"rel\":\"apple-touch-icon\",\"href\":\"/app/icons/elanous-180.png\",\"sizes\":\"180x180\",\"type\":\"image/png\"}],[\"$\",\"$L1c\",\"7\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"1a:\"$15:metadata\"\n"])</script></body></html>
|
package/apps/pwa/out/_next/static/chunks/{272-b23d2e92161d11fd.js → 272-0eed0fb0aab716b6.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[272],{272:(e,t,s)=>{s.d(t,{B:()=>T});var n=s(26940),a=s(10672),r=s(7681),l=s(1212);class i{buildSnapshot(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:80;return this.client.fetchJson("/v1/builds/".concat(encodeURIComponent(e),"?tail=").concat(t))}list(){return this.client.fetchJson("/v1/tasks")}detail(e){return this.client.fetchJson("/v1/tasks/".concat(encodeURIComponent(e)))}constructor(e){this.client=e}}var d=s(60600),o=s(49393),c=s(81669),u=s(73365);class m extends Error{constructor(e,t,s){super("fluent-chain ".concat(e," on ").concat(t)),this.status=e,this.path=t,this.body=s,this.name="FluentChainApiError"}}function x(e){var t;let s=e.baseUrl.replace(/\/+$/,""),n=null!=(t=e.fetchImpl)?t:fetch,a="/v1/next-fluent/preview";return{async preview(t){let r={"content-type":"application/json"};e.authHeader&&(r.authorization=e.authHeader);let l=await n("".concat(s).concat(a),{method:"POST",headers:r,body:JSON.stringify(t)});if(204===l.status)return{kind:"no-suggestions",enabled:!0};let i=await l.json().catch(()=>null);if(409===l.status){let e=!!i&&"object"==typeof i&&"enabled"in i&&!!i.enabled;return e?{kind:"no-suggestions",enabled:e}:{kind:"disabled"}}if(503===l.status&&i&&"object"==typeof i&&"next-fluent-not-wired"===i.error)return{kind:"disabled"};if(!l.ok||!(null==i?void 0:i.card))throw new m(l.status,a,i);return{kind:"card",card:i.card}},async dispatch(t,a){let r={"content-type":"application/json"};e.authHeader&&(r.authorization=e.authHeader);let l=u.m,i=await n("".concat(s).concat(l),{method:"POST",headers:r,body:JSON.stringify({refId:t,action:a})}),d=await i.json().catch(()=>null);return d&&"object"==typeof d&&"ok"in d?d:{ok:!1,error:"dispatch ".concat(i.status)}}}}function p(e){var t;let[s,r]=(0,a.useState)({kind:"loading"});if((0,a.useEffect)(()=>{var t;let s=!1;return(null!=(t=e.api)?t:x({baseUrl:window.location.origin})).preview(e.trigger).then(e=>{s||("card"===e.kind?r({kind:"card",card:e.card}):"no-suggestions"===e.kind?r({kind:"empty"}):r({kind:"disabled"}))}).catch(e=>{s||r({kind:"error",message:e instanceof Error?e.message:String(e)})}),()=>{s=!0}},[e.api,e.trigger.refId,e.trigger.refKind,e.trigger.outcome,e.trigger.completedAt]),"loading"===s.kind)return(0,n.jsx)("span",{className:"text-xs opacity-60",children:"checking next-action…"});if("disabled"===s.kind||"empty"===s.kind)return null;if("error"===s.kind)return(0,n.jsxs)("span",{className:"text-xs text-rose-700",children:["next-action: ",s.message]});let l=null!=(t=e.limit)?t:3,i=s.card.suggestions.slice(0,l);return 0===i.length?null:(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-1 text-xs","data-fluent-ref":e.trigger.refId,children:[(0,n.jsx)("span",{className:"opacity-60",children:"next:"}),i.map(t=>(0,n.jsxs)("button",{type:"button",className:"rounded-full border border-zinc-300 bg-white px-2 py-0.5 hover:bg-zinc-50",onClick:()=>{var s;return null==(s=e.onChoose)?void 0:s.call(e,t.kind,t)},title:t.reason||t.kind,children:[t.kind,"none"!==t.endorsedBy&&(0,n.jsxs)("span",{className:"ml-1 text-[10px] opacity-60",children:["\xb7 ",t.endorsedBy]})]},t.kind))]})}class h extends Error{constructor(e,t,s){super("idle-nudge ".concat(e," on ").concat(t)),this.status=e,this.path=t,this.body=s,this.name="IdleNudgeApiError"}}function g(e){let[t,s]=(0,a.useState)({kind:"loading"});if((0,a.useEffect)(()=>{var t;let n=!1;return(null!=(t=e.api)?t:function(e){var t;let s=e.baseUrl.replace(/\/+$/,""),n=null!=(t=e.fetchImpl)?t:fetch,a=u.J3;return{async preview(t){let r={"content-type":"application/json"};e.authHeader&&(r.authorization=e.authHeader);let l=await n("".concat(s).concat(a),{method:"POST",headers:r,body:JSON.stringify(t)}),i=await l.json().catch(()=>null);if(!l.ok)throw new h(l.status,a,i);return i}}}({baseUrl:window.location.origin})).preview(e.request).then(e=>{n||("nudge"===e.decision.kind&&e.record?s({kind:"nudge",decision:e.decision,record:e.record}):"defer"===e.decision.kind?s({kind:"defer",nextAt:e.decision.nextEligibleAt}):s({kind:"idle"}))}).catch(e=>{n||s({kind:"error",message:e instanceof h?"Idle-nudge error (".concat(e.status,")"):e instanceof Error?e.message:String(e)})}),()=>{n=!0}},[e.api,e.request.taskId,e.request.observedAt,e.request.status,e.request.enteredStatusAt]),"loading"===t.kind||"idle"===t.kind)return null;if("defer"===t.kind)return(0,n.jsxs)("span",{className:"text-[10px] opacity-60",children:["nudge deferred until ",new Date(t.nextAt).toLocaleTimeString()]});if("error"===t.kind)return(0,n.jsx)("span",{className:"text-[10px] text-rose-700",children:t.message});let r=Math.round(t.decision.idleMs/36e5);return(0,n.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1 rounded-full border border-amber-300 bg-amber-50 px-2 py-0.5 text-[11px] text-amber-900 hover:bg-amber-100",onClick:()=>{var s;return null==(s=e.onOpenShowroom)?void 0:s.call(e,t.record.showroomSessionId)},title:"Idle ".concat(r,"h \xb7 click to open nudge room"),"data-task-id":t.record.taskId,children:[(0,n.jsx)("span",{"aria-hidden":!0,children:"⏳"}),"idle ",r,"h \xb7 ",t.record.lanes.length," lanes"]})}var f=s(76514);let b=(0,a.createContext)(null),v=new Set(["ready","running","review","blocked"]),y=new Set(["done","failed"]),k=[{id:"backlog",label:"Backlog",statuses:["backlog","blocked"]},{id:"scheduled",label:"Scheduled",statuses:["scheduled"]},{id:"ready",label:"Ready",statuses:["ready"]},{id:"running",label:"Running",statuses:["running"]},{id:"review",label:"Review",statuses:["review"]},{id:"closed",label:"Closed",statuses:["done","failed","cancelled","superseded"]}],j={urgent:"bg-red-500/15 text-red-300 ring-red-500/30",high:"bg-amber-500/15 text-amber-200 ring-amber-500/30",medium:"bg-sky-500/15 text-sky-200 ring-sky-500/30",low:"bg-muted text-muted-foreground ring-border"},N={pending:"bg-slate-500/15 text-slate-300 ring-slate-500/30",active:"bg-sky-500/15 text-sky-200 ring-sky-500/30",verifying:"bg-amber-500/15 text-amber-200 ring-amber-500/30",done:"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30",failed:"bg-red-500/15 text-red-300 ring-red-500/30"};function w(e){let t=Math.max(0,Math.floor((Date.now()-e)/1e3));if(t<60)return"".concat(t,"s ago");let s=Math.floor(t/60);if(s<60)return"".concat(s,"m ago");let n=Math.floor(s/60);return n<24?"".concat(n,"h ago"):"".concat(Math.floor(n/24),"d ago")}let S={running:0,review:1,ready:2,blocked:3,backlog:4,done:5,failed:5,cancelled:6,superseded:6,scheduled:3};function C(e){var t;let{group:s,selectedId:r,onSelect:l,arcDetail:i}=e,d=s.total>0?Math.round(s.doneCount/s.total*100):0,[o,c]=(0,a.useState)(!1),u=(null!=(t=null==i?void 0:i.length)?t:0)>0;return(0,n.jsxs)("section",{className:"rounded-2xl border border-border bg-muted/20 p-3",children:[(0,n.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-2",children:[!s.isStandalone&&(0,n.jsx)("span",{className:"text-xs",children:"\uD83C\uDFAF"}),u&&(0,n.jsx)("button",{type:"button",onClick:()=>c(e=>!e),className:"text-xs text-muted-foreground hover:text-foreground",title:"아크 상세",children:o?"▾":"▸"}),(0,n.jsx)("h2",{className:"text-sm font-semibold",title:s.missionTitle,children:s.missionTitle}),(0,n.jsxs)("span",{className:"rounded-full bg-background px-2 py-0.5 text-[11px] text-muted-foreground",children:[s.doneCount,"/",s.total," \xb7 ",d,"%"]}),s.runningCount>0&&(0,n.jsxs)("span",{className:"animate-pulse rounded-full bg-sky-500/15 px-2 py-0.5 text-[10px] text-sky-200 ring-1 ring-sky-500/30",children:["● ",s.runningCount," 빌드중"]}),s.failedCount>0&&(0,n.jsxs)("span",{className:"rounded-full bg-red-500/15 px-2 py-0.5 text-[10px] text-red-300 ring-1 ring-red-500/30",children:["✗ ",s.failedCount," 실패"]})]}),s.arcs.length>0&&(0,n.jsx)("div",{className:"mb-2 flex flex-wrap gap-1.5",children:s.arcs.map((e,t)=>{var s;return(0,n.jsxs)("span",{className:"flex items-center gap-1 text-[10px]",children:[t>0&&(0,n.jsx)("span",{className:"text-muted-foreground",children:"→"}),(0,n.jsxs)("span",{className:"rounded-full px-2 py-0.5 ring-1 ".concat(null!=(s=N[e.status])?s:N.pending),children:["⬡ ",e.name," ",e.done,"/",e.total]})]},e.name)})}),o&&u&&(0,n.jsx)("div",{className:"mb-3 space-y-1.5 rounded-xl border border-border bg-background/40 p-2",children:i.map((e,t)=>{var s,a,r,l;let i="failed"===e.status||(null==(s=e.verifyResult)?void 0:s.ok)===!1;return(0,n.jsxs)("div",{className:"text-[11px]",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,n.jsxs)("span",{className:"text-muted-foreground",children:["아크 ",t+1]}),(0,n.jsxs)("span",{className:"rounded-full px-2 py-0.5 ring-1 ".concat(null!=(l=N[e.status])?l:N.pending),children:["⬡ ",e.name," \xb7 ",e.status]}),e.dependsOnArcs.length>0&&(0,n.jsxs)("span",{className:"text-muted-foreground",children:["← 선행 ",e.dependsOnArcs.length]})]}),(0,n.jsx)("div",{className:"mt-0.5 pl-1 text-muted-foreground",children:e.intent}),i&&(null==(a=e.verifyResult)?void 0:a.missing)&&(0,n.jsxs)("div",{className:"mt-0.5 rounded-md bg-red-500/10 px-2 py-1 text-red-300",children:["\uD83D\uDD12 아크 통합검증 실패: ",e.verifyResult.missing,(0,n.jsx)("div",{className:"text-red-400/70",children:"→ arc-revise 초안 카드가 발송됩니다(페이즈는 완료돼도 아크로는 미충족)."})]}),(null==(r=e.verifyResult)?void 0:r.ok)&&(0,n.jsxs)("div",{className:"mt-0.5 pl-1 text-emerald-400/70",children:["✓ 통합검증 통과: ",e.verifyResult.evidence.slice(0,80)]}),e.preflightVerdict&&"founded"!==e.preflightVerdict.verdict&&(0,n.jsxs)("div",{className:"mt-0.5 rounded-md bg-amber-500/10 px-2 py-1 text-amber-300",children:["⚠️ pre-flight: ","mirage"===e.preflightVerdict.verdict?"허상 의심":"과대 범위"," → ",e.preflightVerdict.action,(0,n.jsx)("div",{className:"text-amber-400/70",children:e.preflightVerdict.reason.slice(0,120)})]})]},e.arcId)})}),(0,n.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2 xl:grid-cols-3",children:s.tasks.map(e=>(0,n.jsx)(I,{task:e,selected:e.id===r,onClick:()=>l(e.id)},e.id))})]})}function A(e){var t;let{api:s,buildId:r}=e,[l,i]=(0,a.useState)(null),[d,o]=(0,a.useState)(null),c=(0,a.useRef)(null);return(0,a.useEffect)(()=>{let e,t=!1,n=async()=>{try{let a=await s.buildSnapshot(r,120);if(t)return;i(a),o(null),"running"===a.build.status&&(e=window.setTimeout(()=>void n(),2e3))}catch(e){t||o(e instanceof Error?e.message:String(e))}};return n(),()=>{t=!0,e&&window.clearTimeout(e)}},[s,r]),(0,a.useEffect)(()=>{c.current&&(c.current.scrollTop=c.current.scrollHeight)},[l]),(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 text-[11px]",children:[(0,n.jsx)("span",{className:"font-medium",children:"빌드 로그"}),(0,n.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5 text-muted-foreground",children:r}),l&&(0,n.jsx)("span",{className:"rounded-full px-2 py-0.5 ring-1 ".concat("running"===l.build.status?"bg-sky-500/15 text-sky-200 ring-sky-500/30":"bg-muted text-muted-foreground ring-border"),children:"running"===l.build.status?"● 라이브":l.build.status}),(null==l?void 0:l.diffStat)&&(0,n.jsxs)("span",{className:"text-muted-foreground",children:["+",l.diffStat.insertions,"/-",l.diffStat.deletions," \xb7 ",l.diffStat.files,"파일"]})]}),d&&(0,n.jsxs)("div",{className:"text-[11px] text-red-300",children:["로그 조회 실패: ",d]}),(0,n.jsx)("div",{ref:c,className:"max-h-64 overflow-auto rounded-lg border border-border bg-background/60 p-2 font-mono text-[10px] leading-relaxed text-muted-foreground",children:(null==l||null==(t=l.logTail)?void 0:t.length)?l.logTail.map((e,t)=>(0,n.jsx)("div",{className:"whitespace-pre-wrap break-all",children:e},t)):(0,n.jsx)("div",{className:"opacity-60",children:"로그 대기 중…"})})]})}function I(e){var t,s,a;let{task:r,selected:l,onClick:i}=e;return(0,n.jsxs)("button",{type:"button",onClick:i,className:["w-full rounded-xl border p-3 text-left transition-colors",l?"border-primary bg-primary/10 ring-1 ring-primary/40":"border-border bg-card hover:bg-accent/40"].join(" "),children:[(0,n.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,n.jsxs)("div",{className:"min-w-0",children:[r.missionTitle&&(0,n.jsxs)("div",{className:"mb-1 flex items-center gap-1 truncate text-[10px] text-indigo-300",title:r.missionTitle,children:[(0,n.jsx)("span",{className:"shrink-0",children:"\uD83C\uDFAF 미션"}),(0,n.jsx)("span",{className:"truncate opacity-80",children:r.missionTitle})]}),(0,n.jsx)("div",{className:"text-sm font-medium leading-5",children:r.title}),(0,n.jsx)("div",{className:"mt-1 text-[11px] text-muted-foreground",children:r.id})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1.5",children:[r.dryRun&&(0,n.jsx)("span",{className:"rounded-full bg-emerald-500/15 px-2 py-0.5 text-[10px] text-emerald-300",children:"dry run"}),(0,n.jsx)("span",{className:"rounded-full px-2 py-0.5 text-[10px] ring-1 ".concat(null!=(t=j[r.priority])?t:j.low),children:r.priority})]})]}),(0,n.jsxs)("div",{className:"mt-3 flex flex-wrap gap-1.5 text-[11px] text-muted-foreground",children:[(0,n.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5",children:r.surfaceKind}),"running"===r.status&&r.build&&(0,n.jsxs)("span",{className:"flex items-center gap-1 rounded-full bg-sky-500/15 px-2 py-0.5 text-sky-200 ring-1 ring-sky-500/30",title:"빌드 ".concat(r.build.buildId," \xb7 ").concat(r.build.backend).concat(r.build.maxTurns?" \xb7 ".concat(r.build.maxTurns,"턴"):""),children:[(0,n.jsx)("span",{className:"animate-pulse",children:"●"})," 빌드중 ",r.build.backend.replace(/^elanous-self:/,"")," 시도",r.build.attemptSeq]}),r.arcName&&(0,n.jsxs)("span",{className:"rounded-full px-2 py-0.5 ring-1 ".concat(null!=(a=N[null!=(s=r.arcStatus)?s:"pending"])?a:N.pending),title:"아크: ".concat(r.arcName).concat(r.arcStatus?" \xb7 ".concat(r.arcStatus):""),children:["⬡ ",r.arcName,r.phaseIndexInArc&&r.arcTotalPhases?" \xb7 ".concat(r.phaseIndexInArc,"/").concat(r.arcTotalPhases):""]}),r.featureName&&(0,n.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5",children:r.featureName}),r.scheduleText&&(0,n.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5",children:r.scheduleText}),r.showroomSessionId&&(0,n.jsx)("a",{href:"/showroom?session=".concat(encodeURIComponent(r.showroomSessionId)),onClick:e=>e.stopPropagation(),className:"rounded-full bg-sky-500/15 px-2 py-0.5 text-sky-200 ring-1 ring-sky-500/30 hover:bg-sky-500/25",title:"Open showroom session ".concat(r.showroomSessionId),children:"↗ showroom"})]}),(0,n.jsxs)("div",{className:"mt-3 flex items-center justify-between text-[11px] text-muted-foreground",children:[(0,n.jsxs)("span",{children:["attempt ",r.attempt,"/",r.maxRetries]}),(0,n.jsx)("span",{children:w(r.updatedAt)})]}),(0,n.jsx)(M,{task:r})]})}function M(e){let{task:t}=e,s=y.has(t.status),r=v.has(t.status),l=(0,a.useContext)(b);return s||r?(0,n.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-2",onClick:e=>e.stopPropagation(),children:[s&&(0,n.jsx)(p,{trigger:{refId:t.id,refKind:"task",finishedSurface:function(e){switch(e){case"terminal-pane":case"vw-slot":case"subagent":case"skill":case"chat-prompt":case"cron":case"llm-direct":case"acx-session":case"showroom":return e;default:return null}}(t.surfaceKind),outcome:"done"===t.status?"ok":"failed",completedAt:t.updatedAt,...t.featureName?{tags:[t.featureName]}:{}},...l?{onChoose:e=>{l(t.id,e)}}:{}}),r&&(0,n.jsx)(g,{request:{taskId:t.id,status:t.status,enteredStatusAt:t.updatedAt,observedAt:Date.now(),taskTitle:t.title}})]}):null}function R(e){let{label:t,value:s}=e;return(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsx)("div",{className:"text-[11px] uppercase tracking-wide text-muted-foreground",children:t}),(0,n.jsx)("div",{className:"text-sm",children:s})]})}function T(){var e,t,s,u,m,p;let{client:h}=(0,r.Q)(),g=(0,a.useMemo)(()=>new i(h),[h]),v=(0,a.useMemo)(()=>new d.Yt(h),[h]),[y,j]=(0,a.useState)(""),[N,M]=(0,a.useState)(!1),[T,J]=(0,a.useState)(new Map),[E,O]=(0,a.useState)([]),[D,P]=(0,a.useState)(null),[U,_]=(0,a.useState)(null),[F,H]=(0,a.useState)(null),[q,z]=(0,a.useState)(!1),[K,L]=(0,a.useState)(!1),[V,B]=(0,a.useState)("mission"),$=(0,a.useCallback)(async()=>{(0,o.cY)("webterm.tasks.list.refresh",{}),z(!0);try{let e=await g.list();O(e.tasks),P(e.summary),v.missionArcMap().then(J).catch(()=>{}),_(t=>t&&e.tasks.some(e=>e.id===t)?t:null)}catch(e){c.oR.error("task board failed: ".concat(e instanceof Error?e.message:e))}finally{z(!1)}},[g,v]),Y=(0,a.useCallback)(async(e,t)=>{try{var s;let n=await x({baseUrl:window.location.origin}).dispatch(e,t);n.ok?c.oR.success("".concat(t," 실행됨")):c.oR.error("".concat(t," 실패: ").concat(null!=(s=n.error)?s:""))}catch(e){c.oR.error("".concat(t," 실패: ").concat(e instanceof Error?e.message:e))}await $()},[$]),G=(0,a.useCallback)(async()=>{let e=y.trim();if(e&&!N){M(!0);try{let t=await v.commitMission(e,"intake");t.ok?(c.oR.success("태스크 생성 → 미션 fabric 이 플랜화 중".concat(t.missionId?" (".concat(t.missionId,")"):"")),j(""),setTimeout(()=>void $(),1200)):c.oR.error("태스크 생성 실패")}catch(e){c.oR.error("태스크 생성 실패: ".concat(e instanceof Error?e.message:e))}finally{M(!1)}}},[y,N,v,$]);(0,a.useEffect)(()=>{$();let e=window.setInterval(()=>void $(),15e3);return()=>window.clearInterval(e)},[$]),(0,a.useEffect)(()=>{if(!U)return void H(null);let e=!1;return L(!0),(async()=>{try{var t;let s=await g.detail(U);if(e)return;H({task:s.task,executions:s.executions.map(e=>({id:e.id,status:e.status,startedAt:e.startedAt,durationMs:e.durationMs,output:e.output})),events:s.events,linkedSchedulerJob:null!=(t=s.linkedSchedulerJob)?t:null})}catch(t){e||c.oR.error("task detail failed: ".concat(t instanceof Error?t.message:t))}finally{e||L(!1)}})(),()=>{e=!0}},[g,U]);let Q=(0,a.useMemo)(()=>k.map(e=>({...e,tasks:E.filter(t=>e.statuses.some(e=>e===t.status))})),[E]),W=(0,a.useMemo)(()=>(function(e){var t,s,n,a,r,l,i;let d=new Map;for(let n of e){let e=n.missionTitle?null!=(t=n.goalSlug)?t:n.missionTitle:"__standalone__";(null!=(s=d.get(e))?s:d.set(e,[]).get(e)).push(n)}let o=[];for(let[e,t]of Array.from(d.entries())){let s="__standalone__"===e,d=new Map;for(let e of t)if(e.arcName){let t=null!=(l=d.get(e.arcName))?l:{name:e.arcName,total:0,done:0,status:null!=(a=e.arcStatus)?a:"pending",index:null!=(r=e.arcIndex)?r:0};t.total+=1,"done"===e.status&&(t.done+=1),e.arcStatus&&(t.status=e.arcStatus),d.set(e.arcName,t)}let c=[...t].sort((e,t)=>{var s,n;return(null!=(s=S[e.status])?s:9)-(null!=(n=S[t.status])?n:9)||t.createdAt-e.createdAt});o.push({key:e,missionTitle:s?"독립 태스크 (미션 외)":null!=(i=null==(n=t[0])?void 0:n.missionTitle)?i:e,tasks:c,total:t.length,doneCount:t.filter(e=>"done"===e.status).length,runningCount:t.filter(e=>"running"===e.status).length,failedCount:t.filter(e=>"failed"===e.status).length,arcs:Array.from(d.values()).sort((e,t)=>e.index-t.index),isStandalone:s})}return o.sort((e,t)=>{if(e.isStandalone!==t.isStandalone)return e.isStandalone?1:-1;let s=e.runningCount>0||e.doneCount<e.total;return s!==(t.runningCount>0||t.doneCount<t.total)?s?-1:1:t.total-e.total})})(E),[E]);return(0,n.jsx)(b.Provider,{value:Y,children:(0,n.jsxs)("div",{className:"mx-auto max-w-[1600px] space-y-4 p-4",children:[(0,n.jsx)(f.r,{active:"tasks"}),(0,n.jsxs)("header",{className:"flex flex-col gap-3 lg:flex-row lg:items-end lg:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Task Manager"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"TOX board snapshot for backlog, running work, and closed items."})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[D&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"rounded-lg border border-border bg-card px-3 py-2 text-xs",children:[(0,n.jsx)("div",{className:"text-muted-foreground",children:"open"}),(0,n.jsx)("div",{className:"text-sm font-semibold",children:D.open})]}),(0,n.jsxs)("div",{className:"rounded-lg border border-border bg-card px-3 py-2 text-xs",children:[(0,n.jsx)("div",{className:"text-muted-foreground",children:"closed"}),(0,n.jsx)("div",{className:"text-sm font-semibold",children:D.terminal})]}),(0,n.jsxs)("div",{className:"rounded-lg border border-border bg-card px-3 py-2 text-xs",children:[(0,n.jsx)("div",{className:"text-muted-foreground",children:"linked schedules"}),(0,n.jsx)("div",{className:"text-sm font-semibold",children:D.linkedScheduler})]})]}),(0,n.jsxs)("div",{className:"flex rounded-lg border border-border bg-card p-0.5 text-xs",children:[(0,n.jsx)("button",{type:"button",onClick:()=>B("mission"),className:"rounded-md px-2.5 py-1 ".concat("mission"===V?"bg-primary/20 text-primary":"text-muted-foreground hover:text-foreground"),children:"\uD83C\uDFAF 미션별"}),(0,n.jsx)("button",{type:"button",onClick:()=>B("kanban"),className:"rounded-md px-2.5 py-1 ".concat("kanban"===V?"bg-primary/20 text-primary":"text-muted-foreground hover:text-foreground"),children:"칸반"})]}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>void $(),disabled:q,children:"Refresh"})]})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2 rounded-xl border border-border bg-card p-2",children:[(0,n.jsx)("span",{className:"pl-1 text-sm text-muted-foreground",children:"+"}),(0,n.jsx)("input",{type:"text",value:y,onChange:e=>j(e.target.value),onKeyDown:e=>{"Enter"===e.key&&G()},placeholder:"새 태스크(골)를 입력하면 미션 fabric 이 플랜화→구현→DONE… 예: 'README 중복 정리 리포트 만들어줘'",className:"min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground/60",disabled:N}),(0,n.jsx)(l.$,{size:"sm",onClick:()=>void G(),disabled:N||!y.trim(),children:N?"생성 중…":"Create Task"})]}),(0,n.jsxs)("div",{className:"flex flex-col gap-4 xl:flex-row xl:items-start",children:[(0,n.jsx)("section",{className:"min-w-0 flex-1 space-y-3",children:"mission"===V?(0,n.jsx)("div",{className:"space-y-3",children:W.length>0?W.map(e=>{var t;return(0,n.jsx)(C,{group:e,selectedId:U,onSelect:_,arcDetail:null==(t=T.get(e.key))?void 0:t.arcs},e.key)}):(0,n.jsx)("div",{className:"rounded-xl border border-dashed border-border px-3 py-12 text-center text-sm text-muted-foreground",children:"미션/태스크 없음"})}):(0,n.jsx)("div",{className:"pb-2",children:(0,n.jsx)("div",{className:"flex flex-wrap gap-3",children:Q.map(e=>(0,n.jsxs)("div",{className:"min-w-[170px] flex-1 rounded-2xl border border-border bg-muted/30 p-3",children:[(0,n.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,n.jsx)("h2",{className:"text-sm font-semibold",children:e.label}),(0,n.jsx)("span",{className:"rounded-full bg-background px-2 py-0.5 text-[11px] text-muted-foreground",children:e.tasks.length})]}),(0,n.jsx)("div",{className:"space-y-2",children:e.tasks.length>0?e.tasks.map(e=>(0,n.jsx)(I,{task:e,selected:e.id===U,onClick:()=>_(e.id)},e.id)):(0,n.jsx)("div",{className:"rounded-xl border border-dashed border-border px-3 py-8 text-center text-xs text-muted-foreground",children:"no tasks"})})]},e.id))})})}),U&&(0,n.jsxs)("aside",{className:"w-full shrink-0 space-y-3 rounded-2xl border border-border bg-card p-4 xl:w-[360px]",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between",children:[(0,n.jsx)("h2",{className:"text-base font-semibold",children:"Detail"}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(null==F?void 0:F.task)&&(0,n.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5 text-[11px] text-muted-foreground",children:F.task.status}),(0,n.jsx)("button",{type:"button",onClick:()=>_(null),className:"rounded-md px-1.5 py-0.5 text-xs text-muted-foreground hover:bg-accent/40 hover:text-foreground","aria-label":"Close detail",children:"✕"})]})]}),K||!F?(0,n.jsx)("div",{className:"text-sm text-muted-foreground",children:"Loading task detail…"}):(0,n.jsxs)("div",{className:"space-y-4",children:[(()=>{let e=E.find(e=>e.id===U);return(null==e?void 0:e.status)==="running"&&e.build?(0,n.jsx)(A,{api:g,buildId:e.build.buildId}):null})(),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"text-lg font-semibold leading-6",children:F.task.title}),(0,n.jsx)("div",{className:"mt-1 text-xs text-muted-foreground",children:F.task.id}),F.task.description&&(0,n.jsx)("p",{className:"mt-3 whitespace-pre-wrap text-sm text-muted-foreground",children:F.task.description})]}),(0,n.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,n.jsx)(R,{label:"Surface",value:F.task.surface.kind}),(0,n.jsx)(R,{label:"Priority",value:F.task.priority}),(0,n.jsx)(R,{label:"Goal",value:null!=(u=F.task.goalSlug)?u:"—"}),(0,n.jsx)(R,{label:"Feature",value:null!=(m=F.task.featureName)?m:"—"}),(0,n.jsx)(R,{label:"Depends On",value:F.task.dependsOn.length>0?F.task.dependsOn.join(", "):"—"}),(0,n.jsx)(R,{label:"Schedule",value:null!=(p=F.task.schedulerJobId)?p:"—"})]}),F.linkedSchedulerJob&&(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-muted/40 px-3 py-2 text-sm",children:["linked schedule: ",F.linkedSchedulerJob.title,(0,n.jsx)("span",{className:"ml-2 text-xs text-muted-foreground",children:F.linkedSchedulerJob.taskId}),(null==(e=F.linkedSchedulerJob.taskMeta)?void 0:e.dryRun)&&(0,n.jsxs)("span",{className:"ml-2 rounded-full bg-emerald-500/15 px-2 py-0.5 text-[10px] text-emerald-300",children:["dry run",F.linkedSchedulerJob.taskMeta.dryRunOutcome?" \xb7 ".concat(F.linkedSchedulerJob.taskMeta.dryRunOutcome):""]})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("div",{className:"text-sm font-semibold",children:"Acceptance"}),(null==(s=F.task.acceptance)||null==(t=s.criteria)?void 0:t.length)?(0,n.jsx)("ul",{className:"space-y-1 text-sm text-muted-foreground",children:F.task.acceptance.criteria.map(e=>(0,n.jsx)("li",{className:"rounded-lg bg-muted/50 px-3 py-2",children:e},e))}):(0,n.jsx)("div",{className:"text-sm text-muted-foreground",children:"No acceptance criteria."})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("div",{className:"text-sm font-semibold",children:"Recent Executions"}),F.executions.length>0?(0,n.jsx)("div",{className:"space-y-2",children:F.executions.map(e=>(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-background p-3",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between text-sm",children:[(0,n.jsx)("span",{className:"font-medium",children:e.status}),(0,n.jsx)("span",{className:"text-xs text-muted-foreground",children:w(e.startedAt)})]}),void 0!==e.durationMs&&(0,n.jsxs)("div",{className:"mt-1 text-xs text-muted-foreground",children:["duration ",Math.round(e.durationMs/1e3),"s"]}),e.output&&(0,n.jsx)("pre",{className:"mt-2 max-h-28 overflow-auto whitespace-pre-wrap rounded-lg bg-muted p-2 text-xs text-muted-foreground",children:e.output.slice(0,600)})]},e.id))}):(0,n.jsx)("div",{className:"text-sm text-muted-foreground",children:"No executions recorded yet."})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("div",{className:"text-sm font-semibold",children:"Recent Events"}),F.events.length>0?(0,n.jsx)("div",{className:"space-y-1",children:F.events.slice(-8).reverse().map((e,t)=>(0,n.jsxs)("div",{className:"flex items-center justify-between rounded-lg bg-muted/50 px-3 py-2 text-xs",children:[(0,n.jsx)("span",{children:e.kind}),(0,n.jsx)("span",{className:"text-muted-foreground",children:w(e.timestamp)})]},"".concat(e.kind,"-").concat(e.timestamp,"-").concat(t)))}):(0,n.jsx)("div",{className:"text-sm text-muted-foreground",children:"No events recorded yet."})]})]})]})]})]})})}},60600:(e,t,s)=>{function n(e){let t=e.filter(e=>"cron"===e.kind&&e.id).map(e=>e.id);return t.length?"/scheduler?ids=".concat(t.map(encodeURIComponent).join(",")):null}s.d(t,{NE:()=>d,Yt:()=>i,on:()=>n});let a=["task","goal-loop","single-shot"],r=["scheduler","monitor-trigger"];function l(e){var t,s,n,l,i,d,o;let c=e.autopilot,u=null!=(t=null==c?void 0:c.executionModel)?t:null;return{id:e.id,goal:e.title||e.description||e.id,source:null!=(s=null==c?void 0:c.origin)?s:"human",status:null!=(n=null==c?void 0:c.apmStatus)?n:e.status,model:u,tier:null!=(l=null==c?void 0:c.tier)?l:null,engine:null!=(i=null==c?void 0:c.engine)?i:null,kind:(o=null!=(d=null==c?void 0:c.executionModel)?d:null)&&a.includes(o)?"finite":o&&r.includes(o)?"continuous":"other",reviewDue:!1,createdAt:new Date(e.createdAt).toISOString(),updatedAt:e.updatedAt,isAutopilot:null!=c,toxStatus:e.status,taskCount:e.taskCount,taskCounts:e.taskStatusCounts}}class i{async triagePreview(e,t){return this.client.fetchJson("/v1/autopilot/triage-preview",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({goal:e,...t?{category:t}:{}})})}async commitMission(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"intake",s=arguments.length>2?arguments[2]:void 0;return this.client.fetchJson("/v1/autopilot/triage-preview",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({goal:e,commit:!0,source:t,...s?{category:s}:{}})})}async missionsUnified(e){var t,s;let n=new URLSearchParams({...e?{status:e}:{}}).toString(),a=await this.client.fetchJson("/v1/missions".concat(n?"?".concat(n):"")),r=null!=(t=a.missions)?t:[];return{ok:!0,total:null!=(s=a.total)?s:r.length,missions:r.map(l)}}async trace(e){return this.client.fetchJson("/v1/autopilot/trace?id=".concat(encodeURIComponent(e)))}async missionArcMap(){var e,t,s;let n=await this.client.fetchJson("/v1/missions"),a=new Map;for(let r of null!=(e=n.missions)?e:[]){let e=null==(t=r.autopilot)?void 0:t.arcs;e&&e.length>0&&a.set(r.id,{apmStatus:null==(s=r.autopilot)?void 0:s.apmStatus,arcs:e})}return a}async missionAction(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.client.fetchJson("/v1/autopilot/mission-action",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:e,action:t,...s})})}async autonomy(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:50,t=arguments.length>1?arguments[1]:void 0,s=new URLSearchParams({limit:String(e),...t?{loop:t}:{}});return this.client.fetchJson("/v1/autopilot/autonomy?".concat(s.toString()))}async arming(){return this.client.fetchJson("/v1/autopilot/arming")}constructor(e){this.client=e}}let d={task:{label:"작업 분해",tone:"bg-sky-500/15 text-sky-200 ring-sky-500/30"},"goal-loop":{label:"목표 루프",tone:"bg-violet-500/15 text-violet-200 ring-violet-500/30"},scheduler:{label:"스케줄러",tone:"bg-emerald-500/15 text-emerald-200 ring-emerald-500/30"},"monitor-trigger":{label:"감시 트리거",tone:"bg-amber-500/15 text-amber-200 ring-amber-500/30"},hybrid:{label:"하이브리드",tone:"bg-fuchsia-500/15 text-fuchsia-200 ring-fuchsia-500/30"},fanout:{label:"병렬 팬아웃",tone:"bg-cyan-500/15 text-cyan-200 ring-cyan-500/30"},"single-shot":{label:"즉답",tone:"bg-muted text-muted-foreground ring-border"},"hitl-delegate":{label:"HITL 위임",tone:"bg-rose-500/15 text-rose-200 ring-rose-500/30"}}},73365:(e,t,s)=>{s.d(t,{GM:()=>i,J3:()=>l,WF:()=>n,bR:()=>r,m:()=>d,r5:()=>a});let n="/v1/devices",a="/v1/approvals/merges",r="/v1/templates/capability-preview",l="/v1/idle-nudge/preview",i="/v1/morning-digest/showroom",d="/v1/next-fluent/dispatch"},76514:(e,t,s)=>{s.d(t,{r:()=>i});var n=s(26940),a=s(45544),r=s.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 i(e){let{active:t}=e;return(0,n.jsxs)("nav",{"aria-label":"Mission Fabric 파이프라인","data-testid":"fabric-stage-header",className:"flex flex-wrap items-center gap-1 text-xs",children:[(0,n.jsx)("span",{className:"mr-1 text-muted-foreground",children:"Missions"}),l.map((e,s)=>(0,n.jsxs)("span",{className:"flex items-center gap-1",children:[(0,n.jsxs)(r(),{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,n.jsx)("span",{className:"mr-1",children:e.num}),e.label,(0,n.jsx)("span",{className:"ml-1 text-[10px] opacity-70",children:e.sub})]}),s<l.length-1&&(0,n.jsx)("span",{className:"text-muted-foreground/50","aria-hidden":!0,children:"→"})]},e.key))]})}}}]);
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[272],{272:(e,t,s)=>{s.d(t,{B:()=>T});var n=s(26940),a=s(10672),r=s(7681),l=s(1212);class i{buildSnapshot(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:80;return this.client.fetchJson("/v1/builds/".concat(encodeURIComponent(e),"?tail=").concat(t))}list(){return this.client.fetchJson("/v1/tasks")}detail(e){return this.client.fetchJson("/v1/tasks/".concat(encodeURIComponent(e)))}constructor(e){this.client=e}}var d=s(60600),o=s(49393),c=s(81669),u=s(73365);class m extends Error{constructor(e,t,s){super("fluent-chain ".concat(e," on ").concat(t)),this.status=e,this.path=t,this.body=s,this.name="FluentChainApiError"}}function x(e){var t;let s=e.baseUrl.replace(/\/+$/,""),n=null!=(t=e.fetchImpl)?t:fetch,a="/v1/next-fluent/preview";return{async preview(t){let r={"content-type":"application/json"};e.authHeader&&(r.authorization=e.authHeader);let l=await n("".concat(s).concat(a),{method:"POST",headers:r,body:JSON.stringify(t)});if(204===l.status)return{kind:"no-suggestions",enabled:!0};let i=await l.json().catch(()=>null);if(409===l.status){let e=!!i&&"object"==typeof i&&"enabled"in i&&!!i.enabled;return e?{kind:"no-suggestions",enabled:e}:{kind:"disabled"}}if(503===l.status&&i&&"object"==typeof i&&"next-fluent-not-wired"===i.error)return{kind:"disabled"};if(!l.ok||!(null==i?void 0:i.card))throw new m(l.status,a,i);return{kind:"card",card:i.card}},async dispatch(t,a){let r={"content-type":"application/json"};e.authHeader&&(r.authorization=e.authHeader);let l=u.m,i=await n("".concat(s).concat(l),{method:"POST",headers:r,body:JSON.stringify({refId:t,action:a})}),d=await i.json().catch(()=>null);return d&&"object"==typeof d&&"ok"in d?d:{ok:!1,error:"dispatch ".concat(i.status)}}}}function p(e){var t;let[s,r]=(0,a.useState)({kind:"loading"});if((0,a.useEffect)(()=>{var t;let s=!1;return(null!=(t=e.api)?t:x({baseUrl:window.location.origin})).preview(e.trigger).then(e=>{s||("card"===e.kind?r({kind:"card",card:e.card}):"no-suggestions"===e.kind?r({kind:"empty"}):r({kind:"disabled"}))}).catch(e=>{s||r({kind:"error",message:e instanceof Error?e.message:String(e)})}),()=>{s=!0}},[e.api,e.trigger.refId,e.trigger.refKind,e.trigger.outcome,e.trigger.completedAt]),"loading"===s.kind)return(0,n.jsx)("span",{className:"text-xs opacity-60",children:"checking next-action…"});if("disabled"===s.kind||"empty"===s.kind)return null;if("error"===s.kind)return(0,n.jsxs)("span",{className:"text-xs text-rose-700",children:["next-action: ",s.message]});let l=null!=(t=e.limit)?t:3,i=s.card.suggestions.slice(0,l);return 0===i.length?null:(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-1 text-xs","data-fluent-ref":e.trigger.refId,children:[(0,n.jsx)("span",{className:"opacity-60",children:"next:"}),i.map(t=>(0,n.jsxs)("button",{type:"button",className:"rounded-full border border-zinc-300 bg-white px-2 py-0.5 hover:bg-zinc-50",onClick:()=>{var s;return null==(s=e.onChoose)?void 0:s.call(e,t.kind,t)},title:t.reason||t.kind,children:[t.kind,"none"!==t.endorsedBy&&(0,n.jsxs)("span",{className:"ml-1 text-[10px] opacity-60",children:["\xb7 ",t.endorsedBy]})]},t.kind))]})}class h extends Error{constructor(e,t,s){super("idle-nudge ".concat(e," on ").concat(t)),this.status=e,this.path=t,this.body=s,this.name="IdleNudgeApiError"}}function g(e){let[t,s]=(0,a.useState)({kind:"loading"});if((0,a.useEffect)(()=>{var t;let n=!1;return(null!=(t=e.api)?t:function(e){var t;let s=e.baseUrl.replace(/\/+$/,""),n=null!=(t=e.fetchImpl)?t:fetch,a=u.J3;return{async preview(t){let r={"content-type":"application/json"};e.authHeader&&(r.authorization=e.authHeader);let l=await n("".concat(s).concat(a),{method:"POST",headers:r,body:JSON.stringify(t)}),i=await l.json().catch(()=>null);if(!l.ok)throw new h(l.status,a,i);return i}}}({baseUrl:window.location.origin})).preview(e.request).then(e=>{n||("nudge"===e.decision.kind&&e.record?s({kind:"nudge",decision:e.decision,record:e.record}):"defer"===e.decision.kind?s({kind:"defer",nextAt:e.decision.nextEligibleAt}):s({kind:"idle"}))}).catch(e=>{n||s({kind:"error",message:e instanceof h?"Idle-nudge error (".concat(e.status,")"):e instanceof Error?e.message:String(e)})}),()=>{n=!0}},[e.api,e.request.taskId,e.request.observedAt,e.request.status,e.request.enteredStatusAt]),"loading"===t.kind||"idle"===t.kind)return null;if("defer"===t.kind)return(0,n.jsxs)("span",{className:"text-[10px] opacity-60",children:["nudge deferred until ",new Date(t.nextAt).toLocaleTimeString()]});if("error"===t.kind)return(0,n.jsx)("span",{className:"text-[10px] text-rose-700",children:t.message});let r=Math.round(t.decision.idleMs/36e5);return(0,n.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1 rounded-full border border-amber-300 bg-amber-50 px-2 py-0.5 text-[11px] text-amber-900 hover:bg-amber-100",onClick:()=>{var s;return null==(s=e.onOpenShowroom)?void 0:s.call(e,t.record.showroomSessionId)},title:"Idle ".concat(r,"h \xb7 click to open nudge room"),"data-task-id":t.record.taskId,children:[(0,n.jsx)("span",{"aria-hidden":!0,children:"⏳"}),"idle ",r,"h \xb7 ",t.record.lanes.length," lanes"]})}var f=s(76514);let b=(0,a.createContext)(null),v=new Set(["ready","running","review","blocked"]),y=new Set(["done","failed"]),k=[{id:"backlog",label:"Backlog",statuses:["backlog","blocked"]},{id:"scheduled",label:"Scheduled",statuses:["scheduled"]},{id:"ready",label:"Ready",statuses:["ready"]},{id:"running",label:"Running",statuses:["running"]},{id:"review",label:"Review",statuses:["review"]},{id:"closed",label:"Closed",statuses:["done","failed","cancelled","superseded"]}],j={urgent:"bg-red-500/15 text-red-300 ring-red-500/30",high:"bg-amber-500/15 text-amber-200 ring-amber-500/30",medium:"bg-sky-500/15 text-sky-200 ring-sky-500/30",low:"bg-muted text-muted-foreground ring-border"},N={pending:"bg-slate-500/15 text-slate-300 ring-slate-500/30",active:"bg-sky-500/15 text-sky-200 ring-sky-500/30",verifying:"bg-amber-500/15 text-amber-200 ring-amber-500/30",done:"bg-emerald-500/15 text-emerald-300 ring-emerald-500/30",failed:"bg-red-500/15 text-red-300 ring-red-500/30"};function w(e){let t=Math.max(0,Math.floor((Date.now()-e)/1e3));if(t<60)return"".concat(t,"s ago");let s=Math.floor(t/60);if(s<60)return"".concat(s,"m ago");let n=Math.floor(s/60);return n<24?"".concat(n,"h ago"):"".concat(Math.floor(n/24),"d ago")}let S={running:0,review:1,ready:2,blocked:3,backlog:4,done:5,failed:5,cancelled:6,superseded:6,scheduled:3};function C(e){var t;let{group:s,selectedId:r,onSelect:l,arcDetail:i}=e,d=s.total>0?Math.round(s.doneCount/s.total*100):0,[o,c]=(0,a.useState)(!1),u=(null!=(t=null==i?void 0:i.length)?t:0)>0;return(0,n.jsxs)("section",{className:"rounded-2xl border border-border bg-muted/20 p-3",children:[(0,n.jsxs)("div",{className:"mb-2 flex flex-wrap items-center gap-2",children:[!s.isStandalone&&(0,n.jsx)("span",{className:"text-xs",children:"\uD83C\uDFAF"}),u&&(0,n.jsx)("button",{type:"button",onClick:()=>c(e=>!e),className:"text-xs text-muted-foreground hover:text-foreground",title:"아크 상세",children:o?"▾":"▸"}),(0,n.jsx)("h2",{className:"text-sm font-semibold",title:s.missionTitle,children:s.missionTitle}),(0,n.jsxs)("span",{className:"rounded-full bg-background px-2 py-0.5 text-[11px] text-muted-foreground",children:[s.doneCount,"/",s.total," \xb7 ",d,"%"]}),s.runningCount>0&&(0,n.jsxs)("span",{className:"animate-pulse rounded-full bg-sky-500/15 px-2 py-0.5 text-[10px] text-sky-200 ring-1 ring-sky-500/30",children:["● ",s.runningCount," 빌드중"]}),s.failedCount>0&&(0,n.jsxs)("span",{className:"rounded-full bg-red-500/15 px-2 py-0.5 text-[10px] text-red-300 ring-1 ring-red-500/30",children:["✗ ",s.failedCount," 실패"]})]}),s.arcs.length>0&&(0,n.jsx)("div",{className:"mb-2 flex flex-wrap gap-1.5",children:s.arcs.map((e,t)=>{var s;return(0,n.jsxs)("span",{className:"flex items-center gap-1 text-[10px]",children:[t>0&&(0,n.jsx)("span",{className:"text-muted-foreground",children:"→"}),(0,n.jsxs)("span",{className:"rounded-full px-2 py-0.5 ring-1 ".concat(null!=(s=N[e.status])?s:N.pending),children:["⬡ ",e.name," ",e.done,"/",e.total]})]},e.name)})}),o&&u&&(0,n.jsx)("div",{className:"mb-3 space-y-1.5 rounded-xl border border-border bg-background/40 p-2",children:i.map((e,t)=>{var s,a,r,l;let i="failed"===e.status||(null==(s=e.verifyResult)?void 0:s.ok)===!1;return(0,n.jsxs)("div",{className:"text-[11px]",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,n.jsxs)("span",{className:"text-muted-foreground",children:["아크 ",t+1]}),(0,n.jsxs)("span",{className:"rounded-full px-2 py-0.5 ring-1 ".concat(null!=(l=N[e.status])?l:N.pending),children:["⬡ ",e.name," \xb7 ",e.status]}),e.dependsOnArcs.length>0&&(0,n.jsxs)("span",{className:"text-muted-foreground",children:["← 선행 ",e.dependsOnArcs.length]})]}),(0,n.jsx)("div",{className:"mt-0.5 pl-1 text-muted-foreground",children:e.intent}),i&&(null==(a=e.verifyResult)?void 0:a.missing)&&(0,n.jsxs)("div",{className:"mt-0.5 rounded-md bg-red-500/10 px-2 py-1 text-red-300",children:["\uD83D\uDD12 아크 통합검증 실패: ",e.verifyResult.missing,(0,n.jsx)("div",{className:"text-red-400/70",children:"→ arc-revise 초안 카드가 발송됩니다(페이즈는 완료돼도 아크로는 미충족)."})]}),(null==(r=e.verifyResult)?void 0:r.ok)&&(0,n.jsxs)("div",{className:"mt-0.5 pl-1 text-emerald-400/70",children:["✓ 통합검증 통과: ",e.verifyResult.evidence.slice(0,80)]}),e.preflightVerdict&&"founded"!==e.preflightVerdict.verdict&&(0,n.jsxs)("div",{className:"mt-0.5 rounded-md bg-amber-500/10 px-2 py-1 text-amber-300",children:["⚠️ pre-flight: ","mirage"===e.preflightVerdict.verdict?"허상 의심":"과대 범위"," → ",e.preflightVerdict.action,(0,n.jsx)("div",{className:"text-amber-400/70",children:e.preflightVerdict.reason.slice(0,120)})]})]},e.arcId)})}),(0,n.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2 xl:grid-cols-3",children:s.tasks.map(e=>(0,n.jsx)(I,{task:e,selected:e.id===r,onClick:()=>l(e.id)},e.id))})]})}function A(e){var t;let{api:s,buildId:r}=e,[l,i]=(0,a.useState)(null),[d,o]=(0,a.useState)(null),c=(0,a.useRef)(null);return(0,a.useEffect)(()=>{let e,t=!1,n=async()=>{try{let a=await s.buildSnapshot(r,120);if(t)return;i(a),o(null),"running"===a.build.status&&(e=window.setTimeout(()=>void n(),2e3))}catch(e){t||o(e instanceof Error?e.message:String(e))}};return n(),()=>{t=!0,e&&window.clearTimeout(e)}},[s,r]),(0,a.useEffect)(()=>{c.current&&(c.current.scrollTop=c.current.scrollHeight)},[l]),(0,n.jsxs)("div",{className:"space-y-1.5",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 text-[11px]",children:[(0,n.jsx)("span",{className:"font-medium",children:"빌드 로그"}),(0,n.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5 text-muted-foreground",children:r}),l&&(0,n.jsx)("span",{className:"rounded-full px-2 py-0.5 ring-1 ".concat("running"===l.build.status?"bg-sky-500/15 text-sky-200 ring-sky-500/30":"bg-muted text-muted-foreground ring-border"),children:"running"===l.build.status?"● 라이브":l.build.status}),(null==l?void 0:l.diffStat)&&(0,n.jsxs)("span",{className:"text-muted-foreground",children:["+",l.diffStat.insertions,"/-",l.diffStat.deletions," \xb7 ",l.diffStat.files,"파일"]})]}),d&&(0,n.jsxs)("div",{className:"text-[11px] text-red-300",children:["로그 조회 실패: ",d]}),(0,n.jsx)("div",{ref:c,className:"max-h-64 overflow-auto rounded-lg border border-border bg-background/60 p-2 font-mono text-[10px] leading-relaxed text-muted-foreground",children:(null==l||null==(t=l.logTail)?void 0:t.length)?l.logTail.map((e,t)=>(0,n.jsx)("div",{className:"whitespace-pre-wrap break-all",children:e},t)):(0,n.jsx)("div",{className:"opacity-60",children:"로그 대기 중…"})})]})}function I(e){var t,s,a;let{task:r,selected:l,onClick:i}=e;return(0,n.jsxs)("button",{type:"button",onClick:i,className:["w-full rounded-xl border p-3 text-left transition-colors",l?"border-primary bg-primary/10 ring-1 ring-primary/40":"border-border bg-card hover:bg-accent/40"].join(" "),children:[(0,n.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,n.jsxs)("div",{className:"min-w-0",children:[r.missionTitle&&(0,n.jsxs)("div",{className:"mb-1 flex items-center gap-1 truncate text-[10px] text-indigo-300",title:r.missionTitle,children:[(0,n.jsx)("span",{className:"shrink-0",children:"\uD83C\uDFAF 미션"}),(0,n.jsx)("span",{className:"truncate opacity-80",children:r.missionTitle})]}),(0,n.jsx)("div",{className:"text-sm font-medium leading-5",children:r.title}),(0,n.jsx)("div",{className:"mt-1 text-[11px] text-muted-foreground",children:r.id})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1.5",children:[r.dryRun&&(0,n.jsx)("span",{className:"rounded-full bg-emerald-500/15 px-2 py-0.5 text-[10px] text-emerald-300",children:"dry run"}),(0,n.jsx)("span",{className:"rounded-full px-2 py-0.5 text-[10px] ring-1 ".concat(null!=(t=j[r.priority])?t:j.low),children:r.priority})]})]}),(0,n.jsxs)("div",{className:"mt-3 flex flex-wrap gap-1.5 text-[11px] text-muted-foreground",children:[(0,n.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5",children:r.surfaceKind}),"running"===r.status&&r.build&&(0,n.jsxs)("span",{className:"flex items-center gap-1 rounded-full bg-sky-500/15 px-2 py-0.5 text-sky-200 ring-1 ring-sky-500/30",title:"빌드 ".concat(r.build.buildId," \xb7 ").concat(r.build.backend).concat(r.build.maxTurns?" \xb7 ".concat(r.build.maxTurns,"턴"):""),children:[(0,n.jsx)("span",{className:"animate-pulse",children:"●"})," 빌드중 ",r.build.backend.replace(/^elanous-self:/,"")," 시도",r.build.attemptSeq]}),r.arcName&&(0,n.jsxs)("span",{className:"rounded-full px-2 py-0.5 ring-1 ".concat(null!=(a=N[null!=(s=r.arcStatus)?s:"pending"])?a:N.pending),title:"아크: ".concat(r.arcName).concat(r.arcStatus?" \xb7 ".concat(r.arcStatus):""),children:["⬡ ",r.arcName,r.phaseIndexInArc&&r.arcTotalPhases?" \xb7 ".concat(r.phaseIndexInArc,"/").concat(r.arcTotalPhases):""]}),r.featureName&&(0,n.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5",children:r.featureName}),r.scheduleText&&(0,n.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5",children:r.scheduleText}),r.showroomSessionId&&(0,n.jsx)("a",{href:"/showroom?session=".concat(encodeURIComponent(r.showroomSessionId)),onClick:e=>e.stopPropagation(),className:"rounded-full bg-sky-500/15 px-2 py-0.5 text-sky-200 ring-1 ring-sky-500/30 hover:bg-sky-500/25",title:"Open showroom session ".concat(r.showroomSessionId),children:"↗ showroom"})]}),(0,n.jsxs)("div",{className:"mt-3 flex items-center justify-between text-[11px] text-muted-foreground",children:[(0,n.jsxs)("span",{children:["attempt ",r.attempt,"/",r.maxRetries]}),(0,n.jsx)("span",{children:w(r.updatedAt)})]}),(0,n.jsx)(M,{task:r})]})}function M(e){let{task:t}=e,s=y.has(t.status),r=v.has(t.status),l=(0,a.useContext)(b);return s||r?(0,n.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-2",onClick:e=>e.stopPropagation(),children:[s&&(0,n.jsx)(p,{trigger:{refId:t.id,refKind:"task",finishedSurface:function(e){switch(e){case"terminal-pane":case"vw-slot":case"subagent":case"skill":case"chat-prompt":case"cron":case"llm-direct":case"acx-session":case"showroom":return e;default:return null}}(t.surfaceKind),outcome:"done"===t.status?"ok":"failed",completedAt:t.updatedAt,...t.featureName?{tags:[t.featureName]}:{}},...l?{onChoose:e=>{l(t.id,e)}}:{}}),r&&(0,n.jsx)(g,{request:{taskId:t.id,status:t.status,enteredStatusAt:t.updatedAt,observedAt:Date.now(),taskTitle:t.title}})]}):null}function R(e){let{label:t,value:s}=e;return(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsx)("div",{className:"text-[11px] uppercase tracking-wide text-muted-foreground",children:t}),(0,n.jsx)("div",{className:"text-sm",children:s})]})}function T(){var e,t,s,u,m,p;let{client:h}=(0,r.Q)(),g=(0,a.useMemo)(()=>new i(h),[h]),v=(0,a.useMemo)(()=>new d.Yt(h),[h]),[y,j]=(0,a.useState)(""),[N,M]=(0,a.useState)(!1),[T,J]=(0,a.useState)(new Map),[E,O]=(0,a.useState)([]),[D,P]=(0,a.useState)(null),[U,_]=(0,a.useState)(null),[F,H]=(0,a.useState)(null),[q,z]=(0,a.useState)(!1),[K,L]=(0,a.useState)(!1),[V,B]=(0,a.useState)("mission"),$=(0,a.useCallback)(async()=>{(0,o.cY)("webterm.tasks.list.refresh",{}),z(!0);try{let e=await g.list();O(e.tasks),P(e.summary),v.missionArcMap().then(J).catch(()=>{}),_(t=>t&&e.tasks.some(e=>e.id===t)?t:null)}catch(e){c.oR.error("task board failed: ".concat(e instanceof Error?e.message:e))}finally{z(!1)}},[g,v]),Y=(0,a.useCallback)(async(e,t)=>{try{var s;let n=await x({baseUrl:window.location.origin}).dispatch(e,t);n.ok?c.oR.success("".concat(t," 실행됨")):c.oR.error("".concat(t," 실패: ").concat(null!=(s=n.error)?s:""))}catch(e){c.oR.error("".concat(t," 실패: ").concat(e instanceof Error?e.message:e))}await $()},[$]),G=(0,a.useCallback)(async()=>{let e=y.trim();if(e&&!N){M(!0);try{let t=await v.commitMission(e,"intake");t.ok?(c.oR.success("태스크 생성 → 미션 fabric 이 플랜화 중".concat(t.missionId?" (".concat(t.missionId,")"):"")),j(""),setTimeout(()=>void $(),1200)):c.oR.error("태스크 생성 실패")}catch(e){c.oR.error("태스크 생성 실패: ".concat(e instanceof Error?e.message:e))}finally{M(!1)}}},[y,N,v,$]);(0,a.useEffect)(()=>{$();let e=window.setInterval(()=>void $(),15e3);return()=>window.clearInterval(e)},[$]),(0,a.useEffect)(()=>{if(!U)return void H(null);let e=!1;return L(!0),(async()=>{try{var t;let s=await g.detail(U);if(e)return;H({task:s.task,executions:s.executions.map(e=>({id:e.id,status:e.status,startedAt:e.startedAt,durationMs:e.durationMs,output:e.output})),events:s.events,linkedSchedulerJob:null!=(t=s.linkedSchedulerJob)?t:null})}catch(t){e||c.oR.error("task detail failed: ".concat(t instanceof Error?t.message:t))}finally{e||L(!1)}})(),()=>{e=!0}},[g,U]);let Q=(0,a.useMemo)(()=>k.map(e=>({...e,tasks:E.filter(t=>e.statuses.some(e=>e===t.status))})),[E]),W=(0,a.useMemo)(()=>(function(e){var t,s,n,a,r,l,i;let d=new Map;for(let n of e){let e=n.missionTitle?null!=(t=n.goalSlug)?t:n.missionTitle:"__standalone__";(null!=(s=d.get(e))?s:d.set(e,[]).get(e)).push(n)}let o=[];for(let[e,t]of Array.from(d.entries())){let s="__standalone__"===e,d=new Map;for(let e of t)if(e.arcName){let t=null!=(l=d.get(e.arcName))?l:{name:e.arcName,total:0,done:0,status:null!=(a=e.arcStatus)?a:"pending",index:null!=(r=e.arcIndex)?r:0};t.total+=1,"done"===e.status&&(t.done+=1),e.arcStatus&&(t.status=e.arcStatus),d.set(e.arcName,t)}let c=[...t].sort((e,t)=>{var s,n;return(null!=(s=S[e.status])?s:9)-(null!=(n=S[t.status])?n:9)||t.createdAt-e.createdAt});o.push({key:e,missionTitle:s?"독립 태스크 (미션 외)":null!=(i=null==(n=t[0])?void 0:n.missionTitle)?i:e,tasks:c,total:t.length,doneCount:t.filter(e=>"done"===e.status).length,runningCount:t.filter(e=>"running"===e.status).length,failedCount:t.filter(e=>"failed"===e.status).length,arcs:Array.from(d.values()).sort((e,t)=>e.index-t.index),isStandalone:s})}return o.sort((e,t)=>{if(e.isStandalone!==t.isStandalone)return e.isStandalone?1:-1;let s=e.runningCount>0||e.doneCount<e.total;return s!==(t.runningCount>0||t.doneCount<t.total)?s?-1:1:t.total-e.total})})(E),[E]);return(0,n.jsx)(b.Provider,{value:Y,children:(0,n.jsxs)("div",{className:"mx-auto max-w-[1600px] space-y-4 p-4",children:[(0,n.jsx)(f.r,{active:"tasks"}),(0,n.jsxs)("header",{className:"flex flex-col gap-3 lg:flex-row lg:items-end lg:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Task Manager"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"TOX board snapshot for backlog, running work, and closed items."})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[D&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"rounded-lg border border-border bg-card px-3 py-2 text-xs",children:[(0,n.jsx)("div",{className:"text-muted-foreground",children:"open"}),(0,n.jsx)("div",{className:"text-sm font-semibold",children:D.open})]}),(0,n.jsxs)("div",{className:"rounded-lg border border-border bg-card px-3 py-2 text-xs",children:[(0,n.jsx)("div",{className:"text-muted-foreground",children:"closed"}),(0,n.jsx)("div",{className:"text-sm font-semibold",children:D.terminal})]}),(0,n.jsxs)("div",{className:"rounded-lg border border-border bg-card px-3 py-2 text-xs",children:[(0,n.jsx)("div",{className:"text-muted-foreground",children:"linked schedules"}),(0,n.jsx)("div",{className:"text-sm font-semibold",children:D.linkedScheduler})]})]}),(0,n.jsxs)("div",{className:"flex rounded-lg border border-border bg-card p-0.5 text-xs",children:[(0,n.jsx)("button",{type:"button",onClick:()=>B("mission"),className:"rounded-md px-2.5 py-1 ".concat("mission"===V?"bg-primary/20 text-primary":"text-muted-foreground hover:text-foreground"),children:"\uD83C\uDFAF 미션별"}),(0,n.jsx)("button",{type:"button",onClick:()=>B("kanban"),className:"rounded-md px-2.5 py-1 ".concat("kanban"===V?"bg-primary/20 text-primary":"text-muted-foreground hover:text-foreground"),children:"칸반"})]}),(0,n.jsx)(l.$,{size:"sm",variant:"outline",onClick:()=>void $(),disabled:q,children:"Refresh"})]})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2 rounded-xl border border-border bg-card p-2",children:[(0,n.jsx)("span",{className:"pl-1 text-sm text-muted-foreground",children:"+"}),(0,n.jsx)("input",{type:"text",value:y,onChange:e=>j(e.target.value),onKeyDown:e=>{"Enter"===e.key&&G()},placeholder:"새 태스크(골)를 입력하면 미션 fabric 이 플랜화→구현→DONE… 예: 'README 중복 정리 리포트 만들어줘'",className:"min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground/60",disabled:N}),(0,n.jsx)(l.$,{size:"sm",onClick:()=>void G(),disabled:N||!y.trim(),children:N?"생성 중…":"Create Task"})]}),(0,n.jsxs)("div",{className:"flex flex-col gap-4 xl:flex-row xl:items-start",children:[(0,n.jsx)("section",{className:"min-w-0 flex-1 space-y-3",children:"mission"===V?(0,n.jsx)("div",{className:"space-y-3",children:W.length>0?W.map(e=>{var t;return(0,n.jsx)(C,{group:e,selectedId:U,onSelect:_,arcDetail:null==(t=T.get(e.key))?void 0:t.arcs},e.key)}):(0,n.jsx)("div",{className:"rounded-xl border border-dashed border-border px-3 py-12 text-center text-sm text-muted-foreground",children:"미션/태스크 없음"})}):(0,n.jsx)("div",{className:"pb-2",children:(0,n.jsx)("div",{className:"flex flex-wrap gap-3",children:Q.map(e=>(0,n.jsxs)("div",{className:"min-w-[170px] flex-1 rounded-2xl border border-border bg-muted/30 p-3",children:[(0,n.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,n.jsx)("h2",{className:"text-sm font-semibold",children:e.label}),(0,n.jsx)("span",{className:"rounded-full bg-background px-2 py-0.5 text-[11px] text-muted-foreground",children:e.tasks.length})]}),(0,n.jsx)("div",{className:"space-y-2",children:e.tasks.length>0?e.tasks.map(e=>(0,n.jsx)(I,{task:e,selected:e.id===U,onClick:()=>_(e.id)},e.id)):(0,n.jsx)("div",{className:"rounded-xl border border-dashed border-border px-3 py-8 text-center text-xs text-muted-foreground",children:"no tasks"})})]},e.id))})})}),U&&(0,n.jsxs)("aside",{className:"w-full shrink-0 space-y-3 rounded-2xl border border-border bg-card p-4 xl:w-[360px]",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between",children:[(0,n.jsx)("h2",{className:"text-base font-semibold",children:"Detail"}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(null==F?void 0:F.task)&&(0,n.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5 text-[11px] text-muted-foreground",children:F.task.status}),(0,n.jsx)("button",{type:"button",onClick:()=>_(null),className:"rounded-md px-1.5 py-0.5 text-xs text-muted-foreground hover:bg-accent/40 hover:text-foreground","aria-label":"Close detail",children:"✕"})]})]}),K||!F?(0,n.jsx)("div",{className:"text-sm text-muted-foreground",children:"Loading task detail…"}):(0,n.jsxs)("div",{className:"space-y-4",children:[(()=>{let e=E.find(e=>e.id===U);return(null==e?void 0:e.status)==="running"&&e.build?(0,n.jsx)(A,{api:g,buildId:e.build.buildId}):null})(),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"text-lg font-semibold leading-6",children:F.task.title}),(0,n.jsx)("div",{className:"mt-1 text-xs text-muted-foreground",children:F.task.id}),F.task.description&&(0,n.jsx)("p",{className:"mt-3 whitespace-pre-wrap text-sm text-muted-foreground",children:F.task.description})]}),(0,n.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,n.jsx)(R,{label:"Surface",value:F.task.surface.kind}),(0,n.jsx)(R,{label:"Priority",value:F.task.priority}),(0,n.jsx)(R,{label:"Goal",value:null!=(u=F.task.goalSlug)?u:"—"}),(0,n.jsx)(R,{label:"Feature",value:null!=(m=F.task.featureName)?m:"—"}),(0,n.jsx)(R,{label:"Depends On",value:F.task.dependsOn.length>0?F.task.dependsOn.join(", "):"—"}),(0,n.jsx)(R,{label:"Schedule",value:null!=(p=F.task.schedulerJobId)?p:"—"})]}),F.linkedSchedulerJob&&(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-muted/40 px-3 py-2 text-sm",children:["linked schedule: ",F.linkedSchedulerJob.title,(0,n.jsx)("span",{className:"ml-2 text-xs text-muted-foreground",children:F.linkedSchedulerJob.taskId}),(null==(e=F.linkedSchedulerJob.taskMeta)?void 0:e.dryRun)&&(0,n.jsxs)("span",{className:"ml-2 rounded-full bg-emerald-500/15 px-2 py-0.5 text-[10px] text-emerald-300",children:["dry run",F.linkedSchedulerJob.taskMeta.dryRunOutcome?" \xb7 ".concat(F.linkedSchedulerJob.taskMeta.dryRunOutcome):""]})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("div",{className:"text-sm font-semibold",children:"Acceptance"}),(null==(s=F.task.acceptance)||null==(t=s.criteria)?void 0:t.length)?(0,n.jsx)("ul",{className:"space-y-1 text-sm text-muted-foreground",children:F.task.acceptance.criteria.map(e=>(0,n.jsx)("li",{className:"rounded-lg bg-muted/50 px-3 py-2",children:e},e))}):(0,n.jsx)("div",{className:"text-sm text-muted-foreground",children:"No acceptance criteria."})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("div",{className:"text-sm font-semibold",children:"Recent Executions"}),F.executions.length>0?(0,n.jsx)("div",{className:"space-y-2",children:F.executions.map(e=>(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-background p-3",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between text-sm",children:[(0,n.jsx)("span",{className:"font-medium",children:e.status}),(0,n.jsx)("span",{className:"text-xs text-muted-foreground",children:w(e.startedAt)})]}),void 0!==e.durationMs&&(0,n.jsxs)("div",{className:"mt-1 text-xs text-muted-foreground",children:["duration ",Math.round(e.durationMs/1e3),"s"]}),e.output&&(0,n.jsx)("pre",{className:"mt-2 max-h-28 overflow-auto whitespace-pre-wrap rounded-lg bg-muted p-2 text-xs text-muted-foreground",children:e.output.slice(0,600)})]},e.id))}):(0,n.jsx)("div",{className:"text-sm text-muted-foreground",children:"No executions recorded yet."})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("div",{className:"text-sm font-semibold",children:"Recent Events"}),F.events.length>0?(0,n.jsx)("div",{className:"space-y-1",children:F.events.slice(-8).reverse().map((e,t)=>(0,n.jsxs)("div",{className:"flex items-center justify-between rounded-lg bg-muted/50 px-3 py-2 text-xs",children:[(0,n.jsx)("span",{children:e.kind}),(0,n.jsx)("span",{className:"text-muted-foreground",children:w(e.timestamp)})]},"".concat(e.kind,"-").concat(e.timestamp,"-").concat(t)))}):(0,n.jsx)("div",{className:"text-sm text-muted-foreground",children:"No events recorded yet."})]})]})]})]})]})})}},60600:(e,t,s)=>{function n(e){let t=e.filter(e=>"cron"===e.kind&&e.id).map(e=>e.id);return t.length?"/scheduler?ids=".concat(t.map(encodeURIComponent).join(",")):null}s.d(t,{NE:()=>d,Yt:()=>i,on:()=>n});let a=["task","goal-loop","single-shot"],r=["scheduler","monitor-trigger"];function l(e){var t,s,n,l,i,d,o;let c=e.autopilot,u=null!=(t=null==c?void 0:c.executionModel)?t:null;return{id:e.id,goal:e.title||e.description||e.id,source:null!=(s=null==c?void 0:c.origin)?s:"human",status:null!=(n=null==c?void 0:c.apmStatus)?n:e.status,model:u,tier:null!=(l=null==c?void 0:c.tier)?l:null,engine:null!=(i=null==c?void 0:c.engine)?i:null,kind:(o=null!=(d=null==c?void 0:c.executionModel)?d:null)&&a.includes(o)?"finite":o&&r.includes(o)?"continuous":"other",reviewDue:!1,createdAt:new Date(e.createdAt).toISOString(),updatedAt:e.updatedAt,derived:e.derived,isAutopilot:null!=c,toxStatus:e.status,taskCount:e.taskCount,taskCounts:e.taskStatusCounts}}class i{async triagePreview(e,t){return this.client.fetchJson("/v1/autopilot/triage-preview",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({goal:e,...t?{category:t}:{}})})}async commitMission(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"intake",s=arguments.length>2?arguments[2]:void 0;return this.client.fetchJson("/v1/autopilot/triage-preview",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({goal:e,commit:!0,source:t,...s?{category:s}:{}})})}async missionsUnified(e){var t,s;let n=new URLSearchParams({...e?{status:e}:{}}).toString(),a=await this.client.fetchJson("/v1/missions".concat(n?"?".concat(n):"")),r=null!=(t=a.missions)?t:[];return{ok:!0,total:null!=(s=a.total)?s:r.length,missions:r.map(l)}}async trace(e){return this.client.fetchJson("/v1/autopilot/trace?id=".concat(encodeURIComponent(e)))}async missionArcMap(){var e,t,s;let n=await this.client.fetchJson("/v1/missions"),a=new Map;for(let r of null!=(e=n.missions)?e:[]){let e=null==(t=r.autopilot)?void 0:t.arcs;e&&e.length>0&&a.set(r.id,{apmStatus:null==(s=r.autopilot)?void 0:s.apmStatus,arcs:e})}return a}async missionAction(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.client.fetchJson("/v1/autopilot/mission-action",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:e,action:t,...s})})}async autonomy(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:50,t=arguments.length>1?arguments[1]:void 0,s=new URLSearchParams({limit:String(e),...t?{loop:t}:{}});return this.client.fetchJson("/v1/autopilot/autonomy?".concat(s.toString()))}async arming(){return this.client.fetchJson("/v1/autopilot/arming")}constructor(e){this.client=e}}let d={task:{label:"작업 분해",tone:"bg-sky-500/15 text-sky-200 ring-sky-500/30"},"goal-loop":{label:"목표 루프",tone:"bg-violet-500/15 text-violet-200 ring-violet-500/30"},scheduler:{label:"스케줄러",tone:"bg-emerald-500/15 text-emerald-200 ring-emerald-500/30"},"monitor-trigger":{label:"감시 트리거",tone:"bg-amber-500/15 text-amber-200 ring-amber-500/30"},hybrid:{label:"하이브리드",tone:"bg-fuchsia-500/15 text-fuchsia-200 ring-fuchsia-500/30"},fanout:{label:"병렬 팬아웃",tone:"bg-cyan-500/15 text-cyan-200 ring-cyan-500/30"},"single-shot":{label:"즉답",tone:"bg-muted text-muted-foreground ring-border"},"hitl-delegate":{label:"HITL 위임",tone:"bg-rose-500/15 text-rose-200 ring-rose-500/30"}}},73365:(e,t,s)=>{s.d(t,{GM:()=>i,J3:()=>l,WF:()=>n,bR:()=>r,m:()=>d,r5:()=>a});let n="/v1/devices",a="/v1/approvals/merges",r="/v1/templates/capability-preview",l="/v1/idle-nudge/preview",i="/v1/morning-digest/showroom",d="/v1/next-fluent/dispatch"},76514:(e,t,s)=>{s.d(t,{r:()=>i});var n=s(26940),a=s(45544),r=s.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 i(e){let{active:t}=e;return(0,n.jsxs)("nav",{"aria-label":"Mission Fabric 파이프라인","data-testid":"fabric-stage-header",className:"flex flex-wrap items-center gap-1 text-xs",children:[(0,n.jsx)("span",{className:"mr-1 text-muted-foreground",children:"Missions"}),l.map((e,s)=>(0,n.jsxs)("span",{className:"flex items-center gap-1",children:[(0,n.jsxs)(r(),{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,n.jsx)("span",{className:"mr-1",children:e.num}),e.label,(0,n.jsx)("span",{className:"ml-1 text-[10px] opacity-70",children:e.sub})]}),s<l.length-1&&(0,n.jsx)("span",{className:"text-muted-foreground/50","aria-hidden":!0,children:"→"})]},e.key))]})}}}]);
|