elanous 0.2.0 → 0.2.4
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/.env.example +6 -0
- package/README.md +16 -14
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/chunks/1105-c473ed46272fba79.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1191-7b13a24117a689fa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1201-09613bce624467c0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1377-1efeffbbac0963ff.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1470.98a6ab61ccb4131c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/216-5acd01cbde4acda7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2330-c2f07246c8788af1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2375-3fcae5186c64fe6b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2415.ed6428ff334c7ce2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2929-617f1e66a55be184.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2977-e38442e86289f1d3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2982-2a2df543be3d2e5a.js +25 -0
- package/apps/pwa/out/_next/static/chunks/{2a79f15a-2013e4d421d6df88.js → 2ea96958-e8c7e112de50b067.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/319-d37df1b6e0cbeff4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3403.4bc97b4066945a94.js +5 -0
- package/apps/pwa/out/_next/static/chunks/3441-a1dd4acfeda14488.js +1 -0
- package/apps/pwa/out/_next/static/chunks/371-4ad6af55dad02ced.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4114-3e63117452378807.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6804.8ed6ab492bc5fc0a.js → 4323.c5dfb6f503304775.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4836-3c93795ab834381e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{320-d7013ec072863e5e.js → 5080-1613752891fcadb4.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/5609-012bb3557211f07e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5791-bb82743fa6299562.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6062-73e68343a9814f6a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6090-1bd6077591603947.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6320-baac91d68843a9a6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6416-505ba707cacafbba.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6725-68ab7cc0b1faf00d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6998-a654fe5c58271600.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7457-f5cb1cc8db9f7453.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7647.2fcd30d894d5ee30.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7673-2eda1507d38dadb8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7990-e12efba616f46e03.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8046cadf-211ca3c0e00f2b72.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8067-f74bf14d67ad98f1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8142-011e1f474efb8b33.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8519-0059d82bdb4812bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8619-4365e03a2862830f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/920-f7dceb78f1c585ef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9651-3cd291a6fa1370d2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9740-52467f244755917f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9804-64c02c3c127d5014.js +1 -0
- package/apps/pwa/out/_next/static/chunks/ae787e4c-f2998de7f1ba72a4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-859cea1570b6227a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-21c3261af6ab377c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-1991445b8ea86274.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-4ebfaee2369fe248.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-9fa879ebf5959096.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-ca7c3cc305c3285a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-9951930add3d2051.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-4472ddf1e2458e69.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-4de08d4b766f134b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-7a975e2b9db1dfb7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-859cea1570b6227a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-49270714ef35bb96.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-33fbdf353e2a5982.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-259f122e2dd64317.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-65b82726753658e1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-4b8df3748dc06285.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-112f7e477bda77fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-542a5c0006da637c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-63ffb347831262ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-98e4e359d97263b4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-97e24ac675ce576e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-ac6391f26391d89d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9f45c9d45ffc43bd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-36995b9cb5d98218.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-0c795b577988d63f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-b4311e2f71c6735a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-859cea1570b6227a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-eb2381074df20dba.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-b01336e64eba01ae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-7af7f21c1f2858ef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-a98ecd364586c89b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-57f0502dfbfa089b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-3467d2e1abd8a14a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-7842ca23d53ba682.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-ae9ac882912b0198.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-3a0d72e3f783bcef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-f3b39fe8358c2a97.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-5a22af3181ac2afb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/framework-ea806bb57f2b8923.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-8d2302399c2c8f87.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-1457627bb302a22c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-b10928c60f0b8488.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-689039227d443fab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-e5bea36f183b25e6.js +1 -0
- package/apps/pwa/out/_next/static/css/e66b7f5efc8df3f3.css +1 -0
- package/apps/pwa/out/_next/static/zoQX5iTvXOsIvCjxCe1Ji/_buildManifest.js +1 -0
- package/apps/pwa/out/approvals/index.html +1 -0
- package/apps/pwa/out/approvals/index.txt +30 -0
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +27 -26
- package/apps/pwa/out/board/index.html +1 -0
- package/apps/pwa/out/board/index.txt +30 -0
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +24 -23
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +24 -23
- package/apps/pwa/out/chat/index.html +1 -2
- package/apps/pwa/out/chat/index.txt +24 -23
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +27 -26
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +27 -26
- package/apps/pwa/out/editor/index.html +1 -0
- package/apps/pwa/out/editor/index.txt +31 -0
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +24 -23
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +27 -26
- package/apps/pwa/out/live/index.html +1 -0
- package/apps/pwa/out/live/index.txt +30 -0
- package/apps/pwa/out/market/index.html +1 -0
- package/apps/pwa/out/market/index.txt +27 -0
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +24 -23
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +27 -26
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +27 -26
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +25 -24
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +27 -26
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +24 -23
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +27 -26
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +27 -26
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +27 -26
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +27 -26
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +27 -26
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +24 -23
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +27 -26
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +27 -26
- package/apps/pwa/out/trace/index.html +1 -0
- package/apps/pwa/out/trace/index.txt +30 -0
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +27 -26
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +27 -26
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +27 -27
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +27 -26
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +27 -26
- package/catalog/resources.yaml +8 -11
- package/docs/design/systems/LICENSE +201 -0
- package/docs/design/systems/NOTICE.md +29 -0
- package/docs/design/systems/SOURCE.json +291 -0
- package/docs/design/systems/application/DESIGN.md +71 -0
- package/docs/design/systems/application/manifest.json +54 -0
- package/docs/design/systems/application/tokens.css +63 -0
- package/docs/design/systems/artistic/DESIGN.md +71 -0
- package/docs/design/systems/artistic/manifest.json +54 -0
- package/docs/design/systems/artistic/tokens.css +63 -0
- package/docs/design/systems/bento/DESIGN.md +71 -0
- package/docs/design/systems/bento/manifest.json +54 -0
- package/docs/design/systems/bento/tokens.css +63 -0
- package/docs/design/systems/bold/DESIGN.md +71 -0
- package/docs/design/systems/bold/manifest.json +54 -0
- package/docs/design/systems/bold/tokens.css +63 -0
- package/docs/design/systems/brutalism/DESIGN.md +71 -0
- package/docs/design/systems/brutalism/manifest.json +54 -0
- package/docs/design/systems/brutalism/tokens.css +63 -0
- package/docs/design/systems/cafe/DESIGN.md +71 -0
- package/docs/design/systems/cafe/manifest.json +54 -0
- package/docs/design/systems/cafe/tokens.css +63 -0
- package/docs/design/systems/claymorphism/DESIGN.md +71 -0
- package/docs/design/systems/claymorphism/manifest.json +54 -0
- package/docs/design/systems/claymorphism/tokens.css +63 -0
- package/docs/design/systems/clean/DESIGN.md +71 -0
- package/docs/design/systems/clean/manifest.json +54 -0
- package/docs/design/systems/clean/tokens.css +63 -0
- package/docs/design/systems/colorful/DESIGN.md +71 -0
- package/docs/design/systems/colorful/manifest.json +54 -0
- package/docs/design/systems/colorful/tokens.css +63 -0
- package/docs/design/systems/contemporary/DESIGN.md +71 -0
- package/docs/design/systems/contemporary/manifest.json +54 -0
- package/docs/design/systems/contemporary/tokens.css +63 -0
- package/docs/design/systems/corporate/DESIGN.md +71 -0
- package/docs/design/systems/corporate/manifest.json +54 -0
- package/docs/design/systems/corporate/tokens.css +63 -0
- package/docs/design/systems/cosmic/DESIGN.md +71 -0
- package/docs/design/systems/cosmic/manifest.json +54 -0
- package/docs/design/systems/cosmic/tokens.css +63 -0
- package/docs/design/systems/creative/DESIGN.md +71 -0
- package/docs/design/systems/creative/manifest.json +54 -0
- package/docs/design/systems/creative/tokens.css +63 -0
- package/docs/design/systems/dashboard/DESIGN.md +71 -0
- package/docs/design/systems/dashboard/manifest.json +54 -0
- package/docs/design/systems/dashboard/tokens.css +63 -0
- package/docs/design/systems/default/DESIGN.md +62 -0
- package/docs/design/systems/default/manifest.json +69 -0
- package/docs/design/systems/default/tokens.css +200 -0
- package/docs/design/systems/dithered/DESIGN.md +71 -0
- package/docs/design/systems/dithered/manifest.json +54 -0
- package/docs/design/systems/dithered/tokens.css +63 -0
- package/docs/design/systems/doodle/DESIGN.md +71 -0
- package/docs/design/systems/doodle/manifest.json +54 -0
- package/docs/design/systems/doodle/tokens.css +63 -0
- package/docs/design/systems/dramatic/DESIGN.md +71 -0
- package/docs/design/systems/dramatic/manifest.json +54 -0
- package/docs/design/systems/dramatic/tokens.css +63 -0
- package/docs/design/systems/editorial/DESIGN.md +71 -0
- package/docs/design/systems/editorial/manifest.json +54 -0
- package/docs/design/systems/editorial/tokens.css +63 -0
- package/docs/design/systems/elegant/DESIGN.md +71 -0
- package/docs/design/systems/elegant/manifest.json +54 -0
- package/docs/design/systems/elegant/tokens.css +63 -0
- package/docs/design/systems/energetic/DESIGN.md +72 -0
- package/docs/design/systems/energetic/manifest.json +54 -0
- package/docs/design/systems/energetic/tokens.css +63 -0
- package/docs/design/systems/enterprise/DESIGN.md +71 -0
- package/docs/design/systems/enterprise/manifest.json +54 -0
- package/docs/design/systems/enterprise/tokens.css +63 -0
- package/docs/design/systems/expressive/DESIGN.md +71 -0
- package/docs/design/systems/expressive/manifest.json +54 -0
- package/docs/design/systems/expressive/tokens.css +63 -0
- package/docs/design/systems/fantasy/DESIGN.md +71 -0
- package/docs/design/systems/fantasy/manifest.json +54 -0
- package/docs/design/systems/fantasy/tokens.css +63 -0
- package/docs/design/systems/flat/DESIGN.md +71 -0
- package/docs/design/systems/flat/manifest.json +54 -0
- package/docs/design/systems/flat/tokens.css +63 -0
- package/docs/design/systems/friendly/DESIGN.md +71 -0
- package/docs/design/systems/friendly/manifest.json +54 -0
- package/docs/design/systems/friendly/tokens.css +63 -0
- package/docs/design/systems/glassmorphism/DESIGN.md +71 -0
- package/docs/design/systems/glassmorphism/manifest.json +54 -0
- package/docs/design/systems/glassmorphism/tokens.css +63 -0
- package/docs/design/systems/gradient/DESIGN.md +71 -0
- package/docs/design/systems/gradient/manifest.json +54 -0
- package/docs/design/systems/gradient/tokens.css +63 -0
- package/docs/design/systems/luxury/DESIGN.md +71 -0
- package/docs/design/systems/luxury/manifest.json +54 -0
- package/docs/design/systems/luxury/tokens.css +63 -0
- package/docs/design/systems/minimal/DESIGN.md +71 -0
- package/docs/design/systems/minimal/manifest.json +54 -0
- package/docs/design/systems/minimal/tokens.css +63 -0
- package/docs/design/systems/modern/DESIGN.md +71 -0
- package/docs/design/systems/modern/manifest.json +54 -0
- package/docs/design/systems/modern/tokens.css +63 -0
- package/docs/design/systems/mono/DESIGN.md +71 -0
- package/docs/design/systems/mono/manifest.json +54 -0
- package/docs/design/systems/mono/tokens.css +63 -0
- package/docs/design/systems/neobrutalism/DESIGN.md +71 -0
- package/docs/design/systems/neobrutalism/manifest.json +54 -0
- package/docs/design/systems/neobrutalism/tokens.css +63 -0
- package/docs/design/systems/neon/DESIGN.md +71 -0
- package/docs/design/systems/neon/manifest.json +54 -0
- package/docs/design/systems/neon/tokens.css +63 -0
- package/docs/design/systems/neumorphism/DESIGN.md +71 -0
- package/docs/design/systems/neumorphism/manifest.json +54 -0
- package/docs/design/systems/neumorphism/tokens.css +63 -0
- package/docs/design/systems/paper/DESIGN.md +71 -0
- package/docs/design/systems/paper/manifest.json +54 -0
- package/docs/design/systems/paper/tokens.css +63 -0
- package/docs/design/systems/perspective/DESIGN.md +71 -0
- package/docs/design/systems/perspective/manifest.json +54 -0
- package/docs/design/systems/perspective/tokens.css +63 -0
- package/docs/design/systems/premium/DESIGN.md +71 -0
- package/docs/design/systems/premium/manifest.json +54 -0
- package/docs/design/systems/premium/tokens.css +63 -0
- package/docs/design/systems/professional/DESIGN.md +71 -0
- package/docs/design/systems/professional/manifest.json +54 -0
- package/docs/design/systems/professional/tokens.css +63 -0
- package/docs/design/systems/publication/DESIGN.md +71 -0
- package/docs/design/systems/publication/manifest.json +54 -0
- package/docs/design/systems/publication/tokens.css +63 -0
- package/docs/design/systems/refined/DESIGN.md +71 -0
- package/docs/design/systems/refined/manifest.json +54 -0
- package/docs/design/systems/refined/tokens.css +63 -0
- package/docs/design/systems/retro/DESIGN.md +71 -0
- package/docs/design/systems/retro/manifest.json +54 -0
- package/docs/design/systems/retro/tokens.css +63 -0
- package/docs/design/systems/shadcn/DESIGN.md +71 -0
- package/docs/design/systems/shadcn/manifest.json +54 -0
- package/docs/design/systems/shadcn/tokens.css +255 -0
- package/docs/design/systems/simple/DESIGN.md +71 -0
- package/docs/design/systems/simple/manifest.json +54 -0
- package/docs/design/systems/simple/tokens.css +63 -0
- package/docs/design/systems/skeumorphism/DESIGN.md +71 -0
- package/docs/design/systems/skeumorphism/manifest.json +54 -0
- package/docs/design/systems/skeumorphism/tokens.css +63 -0
- package/docs/design/systems/sleek/DESIGN.md +71 -0
- package/docs/design/systems/sleek/manifest.json +54 -0
- package/docs/design/systems/sleek/tokens.css +63 -0
- package/docs/design/systems/spacious/DESIGN.md +71 -0
- package/docs/design/systems/spacious/manifest.json +54 -0
- package/docs/design/systems/spacious/tokens.css +63 -0
- package/docs/design/systems/storytelling/DESIGN.md +71 -0
- package/docs/design/systems/storytelling/manifest.json +54 -0
- package/docs/design/systems/storytelling/tokens.css +63 -0
- package/docs/design/systems/tom-modern/DESIGN.md +361 -0
- package/docs/design/systems/tom-modern/manifest.json +16 -0
- package/docs/design/systems/tom-modern/tokens.css +99 -0
- package/docs/design/systems/vibrant/DESIGN.md +71 -0
- package/docs/design/systems/vibrant/manifest.json +54 -0
- package/docs/design/systems/vibrant/tokens.css +63 -0
- package/docs/design/systems/vintage/DESIGN.md +71 -0
- package/docs/design/systems/vintage/manifest.json +54 -0
- package/docs/design/systems/vintage/tokens.css +63 -0
- package/docs/design/systems/warm-editorial/DESIGN.md +65 -0
- package/docs/design/systems/warm-editorial/manifest.json +54 -0
- package/docs/design/systems/warm-editorial/tokens.css +63 -0
- package/docs/goal-context/01-goal-authoring-checks.md +18 -0
- package/docs/goal-context/steward-directives-2026-09-28.md +44 -0
- package/graphs/catalog/catalog.yaml +615 -0
- package/graphs/default-loop.yaml +1 -1
- package/graphs/document-loop.yaml +1 -1
- package/graphs/examples/stale-draft-digest/digest.ts +26 -0
- package/graphs/examples/stale-draft-digest/recipes.yaml +8 -0
- package/graphs/examples/stale-draft-digest/stale-draft-digest.yaml +22 -0
- package/graphs/heal/heal-loop.yaml +155 -0
- package/graphs/heal/recipes.yaml +19 -0
- package/graphs/implement-loop.yaml +2 -2
- package/graphs/intake/intake-daily.yaml +55 -0
- package/graphs/intake/recipes.yaml +16 -0
- package/graphs/landing/landing-heal.yaml +22 -0
- package/graphs/landing/recipes.yaml +8 -0
- package/graphs/launch/launch-head.yaml +66 -0
- package/graphs/launch/recipes.yaml +8 -0
- package/graphs/operate-loop.yaml +1 -1
- package/graphs/ops/docs-publish.yaml +31 -0
- package/graphs/ops/recipes.yaml +8 -0
- package/graphs/release/recipes.yaml +38 -0
- package/graphs/release/release-loop.yaml +40 -0
- package/graphs/research-loop.yaml +1 -1
- package/graphs/steward/recipes.yaml +12 -0
- package/graphs/steward/steward.yaml +45 -0
- package/graphs/video/broll-line.yaml +54 -0
- package/package.json +7 -5
- package/plugins/job-coach/.agents/plugins/marketplace.json +12 -0
- package/plugins/job-coach/.codex-plugin/plugin.json +6 -0
- package/plugins/job-coach/.mcp.json +9 -0
- package/plugins/job-coach/README.md +20 -0
- package/plugins/job-coach/connectors/ncs/server.ts +89 -0
- package/plugins/job-coach/examples/interview-sample.md +11 -0
- package/plugins/job-coach/graphs/course-links.ts +46 -0
- package/plugins/job-coach/graphs/recipes.yaml +18 -0
- package/plugins/job-coach/graphs/report.yaml +20 -0
- package/plugins/job-coach/graphs/run-step.ts +108 -0
- package/plugins/job-coach/plugin.json +13 -0
- package/plugins/job-coach/plugin.ts +6 -0
- package/plugins/job-coach/skills/career-report/SKILL.md +6 -0
- package/plugins/job-coach/skills/interview-to-profile/SKILL.md +6 -0
- package/plugins/job-coach/skills/run-report/SKILL.md +15 -0
- package/scripts/backup/elanous-backup.sh +139 -13
- package/scripts/backup/elanous-restore.sh +122 -0
- package/scripts/ci-daemon-port-gate.ts +164 -0
- package/scripts/ci-typecheck-changed.ts +15 -1
- package/scripts/cli-json-exit-scan.ts +126 -0
- package/scripts/codex-quota-alert-format.ts +52 -0
- package/scripts/codex-quota-alert.ts +63 -13
- package/scripts/continuation-dogfood.ts +2 -1
- package/scripts/coord-channel-watch.sh +5 -5
- package/scripts/coord-tracks.json +5 -4
- package/scripts/cron-run.ts +37 -16
- package/scripts/daemon-port-baseline.txt +9 -0
- package/scripts/design/extract-corpus-bench.ts +469 -0
- package/scripts/design/extract-corpus-score.ts +510 -0
- package/scripts/design/vendor-open-design-systems.ts +100 -0
- package/scripts/docs-lint.ts +1 -1
- package/scripts/fleet/node-setup.sh +38 -4
- package/scripts/heal/run-role.ts +328 -0
- package/scripts/install-role-watch.sh +95 -0
- package/scripts/install.ps1 +11 -1
- package/scripts/install.sh +81 -9
- package/scripts/isolation-hardcode-baseline.txt +1 -1
- package/scripts/landing-heal/must-fix-match.ts +37 -0
- package/scripts/landing-heal/run-mission.ts +101 -0
- package/scripts/lib/pwa-scenarios/acp-replay.ts +79 -0
- package/scripts/lib/pwa-scenarios/cdp-driver.ts +67 -0
- package/scripts/lib/pwa-scenarios/runner.ts +200 -0
- package/scripts/lib/pwa-scenarios/scenarios.ts +202 -0
- package/scripts/market/db-check.ts +212 -0
- package/scripts/market-posture-cycle.ts +63 -4
- package/scripts/nightly-docops.ts +1 -1
- package/scripts/ops/channel-bot-token-migrate.ts +146 -0
- package/scripts/ops-health-check.ts +15 -3
- package/scripts/pty-scenarios/run.ts +272 -0
- package/scripts/public-leak-baseline.txt +0 -7
- package/scripts/publish-internal-dist.ts +119 -0
- package/scripts/pwa-scenarios.ts +106 -0
- package/scripts/rebrand-elanous.ts +1 -1
- package/scripts/release-loop/cutoff.ts +139 -0
- package/scripts/release-loop/docs-land-node.ts +65 -0
- package/scripts/release-loop/docs-node.ts +172 -0
- package/scripts/release-loop/gate-diff.ts +29 -0
- package/scripts/release-loop/gate-node.ts +353 -0
- package/scripts/release-loop/node-verdict.ts +85 -0
- package/scripts/release-loop/prepare-node.ts +31 -0
- package/scripts/release-loop/publish-node.ts +57 -0
- package/scripts/release-loop/pwa-node-verdict.ts +45 -0
- package/scripts/release-loop/pwa-scenarios-node.ts +140 -0
- package/scripts/release-loop/release-docs.ts +102 -0
- package/scripts/release-loop/tui-node-checks.ts +29 -0
- package/scripts/release-loop/tui-sim-node.ts +113 -0
- package/scripts/release-loop/upgrade-node.ts +25 -0
- package/scripts/release-loop/verify-node.ts +21 -0
- package/scripts/release-loop/version-node.ts +147 -0
- package/scripts/release-upgrade-check.sh +53 -0
- package/scripts/se-mission-prepare.ts +9 -15
- package/scripts/test-deterministic.ts +2 -1
- package/scripts/uninstall.sh +10 -3
- package/scripts/video-broll-line.ts +89 -0
- package/scripts/waitlist-daily-digest.ts +108 -0
- package/scripts/window-landings.sh +1 -1
- package/skills/motion-broll/LICENSE +25 -0
- package/skills/motion-broll/SKILL.md +150 -0
- package/skills/motion-broll/SOURCE.md +6 -0
- package/skills/motion-broll/engine/base.css +19 -0
- package/skills/motion-broll/engine/beats.js +11 -0
- package/skills/motion-broll/engine/build.py +21 -0
- package/skills/motion-broll/engine/fonts/Geist-Variable.woff2 +0 -0
- package/skills/motion-broll/engine/fonts/GeistMono-Medium.woff2 +0 -0
- package/skills/motion-broll/engine/fonts/OFL-Geist.txt +92 -0
- package/skills/motion-broll/engine/motion.js +146 -0
- package/skills/motion-broll/engine/render.js +22 -0
- package/skills/motion-broll/examples/opus-aoe2/01-opus-drop.html +41 -0
- package/skills/motion-broll/examples/opus-aoe2/02-pip-builds.html +110 -0
- package/skills/motion-broll/examples/opus-aoe2/03-effort-slider.html +38 -0
- package/skills/motion-broll/examples/opus-aoe2/04-master-prompt.html +56 -0
- package/skills/motion-broll/examples/opus-aoe2/05-low-vs-max.html +49 -0
- package/skills/motion-broll/examples/opus-aoe2/06-chapter.html +18 -0
- package/skills/motion-broll/examples/opus-aoe2/plan.json +14 -0
- package/skills/motion-broll/reference/engine-api.md +106 -0
- package/skills/motion-broll/scripts/composite.py +14 -0
- package/skills/motion-broll/scripts/inspect_video.py +34 -0
- package/skills/motion-broll/scripts/make_pages.py +34 -0
- package/skills/motion-broll/scripts/setup.sh +16 -0
- package/skills/motion-broll/scripts/words.py +13 -0
- package/skills/motion-broll/templates/compare.html +135 -0
- package/skills/motion-broll/templates/viewer.html +97 -0
- package/skills/omni-digest/SKILL.md +260 -0
- package/skills/omni-digest/digest.md +197 -0
- package/skills/omni-digest/docs/diagrams/noncode-terminal-promotion-path-2026-08-13.mmd +32 -0
- package/skills/omni-digest/package-lock.json +558 -0
- package/skills/omni-digest/package.json +13 -0
- package/skills/omni-digest/scripts/main.ts +404 -0
- package/skills/omni-digest/src/delegate.ts +34 -0
- package/skills/omni-digest/src/detect.ts +46 -0
- package/skills/omni-digest/src/diagram.ts +72 -0
- package/skills/omni-digest/src/domain-staging.ts +50 -0
- package/skills/omni-digest/src/env.ts +38 -0
- package/skills/omni-digest/src/fetch.ts +237 -0
- package/skills/omni-digest/src/media.ts +180 -0
- package/skills/omni-digest/src/obsidian.ts +69 -0
- package/skills/omni-digest/src/ocr.ts +149 -0
- package/skills/omni-digest/src/router.ts +60 -0
- package/skills/omni-digest/src/summarize.ts +87 -0
- package/skills/omni-digest/src/types.ts +124 -0
- package/skills/omni-digest/src/util.ts +34 -0
- package/skills/omni-digest/src/visual.ts +129 -0
- package/skills/omni-digest/src/x-api.ts +151 -0
- package/skills/omni-digest/tsconfig.json +13 -0
- package/src/a2a/agent-card.ts +29 -0
- package/src/a2a/server.ts +173 -0
- package/src/acp/auto-persist.ts +3 -6
- package/src/acp/backend-registry.ts +6 -10
- package/src/acp/channel-browser-shell.ts +1 -535
- package/src/acp/client.ts +106 -36
- package/src/acp/fs-roots.ts +20 -4
- package/src/acp/obsidian-tags.ts +6 -3
- package/src/acp/server.ts +189 -32
- package/src/agent/pty-binding.ts +1 -1
- package/src/agent/spawn-embodied-agent-in-vw.ts +5 -336
- package/src/agent/subagent-callable.ts +39 -1
- package/src/agent-mission/browser-login.ts +241 -0
- package/src/agent-mission/capabilities-cli.ts +33 -0
- package/src/agent-mission/capability-matrix.ts +31 -0
- package/src/agent-mission/capability-readers.ts +79 -0
- package/src/agent-mission/capability-types.ts +15 -0
- package/src/agent-mission/claude-headless.ts +131 -0
- package/src/agent-mission/claude-subscription.ts +57 -0
- package/src/agent-mission/doc-guided-install.ts +185 -0
- package/src/agent-mission/driver.ts +821 -69
- package/src/agent-mission/env-profile.ts +68 -0
- package/src/agent-mission/handoff.ts +128 -0
- package/src/agent-mission/in-agent-plugin.ts +311 -0
- package/src/agent-mission/mission-cli.ts +19 -1
- package/src/agent-mission/parse.ts +9 -4
- package/src/agent-mission/pr-review-watch.ts +62 -13
- package/src/agent-mission/resource-ladder.ts +187 -0
- package/src/agent-mission/tool-install.ts +249 -0
- package/src/agent-mission/tool-ladder.ts +37 -0
- package/src/agent-room/room-builder.ts +6 -600
- package/src/agent-substrate/review-intent.ts +43 -1
- package/src/auth/scope.ts +8 -4
- package/src/auth/temp-tokens.ts +131 -0
- package/src/auto-research/obsidian-bridge.ts +2 -0
- package/src/autopilot/build/integrity-gate.ts +27 -4
- package/src/autopilot/build/isolated-instance.ts +2 -1
- package/src/autopilot/build/llm-conflict-merge.ts +27 -0
- package/src/autopilot/llm-control-brain.ts +54 -12
- package/src/autopilot/mission-engine.ts +15 -1
- package/src/autopilot/mission-notify.ts +4 -2
- package/src/autopilot/mission-origin.ts +5 -5
- package/src/autopilot/mission-phase-track.ts +52 -0
- package/src/autopilot/mission-tool.ts +1 -1
- package/src/autopilot/pty-control-loop.ts +94 -2
- package/src/autopilot/track-agent.ts +138 -0
- package/src/autopilot/track-courier.ts +153 -0
- package/src/boot/acp-server.ts +16 -2
- package/src/boot/check-same-origin.ts +19 -5
- package/src/boot/daemon-multi-llm-runtime.ts +14 -8
- package/src/boot/daemon-prompt-turn.ts +2 -0
- package/src/boot/daemon-runtime.ts +36 -14
- package/src/boot/daemon-tools/index.ts +16 -0
- package/src/boot/daemon-tools/self-implement.ts +4 -0
- package/src/boot/daemon-tools/types.ts +3 -0
- package/src/browser-cdp/chrome-flags.ts +7 -0
- package/src/browser-cdp/client.ts +2 -0
- package/src/browser-pane/mount.ts +1 -246
- package/src/budget/codex-reset-credit-state.ts +15 -0
- package/src/budget/fetchers/codex.ts +2 -1
- package/src/budget/run-usage-rollup.ts +11 -4
- package/src/budget/unified-usage.ts +2 -1
- package/src/capture/tui-self-report.ts +10 -0
- package/src/channel-bot-token.ts +126 -0
- package/src/chat/index.ts +21 -45
- package/src/chat/input-text-key.ts +2 -2
- package/src/chat/mode/manual.ts +2 -4
- package/src/chat/pickers/state.ts +10 -27
- package/src/chat/search/modal.ts +14 -2
- package/src/chat/tool-render/types.ts +1 -1
- package/src/chat/turn-typeahead.ts +2 -1
- package/src/chat/wrap.ts +6 -8
- package/src/cli/__fixtures__/agent-help-before/agent.txt +18 -0
- package/src/cli/__fixtures__/agent-help-before/registry.txt +13 -0
- package/src/cli/__fixtures__/agent-help-before/root.txt +100 -0
- package/src/cli/__fixtures__/agent-help-before/tier.txt +15 -0
- package/src/cli/a2a-cli.ts +52 -0
- package/src/cli/agent-cli.ts +721 -0
- package/src/cli/autopilot-cli.ts +739 -0
- package/src/cli/bg-launch.ts +20 -4
- package/src/cli/claude-plugin-setup.ts +199 -0
- package/src/cli/config-test-sync.ts +94 -10
- package/src/cli/connector-cli.ts +204 -0
- package/src/cli/control-cli.ts +220 -0
- package/src/cli/control-join-cli.ts +142 -0
- package/src/cli/docs-cli.ts +38 -0
- package/src/cli/doctor-cli.ts +225 -26
- package/src/cli/doctor-distro.ts +17 -1
- package/src/cli/doctor-fix.ts +145 -17
- package/src/cli/doctor-llm-assist.ts +71 -0
- package/src/cli/doctor-private-files.ts +66 -0
- package/src/cli/doctor-readiness.ts +8 -5
- package/src/cli/fleet-cli.ts +63 -0
- package/src/cli/g6a-registration-probe.ts +16 -0
- package/src/cli/git-install-plan.ts +51 -0
- package/src/cli/hooks-cli.ts +44 -0
- package/src/cli/ingest-token-cli.ts +21 -0
- package/src/cli/intake-cli.ts +416 -0
- package/src/cli/labels-cli.ts +74 -0
- package/src/cli/leader-cli.ts +10 -159
- package/src/cli/live-cli.ts +48 -0
- package/src/cli/llm-detect-cli.ts +130 -0
- package/src/cli/logs-cli.ts +231 -7
- package/src/cli/machine-cli.ts +38 -0
- package/src/cli/mcp-call.ts +43 -13
- package/src/cli/mcp-gateway-cli.ts +90 -0
- package/src/cli/mcp-login.ts +116 -8
- package/src/cli/mcp-reload.ts +20 -3
- package/src/cli/nexus-dist.ts +18 -13
- package/src/cli/nexus-ios-bind.ts +20 -7
- package/src/cli/ops-cli.ts +225 -0
- package/src/cli/plugin-cli.ts +103 -0
- package/src/cli/pod-cli.ts +83 -0
- package/src/cli/port-lease-local.ts +124 -0
- package/src/cli/pr-cli.ts +12 -1
- package/src/cli/provider-cli.ts +720 -0
- package/src/cli/pty-record-cli.ts +63 -0
- package/src/cli/pty-takeover-cli.ts +57 -40
- package/src/cli/pty-web-address.ts +52 -0
- package/src/cli/publish-cli.ts +44 -0
- package/src/cli/pwa-build.ts +18 -12
- package/src/cli/pwa-dev.ts +13 -8
- package/src/cli/pwa-registry.ts +6 -0
- package/src/cli/pwa-share.ts +65 -22
- package/src/cli/pwa-show.ts +20 -4
- package/src/cli/pwa-start.ts +99 -27
- package/src/cli/pwa-test.ts +201 -96
- package/src/cli/release-cli.ts +90 -7
- package/src/cli/remotes-cli.ts +20 -1
- package/src/cli/remotes.ts +2 -1
- package/src/cli/repo-cli.ts +315 -36
- package/src/cli/research-cli.ts +66 -0
- package/src/cli/role-cli.ts +320 -0
- package/src/cli/schedule-cli.ts +246 -0
- package/src/cli/self-update.ts +98 -10
- package/src/cli/setup-cli.ts +64 -2
- package/src/cli/shadow-cli.ts +188 -0
- package/src/cli/share-auto-mount.ts +12 -8
- package/src/cli/start-cli.ts +221 -0
- package/src/cli/stdout-flush.ts +8 -0
- package/src/cli/storage-cli.ts +334 -0
- package/src/cli/tailscale-serve.ts +34 -19
- package/src/cli/tasks-cli.ts +176 -0
- package/src/cli/test-state-dir-flag.ts +1 -1
- package/src/cli/usage-cli.ts +15 -4
- package/src/cli/where-cli.ts +22 -55
- package/src/code-edit/diff-render.ts +6 -32
- package/src/code-edit/source-delta-browser.ts +0 -1
- package/src/codex/models.ts +1 -1
- package/src/config.ts +8 -13
- package/src/connectors/event-ledger.ts +41 -0
- package/src/connectors/linear-projector.ts +88 -0
- package/src/connectors/linear.ts +143 -0
- package/src/connectors/types.ts +19 -0
- package/src/control-plane/lease-holder.ts +41 -0
- package/src/control-plane/ledger.ts +146 -0
- package/src/control-plane/light-member.ts +164 -0
- package/src/control-plane/member-tokens.ts +88 -0
- package/src/control-plane/member.ts +159 -0
- package/src/control-plane/port-lease-heartbeat.ts +101 -0
- package/src/control-plane/ports.ts +40 -0
- package/src/control-plane/primary.ts +169 -0
- package/src/control-plane/server.ts +216 -0
- package/src/dashboard/acp-boot.ts +11 -38
- package/src/dashboard/assistant-render-state-runtime.ts +2 -2
- package/src/dashboard/assistant-sample-runtime.ts +2 -2
- package/src/dashboard/auto-compact-runtime.ts +11 -16
- package/src/dashboard/browser-help-runtime.ts +2 -3
- package/src/dashboard/chat/acp-chat.ts +2 -5
- package/src/dashboard/code-edit-post-turn-runtime.ts +1 -2
- package/src/dashboard/compact-surface-assembly.ts +0 -14
- package/src/dashboard/compact-surface-dispatch.ts +1 -38
- package/src/dashboard/compact-surface-inventory.ts +0 -8
- package/src/dashboard/compact-surface-runtime.ts +0 -14
- package/src/dashboard/context-menu-provider-boot.ts +0 -9
- package/src/dashboard/context-window-runtime-boot.ts +0 -37
- package/src/dashboard/index.ts +278 -2558
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +0 -6
- package/src/dashboard/input/chat-main-slash-command.ts +2 -2
- package/src/dashboard/input/dashboard-priority-key-route.ts +1 -43
- package/src/dashboard/input/mouse-modal-surface-runtime.ts +1 -5
- package/src/dashboard/input/mouse-wiring.ts +2 -3
- package/src/dashboard/layout-display-runtime-registration.ts +0 -10
- package/src/dashboard/modals/pane-multi.ts +1 -1
- package/src/dashboard/replay-preview.ts +1 -1
- package/src/dashboard/runtime/approvers.ts +0 -1
- package/src/dashboard/runtime/state-snapshot.ts +0 -90
- package/src/dashboard/scenario-runtime-boot.ts +16 -16
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +134 -1456
- package/src/dashboard/slash-runtime/design-pick.ts +96 -0
- package/src/dashboard/slash-runtime/help-from-registry.ts +77 -0
- package/src/dashboard/surface-registry-wiring.ts +2 -15
- package/src/dashboard/turn-message-runtime.ts +0 -4
- package/src/dashboard/turn-preamble.ts +1 -1
- package/src/dashboard/turn-stream-formatter.ts +2 -2
- package/src/dashboard/turn-stream-runtime.ts +2 -2
- package/src/dashboard-pane-context-menu.ts +0 -14
- package/src/debug/log.ts +7 -0
- package/src/decide/boundary-shadow.ts +131 -0
- package/src/design/apply-direction.ts +209 -0
- package/src/design/css-root-tokens.ts +89 -0
- package/src/design/custom-system-create.ts +230 -0
- package/src/design/design-directions.ts +61 -41
- package/src/design/design-gate.ts +241 -0
- package/src/design/design-library.ts +57 -0
- package/src/design/design-previews.ts +138 -0
- package/src/design/design-systems.ts +61 -0
- package/src/design/lint-artifact-run.ts +46 -6
- package/src/design/lint-artifact.ts +5 -1
- package/src/design/open-design-client.ts +247 -0
- package/src/design/system-from-extract.ts +767 -0
- package/src/design/system-schema.ts +123 -0
- package/src/discord-slash-wire.ts +2 -1
- package/src/discord-test-runner.ts +2 -1
- package/src/discord-voice-wire.ts +2 -1
- package/src/discord.ts +1 -1
- package/src/dispatch/opportunistic-launcher.ts +24 -1
- package/src/domains/ops-status.ts +35 -2
- package/src/domains/outbound-alert.ts +16 -4
- package/src/domains/repeated-failure.ts +89 -0
- package/src/domains/schedule-manage-tool.ts +28 -8
- package/src/domains/schedule-migrate.ts +22 -4
- package/src/domains/schedule-registry.ts +88 -33
- package/src/domains/schedule-runs.ts +132 -0
- package/src/domains/schedule-state.ts +152 -0
- package/src/element-registry/address.ts +1 -3
- package/src/git-fs/gh-cli.ts +47 -17
- package/src/git-fs/retry.ts +1 -0
- package/src/git-fs/runner.ts +1 -0
- package/src/git-fs/worktree.ts +6 -5
- package/src/github/pr-labels.ts +68 -0
- package/src/graph-kinds/plugin-nodes.ts +60 -0
- package/src/graph-kinds/registry.ts +118 -0
- package/src/graph-runner/graph-cli.ts +103 -0
- package/src/graph-runner/graph-notify.ts +220 -0
- package/src/graph-runner/graph-tick.ts +119 -0
- package/src/graph-runner/release-manifest.ts +93 -0
- package/src/graph-runner/runner.ts +457 -0
- package/src/grok/credential.ts +158 -5
- package/src/grounding/ensure-grounding.ts +131 -0
- package/src/grounding/mirror-export.ts +89 -0
- package/src/grounding/mirror-manifest.ts +252 -0
- package/src/grounding/sources-cli.ts +209 -0
- package/src/grounding/sources.ts +333 -0
- package/src/grounding/token.ts +115 -0
- package/src/harness/harness-cli-command.ts +352 -19
- package/src/harness/harness-pod-dispatch.ts +110 -0
- package/src/harness/harness-stop.ts +131 -0
- package/src/harness/harness-substrate-default.ts +40 -0
- package/src/harness/harness-worktrees.ts +1 -1
- package/src/harness/harness-write-boundary.ts +2 -0
- package/src/harness/llm-decompose.ts +2 -1
- package/src/harness/self-send-decide.ts +224 -0
- package/src/harness/shell-relay.ts +5 -0
- package/src/hooks/providers.ts +77 -0
- package/src/hooks/queue.ts +73 -0
- package/src/hooks/receiver.ts +133 -0
- package/src/index.ts +666 -3406
- package/src/input-core/dispatcher.ts +1 -1
- package/src/input-core/drag-esc-interceptor.ts +1 -1
- package/src/instance/current.ts +5 -5
- package/src/instance/leader.ts +10 -326
- package/src/instance/nexus-run-refusal.ts +27 -92
- package/src/instance/project-local-exclude.ts +27 -0
- package/src/instance/resolve.ts +40 -175
- package/src/intake-plane/capture.ts +14 -1
- package/src/intake-plane/check.ts +34 -14
- package/src/intake-plane/collect-github.ts +258 -0
- package/src/intake-plane/collect-pod.ts +100 -0
- package/src/intake-plane/collect-telegram-saved.ts +86 -0
- package/src/intake-plane/digest.ts +102 -0
- package/src/intake-plane/enrich-plugins.ts +1 -1
- package/src/intake-plane/front-classifier.ts +56 -0
- package/src/intake-plane/front-route-classifier.ts +80 -0
- package/src/intake-plane/front-route-rules.ts +152 -0
- package/src/intake-plane/grounding-docs.ts +185 -0
- package/src/intake-plane/harness-target.ts +20 -0
- package/src/intake-plane/intake-to-tasks.ts +303 -0
- package/src/intake-plane/items.ts +247 -0
- package/src/intake-plane/link-ledger.ts +27 -0
- package/src/intake-plane/route.ts +104 -0
- package/src/intake-plane/runtime-callables.ts +3 -1
- package/src/intake-plane/sketch-ledger.ts +34 -0
- package/src/intake-plane/slash.ts +30 -2
- package/src/intake-plane/submit-intake-work.ts +160 -0
- package/src/intake-plane/telegram-work.ts +56 -0
- package/src/iul/sidebar-shell.ts +0 -165
- package/src/launch-head/capability-check.ts +162 -0
- package/src/launch-head/launch-head-cli.ts +242 -0
- package/src/launch-head/load-balance.ts +81 -0
- package/src/live/detail-switch.ts +175 -0
- package/src/llm/provider-detect.ts +247 -0
- package/src/llm/provider-probe.ts +57 -0
- package/src/llm.ts +55 -23
- package/src/log-entry.ts +1 -1
- package/src/log-pane/attachment-popup.ts +1 -2
- package/src/loops/loop-cli.ts +37 -0
- package/src/loops/registry.ts +174 -0
- package/src/market/official-keys.ts +5 -0
- package/src/market/publish.ts +273 -0
- package/src/market/signed-index.ts +156 -0
- package/src/market/tgz.ts +121 -0
- package/src/mcp/client.ts +1 -1
- package/src/mcp/mcp-oauth.ts +40 -5
- package/src/mcp/server.ts +75 -7
- package/src/mcp-gateway/gateway.ts +128 -0
- package/src/mcp-gateway/pat-store.ts +124 -0
- package/src/mss/logging/log-store.ts +91 -2
- package/src/mss/logging/scoped-level.ts +5 -9
- package/src/native-tool-catalog.ts +64 -343
- package/src/nexus/api/connect-info.ts +23 -25
- package/src/nexus/api/context-url.ts +1 -1
- package/src/nexus/api/design-check.ts +90 -59
- package/src/nexus/api/design-previews-route.ts +182 -0
- package/src/nexus/api/design-system-create-route.ts +123 -0
- package/src/nexus/api/graph-kinds.ts +69 -0
- package/src/nexus/api/graphs-api.ts +221 -0
- package/src/nexus/api/harness-api.ts +31 -2
- package/src/nexus/api/health.ts +15 -0
- package/src/nexus/api/http-server.ts +274 -43
- package/src/nexus/api/image-generate.ts +3 -0
- package/src/nexus/api/ingest-token.ts +175 -0
- package/src/nexus/api/intake-ledger-api.ts +54 -0
- package/src/nexus/api/intake-route.ts +111 -0
- package/src/nexus/api/json-response.ts +33 -0
- package/src/nexus/api/live-detail.ts +47 -0
- package/src/nexus/api/live-shipped.ts +78 -0
- package/src/nexus/api/log-fabric.ts +33 -2
- package/src/nexus/api/markdown-publish.ts +3 -2
- package/src/nexus/api/mcp-http.ts +14 -9
- package/src/nexus/api/mcp-oauth-hint.ts +30 -0
- package/src/nexus/api/mcp-public-allowlist.ts +33 -0
- package/src/nexus/api/merge-approvals-gate.ts +79 -0
- package/src/nexus/api/merge-approvals.ts +306 -0
- package/src/nexus/api/meta-api.ts +4 -0
- package/src/nexus/api/next-fluent-wiring.ts +7 -9
- package/src/nexus/api/plugins-market.ts +125 -0
- package/src/nexus/api/pod-credential-api.ts +133 -0
- package/src/nexus/api/public-routes.ts +80 -0
- package/src/nexus/api/rest-route-paths.ts +15 -0
- package/src/nexus/api/schedules-action.ts +12 -3
- package/src/nexus/api/schedules-read.ts +228 -0
- package/src/nexus/api/sessions-store.ts +8 -2
- package/src/nexus/api/setup-answer-priority.ts +130 -0
- package/src/nexus/api/setup-channel-bot.ts +56 -0
- package/src/nexus/api/setup-child-llm.ts +228 -0
- package/src/nexus/api/setup-obsidian-skills.ts +93 -0
- package/src/nexus/api/task-cards-api.ts +34 -0
- package/src/nexus/api/tasks-create.ts +136 -0
- package/src/nexus/api/telegram-trigger-bot.ts +3 -3
- package/src/nexus/api/terminals.ts +204 -18
- package/src/nexus/api/trace.ts +354 -0
- package/src/nexus/api/vault-api.ts +140 -7
- package/src/nexus/api/worktrees.ts +18 -2
- package/src/nexus/boot/register-mcp-clients.ts +38 -4
- package/src/nexus/daemon-endpoint.ts +85 -0
- package/src/nexus/default-port.ts +1 -0
- package/src/nexus/index.ts +329 -111
- package/src/nexus/onboarding/pwa-share-prompt.ts +31 -8
- package/src/nexus/onboarding/tailscale-probe.ts +9 -1
- package/src/nexus/setup-status.ts +58 -0
- package/src/nexus/supervisor/lock.ts +8 -0
- package/src/nexus/webterm/pty.ts +15 -0
- package/src/oauth/codex-account-rotation.ts +122 -16
- package/src/oauth/codex-account-store.ts +88 -19
- package/src/oauth/codex-quota-policy.ts +55 -0
- package/src/oauth/store.ts +28 -25
- package/src/obsidian/default-vault.ts +17 -0
- package/src/obsidian/vault-write-guard.ts +46 -0
- package/src/onboarding/help/llm.md +2 -2
- package/src/onboarding.ts +2 -2
- package/src/panes/alt-skip-predicate.ts +4 -3
- package/src/panes/external-terminal-pane.ts +3 -4
- package/src/panes/factory.ts +1 -18
- package/src/panes/index.ts +1 -5
- package/src/panes/pane-cycle.ts +1 -1
- package/src/panes/types.ts +1 -1
- package/src/platform/env-literal.ts +4 -0
- package/src/plugin-hooks/dispatcher.ts +10 -4
- package/src/plugins/core/host.ts +94 -4
- package/src/plugins/core/manifest.ts +104 -7
- package/src/plugins/install/market-fetch.ts +249 -0
- package/src/plugins/install/plugin-install.ts +387 -0
- package/src/policy/claude-subscription-guard.ts +25 -0
- package/src/preview/terminal.ts +24 -1
- package/src/preview-pane/mount.ts +1 -142
- package/src/prompt/references.ts +4 -51
- package/src/pty-shell/pty-control-ipc.ts +57 -3
- package/src/pty-shell/pty-mouse.ts +75 -0
- package/src/pty-shell/pty-recording.ts +108 -0
- package/src/pty-shell/registry.ts +53 -3
- package/src/python/resolve-python.ts +1 -1
- package/src/release-loop/manifest.ts +65 -0
- package/src/release-loop/release-note.ts +174 -0
- package/src/roles/lease-cas.ts +52 -0
- package/src/roles/machine-name.ts +48 -0
- package/src/roles/machine-profile.ts +65 -0
- package/src/roles/role-lease-read.ts +81 -0
- package/src/roles/role-lease.ts +63 -0
- package/src/roles/role-watch.ts +69 -0
- package/src/self-dev/ask-launch-flow.ts +39 -22
- package/src/self-dev/ask-launch-io.ts +1 -1
- package/src/self-dev/dev-cli.ts +250 -139
- package/src/self-dev/dev-pipeline.ts +80 -8
- package/src/self-dev/draft-sweep.ts +231 -0
- package/src/self-dev/draft-triage-rules.ts +42 -0
- package/src/self-dev/entrance-baseline.ts +156 -4
- package/src/self-dev/fabric-decompose-adapter.ts +10 -0
- package/src/self-dev/launch-preflight.ts +1 -1
- package/src/self-dev/orchestrate.ts +297 -20
- package/src/self-dev/repair-signals.ts +6 -0
- package/src/self-dev/run-store.ts +20 -5
- package/src/self-dev/run-supervisor.ts +43 -3
- package/src/self-implement/abandoned-classification.ts +15 -1
- package/src/self-implement/blocked-draft-policy.ts +6 -0
- package/src/self-implement/budget-gate.ts +236 -0
- package/src/self-implement/child-llm-preference.ts +84 -0
- package/src/self-implement/decision-events.ts +57 -0
- package/src/self-implement/decision-signal-press.ts +5 -2
- package/src/self-implement/dependency-change-gate.ts +90 -0
- package/src/self-implement/gate-baseline.ts +32 -1
- package/src/self-implement/gate-cli.ts +29 -7
- package/src/self-implement/gate-scope.ts +7 -1
- package/src/self-implement/goal-author-decompose.ts +22 -4
- package/src/self-implement/goal-author.ts +23 -2
- package/src/self-implement/goal-boundary.ts +65 -0
- package/src/self-implement/goal-clarification-escalation.ts +1 -0
- package/src/self-implement/goal-documents-dir.ts +6 -1
- package/src/self-implement/goal-execution-records.ts +58 -0
- package/src/self-implement/goal-run-store.ts +42 -24
- package/src/self-implement/graph-authority.ts +13 -28
- package/src/self-implement/graph-catalog.ts +48 -0
- package/src/self-implement/graph-run-contract.ts +127 -0
- package/src/self-implement/graph-templates.ts +14 -7
- package/src/self-implement/graph-yaml.ts +35 -6
- package/src/self-implement/harness-policy-gates.ts +42 -0
- package/src/self-implement/headless-elanous-driver.ts +30 -6
- package/src/self-implement/heal-triage.ts +229 -0
- package/src/self-implement/host-regate.ts +240 -0
- package/src/self-implement/non-git-consent.ts +23 -0
- package/src/self-implement/orchestrator.ts +481 -132
- package/src/self-implement/pipeline-shape.ts +1 -1
- package/src/self-implement/pr-evidence-artifact.ts +6 -19
- package/src/self-implement/prior-draft-findings.ts +128 -0
- package/src/self-implement/pwa-import-graph.ts +65 -0
- package/src/self-implement/repo-provision.ts +18 -21
- package/src/self-implement/report-origin.ts +39 -0
- package/src/self-implement/rework-policy.ts +21 -0
- package/src/self-implement/run-ledger-compact.ts +438 -0
- package/src/self-implement/run-ledger.ts +212 -29
- package/src/self-implement/run-report.ts +24 -0
- package/src/self-implement/run-status-mapping.ts +2 -0
- package/src/self-implement/running-runs.ts +112 -14
- package/src/self-implement/scoped-typecheck-config.ts +49 -0
- package/src/self-implement/seams.ts +203 -38
- package/src/self-implement/self-implement-cli.ts +17 -2
- package/src/self-implement/shadow-repo.ts +350 -0
- package/src/self-implement/supervision-vocabulary.ts +7 -0
- package/src/shell-runner/dispatch.ts +3 -0
- package/src/shell-runner/index.ts +0 -7
- package/src/skills/runner.ts +0 -69
- package/src/skills/tools/agent-room-slash.ts +2 -1
- package/src/skills/tools/agent-room.ts +8 -140
- package/src/skills/tools/agent.ts +5 -3
- package/src/skills/tools/context.ts +5 -140
- package/src/skills/tools/control.ts +4 -188
- package/src/skills/tools/dashboard-slash.ts +3 -11
- package/src/skills/tools/dashboard-state.ts +3 -5
- package/src/skills/tools/dev-harness.ts +3 -2
- package/src/skills/tools/omni-search.ts +29 -1
- package/src/skills/tools/shell.ts +11 -29
- package/src/skills/tools/spawn-coding-agent-headless.ts +6 -9
- package/src/ssh/ssh-picker-modal.ts +1 -1
- package/src/steward/directive.ts +99 -0
- package/src/steward/triage.ts +203 -0
- package/src/storage/cli-bin.ts +67 -0
- package/src/storage/object-store-visibility.ts +169 -0
- package/src/storage/object-store.ts +452 -0
- package/src/storage/s3.ts +53 -10
- package/src/storage/storage-detect.ts +337 -0
- package/src/surface/address.ts +3 -5
- package/src/surface/index.ts +0 -6
- package/src/surface/llm-tools.ts +1 -2
- package/src/surface/shell-runner-boot.ts +4 -89
- package/src/task-cards/card-cli.ts +64 -0
- package/src/task-cards/card-store.ts +241 -0
- package/src/task-orchestrator/boot.ts +27 -1
- package/src/task-orchestrator/dispatcher.ts +49 -7
- package/src/task-orchestrator/external-fingerprint.ts +10 -0
- package/src/task-orchestrator/external-policy.ts +86 -0
- package/src/task-orchestrator/feedback-loop.ts +4 -2
- package/src/task-orchestrator/graph.ts +18 -1
- package/src/task-orchestrator/runtimes/create.ts +128 -0
- package/src/task-orchestrator/store.ts +78 -18
- package/src/task-orchestrator/surface-registry.ts +5 -2
- package/src/task-orchestrator/surfaces/external-exec.ts +180 -0
- package/src/task-orchestrator/surfaces/idea-approval-pr.ts +118 -0
- package/src/task-orchestrator/surfaces/index.ts +4 -3
- package/src/task-orchestrator/surfaces/pod-account-broker.ts +60 -5
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +136 -0
- package/src/task-orchestrator/surfaces/pod-command-job.ts +348 -0
- package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +177 -0
- package/src/task-orchestrator/surfaces/pod-pool.ts +128 -12
- package/src/task-orchestrator/surfaces/pod-skills.ts +11 -3
- package/src/task-orchestrator/surfaces/pod-source-bundle.ts +132 -0
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +91 -0
- package/src/task-orchestrator/surfaces/pod-source-spec.ts +77 -0
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +782 -41
- package/src/task-orchestrator/surfaces/self-implement.ts +8 -1
- package/src/task-orchestrator/tox-loop.ts +204 -0
- package/src/task-orchestrator/types.ts +21 -1
- package/src/telegram-commands.ts +8 -0
- package/src/telegram-report.ts +2 -1
- package/src/telegram-run.ts +18 -5
- package/src/telegram.ts +92 -22
- package/src/tool-runtime/acp-session-runtime.ts +28 -7
- package/src/tool-runtime/agent-runtime.ts +1 -0
- package/src/tool-runtime/context-runtime.ts +18 -35
- package/src/tool-runtime/control-runtime.ts +8 -21
- package/src/tool-runtime/dashboard-state-runtime.ts +1 -5
- package/src/tool-runtime/elanous-asana-runtimes.ts +205 -0
- package/src/tool-runtime/elanous-control-runtimes.ts +16 -2
- package/src/tool-runtime/elanous-task-submit-runtime.ts +124 -0
- package/src/tool-runtime/index.ts +4 -1
- package/src/tool-runtime/scenario-runtimes.ts +22 -21
- package/src/tool-runtime/scenario-target-mount.ts +6 -32
- package/src/tool-runtime/types.ts +8 -0
- package/src/tui/chat/attachment-summary.ts +4 -4
- package/src/tui-client/headless-core-guard.ts +0 -1
- package/src/tui.ts +8 -5
- package/src/typecheck-ratchet.ts +15 -0
- package/src/ui/hover-presenter.ts +3 -7
- package/src/user-config.ts +427 -190
- package/src/version/code-revision.ts +33 -8
- package/src/version/packed-revision.json +1 -1
- package/src/video-pipeline/broll-agent.ts +102 -0
- package/src/video-pipeline/recipes/broll.ts +263 -0
- package/src/video-pipeline/walk-line.ts +2 -1
- package/src/views/scratch-image-size.ts +10 -0
- package/src/voice/channel-adapters/pwa-voice-adapter.ts +2 -18
- package/src/voice/channel-adapters/telegram-voice-adapter.ts +1 -6
- package/src/voice/voice-tts-singleton.ts +46 -8
- package/src/web-push/vapid-keys.ts +1 -1
- package/src/web-search/index.ts +5 -5
- package/src/web-terminal/preview-tap-registry.ts +152 -43
- package/src/workflow-runtime/executor.ts +18 -22
- package/src/workflow-runtime/node-catalog.ts +20 -1
- package/src/workflow-runtime/nodes/bash.ts +1 -0
- package/src/workflow-runtime/nodes/task.ts +74 -0
- package/src/workflow-runtime/nodes/triggers.ts +24 -1
- package/src/workflow-runtime/plugin-kind-node.ts +138 -0
- package/src/workflow-runtime/schema.ts +98 -2
- package/src/workflow-runtime/triggers/webhook-router.ts +43 -3
- package/src/workflow-runtime/triggers/webhook-source.ts +19 -1
- package/src/workflow-runtime/types.ts +74 -4
- package/apps/pwa/out/_next/static/Ksn99fVf2HUWhSyV1-FC8/_buildManifest.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1176-4943bd83b00e53a2.js +0 -25
- package/apps/pwa/out/_next/static/chunks/1380-9c652e1002032c86.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1863-2ea170dfec26b88b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2091-2d6b7f4f16300f83.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2347-366617ec73babe3b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2598.814f64e3268634e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3089-e60cc8f5d35ee239.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3158-c77ed9ea34f9cc9f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3607-f0b5c5ee18fcf56a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3659-05b2d5d971b42dbc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3736-b6a7bfdcb8f56ec6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3839-eebf298e89a7bb77.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4012.832a2824b978e7ee.js +0 -5
- package/apps/pwa/out/_next/static/chunks/4706-d85d7f3345f3ff91.js +0 -1
- package/apps/pwa/out/_next/static/chunks/526-17a6a2e0e6dc4498.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5508-676ac75f2757ad40.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5583-8a0317f4b8e68db9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5927.8378481a12cc8044.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6258-b58f722b10e8d31d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6820-32fd097e6186fdc9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6852-983db7ca958634b7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7235-e583e4a015e159b9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7482-7b417330b24a996a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7701-99b7d4dedb955bf8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/77f1928d-bd3777589042d3ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8366-36956cafc5e33614.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8370-23d0de995be666f8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8617-307421f3b0e8b2a2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8837-e45de46a9fedf1f5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9058-0e8055a5ea3ebdd6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-84b84eca12acada4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-1f23568c29e88f7a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-bf6fc9aafd6135a7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-3f8539ae4b719d2e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-d2900febb74ecf32.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-e82dec647dd79c36.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/dashboard/page-096ec743a8ee955a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-255c2ceded4b3493.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-84b84eca12acada4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-2db61b2f9efba61f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-e11ee17f221aaa9b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-e075974e029ce4c4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-ec5b68a9af3366a0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-986c177afb4adae6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-a72781461af2f2a3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-92781cbaafc487ad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-2c14d2a1f2930f33.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-22ee4bf8070b2b4d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9c06e4a8297942a8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-d0cd32f6d373798f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-0c1642018d87ebb8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-93e5e97d614df487.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-84b84eca12acada4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-b1ce871940d7393e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-ae154addf345febe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-90af3aa813d2053c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f3f962fda428a738.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-1c1f7cc1d5def06d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-09d4cbdaaacf06c1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-e877b8e8ca90b27f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-71d902f463dea526.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-40ea576cefa25fe6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-a56a3f178c3831f6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/bcc499d1-804a270d878e0842.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-b25b7c5501c59b6d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-a9ec9da43387afff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-aa2c05954aaa6754.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-bb3768fb4b84aebb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-2820ba75b87b2f5e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-58c73b145f189b1c.js +0 -1
- package/apps/pwa/out/_next/static/css/effec8adf767aa75.css +0 -1
- package/apps/pwa/out/dashboard/index.html +0 -1
- package/apps/pwa/out/dashboard/index.txt +0 -26
- package/src/acp/resident-shell.ts +0 -244
- package/src/agent/spawn-local-llm-in-vw.ts +0 -240
- package/src/dashboard/agent-spawn-tools-boot.ts +0 -14
- package/src/dashboard/dock-picker-inventory.ts +0 -41
- package/src/dashboard/goal-plan-hud-bridge.ts +0 -112
- package/src/dashboard/hud-mirror.ts +0 -207
- package/src/dashboard/input/mouse-dock-runtime.ts +0 -156
- package/src/dashboard/input/mouse-hover-runtime.ts +0 -46
- package/src/dashboard/input/mouse-pill-context-runtime.ts +0 -74
- package/src/dashboard/input/mouse-workspace-restore-runtime.ts +0 -64
- package/src/dashboard/input/scratch-actions.ts +0 -36
- package/src/dashboard/input/virtual-window-key-router.ts +0 -24
- package/src/dashboard/rich-scratch-viewers.ts +0 -77
- package/src/dashboard/scratch-slash-runtime.ts +0 -36
- package/src/dashboard/scratch-state-runtime.ts +0 -42
- package/src/dashboard/scratch-widget-runtime.ts +0 -37
- package/src/dashboard/sim-shell.ts +0 -313
- package/src/dashboard/virtual-window-control-runtime.ts +0 -57
- package/src/dashboard/virtual-window-help-runtime.ts +0 -113
- package/src/dashboard/virtual-window-input-runtime.ts +0 -99
- package/src/dashboard/virtual-window-mutation-runtime.ts +0 -102
- package/src/dashboard/virtual-window-split-runtime.ts +0 -70
- package/src/dashboard/vw-popup-openers.ts +0 -126
- package/src/dashboard/window-picker-popup.ts +0 -74
- package/src/dashboard/window-slash-runtime.ts +0 -108
- package/src/dashboard/windowing/companion-slash.ts +0 -78
- package/src/dashboard/windowing/fast-switch.ts +0 -138
- package/src/dashboard/windowing/lifecycle.ts +0 -185
- package/src/dashboard/windowing/virtual-windows.ts +0 -259
- package/src/dashboard/windowing/visibility-chord.ts +0 -77
- package/src/iul/resident-vw.ts +0 -55
- package/src/panes/content-adapter.ts +0 -162
- package/src/prompt/vw-reference.ts +0 -153
- package/src/shell-runner/external-terminal-pane.ts +0 -157
- package/src/sim/resident-vw.ts +0 -48
- package/src/skills/tools/spawn-coding-agent-vw.ts +0 -181
- package/src/skills/tools/virtual-windows.ts +0 -632
- package/src/surface/adapters/window-surface-adapter.ts +0 -141
- package/src/tool-runtime/layout-runtimes.ts +0 -81
- package/src/tool-runtime/scenario-window-mount.ts +0 -207
- package/src/views/ui-mode.ts +0 -100
- package/src/virtual-window-context-menu.ts +0 -97
- package/src/virtual-windows/addressing.ts +0 -195
- package/src/virtual-windows/benchmark-preset.ts +0 -119
- package/src/virtual-windows/event-bus.ts +0 -202
- package/src/virtual-windows/layout/apply-planner.ts +0 -189
- package/src/virtual-windows/layout/index.ts +0 -68
- package/src/virtual-windows/layout/layout-commands.ts +0 -186
- package/src/virtual-windows/layout/layout-tools.ts +0 -262
- package/src/virtual-windows/layout/persistence.ts +0 -219
- package/src/virtual-windows/layout/presets.ts +0 -114
- package/src/virtual-windows/layout/restore-planner.ts +0 -223
- package/src/virtual-windows/layout/serializer.ts +0 -197
- package/src/virtual-windows/layout/tree.ts +0 -147
- package/src/virtual-windows/layout/types.ts +0 -63
- package/src/virtual-windows/layout-tree.ts +0 -389
- package/src/virtual-windows/navigation.ts +0 -251
- package/src/virtual-windows/pane-capture.ts +0 -142
- package/src/virtual-windows/pane-content.ts +0 -611
- package/src/virtual-windows/pane-spawner.ts +0 -278
- package/src/virtual-windows/pty-tail-content.ts +0 -291
- package/src/virtual-windows/resident-window.ts +0 -59
- package/src/virtual-windows/secondary-action.ts +0 -25
- package/src/virtual-windows/terminal-slot-content.ts +0 -165
- package/src/virtual-windows/virtual-window.ts +0 -1301
- package/src/virtual-windows/vw-local-input-target-popup.ts +0 -110
- package/src/virtual-windows/vw-rename-modal.ts +0 -77
- package/src/virtual-windows/vw-selector-popup.ts +0 -177
- package/src/virtual-windows/window-registry.ts +0 -519
- package/src/voice/channel-adapters/discord-voice-adapter.ts +0 -202
- package/src/voice/voice-pwa-dispatch.ts +0 -245
- package/src/window-picker-modal.ts +0 -135
- /package/apps/pwa/out/_next/static/{Ksn99fVf2HUWhSyV1-FC8 → zoQX5iTvXOsIvCjxCe1Ji}/_ssgManifest.js +0 -0
- /package/src/dashboard/{companion-slash-runtime.ts → companion-messages-runtime.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6766],{14539:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>tw});var n=r(41121),a=r(91269),l=r(42012),s=r(9050),o=r(91514),i=r(84081),d=r(81731),c=r(30311),u=r(29565),p=r(86715),h=r(44100),x=r(29910),m=r(96823),f=r(7002),g=r(10793),b=r(67089),v=r(69109),y=r(50940),j=r(36767),w=r(73334),k=r(27810),N=r(95721),C=r(11635),S=r(75791),T=r(58505),A=r(44251);r(39019),r(75814);var E=r(42716);let _=/^\*\/(\d+) \* \* \* \*$/,M=/^0 \*\/(\d+) \* \* \*$/,I=/^(\d+) (\d+) \* \* \*$/,P=/^(\d+) (\d+) \* \* 1-5$/,O=/^(\d+) (\d+) \* \* ([0-6])$/,R=/^(\d+) (\d+) (\d+) \* \*$/,L=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function D(e){return e.toString().padStart(2,"0")}function F(e){let t=e.trim();if(!t)return{text:"(empty expression)",matched:!1};let r=_.exec(t);if(r){let e=Number(r[1]);return{text:"Every ".concat(e," minute").concat(1===e?"":"s"),matched:!0}}let n=M.exec(t);if(n){let e=Number(n[1]);return{text:"Every ".concat(e," hour").concat(1===e?"":"s"),matched:!0}}let a=P.exec(t);if(a)return{text:"Every weekday at ".concat(D(Number(a[2])),":").concat(D(Number(a[1]))),matched:!0};let l=O.exec(t);if(l){let e=L[Number(l[3])];return{text:"Every ".concat(e," at ").concat(D(Number(l[2])),":").concat(D(Number(l[1]))),matched:!0}}let s=I.exec(t);if(s)return{text:"Every day at ".concat(D(Number(s[2])),":").concat(D(Number(s[1]))),matched:!0};let o=R.exec(t);return o?{text:"Day ".concat(Number(o[3])," of every month at ").concat(D(Number(o[2])),":").concat(D(Number(o[1]))),matched:!0}:{text:"Custom: ".concat(t),matched:!1}}let z=[{id:"every-5-min",label:"Every 5 min",expression:"*/5 * * * *"},{id:"every-hour",label:"Hourly",expression:"0 */1 * * *"},{id:"daily-9am",label:"Daily 9am",expression:"0 9 * * *"},{id:"weekdays-9am",label:"Weekdays 9am",expression:"0 9 * * 1-5"},{id:"weekly-mon-9am",label:"Mon 9am",expression:"0 9 * * 1"},{id:"monthly-1st-9am",label:"1st 9am",expression:"0 9 1 * *"}];function W(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"string"==typeof e?e:t}function q(e){return"string"==typeof e.prompt?"prompt":"string"==typeof e.bash?"bash":"string"==typeof e.skill?"skill":"string"==typeof e.cft?"cft":void 0!==e.approval&&"object"==typeof e.approval&&null!==e.approval?"approval":void 0!==e.if&&"object"==typeof e.if&&null!==e.if&&"string"==typeof e.if.condition?"if":void 0!==e.switch&&"object"==typeof e.switch&&null!==e.switch&&"string"==typeof e.switch.value&&Array.isArray(e.switch.cases)?"switch":void 0!==e.iteration&&"object"==typeof e.iteration&&null!==e.iteration&&"string"==typeof e.iteration.items&&"string"==typeof e.iteration.body?"iteration":void 0!==e.classify&&"object"==typeof e.classify&&null!==e.classify&&"string"==typeof e.classify.input&&Array.isArray(e.classify.classes)?"classify":void 0!==e.extract&&"object"==typeof e.extract&&null!==e.extract&&"string"==typeof e.extract.input&&"object"==typeof e.extract.schema?"extract":void 0!==e.set&&"object"==typeof e.set&&null!==e.set&&"object"==typeof e.set.fields?"set":void 0!==e.filter&&"object"==typeof e.filter&&null!==e.filter&&"string"==typeof e.filter.items&&"string"==typeof e.filter.condition?"filter":void 0!==e.template&&"object"==typeof e.template&&null!==e.template&&"string"==typeof e.template.template?"template":void 0!==e.http&&"object"==typeof e.http&&null!==e.http&&"string"==typeof e.http.url?"http":void 0!==e.scheduleTrigger&&"object"==typeof e.scheduleTrigger&&null!==e.scheduleTrigger&&"string"==typeof e.scheduleTrigger.type?"scheduleTrigger":void 0!==e.webhookTrigger&&"object"==typeof e.webhookTrigger&&null!==e.webhookTrigger&&"string"==typeof e.webhookTrigger.path?"webhookTrigger":void 0!==e.discordTrigger&&"object"==typeof e.discordTrigger&&null!==e.discordTrigger&&"string"==typeof e.discordTrigger.kind?"discordTrigger":void 0!==e.telegramTrigger&&"object"==typeof e.telegramTrigger&&null!==e.telegramTrigger&&"string"==typeof e.telegramTrigger.kind?"telegramTrigger":void 0!==e.manualTrigger&&"object"==typeof e.manualTrigger&&null!==e.manualTrigger?"manualTrigger":void 0!==e.chatTrigger&&"object"==typeof e.chatTrigger&&null!==e.chatTrigger&&"string"==typeof e.chatTrigger.path?"chatTrigger":"unknown"}function G(e){var t;return e?(null!=(t=e.split("\n").find(e=>e.trim().length>0))?t:"").trim().slice(0,64):""}var B=r(45560);function H(e,t){var r;let n=new Set((null!=(r=e.nodes)?r:[]).map(e=>e.id)),a="unknown"===t?"node":t;for(let e=1;e<1e4;e+=1){let t="".concat(a,"-").concat(e);if(!n.has(t))return t}return"".concat(a,"-").concat(Date.now())}function $(e,t,r){var n,a;let l=null!=(n=null==r?void 0:r.id)?n:H(e,t),s=function(e,t){switch(e){case"prompt":return{id:t,prompt:"Describe the desired behaviour…"};case"bash":return{id:t,bash:"echo todo"};case"skill":return{id:t,skill:"omni-digest",arguments:"$ARGUMENTS"};case"cft":return{id:t,cft:"pdca",config:{goal:"TBD",phase:"plan"}};case"approval":return{id:t,approval:{message:"Continue?"}};case"if":return{id:t,if:{condition:"$ARGUMENTS == 'yes'"}};case"switch":return{id:t,switch:{value:"$ARGUMENTS",cases:["a","b"]}};case"iteration":return{id:t,iteration:{items:'["a","b","c"]',body:"echo $index $item"}};case"classify":return{id:t,classify:{input:"$ARGUMENTS",classes:["question","command","other"]}};case"extract":return{id:t,extract:{input:"$ARGUMENTS",schema:{name:"person name",date:"ISO date if present"}}};case"set":return{id:t,set:{fields:{greeting:"Hello $ARGUMENTS"}}};case"filter":return{id:t,filter:{items:'["a","b","c"]',condition:"$item != 'b'"}};case"template":return{id:t,template:{template:"Hello {{ARGUMENTS}}!"}};case"http":return{id:t,http:{method:"GET",url:"https://api.example.com/items",headers:{Accept:"application/json"}}};case"scheduleTrigger":return{id:t,scheduleTrigger:{type:"interval",interval:36e5}};case"webhookTrigger":return{id:t,webhookTrigger:{method:"POST",path:"/hooks/example"}};case"discordTrigger":return{id:t,discordTrigger:{kind:"message"}};case"telegramTrigger":return{id:t,telegramTrigger:{kind:"message"}};case"manualTrigger":return{id:t,manualTrigger:{description:"Run manually"}};case"chatTrigger":return{id:t,chatTrigger:{path:"/chat",sessionMode:"stateless",streaming:!1}};default:return{id:t,bash:"echo placeholder"}}}(t,l);return{...e,nodes:[...null!=(a=e.nodes)?a:[],s]}}function K(e,t){var r;let n=(null!=(r=e.nodes)?r:[]).filter(e=>e.id!==t).map(e=>{let r=Array.isArray(e.depends_on)?e.depends_on.filter(e=>e!==t):void 0;if(void 0===r)return e;if(0===r.length){let{depends_on:t,...r}=e;return r}return{...e,depends_on:r}});return{...e,nodes:n}}function U(e){if(!e._meta||"object"!=typeof e._meta)return e;let t={...e._meta};if(!("layout"in t))return e;if(delete t.layout,0===Object.keys(t).length){let{_meta:t,...r}=e;return r}return{...e,_meta:t}}function J(e){var t;let r={};for(let t of("string"==typeof e.name&&(r.name=e.name),"string"==typeof e.description&&(r.description=e.description),Object.keys(e)))"name"!==t&&"description"!==t&&"nodes"!==t&&(r[t]=e[t]);return r.nodes=null!=(t=e.nodes)?t:[],(0,B.As)(r,{lineWidth:0,defaultStringType:"PLAIN",singleQuote:!1})}function Y(e){try{let t=(0,B.parse)(e);if(!t||"object"!=typeof t||!Array.isArray(t.nodes))return null;return t}catch(e){return null}}let V={running:{dot:"#3b82f6",label:"Running"},done:{dot:"#22c55e",label:"Done"},failed:{dot:"#ef4444",label:"Failed"},skipped:{dot:"#9ca3af",label:"Skipped"},awaiting_approval:{dot:"#f59e0b",label:"Awaiting approval"}},X={all:"\uD83D\uDCE3",modal:"\uD83D\uDDA5",terminal:"⌨",telegram:"\uD83D\uDCF2",discord:"\uD83D\uDCAC",pushcut:"\uD83D\uDD14"};async function Q(e){try{let{parse:t}=await Promise.resolve().then(r.bind(r,45560)),n=t(e);if(!n||"object"!=typeof n||!Array.isArray(n.nodes))return null;return n}catch(e){return null}}let Z={prompt:"#8b5cf6",bash:"#22c55e",skill:"#f59e0b",cft:"#06b6d4",approval:"#ef4444",if:"#ec4899",switch:"#d946ef",iteration:"#a855f7",classify:"#0ea5e9",extract:"#14b8a6",set:"#84cc16",filter:"#10b981",template:"#f97316",http:"#3b82f6",scheduleTrigger:"#6366f1",webhookTrigger:"#a78bfa",discordTrigger:"#5865f2",telegramTrigger:"#0088cc",manualTrigger:"#64748b",chatTrigger:"#9333ea",unknown:"#9ca3af"};function ee(e){let{palette:t,yaml:r,definition:l,editable:s,onChangeYaml:o,onNodeClick:i,nodeStatuses:d,nodeIssues:c,cycleNodeIds:u,focusNodeId:p,focusNonce:h,onRun:x}=e,[m,f]=(0,a.useState)(null!=l?l:null),[g,b]=(0,a.useState)(!1),[v,y]=(0,a.useState)([]);(0,a.useEffect)(()=>{if(l){f(l),b(!1);return}let e=!1;return(async()=>{let t=await Q(r);e||(f(t),b(null===t))})(),()=>{e=!0}},[r,l]);let j=(0,a.useCallback)(e=>{var t;if(!o)return;let n=null!=(t=Y(r))?t:m;if(!n)return;let a=e(n);f(a);try{let e=J(a);o(e)}catch(e){}},[o,m,r]),w=(0,a.useMemo)(()=>{if(!m)return null;try{return function(e,t){let{nodes:r,edges:n}=function(e){var t,r,n,a,l,s,o,i,d,c,u,p;let h=[],x=[],m=new Set;for(let f of null!=(t=e.nodes)?t:[]){let e,t;if(!f||"string"!=typeof f.id||0===f.id.length||m.has(f.id))continue;m.add(f.id);let g=q(f),b="";switch(g){case"prompt":b=G(f.prompt);break;case"bash":b=G(f.bash);break;case"skill":b=String(null!=(r=f.skill)?r:"").slice(0,64);break;case"cft":b=String(null!=(n=f.cft)?n:"").slice(0,64);break;case"approval":{let t=f.approval;b=G(null==t?void 0:t.message),"string"==typeof(null==t?void 0:t.delivery)&&t.delivery.length>0&&(e=t.delivery);break}case"if":{let e=null==(a=f.if)?void 0:a.condition;b="string"==typeof e?e.slice(0,64):"";break}case"switch":{let e=f.switch,t=Array.isArray(null==e?void 0:e.cases)?" → ".concat(e.cases.length," case").concat(1===e.cases.length?"":"s"):"";b="".concat((null!=(l=null==e?void 0:e.value)?l:"").slice(0,40)).concat(t);break}case"iteration":{let e=f.iteration;b="over ".concat((null!=(s=null==e?void 0:e.items)?s:"").slice(0,32));break}case"classify":{let e=f.classify,t=Array.isArray(null==e?void 0:e.classes)?e.classes.length:0;b="".concat(t," class").concat(1===t?"":"es"," from ").concat((null!=(o=null==e?void 0:e.input)?o:"").slice(0,24));break}case"extract":{let e=f.extract,t=(null==e?void 0:e.schema)?Object.keys(e.schema).length:0;b="".concat(t," field").concat(1===t?"":"s"," from ").concat((null!=(i=null==e?void 0:e.input)?i:"").slice(0,24));break}case"set":{let e=f.set,t=(null==e?void 0:e.fields)?Object.keys(e.fields).length:0;b="set ".concat(t," field").concat(1===t?"":"s");break}case"filter":{let e=f.filter;b="filter ".concat((null!=(d=null==e?void 0:e.items)?d:"").slice(0,28)," on ").concat((null!=(c=null==e?void 0:e.condition)?c:"").slice(0,24));break}case"template":{let e=f.template,t=G(null==e?void 0:e.template);b="tpl: ".concat(t.slice(0,56));break}case"http":case"scheduleTrigger":case"webhookTrigger":case"discordTrigger":case"telegramTrigger":case"manualTrigger":case"chatTrigger":b=null!=(u=function(e,t){switch(e){case"scheduleTrigger":return function(e){if(!e)return"⏰ schedule";let t=e.type;if("cron"===t){let t=W(e.cron),r=W(e.timezone),n=F(t),a=!1===e.enabled?" \xb7 disabled":"",l="number"==typeof e.max_runs?" \xb7 max ".concat(e.max_runs," runs"):"";return"⏰ ".concat(n.text).concat(r?" ".concat(r):"").concat(l).concat(a)}if("interval"===t){let t="number"==typeof e.interval?e.interval:0,r=!1===e.enabled?" \xb7 disabled":"";if(t>=36e5&&t%36e5==0){let e=t/36e5;return"⏰ Every ".concat(e," hour").concat(1===e?"":"s").concat(r)}if(t>=6e4&&t%6e4==0){let e=t/6e4;return"⏰ Every ".concat(e," minute").concat(1===e?"":"s").concat(r)}let n=Math.max(1,Math.round(t/1e3));return"⏰ Every ".concat(n,"s").concat(r)}return"⏰ schedule"}(t.scheduleTrigger);case"webhookTrigger":return function(e){if(!e)return"\uD83D\uDD17 webhook";let t=W(e.method,"POST"),r=W(e.path),n=e.auth&&"object"==typeof e.auth?e.auth:null,a=n?" \xb7 ".concat(W(n.type)):"";return"\uD83D\uDD17 ".concat(t," ").concat(r).concat(a)}(t.webhookTrigger);case"http":return function(e){if(!e)return"\uD83C\uDF10 http";let t=W(e.method,"GET"),r=W(e.url),n="number"==typeof e.timeout?" \xb7 ".concat(Math.round(e.timeout/1e3),"s"):"";return"\uD83C\uDF10 ".concat(t," ").concat(r.slice(0,48)).concat(n)}(t.http);case"discordTrigger":return function(e){if(!e)return"\uD83D\uDCAC discord";let t=W(e.kind,"message"),r=[],n=W(e.channel);return n&&r.push("#".concat(n)),W(e.user)&&r.push("@".concat(W(e.user))),W(e.pattern)&&r.push("/".concat(W(e.pattern),"/")),r.push(t),"\uD83D\uDCAC ".concat(r.join(" \xb7 "))}(t.discordTrigger);case"telegramTrigger":var r=t.telegramTrigger;if(!r)return"✈️ telegram";let n=W(r.kind,"message"),a=[];return W(r.chat)&&a.push("@".concat(W(r.chat))),"command"===n&&W(r.command)&&a.push("/".concat(W(r.command))),W(r.user)&&a.push("from:".concat(W(r.user))),W(r.pattern)&&a.push("/".concat(W(r.pattern),"/")),a.push(n),"✈️ ".concat(a.join(" \xb7 "));case"manualTrigger":var l=t.manualTrigger;let s=W(null==l?void 0:l.description);return s?"▶ ".concat(s):"▶ Manual \xb7 explicit run";case"chatTrigger":return function(e){if(!e)return"\uD83D\uDCAD Chat";let t=W(e.path,"/chat"),r="per-session"===e.sessionMode?" \xb7 per-session":"",n=!0===e.streaming?" \xb7 streaming":"";return"\uD83D\uDCAD Chat: ".concat(t).concat(r).concat(n)}(t.chatTrigger);default:return null}}(g,f))?u:"";break;default:b=""}if("if"===g)t=["then","else"];else if("switch"===g){let e=null==(p=f.switch)?void 0:p.cases;Array.isArray(e)&&(t=[...e.filter(e=>"string"==typeof e&&e.length>0),"default"])}for(let r of(h.push({id:f.id,variant:g,label:f.id,preview:b,hasWhen:"string"==typeof f.when&&""!==f.when.trim(),..."string"==typeof f.trigger_rule?{triggerRule:f.trigger_rule}:{},hasToolPolicy:Array.isArray(f.allowed_tools)||Array.isArray(f.denied_tools),...void 0!==e?{approvalDelivery:e}:{},...t?{branches:t}:{}}),Array.isArray(f.depends_on)?f.depends_on:[]))"string"==typeof r&&0!==r.length&&x.push({id:"".concat(r,"->").concat(f.id),source:r,target:f.id})}return{nodes:h,edges:x}}(e),a=function(e){var t,r,n;let a=null!=(t=e.direction)?t:"LR",l=new E.Ay.graphlib.Graph;for(let t of(l.setDefaultEdgeLabel(()=>({})),l.setGraph({rankdir:a,ranksep:null!=(r=e.rankSep)?r:"LR"===a?100:80,nodesep:null!=(n=e.nodeSep)?n:"LR"===a?40:60,marginx:20,marginy:20}),e.nodes))l.setNode(t.id,{width:200,height:64});for(let t of e.edges)l.setEdge(t.source,t.target);E.Ay.layout(l);let s=e.nodes.map(e=>{var t,r,n,a;let s=l.node(e.id),o=(null!=(t=null==s?void 0:s.x)?t:0)-100,i=(null!=(r=null==s?void 0:s.y)?r:0)-32;return{...e,position:{x:o,y:i},width:null!=(n=null==s?void 0:s.width)?n:200,height:null!=(a=null==s?void 0:s.height)?a:64}}),o=0,i=0;for(let e of s)o=Math.max(o,e.position.x+e.width),i=Math.max(i,e.position.y+e.height);return{nodes:s,edges:e.edges,bounds:{width:o,height:i}}}({nodes:r,edges:n}),l=function(e){let t=e._meta;if(!t||"object"!=typeof t)return{};let r=t.layout;if(!r||"object"!=typeof r)return{};let n={};for(let[e,t]of Object.entries(r))t&&"object"==typeof t&&"number"==typeof t.x&&"number"==typeof t.y&&(n[e]={x:t.x,y:t.y});return n}(e);if(0===Object.keys(l).length)return a;let s=0,o=0;return{nodes:a.nodes.map(e=>{let t=l[e.id],r=null!=t?t:e.position,n={...e,position:r};return s=Math.max(s,r.x+e.width),o=Math.max(o,r.y+e.height),n}),edges:a.edges,bounds:{width:s,height:o}}}(m)}catch(e){return null}},[m]),k=(0,a.useMemo)(()=>w?w.nodes.map(e=>{var t,r;let n=null!=(t=null==u?void 0:u.has(e.id))&&t,a=null==c?void 0:c[e.id],l=null==d?void 0:d[e.id],s=(r=null==l?void 0:l.status)?"workflow-node-status workflow-node-status-".concat(r):"workflow-node-status";return{id:e.id,type:"workflow",position:e.position,data:{raw:e,statusEntry:l,issues:a,inCycle:n},className:s,style:{background:"var(--surface, #0f1117)",color:"var(--text-primary, #e5e7eb)",border:n?"2px dashed #ef4444":"1.5px solid ".concat(Z[e.variant]),borderRadius:8,padding:0,width:e.width,fontSize:11,textAlign:"left"}}}):[],[w,d,c,u]),N=(0,a.useMemo)(()=>({workflow:eo}),[]),C=(0,a.useMemo)(()=>w?w.edges.map(e=>{let t=(null==u?void 0:u.has(e.source))===!0&&u.has(e.target);return{id:e.id,source:e.source,target:e.target,animated:!1,style:t?{stroke:"#ef4444",strokeWidth:2,strokeDasharray:"6 4"}:{stroke:"var(--text-tertiary, #6b7280)",strokeWidth:1.5}}}):[],[w,u]),S=(0,a.useCallback)(e=>{s&&e.source&&e.target&&j(t=>(function(e,t,r){var n;if(t===r)return e;let a=(null!=(n=e.nodes)?n:[]).map(e=>{if(e.id!==r)return e;let n=Array.isArray(e.depends_on)?[...e.depends_on]:[];return n.includes(t)?e:(n.push(t),{...e,depends_on:n})});return{...e,nodes:a}})(t,e.source,e.target))},[s,j]),A=(0,a.useCallback)(e=>{if(!s)return;let t=e.filter(e=>"remove"===e.type);if(t.length>0)return void j(e=>t.reduce((e,t)=>K(e,t.id),e));let r=e.filter(e=>"position"===e.type&&!1===e.dragging&&void 0!==e.position);0!==r.length&&j(e=>r.reduce((e,t)=>(function(e,t,r){var n,a;if(!(null!=(n=e.nodes)?n:[]).find(e=>e.id===t))return e;let l=e._meta&&"object"==typeof e._meta?{...e._meta}:{},s=l.layout&&"object"==typeof l.layout?{...l.layout}:{},o=new Set((null!=(a=e.nodes)?a:[]).map(e=>e.id));for(let e of Object.keys(s))o.has(e)||delete s[e];return s[t]={x:Math.round(r.x),y:Math.round(r.y)},l.layout=s,{...e,_meta:l}})(e,t.id,t.position),e))},[s,j]),_=(0,a.useCallback)(e=>{if(!s)return;let t=e.filter(e=>"remove"===e.type);0!==t.length&&j(e=>t.reduce((e,t)=>{var r;let[n,a]=t.id.split("->");if(!n||!a)return e;let l=(null!=(r=e.nodes)?r:[]).map(e=>{if(e.id!==a||!Array.isArray(e.depends_on))return e;let t=e.depends_on.filter(e=>e!==n);if(t.length===e.depends_on.length)return e;if(0===t.length){let{depends_on:t,...r}=e;return r}return{...e,depends_on:t}});return{...e,nodes:l}},e))},[s,j]),[M,I]=(0,a.useState)(!1),P=(0,a.useCallback)(e=>{j(t=>$(t,e)),I(!1)},[j]),O=(0,a.useCallback)(e=>{j(t=>e.core?$(t,e.kind):{...t,nodes:[...t.nodes,{id:H(t,"unknown"),kind:e.kind,inputs:{}}]})},[j]);var R,L=(0,a.useMemo)(()=>{if(!s)return[];let e=[];return e.push({key:"n",handler:()=>I(e=>!e)}),e.push({key:"t",shift:!0,alt:!0,handler:()=>j(e=>U(e))}),e.push({key:"Escape",handler:()=>I(!1),preventDefault:!1}),e.push({key:"d",metaOrCtrl:!0,handler:()=>{let e=v[0];e&&j(t=>(function(e,t){var r,n;let a=(null!=(r=e.nodes)?r:[]).find(e=>e.id===t);if(!a)return e;let l=H(e,q(a)),{id:s,depends_on:o,...i}=a,d={...i,id:l};return{...e,nodes:[...null!=(n=e.nodes)?n:[],d]}})(t,e))}}),e.push({key:"F2",handler:()=>{let e=v[0];e&&i&&i(e)}}),x&&e.push({key:"Enter",metaOrCtrl:!0,handler:()=>x()}),e},[s,j,o,i,x,v]),D={enabled:!0===s};let z=null==(R=null==D?void 0:D.enabled)||R;return((0,a.useEffect)(()=>{if(!z||0===L.length)return;let e=e=>{if(!function(e){if(!e||!e.tagName)return!1;let t=e.tagName.toLowerCase();return"input"===t||"textarea"===t||e.isContentEditable}(e.target)){for(let t of L)if(function(e,t){if(e.key.toLowerCase()!==t.key.toLowerCase())return!1;if(e.metaOrCtrl){if(!(t.metaKey||t.ctrlKey))return!1}else if(void 0!==e.meta&&e.meta!==t.metaKey||void 0!==e.ctrl&&e.ctrl!==t.ctrlKey)return!1;return(void 0===e.alt||e.alt===t.altKey)&&(void 0===e.shift||e.shift===t.shiftKey)}(t,e)){!1!==t.preventDefault&&e.preventDefault(),t.handler(e);return}}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[z,L]),g)?(0,n.jsx)("div",{className:"flex h-full items-center justify-center text-[11px] text-text-tertiary",children:"YAML parse failed — switch to YAML view to fix."}):m?0===k.length?(0,n.jsxs)("div",{className:"relative flex h-full items-center justify-center text-[11px] text-text-tertiary",children:[s&&(0,n.jsx)(et,{palette:t,onAdd:O}),s?"No nodes yet — pick a variant from the palette.":"No nodes yet — switch to YAML view to add one."]}):(0,n.jsxs)("div",{className:"relative h-full w-full",children:[s&&(0,n.jsx)(et,{palette:t,onAdd:O}),s&&(0,n.jsx)(el,{onTidy:()=>j(e=>U(e))}),s&&M&&(0,n.jsx)(es,{onPick:P,onClose:()=>I(!1)}),(0,n.jsxs)(T.Gc,{nodes:k,edges:C,nodeTypes:N,nodesDraggable:null!=s&&s,nodesConnectable:null!=s&&s,elementsSelectable:null!=s&&s,deleteKeyCode:s?["Backspace","Delete"]:null,onConnect:s?S:void 0,onNodesChange:s?A:void 0,onEdgesChange:s?_:void 0,onNodeClick:i?(e,t)=>i(t.id):void 0,onSelectionChange:e=>{let{nodes:t}=e;return y(t.map(e=>e.id))},proOptions:{hideAttribution:!0},connectionLineComponent:s?er:void 0,fitView:!0,children:[(0,n.jsx)(T.VS,{variant:T._5.Dots,gap:16,size:1}),(0,n.jsx)(T.H2,{showInteractive:!1}),void 0!==p&&(0,n.jsx)(en,{focusNodeId:null!=p?p:null,focusNonce:null!=h?h:0}),(0,n.jsx)(ea,{selectedIds:v})]})]}):(0,n.jsx)("div",{className:"flex h-full items-center justify-center text-[11px] text-text-tertiary",children:"Parsing…"})}function et(e){let{palette:t,onAdd:r}=e,a=[{v:"prompt",label:"+ prompt"},{v:"bash",label:"+ bash"},{v:"skill",label:"+ skill"},{v:"cft",label:"+ cft"},{v:"approval",label:"+ approval"},{v:"if",label:"+ if"},{v:"switch",label:"+ switch"},{v:"iteration",label:"+ loop"},{v:"classify",label:"+ classify"},{v:"extract",label:"+ extract"},{v:"set",label:"+ set"},{v:"filter",label:"+ filter"},{v:"template",label:"+ template"},{v:"http",label:"+ http"},{v:"scheduleTrigger",label:"+ schedule"},{v:"webhookTrigger",label:"+ webhook"}];return(0,n.jsx)("div",{className:"absolute left-3 top-3 z-10 flex flex-col gap-1 rounded-md border border-border bg-surface-elevated p-1 shadow-md",children:(null!=t?t:a.map(e=>{let{v:t}=e;return{graph:"workflow",kind:t,core:!0,plugin:null,description:""}})).map(e=>{var t,l;return(0,n.jsxs)("button",{type:"button",onClick:()=>r(e),className:"rounded px-2 py-0.5 text-left text-[10px] text-text-tertiary transition-colors hover:bg-surface hover:text-text-primary",style:{minWidth:80},children:[null!=(l=null==(t=a.find(t=>{let{v:r}=t;return r===e.kind}))?void 0:t.label)?l:"+ ".concat(e.kind),e.plugin&&(0,n.jsx)("span",{className:"ml-1 rounded bg-accent/15 px-1 text-accent",children:e.plugin})]},e.kind)})})}function er(e){let{fromX:t,fromY:r,toX:a,toY:l}=e;return(0,n.jsxs)("g",{className:"workflow-edge-pending",children:[(0,n.jsx)("path",{d:"M ".concat(t,",").concat(r," C ").concat(t+60,",").concat(r," ").concat(a-60,",").concat(l," ").concat(a,",").concat(l),fill:"none",stroke:"var(--accent, #8b5cf6)",strokeWidth:1.8,strokeDasharray:"4 3"}),(0,n.jsx)("circle",{cx:a,cy:l,r:4,fill:"var(--accent, #8b5cf6)"})]})}function en(e){let{focusNodeId:t,focusNonce:r}=e,n=(0,T.VH)();return(0,a.useEffect)(()=>{if(!t)return;let e=setTimeout(()=>{n.fitView({nodes:[{id:t}],duration:300,padding:.3})},0);return()=>{clearTimeout(e)}},[t,r,n]),null}function ea(e){let{selectedIds:t}=e,r=(0,T.VH)(),n=t.join(",");return(0,a.useEffect)(()=>{if(t.length<=1)return;let e=setTimeout(()=>{r.fitView({nodes:t.map(e=>({id:e})),duration:300,padding:.25})},0);return()=>{clearTimeout(e)}},[n,r]),null}function el(e){let{onTidy:t}=e;return(0,n.jsx)("button",{type:"button",onClick:t,title:"Tidy-up auto-layout (Shift+Alt+T)",className:"absolute right-3 top-3 z-10 rounded-md border border-border bg-surface-elevated px-2 py-1 text-[10px] text-text-tertiary shadow-md hover:bg-surface hover:text-text-primary",children:"✨ Tidy"})}function es(e){let{onPick:t,onClose:r}=e,[l,s]=(0,a.useState)(""),o=[{v:"prompt",label:"prompt",help:"Run an LLM prompt with the run context."},{v:"bash",label:"bash",help:"Run a shell snippet."},{v:"skill",label:"skill",help:"Invoke a registered skill (e.g. omni-digest)."},{v:"cft",label:"cft",help:"Run a CFT (e.g. pdca, swot)."},{v:"approval",label:"approval",help:"Pause for human approval."},{v:"if",label:"if",help:"Branch on a boolean condition (then / else)."},{v:"switch",label:"switch",help:"N-way branch on an expression value."},{v:"iteration",label:"iteration",help:"Run a bash body for each element of an array."},{v:"classify",label:"classify",help:"LLM picks one class label from a list."},{v:"extract",label:"extract",help:"LLM fills a JSON schema from free text."},{v:"set",label:"set",help:"Build a record of derived values."},{v:"filter",label:"filter",help:"Keep array elements where a condition holds."},{v:"template",label:"template",help:"{{var}} substitution into a string template."},{v:"http",label:"http",help:"HTTP request (GET/POST/...). Parsed JSON output."},{v:"scheduleTrigger",label:"schedule",help:"Cron / interval trigger (daemon-side dispatch v2)."},{v:"webhookTrigger",label:"webhook",help:"HTTP entry point (daemon-side dispatch v2)."}].filter(e=>e.label.includes(l.toLowerCase())||e.help.toLowerCase().includes(l.toLowerCase()));return(0,n.jsxs)("div",{className:"absolute right-0 top-0 z-20 flex h-full w-72 flex-col border-l border-border bg-surface-elevated shadow-xl",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between border-b border-border px-3 py-2",children:[(0,n.jsx)("span",{className:"text-xs font-semibold",children:"Add node"}),(0,n.jsx)("button",{type:"button",onClick:r,className:"text-[11px] text-text-tertiary hover:text-text-primary",title:"Close (Esc)",children:"✕"})]}),(0,n.jsx)("div",{className:"border-b border-border px-3 py-2",children:(0,n.jsx)("input",{type:"text",value:l,onChange:e=>s(e.target.value),placeholder:"Search variants…",autoFocus:!0,className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs"})}),(0,n.jsxs)("ul",{className:"flex-1 overflow-y-auto px-2 py-2",children:[0===o.length&&(0,n.jsx)("li",{className:"px-2 py-1 text-[11px] text-text-tertiary",children:"No matches."}),o.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>t(e.v),className:"flex w-full flex-col items-start gap-0.5 rounded px-2 py-1.5 text-left text-[11px] hover:bg-surface",children:[(0,n.jsx)("span",{className:"inline-block rounded px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wider text-white",style:{background:Z[e.v]},children:e.label}),(0,n.jsx)("span",{className:"text-text-tertiary",children:e.help})]})},e.v))]})]})}function eo(e){let{data:t}=e,{raw:r,statusEntry:a,issues:l}=t,s=(0,T.Pj)(e=>e.transform[2]<.7),o=r.branches;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(T.h7,{type:"target",position:A.yX.Left}),s?(0,n.jsx)(ei,{raw:r,statusEntry:a}):function(e,t,r){var a,l,s,o;let i=t?V[t.status]:null,d=(s=e.approvalDelivery)&&null!=(o=X[s])?o:null,c=t?"Last run: ".concat(null!=(a=null==i?void 0:i.label)?a:t.status)+(void 0!==t.durationMs?" \xb7 ".concat(t.durationMs,"ms"):"")+(t.error?" \xb7 ".concat(t.error):"")+(t.reason?" \xb7 ".concat(t.reason):""):void 0,u=null!=(l=null==r?void 0:r.length)?l:0,p=u>0?"".concat(u," validation issue").concat(1===u?"":"s",":\n")+r.map(e=>"\xb7 ".concat(e.message)).join("\n"):void 0;return(0,n.jsxs)("div",{style:{padding:"6px 8px"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:2},children:[(0,n.jsx)("span",{style:{display:"inline-block",padding:"0 5px",borderRadius:3,fontSize:9,fontWeight:600,textTransform:"uppercase",letterSpacing:.4,background:Z[e.variant],color:"white"},children:e.variant}),(0,n.jsx)("span",{style:{fontWeight:500,fontSize:11},children:e.id}),i&&(0,n.jsx)("span",{"aria-label":c,title:c,style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:i.dot,flexShrink:0,boxShadow:(null==t?void 0:t.status)==="running"?"0 0 0 2px ".concat(i.dot,"33"):void 0}}),u>0&&(0,n.jsx)("span",{"aria-label":p,title:p,style:{fontSize:10,color:"#ef4444",fontWeight:700,flexShrink:0},children:"⚠"}),d&&(0,n.jsx)("span",{"aria-label":"delivery: ".concat(e.approvalDelivery),title:"Delivery: ".concat(e.approvalDelivery),style:{fontSize:10,marginLeft:"auto",flexShrink:0},children:d})]}),e.preview&&(0,n.jsx)("div",{style:{fontSize:10,opacity:.75,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:e.preview}),(e.hasWhen||e.triggerRule||e.hasToolPolicy)&&(0,n.jsxs)("div",{style:{display:"flex",gap:4,marginTop:3,fontSize:9,opacity:.7},children:[e.hasWhen&&(0,n.jsx)("span",{children:"when"}),e.triggerRule&&(0,n.jsx)("span",{children:e.triggerRule}),e.hasToolPolicy&&(0,n.jsx)("span",{children:"tools"})]})]})}(r,a,l),o&&o.length>0?o.map((e,t)=>{let r=(t+1)/(o.length+1)*100;return(0,n.jsx)(T.h7,{type:"source",position:A.yX.Right,id:e,style:{top:"".concat(r,"%")},children:(0,n.jsx)("span",{"aria-hidden":!0,style:{position:"absolute",right:14,top:-2,fontSize:8,color:"var(--text-tertiary, #6b7280)",pointerEvents:"none",whiteSpace:"nowrap"},children:e})},e)}):(0,n.jsx)(T.h7,{type:"source",position:A.yX.Right})]})}function ei(e){let{raw:t,statusEntry:r}=e,a=r?V[r.status]:null;return(0,n.jsxs)("div",{style:{padding:"4px 8px",display:"flex",alignItems:"center",gap:6},children:[(0,n.jsx)("span",{style:{display:"inline-block",padding:"0 5px",borderRadius:3,fontSize:9,fontWeight:600,textTransform:"uppercase",letterSpacing:.4,background:Z[t.variant],color:"white"},children:t.variant}),(0,n.jsx)("span",{style:{fontSize:11,fontWeight:500},children:t.id}),a&&(0,n.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:a.dot,marginLeft:"auto"}})]})}A.rN;var ed=r(72754),ec=r(79167),eu=r(93981),ep=r(99608),eh=r(67770);function ex(e){var t;let{result:r,onApply:a,onRefine:l,onCancel:s}=e,o=null!=(t=r.yaml)?t:"";return(0,n.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40 px-4 py-6",role:"dialog","aria-modal":"true",onClick:s,children:(0,n.jsxs)("div",{className:"flex max-h-[80vh] w-full max-w-3xl flex-col gap-3 rounded-lg border border-border bg-surface-elevated p-4 shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("header",{className:"flex items-center justify-between",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"rounded bg-surface px-1.5 py-0.5 text-[10px] uppercase tracking-wide text-text-tertiary",children:"Synth preview"}),r.workflowName&&(0,n.jsx)("span",{className:"font-mono text-sm font-medium text-text-primary",children:r.workflowName}),r.repaired&&(0,n.jsx)("span",{className:"rounded-full border border-warning/30 bg-warning/10 px-2 py-0.5 text-[10px] text-warning",children:"self-repaired"})]}),(0,n.jsx)("button",{type:"button",onClick:s,className:"rounded p-1 text-text-tertiary hover:bg-surface hover:text-text-primary","aria-label":"Cancel",children:(0,n.jsx)(ed.A,{className:"h-4 w-4"})})]}),r.triggerSummary&&(0,n.jsxs)("div",{className:"rounded-md border border-accent/30 bg-accent/10 px-3 py-2 text-xs text-accent",children:[(0,n.jsx)("span",{className:"font-medium",children:"Trigger: "}),r.triggerSummary]}),!r.ok&&r.error&&(0,n.jsxs)("div",{className:"flex items-start gap-2 rounded-md border border-error/40 bg-error/10 px-3 py-2 text-xs text-error",children:[(0,n.jsx)(eu.A,{className:"mt-0.5 h-4 w-4 shrink-0"}),(0,n.jsx)("span",{children:r.error})]}),(0,n.jsx)("div",{className:"flex-1 overflow-auto rounded-md border border-border bg-surface",children:(0,n.jsx)("pre",{className:"m-0 whitespace-pre p-3 font-mono text-[11px] leading-relaxed text-text-primary",children:o||"(no yaml — synth failed)"})}),(0,n.jsxs)("footer",{className:"flex items-center justify-between gap-2",children:[(0,n.jsx)("span",{className:"text-[11px] text-text-tertiary",children:"Apply writes the YAML into the editor draft. Save (panel footer) commits to disk."}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsxs)("button",{type:"button",onClick:l,className:"flex items-center gap-1 rounded-md border border-border px-3 py-1 text-[11px] text-text-secondary hover:bg-surface",children:[(0,n.jsx)(ep.A,{className:"h-3 w-3"}),"Refine"]}),(0,n.jsx)("button",{type:"button",onClick:s,className:"rounded-md border border-border px-3 py-1 text-[11px] text-text-secondary hover:bg-surface",children:"Cancel"}),(0,n.jsxs)("button",{type:"button",onClick:()=>{o&&a(o,r.workflowName)},disabled:!r.ok||!o,className:"flex items-center gap-1 rounded-md bg-accent px-3 py-1 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:[(0,n.jsx)(eh.A,{className:"h-3 w-3"}),"Apply"]})]})]})]})})}function em(e){let{currentYaml:t,skills:r,onGenerated:l,onClose:s}=e,[o,i]=(0,a.useState)(""),[d,c]=(0,a.useState)(""),[u,p]=(0,a.useState)(null),h=(0,S.up)(),x=(0,S.hM)(),m=!!(t&&t.trim().length>0),f=h.error instanceof Error?h.error.message:x.error instanceof Error?x.error.message:h.isError||x.isError?"generation failed":null;return(0,n.jsxs)("div",{className:"border-b border-border bg-surface-elevated",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between px-3 py-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(g.A,{className:"h-4 w-4 text-accent"}),(0,n.jsx)("span",{className:"text-xs font-medium",children:m?"Refine workflow with AI":"Generate workflow from text"})]}),(0,n.jsx)("button",{type:"button",onClick:s,className:"rounded p-1 text-text-tertiary hover:bg-surface hover:text-text-primary","aria-label":"Close NL prompt",children:(0,n.jsx)(ed.A,{className:"h-3 w-3"})})]}),(0,n.jsxs)("div",{className:"px-3 pb-3",children:[(0,n.jsx)("textarea",{value:o,onChange:e=>i(e.target.value),placeholder:m?'How should this workflow change? e.g. "add a slack notification at the end"':'Describe the workflow. e.g. "Research the latest Apple Silicon benchmarks, summarize, and push to my iPhone."',rows:3,spellCheck:!1,className:"w-full resize-none rounded-md border border-border bg-surface px-2 py-1.5 text-xs leading-snug focus:border-accent focus:outline-none"}),(0,n.jsxs)("div",{className:"mt-2 flex items-center justify-between gap-2",children:[(0,n.jsxs)("select",{value:d,onChange:e=>c(e.target.value),className:"rounded-md border border-border bg-surface px-2 py-1 text-[11px] text-text-secondary focus:border-accent focus:outline-none",title:"LLM provider (default = your user-config)",children:[(0,n.jsx)("option",{value:"",children:"Default provider"}),(0,n.jsx)("option",{value:"anthropic",children:"anthropic"}),(0,n.jsx)("option",{value:"openai",children:"openai"}),(0,n.jsx)("option",{value:"grok",children:"grok"}),(0,n.jsx)("option",{value:"gemini",children:"gemini"}),(0,n.jsx)("option",{value:"local",children:"local"})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{if(!o.trim()||x.isPending)return;let e={intent:o.trim(),preview:!0};m&&t&&(e.context="current yaml:\n".concat(t)),x.mutate(e,{onSuccess:e=>p(e)})},disabled:!o.trim()||x.isPending||h.isPending,className:"flex items-center gap-1 rounded-md border border-accent/40 bg-accent/10 px-3 py-1 text-[11px] font-medium text-accent hover:bg-accent/20 disabled:opacity-50",title:"Trigger-aware synth via R3 native skill (cron \xb7 webhook \xb7 discord \xb7 telegram \xb7 manual \xb7 chat all supported)",children:x.isPending?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.A,{className:"h-3 w-3 animate-spin"}),"Synthing…"]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(ec.A,{className:"h-3 w-3"}),"Synth (trigger-aware)"]})}),(0,n.jsx)("button",{type:"button",onClick:()=>{if(!o.trim()||h.isPending)return;let e={prompt:o.trim()};d&&(e.provider=d),r&&r.length>0&&(e.skills=r),m&&t&&(e.currentYaml=t),h.mutate(e,{onSuccess:e=>{l(e)}})},disabled:!o.trim()||h.isPending||x.isPending,className:"flex items-center gap-1 rounded-md bg-accent px-3 py-1 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:h.isPending?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.A,{className:"h-3 w-3 animate-spin"}),"Generating…"]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(g.A,{className:"h-3 w-3"}),m?"Refine":"Generate"]})})]})]}),f&&(0,n.jsxs)("div",{className:"mt-2 flex items-start gap-1.5 rounded-md border border-error/40 bg-error/10 px-2 py-1 text-[11px] text-error",children:[(0,n.jsx)(eu.A,{className:"mt-0.5 h-3 w-3 shrink-0"}),(0,n.jsx)("span",{children:f})]}),u&&(0,n.jsx)(ex,{result:u,onApply:(e,t)=>{p(null),l({yaml:e,warnings:[],raw:e,definition:void 0})},onRefine:()=>p(null),onCancel:()=>p(null)}),h.data&&h.data.warnings.length>0&&(0,n.jsx)("ul",{className:"mt-2 max-h-24 overflow-y-auto rounded-md border border-warning/40 bg-warning/10 px-2 py-1 text-[11px] text-warning",children:h.data.warnings.slice(0,5).map((e,t)=>(0,n.jsxs)("li",{className:"flex items-start gap-1",children:[(0,n.jsx)(eu.A,{className:"mt-0.5 h-3 w-3 shrink-0"}),(0,n.jsx)("span",{children:e})]},t))})]})]})}let ef={valid:"bg-success/10 text-success border-success/30",warning:"bg-warning/10 text-warning border-warning/30",error:"bg-error/10 text-error border-error/30"};function eg(e){let{variantLabel:t,validationStatus:r=null,validationMessage:a,children:l}=e;return(0,n.jsxs)("div",{className:"rounded-md border border-border bg-surface-elevated",children:[(0,n.jsxs)("header",{className:"flex items-center justify-between border-b border-border px-3 py-2",children:[(0,n.jsx)("span",{className:"rounded bg-surface px-1.5 py-0.5 text-[10px] uppercase tracking-wide text-text-tertiary",children:t}),r&&(0,n.jsx)("span",{className:"rounded-full border px-2 py-0.5 text-[10px] ".concat(ef[r]),role:"status",children:null!=a?a:r})]}),(0,n.jsx)("div",{className:"grid grid-cols-1 gap-2 px-3 py-3 md:grid-cols-2",children:l})]})}function eb(e){let{label:t,full:r,hint:a,children:l}=e;return(0,n.jsxs)("label",{className:"flex flex-col gap-1 ".concat(r?"md:col-span-2":""),children:[(0,n.jsx)("span",{className:"text-[10px] uppercase tracking-wide text-text-tertiary",children:t}),l,a&&(0,n.jsx)("span",{className:"text-[10px] text-text-tertiary",children:a})]})}function ev(e){let t=null==e?void 0:e.scheduleTrigger;return t&&"object"==typeof t?{type:"cron"===t.type?"cron":"interval",cron:"string"==typeof t.cron?t.cron:void 0,interval:"number"==typeof t.interval?t.interval:void 0,timezone:"string"==typeof t.timezone?t.timezone:void 0,jitter_seconds:"number"==typeof t.jitter_seconds?t.jitter_seconds:void 0,max_runs:"number"==typeof t.max_runs?t.max_runs:void 0,enabled:"boolean"==typeof t.enabled?t.enabled:void 0}:{type:"interval",interval:36e5}}function ey(e){var t,r,l,s,o,i;let{definition:d,nodeId:c,onChange:u}=e,p=(null!=(t=d.nodes)?t:[]).find(e=>e.id===c),h=ev(p),[x,m]=(0,a.useState)(h.type),[f,g]=(0,a.useState)(null!=(r=h.cron)?r:"0 9 * * *"),[b,v]=(0,a.useState)(String(null!=(l=h.interval)?l:36e5)),[y,j]=(0,a.useState)(null!=(s=h.timezone)?s:"Asia/Seoul"),[w,k]=(0,a.useState)(String(null!=(o=h.jitter_seconds)?o:"")),[N,C]=(0,a.useState)(String(null!=(i=h.max_runs)?i:"")),[S,T]=(0,a.useState)(!1!==h.enabled);(0,a.useEffect)(()=>{let e=ev(p);m(e.type),e.cron&&g(e.cron),"number"==typeof e.interval&&v(String(e.interval)),e.timezone&&j(e.timezone),k("number"==typeof e.jitter_seconds?String(e.jitter_seconds):""),C("number"==typeof e.max_runs?String(e.max_runs):""),T(!1!==e.enabled)},[c,p]);let A=(0,a.useCallback)(()=>{let e=Number(b),t=""===w?void 0:Number(w),r=""===N?void 0:Number(N);return{type:x,cron:"cron"===x?f.trim():void 0,interval:"interval"===x&&Number.isFinite(e)?e:void 0,timezone:y.trim()||void 0,jitter_seconds:Number.isFinite(t)?t:void 0,max_runs:Number.isFinite(r)?r:void 0,enabled:S}},[x,f,b,y,w,N,S]),E=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(p)return E.current&&clearTimeout(E.current),E.current=setTimeout(()=>{u(function(e,t,r){var n;let a={type:r.type};"cron"===r.type&&r.cron&&(a.cron=r.cron),"interval"===r.type&&"number"==typeof r.interval&&(a.interval=r.interval),r.timezone&&(a.timezone=r.timezone),"number"==typeof r.jitter_seconds&&(a.jitter_seconds=r.jitter_seconds),"number"==typeof r.max_runs&&(a.max_runs=r.max_runs),"boolean"==typeof r.enabled&&(a.enabled=r.enabled);let l=(null!=(n=e.nodes)?n:[]).map(e=>e.id===t?{...e,scheduleTrigger:a}:e);return{...e,nodes:l}}(d,c,A()))},500),()=>{E.current&&clearTimeout(E.current)}},[p,c,d,A,u]);let _="cron"===x?F(f):null,M=Number(b)/1e3,I=S&&("cron"!==x||(null==_?void 0:_.matched))?"valid":"warning",P=S?"cron"===x?(null==_?void 0:_.matched)?"cron ok":"custom cron":Number.isFinite(M)&&M>0?"every ".concat(M,"s"):"interval invalid":"disabled";return(0,n.jsxs)(eg,{variantLabel:"Schedule",validationStatus:I,validationMessage:P,children:[(0,n.jsx)(eb,{label:"type",children:(0,n.jsxs)("select",{value:x,onChange:e=>m(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:[(0,n.jsx)("option",{value:"cron",children:"cron"}),(0,n.jsx)("option",{value:"interval",children:"interval"})]})}),(0,n.jsx)(eb,{label:"enabled",children:(0,n.jsxs)("label",{className:"flex items-center gap-2 text-xs",children:[(0,n.jsx)("input",{type:"checkbox",checked:S,onChange:e=>T(e.target.checked)}),(0,n.jsx)("span",{className:"text-text-tertiary",children:S?"on":"off"})]})}),"cron"===x&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(eb,{label:"presets",full:!0,children:(0,n.jsx)("div",{className:"flex flex-wrap gap-1",children:z.map(e=>(0,n.jsx)("button",{type:"button",onClick:()=>g(e.expression),"data-preset":e.id,className:"rounded-md border border-border px-2 py-0.5 font-mono text-[10px] text-text-tertiary hover:bg-surface",children:e.label},e.id))})}),(0,n.jsx)(eb,{label:"cron expression",full:!0,hint:null==_?void 0:_.text,children:(0,n.jsx)("input",{value:f,onChange:e=>g(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})})]}),"interval"===x&&(0,n.jsx)(eb,{label:"interval (ms)",hint:"= ".concat(M||"?","s"),children:(0,n.jsx)("input",{type:"number",min:1e3,value:b,onChange:e=>v(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"timezone (IANA)",hint:"e.g. Asia/Seoul \xb7 UTC \xb7 America/Los_Angeles",children:(0,n.jsx)("input",{value:y,onChange:e=>j(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"jitter (seconds \xb7 optional)",children:(0,n.jsx)("input",{type:"number",min:0,value:w,onChange:e=>k(e.target.value),placeholder:"e.g. 30",className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"max runs (optional)",children:(0,n.jsx)("input",{type:"number",min:1,step:1,value:N,onChange:e=>C(e.target.value),placeholder:"unlimited",className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})})]})}let ej=["GET","POST","PUT","PATCH","DELETE"];function ew(e){let t=null==e?void 0:e.webhookTrigger;if(!t||"object"!=typeof t)return{method:"POST",path:"/hooks/example",auth:"none"};let r=ej.includes(t.method)?t.method:"POST",n="string"==typeof t.path?t.path:"/hooks/example",a=t.auth&&"object"==typeof t.auth?t.auth:null;return a&&"bearer"===a.type?{method:r,path:n,auth:"bearer",token:"string"==typeof a.token?a.token:""}:a&&"basic"===a.type?{method:r,path:n,auth:"basic",username:"string"==typeof a.username?a.username:"",password:"string"==typeof a.password?a.password:""}:{method:r,path:n,auth:"none"}}function ek(e){var t,r,l,s;let{definition:o,nodeId:i,onChange:d}=e,c=(null!=(t=o.nodes)?t:[]).find(e=>e.id===i),u=ew(c),[p,h]=(0,a.useState)(u.method),[x,m]=(0,a.useState)(u.path),[f,g]=(0,a.useState)(u.auth),[b,v]=(0,a.useState)(null!=(r=u.token)?r:""),[y,j]=(0,a.useState)(null!=(l=u.username)?l:""),[w,k]=(0,a.useState)(null!=(s=u.password)?s:"");(0,a.useEffect)(()=>{var e,t,r;let n=ew(c);h(n.method),m(n.path),g(n.auth),v(null!=(e=n.token)?e:""),j(null!=(t=n.username)?t:""),k(null!=(r=n.password)?r:"")},[i,c]);let N=(0,a.useCallback)(()=>({method:p,path:x,auth:f,token:b,username:y,password:w}),[p,x,f,b,y,w]),C=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(c)return C.current&&clearTimeout(C.current),C.current=setTimeout(()=>{d(function(e,t,r){var n,a,l;let s={method:r.method,path:r.path};"bearer"===r.auth&&r.token?s.auth={type:"bearer",token:r.token}:"basic"===r.auth&&(r.username||r.password)&&(s.auth={type:"basic",username:null!=(n=r.username)?n:"",password:null!=(a=r.password)?a:""});let o=(null!=(l=e.nodes)?l:[]).map(e=>e.id===t?{...e,webhookTrigger:s}:e);return{...e,nodes:o}}(o,i,N()))},500),()=>{C.current&&clearTimeout(C.current)}},[c,i,o,N,d]);let S=x.trim()?x.startsWith("/")?/\s/.test(x)?{ok:!1,message:"no whitespace in path"}:{ok:!0,message:"path ok"}:{ok:!1,message:"path must start with '/'"}:{ok:!1,message:"path required"},T=S.ok?"valid":"error",A="".concat(p," ").concat(x);return(0,n.jsxs)(eg,{variantLabel:"Webhook",validationStatus:T,validationMessage:S.message,children:[(0,n.jsx)(eb,{label:"method",children:(0,n.jsx)("select",{value:p,onChange:e=>h(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:ej.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})}),(0,n.jsx)(eb,{label:"path",hint:"URL: ".concat(A),children:(0,n.jsx)("input",{value:x,onChange:e=>m(e.target.value),placeholder:"/hooks/deploy",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"auth",full:!0,children:(0,n.jsx)("div",{className:"flex gap-2 text-xs",children:["none","bearer","basic"].map(e=>(0,n.jsxs)("label",{className:"flex items-center gap-1",children:[(0,n.jsx)("input",{type:"radio",name:"webhook-auth",checked:f===e,onChange:()=>g(e)}),(0,n.jsx)("span",{className:"text-text-tertiary",children:e})]},e))})}),"bearer"===f&&(0,n.jsx)(eb,{label:"token",full:!0,children:(0,n.jsx)("input",{type:"password",value:b,onChange:e=>v(e.target.value),placeholder:"bearer token",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),"basic"===f&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(eb,{label:"username",children:(0,n.jsx)("input",{value:y,onChange:e=>j(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"password",children:(0,n.jsx)("input",{type:"password",value:w,onChange:e=>k(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})})]})]})}let eN=["GET","POST","PUT","PATCH","DELETE","HEAD"];function eC(e){let t=null==e?void 0:e.http;if(!t||"object"!=typeof t)return{method:"GET",url:"https://api.example.com/items",headers:[],body:"",auth:"none",timeoutMs:3e4};let r=eN.includes(t.method)?t.method:"GET",n="string"==typeof t.url?t.url:"",a=Object.entries(t.headers&&"object"==typeof t.headers?t.headers:{}).filter(e=>{let[,t]=e;return"string"==typeof t}).map(e=>{let[t,r]=e;return{key:t,value:r}}),l="string"==typeof t.body?t.body:"",s="number"==typeof t.timeout?t.timeout:3e4,o=t.auth&&"object"==typeof t.auth?t.auth:null;return o&&"bearer"===o.type?{method:r,url:n,headers:a,body:l,auth:"bearer",token:"string"==typeof o.token?o.token:"",timeoutMs:s}:o&&"basic"===o.type?{method:r,url:n,headers:a,body:l,auth:"basic",username:"string"==typeof o.username?o.username:"",password:"string"==typeof o.password?o.password:"",timeoutMs:s}:{method:r,url:n,headers:a,body:l,auth:"none",timeoutMs:s}}function eS(e){var t,r,l,s;let{definition:o,nodeId:i,onChange:d}=e,c=(null!=(t=o.nodes)?t:[]).find(e=>e.id===i),u=eC(c),[p,h]=(0,a.useState)(u.method),[x,m]=(0,a.useState)(u.url),[f,g]=(0,a.useState)(u.headers),[b,v]=(0,a.useState)(u.body),[y,j]=(0,a.useState)(u.auth),[w,k]=(0,a.useState)(null!=(r=u.token)?r:""),[N,C]=(0,a.useState)(null!=(l=u.username)?l:""),[S,T]=(0,a.useState)(null!=(s=u.password)?s:""),[A,E]=(0,a.useState)(u.timeoutMs);(0,a.useEffect)(()=>{var e,t,r;let n=eC(c);h(n.method),m(n.url),g(n.headers),v(n.body),j(n.auth),k(null!=(e=n.token)?e:""),C(null!=(t=n.username)?t:""),T(null!=(r=n.password)?r:""),E(n.timeoutMs)},[i,c]);let _=(0,a.useCallback)(()=>({method:p,url:x,headers:f,body:b,auth:y,token:w,username:N,password:S,timeoutMs:A}),[p,x,f,b,y,w,N,S,A]),M=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(c)return M.current&&clearTimeout(M.current),M.current=setTimeout(()=>{d(function(e,t,r){var n,a,l;let s={method:r.method,url:r.url};if(r.headers.length>0){let e={};for(let t of r.headers)t.key.trim()&&(e[t.key.trim()]=t.value);Object.keys(e).length>0&&(s.headers=e)}r.body.trim()&&(s.body=r.body),"bearer"===r.auth&&r.token?s.auth={type:"bearer",token:r.token}:"basic"===r.auth&&(r.username||r.password)&&(s.auth={type:"basic",username:null!=(n=r.username)?n:"",password:null!=(a=r.password)?a:""}),r.timeoutMs&&3e4!==r.timeoutMs&&(s.timeout=r.timeoutMs);let o=(null!=(l=e.nodes)?l:[]).map(e=>e.id===t?{...e,http:s}:e);return{...e,nodes:o}}(o,i,_()))},500),()=>{M.current&&clearTimeout(M.current)}},[c,i,o,_,d]);let I=function(e){if(!e.trim())return{ok:!1,message:"url required"};try{return new URL(e),{ok:!0,message:"url ok"}}catch(e){return{ok:!1,message:"invalid URL"}}}(x),P=I.ok?"valid":"error",O=(e,t,r)=>{g(n=>n.map((n,a)=>a===e?{key:t,value:r}:n))};return(0,n.jsxs)(eg,{variantLabel:"HTTP",validationStatus:P,validationMessage:I.message,children:[(0,n.jsx)(eb,{label:"method",children:(0,n.jsx)("select",{value:p,onChange:e=>h(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:eN.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})}),(0,n.jsx)(eb,{label:"timeout (ms)",hint:"= ".concat(Math.round(A/1e3),"s"),children:(0,n.jsx)("input",{type:"number",min:1e3,max:12e4,step:1e3,value:A,onChange:e=>E(Number(e.target.value)),className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"url",full:!0,hint:"supports $ARGUMENTS variable",children:(0,n.jsx)("input",{value:x,onChange:e=>m(e.target.value),placeholder:"https://api.example.com/items",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"headers",full:!0,children:(0,n.jsxs)("div",{className:"flex flex-col gap-1",children:[f.map((e,t)=>(0,n.jsxs)("div",{className:"flex gap-1",children:[(0,n.jsx)("input",{value:e.key,onChange:r=>O(t,r.target.value,e.value),placeholder:"Accept",spellCheck:!1,className:"flex-1 rounded-md border border-border bg-surface px-2 py-0.5 font-mono text-[11px]"}),(0,n.jsx)("input",{value:e.value,onChange:r=>O(t,e.key,r.target.value),placeholder:"application/json",spellCheck:!1,className:"flex-1 rounded-md border border-border bg-surface px-2 py-0.5 font-mono text-[11px]"}),(0,n.jsx)("button",{type:"button",onClick:()=>g(e=>e.filter((e,r)=>r!==t)),className:"rounded px-1.5 text-[11px] text-text-tertiary hover:bg-error/10 hover:text-error","aria-label":"Remove header",children:"\xd7"})]},t)),(0,n.jsx)("button",{type:"button",onClick:()=>g(e=>[...e,{key:"",value:""}]),className:"self-start rounded-md border border-border px-2 py-0.5 text-[10px] text-text-tertiary hover:bg-surface",children:"+ header"})]})}),(0,n.jsx)(eb,{label:"body (string)",full:!0,hint:"GET"===p||"HEAD"===p?"usually empty for GET/HEAD":"JSON / raw text",children:(0,n.jsx)("textarea",{value:b,onChange:e=>v(e.target.value),rows:3,spellCheck:!1,className:"w-full resize-none rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"auth",full:!0,children:(0,n.jsx)("div",{className:"flex gap-2 text-xs",children:["none","bearer","basic"].map(e=>(0,n.jsxs)("label",{className:"flex items-center gap-1",children:[(0,n.jsx)("input",{type:"radio",name:"http-auth",checked:y===e,onChange:()=>j(e)}),(0,n.jsx)("span",{className:"text-text-tertiary",children:e})]},e))})}),"bearer"===y&&(0,n.jsx)(eb,{label:"token",full:!0,children:(0,n.jsx)("input",{type:"password",value:w,onChange:e=>k(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),"basic"===y&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(eb,{label:"username",children:(0,n.jsx)("input",{value:N,onChange:e=>C(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"password",children:(0,n.jsx)("input",{type:"password",value:S,onChange:e=>T(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})})]})]})}let eT=["message","mention","reaction"];function eA(e){let t=null==e?void 0:e.discordTrigger;return t&&"object"==typeof t?{kind:eT.includes(t.kind)?t.kind:"message",channel:"string"==typeof t.channel?t.channel:void 0,user:"string"==typeof t.user?t.user:void 0,pattern:"string"==typeof t.pattern?t.pattern:void 0}:{kind:"message"}}function eE(e){if(!e)return{ok:!0,message:"no filter"};try{return new RegExp(e),{ok:!0,message:"pattern ok"}}catch(e){return{ok:!1,message:"invalid regex"}}}function e_(e){var t,r,l,s;let{definition:o,nodeId:i,onChange:d}=e,c=(null!=(t=o.nodes)?t:[]).find(e=>e.id===i),u=eA(c),[p,h]=(0,a.useState)(u.kind),[x,m]=(0,a.useState)(null!=(r=u.channel)?r:""),[f,g]=(0,a.useState)(null!=(l=u.user)?l:""),[b,v]=(0,a.useState)(null!=(s=u.pattern)?s:"");(0,a.useEffect)(()=>{var e,t,r;let n=eA(c);h(n.kind),m(null!=(e=n.channel)?e:""),g(null!=(t=n.user)?t:""),v(null!=(r=n.pattern)?r:"")},[i,c]);let y=(0,a.useCallback)(()=>({kind:p,channel:x,user:f,pattern:b}),[p,x,f,b]),j=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(c)return j.current&&clearTimeout(j.current),j.current=setTimeout(()=>{d(function(e,t,r){var n,a,l,s;let o={kind:r.kind};(null==(n=r.channel)?void 0:n.trim())&&(o.channel=r.channel.trim()),(null==(a=r.user)?void 0:a.trim())&&(o.user=r.user.trim()),(null==(l=r.pattern)?void 0:l.trim())&&(o.pattern=r.pattern.trim());let i=(null!=(s=e.nodes)?s:[]).map(e=>e.id===t?{...e,discordTrigger:o}:e);return{...e,nodes:i}}(o,i,y()))},500),()=>{j.current&&clearTimeout(j.current)}},[c,i,o,y,d]);let w=eE(b),k=[x&&"#".concat(x),f&&"@".concat(f),b&&"/".concat(b,"/")].filter(Boolean).join(" \xb7 "),N=w.ok?"valid":"error",C=w.ok?k||"no filters":w.message;return(0,n.jsxs)(eg,{variantLabel:"Discord",validationStatus:N,validationMessage:C,children:[(0,n.jsx)(eb,{label:"kind",children:(0,n.jsx)("select",{value:p,onChange:e=>h(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:eT.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})}),(0,n.jsx)(eb,{label:"channel (name or id)",hint:"e.g. ops \xb7 1234567890",children:(0,n.jsx)("input",{value:x,onChange:e=>m(e.target.value),placeholder:"ops",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"user (regex \xb7 optional)",hint:"match by username — e.g. .* \xb7 admin",children:(0,n.jsx)("input",{value:f,onChange:e=>g(e.target.value),placeholder:".*",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"pattern (regex \xb7 optional)",full:!0,hint:"match message body — e.g. ^배포",children:(0,n.jsx)("input",{value:b,onChange:e=>v(e.target.value),placeholder:"^deploy",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})})]})}let eM=["message","command","callback_query"];function eI(e){let t=null==e?void 0:e.telegramTrigger;return t&&"object"==typeof t?{kind:eM.includes(t.kind)?t.kind:"message",chat:"string"==typeof t.chat?t.chat:void 0,user:"string"==typeof t.user?t.user:void 0,command:"string"==typeof t.command?t.command:void 0,pattern:"string"==typeof t.pattern?t.pattern:void 0}:{kind:"message"}}function eP(e){var t,r,l,s,o;let{definition:i,nodeId:d,onChange:c}=e,u=(null!=(t=i.nodes)?t:[]).find(e=>e.id===d),p=eI(u),[h,x]=(0,a.useState)(p.kind),[m,f]=(0,a.useState)(null!=(r=p.chat)?r:""),[g,b]=(0,a.useState)(null!=(l=p.user)?l:""),[v,y]=(0,a.useState)(null!=(s=p.command)?s:""),[j,w]=(0,a.useState)(null!=(o=p.pattern)?o:"");(0,a.useEffect)(()=>{var e,t,r,n;let a=eI(u);x(a.kind),f(null!=(e=a.chat)?e:""),b(null!=(t=a.user)?t:""),y(null!=(r=a.command)?r:""),w(null!=(n=a.pattern)?n:"")},[d,u]);let k=(0,a.useCallback)(()=>({kind:h,chat:m,user:g,command:v,pattern:j}),[h,m,g,v,j]),N=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(u)return N.current&&clearTimeout(N.current),N.current=setTimeout(()=>{c(function(e,t,r){var n,a,l,s,o;let i={kind:r.kind};(null==(n=r.chat)?void 0:n.trim())&&(i.chat=r.chat.trim()),(null==(a=r.user)?void 0:a.trim())&&(i.user=r.user.trim()),"command"===r.kind&&(null==(l=r.command)?void 0:l.trim())&&(i.command=r.command.trim()),(null==(s=r.pattern)?void 0:s.trim())&&(i.pattern=r.pattern.trim());let d=(null!=(o=e.nodes)?o:[]).map(e=>e.id===t?{...e,telegramTrigger:i}:e);return{...e,nodes:d}}(i,d,k()))},500),()=>{N.current&&clearTimeout(N.current)}},[u,d,i,k,c]);let C=eE(j),S=[m&&"@".concat(m),g&&"from:".concat(g),"command"===h&&v&&"/".concat(v),j&&"/".concat(j,"/")].filter(Boolean).join(" \xb7 "),T=C.ok?"valid":"error",A=C.ok?S||"no filters":C.message;return(0,n.jsxs)(eg,{variantLabel:"Telegram",validationStatus:T,validationMessage:A,children:[(0,n.jsx)(eb,{label:"kind",children:(0,n.jsx)("select",{value:h,onChange:e=>x(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:eM.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})}),(0,n.jsx)(eb,{label:"chat (id or @group)",hint:"e.g. @my_group \xb7 -1001234567890",children:(0,n.jsx)("input",{value:m,onChange:e=>f(e.target.value),placeholder:"@my_group",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),"command"===h&&(0,n.jsx)(eb,{label:"command",hint:"match telegram /command (no slash)",full:!0,children:(0,n.jsx)("input",{value:v,onChange:e=>y(e.target.value),placeholder:"summary",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"user (regex \xb7 optional)",hint:"match by username or id",children:(0,n.jsx)("input",{value:g,onChange:e=>b(e.target.value),placeholder:".*",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"pattern (regex \xb7 optional)",full:!0,hint:"match message body — e.g. ^배포",children:(0,n.jsx)("input",{value:j,onChange:e=>w(e.target.value),placeholder:"^summarize",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})})]})}function eO(e){let t=null==e?void 0:e.manualTrigger;return t&&"object"==typeof t?{description:"string"==typeof t.description?t.description:void 0}:{}}function eR(e){var t,r;let{definition:l,nodeId:s,onChange:o}=e,i=(null!=(t=l.nodes)?t:[]).find(e=>e.id===s),d=eO(i),[c,u]=(0,a.useState)(null!=(r=d.description)?r:"");(0,a.useEffect)(()=>{var e;u(null!=(e=eO(i).description)?e:"")},[s,i]);let p=(0,a.useCallback)(()=>({description:c}),[c]),h=(0,a.useRef)(null);return(0,a.useEffect)(()=>{if(i)return h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{o(function(e,t,r){var n,a;let l={};(null==(n=r.description)?void 0:n.trim())&&(l.description=r.description.trim());let s=(null!=(a=e.nodes)?a:[]).map(e=>e.id===t?{...e,manualTrigger:l}:e);return{...e,nodes:s}}(l,s,p()))},500),()=>{h.current&&clearTimeout(h.current)}},[i,s,l,p,o]),(0,n.jsxs)(eg,{variantLabel:"Manual",validationStatus:"valid",validationMessage:"explicit run only",children:[(0,n.jsx)(eb,{label:"description (optional)",full:!0,hint:"rendered on the node card \xb7 helps remind future-you why this workflow runs manually",children:(0,n.jsx)("input",{value:c,onChange:e=>u(e.target.value),placeholder:"e.g. Build then deploy on demand",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs"})}),(0,n.jsx)(eb,{label:"behaviour",full:!0,children:(0,n.jsxs)("p",{className:"rounded-md border border-border bg-surface px-2 py-1.5 text-[11px] leading-snug text-text-tertiary",children:["The daemon never auto-subscribes to a Manual trigger. Run it via",(0,n.jsx)("code",{className:"mx-1 rounded bg-surface-elevated px-1 font-mono",children:"elanous wf run <name>"}),"or the PWA ",(0,n.jsx)("span",{className:"font-semibold",children:"▶ Run now"})," button (Group D dry-run)."]})})]})}function eL(e){let t=null==e?void 0:e.chatTrigger;if(!t||"object"!=typeof t)return{path:"/chat",auth:"none",sessionMode:"stateless",streaming:!1};let r="string"==typeof t.path?t.path:"/chat",n=t.auth&&"object"==typeof t.auth?t.auth:null,a=n&&"bearer"===n.type?"bearer":"none",l=n&&"bearer"===n.type&&"string"==typeof n.token?n.token:"";return{path:r,auth:a,token:l,sessionMode:"per-session"===t.sessionMode?"per-session":"stateless",streaming:!0===t.streaming}}function eD(e){var t,r;let{definition:l,nodeId:s,onChange:o}=e,i=(null!=(t=l.nodes)?t:[]).find(e=>e.id===s),d=eL(i),[c,u]=(0,a.useState)(d.path),[p,h]=(0,a.useState)(d.auth),[x,m]=(0,a.useState)(null!=(r=d.token)?r:""),[f,g]=(0,a.useState)(d.sessionMode),[b,v]=(0,a.useState)(d.streaming);(0,a.useEffect)(()=>{var e;let t=eL(i);u(t.path),h(t.auth),m(null!=(e=t.token)?e:""),g(t.sessionMode),v(t.streaming)},[s,i]);let y=(0,a.useCallback)(()=>({path:c,auth:p,token:x,sessionMode:f,streaming:b}),[c,p,x,f,b]),j=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(i)return j.current&&clearTimeout(j.current),j.current=setTimeout(()=>{o(function(e,t,r){var n;let a={path:r.path};"bearer"===r.auth&&r.token&&(a.auth={type:"bearer",token:r.token}),"stateless"!==r.sessionMode&&(a.sessionMode=r.sessionMode),r.streaming&&(a.streaming=!0);let l=(null!=(n=e.nodes)?n:[]).map(e=>e.id===t?{...e,chatTrigger:a}:e);return{...e,nodes:l}}(l,s,y()))},500),()=>{j.current&&clearTimeout(j.current)}},[i,s,l,y,o]);let w=c.trim()?c.startsWith("/")?/\s/.test(c)?{ok:!1,message:"no whitespace in path"}:{ok:!0,message:"path ok"}:{ok:!1,message:"path must start with '/'"}:{ok:!1,message:"path required"},k=w.ok?"valid":"error";return(0,n.jsxs)(eg,{variantLabel:"Chat",validationStatus:k,validationMessage:w.message,children:[(0,n.jsx)(eb,{label:"path",hint:"POST /v1/workflows/<name>".concat(c),children:(0,n.jsx)("input",{value:c,onChange:e=>u(e.target.value),placeholder:"/chat",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"session mode",children:(0,n.jsxs)("select",{value:f,onChange:e=>g(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:[(0,n.jsx)("option",{value:"stateless",children:"stateless"}),(0,n.jsx)("option",{value:"per-session",children:"per-session"})]})}),(0,n.jsx)(eb,{label:"auth",full:!0,children:(0,n.jsx)("div",{className:"flex gap-2 text-xs",children:["none","bearer"].map(e=>(0,n.jsxs)("label",{className:"flex items-center gap-1",children:[(0,n.jsx)("input",{type:"radio",name:"chat-auth",checked:p===e,onChange:()=>h(e)}),(0,n.jsx)("span",{className:"text-text-tertiary",children:e})]},e))})}),"bearer"===p&&(0,n.jsx)(eb,{label:"token",full:!0,children:(0,n.jsx)("input",{type:"password",value:x,onChange:e=>m(e.target.value),placeholder:"bearer token",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eb,{label:"streaming response",full:!0,children:(0,n.jsxs)("label",{className:"flex items-center gap-2 text-xs",children:[(0,n.jsx)("input",{type:"checkbox",checked:b,onChange:e=>v(e.target.checked)}),(0,n.jsx)("span",{className:"text-text-tertiary",children:"stream the last-node output as SSE (v2 daemon wire — flag persisted now)"})]})}),(0,n.jsx)(eb,{label:"v2 follow-ups",full:!0,children:(0,n.jsx)("p",{className:"rounded-md border border-border bg-surface px-2 py-1.5 text-[11px] leading-snug text-text-tertiary",children:"v1 = webhook mode minimal. Hosted chat page \xb7 AI memory \xb7 file upload \xb7 multi-response Chat nodes are deferred to v2 (BACKLOG follow-up \xb7 per n8n ChatTrigger 961 LOC reference)."})})]})}function eF(e){var t,r,l,s;let{definition:o,nodeId:i,skills:d,onChange:c,onClose:u,onDelete:p}=e,h=(0,a.useMemo)(()=>{var e,t;return null!=(t=(null!=(e=o.nodes)?e:[]).find(e=>e.id===i))?t:null},[o,i]),x=(0,a.useMemo)(()=>h?q(h):"unknown",[h]),[m,f]=(0,a.useState)(null!=(t=null==h?void 0:h.id)?t:""),[g,b]=(0,a.useState)("string"==typeof(null==h?void 0:h.bash)?h.bash:""),[y,j]=(0,a.useState)("string"==typeof(null==h?void 0:h.prompt)?h.prompt:""),[w,k]=(0,a.useState)("string"==typeof(null==h?void 0:h.skill)?h.skill:""),[N,C]=(0,a.useState)("string"==typeof(null==h?void 0:h.arguments)?h.arguments:""),[S,T]=(0,a.useState)("string"==typeof(null==h?void 0:h.cft)?h.cft:""),A=(null==h?void 0:h.approval)&&"object"==typeof h.approval?h.approval:null,[E,_]=(0,a.useState)(null!=(r=null==A?void 0:A.message)?r:""),[M,I]=(0,a.useState)(null!=(l=null==A?void 0:A.delivery)?l:"modal"),[P,O]=(0,a.useState)("string"==typeof(null==h?void 0:h.when)?h.when:""),[R,L]=(0,a.useState)(Array.isArray(null==h?void 0:h.depends_on)?[...h.depends_on]:[]);(0,a.useEffect)(()=>{var e,t;if(!h)return;f(h.id),b("string"==typeof h.bash?h.bash:""),j("string"==typeof h.prompt?h.prompt:""),k("string"==typeof h.skill?h.skill:""),C("string"==typeof h.arguments?h.arguments:""),T("string"==typeof h.cft?h.cft:"");let r=h.approval&&"object"==typeof h.approval?h.approval:null;_(null!=(e=null==r?void 0:r.message)?e:""),I(null!=(t=null==r?void 0:r.delivery)?t:"modal"),O("string"==typeof h.when?h.when:""),L(Array.isArray(h.depends_on)?[...h.depends_on]:[])},[i,h]);let D=(0,a.useCallback)(()=>{var e,t;if(!h)return{};let r={};if(m!==h.id&&/^[a-z0-9]+(-[a-z0-9]+)*$/.test(m)&&(r.id=m),"bash"===x&&g!==h.bash&&(r.bash=g),"prompt"===x&&y!==h.prompt&&(r.prompt=y),"skill"===x&&(w!==h.skill&&(r.skill=w),N!==(null!=(e=h.arguments)?e:"")&&(r.arguments=N)),"cft"===x&&S!==h.cft&&(r.cft=S),"approval"===x){let e=null!=A?A:{message:"",delivery:"modal"};(E!==e.message||M!==(null!=(t=e.delivery)?t:"modal"))&&(r.approval={message:E,delivery:M})}P!==("string"==typeof h.when?h.when:"")&&(r.when=P.trim()?P:null);let n=Array.isArray(h.depends_on)?h.depends_on:[];return(R.length!==n.length||R.some((e,t)=>n[t]!==e))&&(r.depends_on=R),r},[h,x,A,m,g,y,w,N,S,E,M,P,R]),F=(0,a.useRef)(null);if((0,a.useEffect)(()=>{if(h)return F.current&&clearTimeout(F.current),F.current=setTimeout(()=>{let e=D();if(0===Object.keys(e).length)return;let t=function(e,t,r){var n,a;if(!(null!=(n=e.nodes)?n:[]).find(e=>e.id===t))return e;let l=e,s=t;r.id&&r.id!==t&&(s=(l=function(e,t,r){var n,a;if(t===r||new Set((null!=(n=e.nodes)?n:[]).map(e=>e.id)).has(r))return e;let l=(null!=(a=e.nodes)?a:[]).map(e=>{let n=e;return e.id===t&&(n={...n,id:r}),Array.isArray(n.depends_on)&&(n={...n,depends_on:n.depends_on.map(e=>e===t?r:e)}),n});return{...e,nodes:l}}(e,t,r.id))===e?t:r.id);let o=(null!=(a=l.nodes)?a:[]).map(e=>{if(e.id!==s)return e;let t={...e},n=q(e),a=["bash","prompt","skill","cft","approval"].find(e=>void 0!==r[e]);return a&&a!==n&&"unknown"!==n&&(delete t[n],"skill"===n&&delete t.arguments,"cft"===n&&delete t.config),void 0!==r.bash&&(t.bash=r.bash),void 0!==r.prompt&&(t.prompt=r.prompt),void 0!==r.skill&&(t.skill=r.skill),void 0!==r.arguments&&(t.arguments=r.arguments),void 0!==r.cft&&(t.cft=r.cft),void 0!==r.config&&(t.config=r.config),void 0!==r.approval&&(t.approval=r.approval),null===r.when?delete t.when:"string"==typeof r.when&&(t.when=r.when),void 0!==r.depends_on&&(0===r.depends_on.length?delete t.depends_on:t.depends_on=[...r.depends_on]),t});return{...l,nodes:o}}(o,i,e);t!==o&&c(t)},500),()=>{F.current&&clearTimeout(F.current)}},[h,i,o,D,c]),!h)return(0,n.jsx)("div",{className:"border-t border-border bg-surface-elevated px-3 py-3 text-[11px] text-text-tertiary",children:"Node not found — it may have been deleted."});if("scheduleTrigger"===x||"webhookTrigger"===x||"http"===x||"discordTrigger"===x||"telegramTrigger"===x||"manualTrigger"===x||"chatTrigger"===x)return(0,n.jsxs)("div",{className:"border-t border-border bg-surface-elevated",children:[(0,n.jsxs)("header",{className:"flex items-center justify-between px-3 py-2",children:[(0,n.jsx)("span",{className:"font-mono text-xs text-text-primary",children:i}),(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsxs)("button",{type:"button",onClick:p,className:"flex items-center gap-1 rounded px-2 py-0.5 text-[11px] text-error hover:bg-error/10",title:"Delete this node",children:[(0,n.jsx)(v.A,{className:"h-3 w-3"}),"Delete"]}),(0,n.jsx)("button",{type:"button",onClick:u,className:"rounded p-1 text-text-tertiary hover:bg-surface","aria-label":"Close node editor",children:(0,n.jsx)(ed.A,{className:"h-3 w-3"})})]})]}),(0,n.jsxs)("div",{className:"px-3 pb-3",children:["scheduleTrigger"===x&&(0,n.jsx)(ey,{definition:o,nodeId:i,onChange:c}),"webhookTrigger"===x&&(0,n.jsx)(ek,{definition:o,nodeId:i,onChange:c}),"http"===x&&(0,n.jsx)(eS,{definition:o,nodeId:i,onChange:c}),"discordTrigger"===x&&(0,n.jsx)(e_,{definition:o,nodeId:i,onChange:c}),"telegramTrigger"===x&&(0,n.jsx)(eP,{definition:o,nodeId:i,onChange:c}),"manualTrigger"===x&&(0,n.jsx)(eR,{definition:o,nodeId:i,onChange:c}),"chatTrigger"===x&&(0,n.jsx)(eD,{definition:o,nodeId:i,onChange:c})]})]});let z=(null!=(s=o.nodes)?s:[]).filter(e=>e.id!==i);return(0,n.jsxs)("div",{className:"border-t border-border bg-surface-elevated",children:[(0,n.jsxs)("header",{className:"flex items-center justify-between px-3 py-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"rounded bg-surface px-1.5 py-0.5 text-[10px] uppercase tracking-wide text-text-tertiary",children:x}),(0,n.jsx)("span",{className:"font-mono text-xs text-text-primary",children:i})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsxs)("button",{type:"button",onClick:p,className:"flex items-center gap-1 rounded px-2 py-0.5 text-[11px] text-error hover:bg-error/10",title:"Delete this node",children:[(0,n.jsx)(v.A,{className:"h-3 w-3"}),"Delete"]}),(0,n.jsx)("button",{type:"button",onClick:u,className:"rounded p-1 text-text-tertiary hover:bg-surface","aria-label":"Close node editor",children:(0,n.jsx)(ed.A,{className:"h-3 w-3"})})]})]}),(0,n.jsxs)("div",{className:"grid grid-cols-1 gap-2 px-3 pb-3 md:grid-cols-2",children:[(0,n.jsx)(ez,{label:"id",children:(0,n.jsx)("input",{value:m,onChange:e=>f(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(ez,{label:"when (gating expression)",children:(0,n.jsx)("input",{value:P,onChange:e=>O(e.target.value),placeholder:"e.g. \"$prev.output == 'ok'\"",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),"bash"===x&&(0,n.jsx)(ez,{label:"bash",full:!0,children:(0,n.jsx)("textarea",{value:g,onChange:e=>b(e.target.value),rows:4,spellCheck:!1,className:"w-full resize-none rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),"prompt"===x&&(0,n.jsx)(ez,{label:"prompt",full:!0,children:(0,n.jsx)("textarea",{value:y,onChange:e=>j(e.target.value),rows:4,spellCheck:!1,className:"w-full resize-none rounded-md border border-border bg-surface px-2 py-1 text-xs"})}),"skill"===x&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(ez,{label:"skill",children:[(0,n.jsx)("input",{value:w,onChange:e=>k(e.target.value),list:"workflow-skill-options",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"}),d&&d.length>0&&(0,n.jsx)("datalist",{id:"workflow-skill-options",children:d.map(e=>(0,n.jsx)("option",{value:e},e))})]}),(0,n.jsx)(ez,{label:"arguments",full:!0,children:(0,n.jsx)("textarea",{value:N,onChange:e=>C(e.target.value),rows:3,spellCheck:!1,className:"w-full resize-none rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})})]}),"cft"===x&&(0,n.jsx)(ez,{label:"cft",full:!0,children:(0,n.jsx)("input",{value:S,onChange:e=>T(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),"approval"===x&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(ez,{label:"message",full:!0,children:(0,n.jsx)("textarea",{value:E,onChange:e=>_(e.target.value),rows:2,spellCheck:!1,className:"w-full resize-none rounded-md border border-border bg-surface px-2 py-1 text-xs"})}),(0,n.jsx)(ez,{label:"delivery channel",children:(0,n.jsxs)("select",{value:M,onChange:e=>I(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:[(0,n.jsx)("option",{value:"all",children:"all (race)"}),(0,n.jsx)("option",{value:"modal",children:"modal (PWA)"}),(0,n.jsx)("option",{value:"terminal",children:"terminal"}),(0,n.jsx)("option",{value:"telegram",children:"telegram"}),(0,n.jsx)("option",{value:"discord",children:"discord"}),(0,n.jsx)("option",{value:"pushcut",children:"pushcut"})]})})]}),(0,n.jsx)(ez,{label:"depends_on",full:!0,children:(0,n.jsx)(eW,{value:R,options:z.map(e=>e.id),onChange:L})})]})]})}function ez(e){let{label:t,full:r,children:a}=e;return(0,n.jsxs)("label",{className:"flex flex-col gap-1 ".concat(r?"md:col-span-2":""),children:[(0,n.jsx)("span",{className:"text-[10px] uppercase tracking-wide text-text-tertiary",children:t}),a]})}function eW(e){let{value:t,options:r,onChange:a}=e;return 0===r.length?(0,n.jsx)("span",{className:"text-[11px] text-text-tertiary",children:"No other nodes to depend on."}):(0,n.jsx)("div",{className:"flex flex-wrap gap-1",children:r.map(e=>{let r=t.includes(e);return(0,n.jsx)("button",{type:"button",onClick:()=>{t.includes(e)?a(t.filter(t=>t!==e)):a([...t,e])},className:"rounded-md border px-2 py-0.5 font-mono text-[10px] transition-colors ".concat(r?"border-accent bg-accent/15 text-accent":"border-border text-text-tertiary hover:bg-surface"),children:e},e)})})}var eq=r(40807);let eG={running:"Running",orphaned:"Orphaned",done:"Done",failed:"Failed",unknown:"Unknown"},eB={running:"bg-info/10 text-info ring-info/30",orphaned:"bg-text-tertiary/10 text-text-tertiary ring-border",done:"bg-success/10 text-success ring-success/30",failed:"bg-error/10 text-error ring-error/30",unknown:"bg-surface-elevated text-text-tertiary ring-border"};function eH(e){let{onSelect:t,selectedRunId:r,enabled:l}=e,s=(0,S.b_)({enabled:null==l||l}),[o,i]=(0,a.useState)("all"),d=(0,a.useMemo)(()=>{var e,t;let r=null!=(t=null==(e=s.data)?void 0:e.runs)?t:[];return"all"===o?r:r.filter(e=>e.status===o)},[s.data,o]),c=(0,a.useMemo)(()=>{var e,t;let r={all:0,running:0,orphaned:0,done:0,failed:0};for(let n of null!=(t=null==(e=s.data)?void 0:e.runs)?t:[])r.all+=1,n.status in r&&(r[n.status]+=1);return r},[s.data]);return s.isLoading?(0,n.jsxs)("div",{className:"flex h-full items-center justify-center text-[11px] text-text-tertiary",children:[(0,n.jsx)(y.A,{className:"mr-1.5 h-3 w-3 animate-spin"}),"loading runs…"]}):s.error?(0,n.jsxs)("div",{className:"flex h-full items-center justify-center text-[11px] text-error",children:[(0,n.jsx)(b.A,{className:"mr-1.5 h-3 w-3"}),"failed to load runs: ",s.error.message]}):(0,n.jsxs)("div",{className:"flex h-full flex-col",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 border-b border-border px-3 py-2",children:[(0,n.jsx)(f.A,{className:"h-3.5 w-3.5 text-text-tertiary"}),(0,n.jsx)("span",{className:"text-xs font-medium",children:"Recent runs"}),(0,n.jsxs)("span",{className:"text-[10px] text-text-tertiary",children:["(",c.all,")"]}),(0,n.jsx)("div",{className:"ml-auto flex items-center gap-1",children:["all","running","done","failed","orphaned"].map(e=>(0,n.jsx)(e$,{label:"all"===e?"all":eG[e],count:c[e],active:o===e,onClick:()=>i(e)},e))})]}),0===d.length?(0,n.jsx)("div",{className:"flex flex-1 items-center justify-center text-[11px] text-text-tertiary",children:"all"===o?"No runs yet — pick a workflow + click Run to start one.":"No ".concat(eG[o].toLowerCase()," runs.")}):(0,n.jsx)("ul",{className:"flex-1 overflow-y-auto",children:d.map(e=>(0,n.jsx)(eK,{run:e,selected:e.runId===r,onSelect:()=>t(e.runId,e.workflowName)},e.runId))})]})}function e$(e){let{label:t,count:r,active:a,onClick:l}=e;return(0,n.jsxs)("button",{type:"button",onClick:l,className:"rounded-md px-1.5 py-0.5 text-[10px] transition-colors ".concat(a?"bg-primary/15 text-primary ring-1 ring-primary/30":"text-text-tertiary hover:bg-surface-elevated"),children:[t,r>0&&(0,n.jsx)("span",{className:"ml-1 opacity-70",children:r})]})}function eK(e){let{run:t,selected:r,onSelect:a}=e;return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:a,className:"flex w-full items-center gap-2 border-b border-border px-3 py-2 text-left text-[11px] transition-colors hover:bg-surface-elevated ".concat(r?"bg-primary/10":""),children:[(0,n.jsx)(eU,{status:t.status}),(0,n.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,n.jsx)(i.A,{className:"h-3 w-3 shrink-0 text-text-tertiary"}),(0,n.jsx)("span",{className:"truncate font-medium",children:t.workflowName})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2 text-[9px] text-text-tertiary",children:[(0,n.jsx)("span",{className:"font-mono",children:t.runId.slice(0,22)}),(0,n.jsx)("span",{children:"\xb7"}),(0,n.jsx)("span",{children:function(e){let t=Date.now()-e;return t<6e4?"".concat(Math.max(1,Math.floor(t/1e3)),"s ago"):t<36e5?"".concat(Math.floor(t/6e4),"m ago"):t<864e5?"".concat(Math.floor(t/36e5),"h ago"):"".concat(Math.floor(t/864e5),"d ago")}(t.startedAt)}),t.arguments&&t.arguments.length>0&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{children:"\xb7"}),(0,n.jsx)("span",{className:"truncate italic",children:t.arguments.slice(0,30)})]})]})]}),(0,n.jsx)("span",{className:"shrink-0 rounded px-1.5 py-0.5 text-[9px] font-medium uppercase ring-1 ".concat(eB[t.status]),children:eG[t.status]})]})})}function eU(e){let{status:t}=e;return"running"===t?(0,n.jsx)(y.A,{className:"h-3.5 w-3.5 shrink-0 animate-spin text-info"}):"done"===t?(0,n.jsx)(C.A,{className:"h-3.5 w-3.5 shrink-0 text-success"}):"failed"===t?(0,n.jsx)(b.A,{className:"h-3.5 w-3.5 shrink-0 text-error"}):"orphaned"===t?(0,n.jsx)(eq.A,{className:"h-3.5 w-3.5 shrink-0 text-text-tertiary"}):(0,n.jsx)("span",{className:"h-3.5 w-3.5 shrink-0 rounded-full bg-text-tertiary/30"})}function eJ(e){var t,r;let{runId:l,message:s,onDismiss:o,onResolved:i}=e,[d,c]=(0,a.useState)(""),u=(0,S.Yk)(),p=(0,S.Ux)(),h=u.isPending||p.isPending;(0,a.useEffect)(()=>{let e=e=>{"Escape"!==e.key||h||o()};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[h,o]);let x=async()=>{try{await u.mutateAsync({runId:l,response:d.trim()?d:void 0}),null==i||i("approved")}catch(e){}},m=async()=>{try{await p.mutateAsync({runId:l,reason:d.trim()?d:void 0}),null==i||i("rejected")}catch(e){}};return(0,n.jsx)("div",{role:"dialog","aria-modal":"true","aria-labelledby":"approval-modal-title",className:"fixed inset-0 z-50 flex items-end justify-center bg-black/40 backdrop-blur-sm sm:items-center",children:(0,n.jsxs)("div",{className:"w-full max-w-md rounded-t-2xl border border-border bg-surface shadow-xl sm:rounded-lg",children:[(0,n.jsxs)("header",{className:"flex items-center justify-between border-b border-border px-4 py-3",children:[(0,n.jsxs)("h2",{id:"approval-modal-title",className:"flex items-center gap-2 text-sm font-semibold",children:[(0,n.jsx)(b.A,{className:"h-4 w-4 text-warning"}),"Approval needed"]}),(0,n.jsx)("button",{type:"button",onClick:o,disabled:h,"aria-label":"Close approval modal",className:"rounded-md p-1 text-text-tertiary hover:bg-surface-elevated disabled:opacity-50",children:(0,n.jsx)(ed.A,{className:"h-3.5 w-3.5"})})]}),(0,n.jsxs)("div",{className:"space-y-2 px-4 py-3",children:[(0,n.jsxs)("div",{className:"text-[10px] uppercase tracking-wide text-text-tertiary",children:["run \xb7 ",(0,n.jsx)("span",{className:"font-mono",children:l.slice(0,28)})]}),(0,n.jsx)("p",{className:"whitespace-pre-wrap text-[13px] leading-snug",children:s}),(0,n.jsxs)("label",{className:"block pt-2 text-[10px] uppercase tracking-wide text-text-tertiary",children:["Response (optional \xb7 captured into ",(0,n.jsx)("code",{className:"font-mono",children:"$node.output"})," when capture_response: true)"]}),(0,n.jsx)("textarea",{value:d,onChange:e=>c(e.target.value),placeholder:"LGTM / type a reason for rejection / leave empty for bare approval",rows:3,disabled:h,className:"w-full resize-none rounded-md border border-border bg-surface-elevated px-2 py-1.5 font-mono text-[11px] focus:outline-none focus:ring-1 focus:ring-primary disabled:opacity-50"}),(u.error||p.error)&&(0,n.jsx)("p",{className:"text-[11px] text-error",children:(null!=(t=u.error)?t:p.error)instanceof Error?(null!=(r=u.error)?r:p.error).message:"request failed"})]}),(0,n.jsxs)("footer",{className:"flex items-center justify-end gap-2 border-t border-border px-4 py-3",children:[(0,n.jsxs)("button",{type:"button",onClick:m,disabled:h,className:"flex items-center gap-1 rounded-md border border-error/40 px-3 py-1.5 text-[11px] text-error hover:bg-error/10 disabled:opacity-50",children:[p.isPending?(0,n.jsx)(y.A,{className:"h-3 w-3 animate-spin"}):(0,n.jsx)(b.A,{className:"h-3 w-3"}),"Reject"]}),(0,n.jsxs)("button",{type:"button",onClick:x,disabled:h,className:"flex items-center gap-1 rounded-md bg-primary px-3 py-1.5 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:[u.isPending?(0,n.jsx)(y.A,{className:"h-3 w-3 animate-spin"}):(0,n.jsx)(C.A,{className:"h-3 w-3"}),"Approve"]})]})]})})}let eY="elanous.workflows.layout",eV={leftCollapsed:!1,rightCollapsed:!1,canvasOnly:!1,leftWidthPx:240,rightWidthPx:320};function eX(e,t){return Number.isFinite(e)?e<160?160:e>640?640:Math.round(e):t}let eQ={project:"Project",global:"Global",builtin:"Built-in"};function eZ(){let{palette:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,o.Qj)()?(0,n.jsx)(e1,{palette:e}):(0,n.jsx)(e0,{})}function e0(){return(0,n.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 px-6 py-10 text-center",children:[(0,n.jsx)(i.A,{className:"h-8 w-8 text-text-tertiary"}),(0,n.jsx)("h2",{className:"text-base font-semibold",children:"Workflows"}),(0,n.jsx)("p",{className:"max-w-md text-sm text-text-tertiary",children:"Daemon 연결이 설정되지 않았습니다. Settings 에서 Base URL 을 입력하면 워크플로우 목록이 표시됩니다."}),(0,n.jsx)("a",{href:"/app/settings/",className:"rounded-md border border-border px-3 py-1 text-sm text-text-primary hover:bg-surface-elevated",children:"Settings"})]})}function e1(e){var t,r,l,s,o,k,N,C,T,A,E,_;let{palette:M}=e,I=(0,S.mP)(),[P,O]=(0,a.useState)(null),[R,L]=(0,a.useState)(""),[D,F]=(0,a.useState)(""),[z,W]=(0,a.useState)(null),[q,G]=(0,a.useState)(!1),[B,H]=(0,a.useState)(""),[$,U]=(0,a.useState)("graph"),[V,X]=(0,a.useState)(!1),[Q,Z]=(0,a.useState)(!1),[et,er]=(0,a.useState)(null),[en,ea]=(0,a.useState)(null),el=(0,S.j3)(null!=P?P:"",{enabled:!!P&&!q}),es=(0,S.yM)(),eo=(0,S.oE)(),ei=(0,S.xd)(),ed=(0,S.XL)(),ec=(0,S.b_)(),eu=(0,a.useMemo)(()=>{var e,t,r;return P&&(null==(e=ec.data)?void 0:e.runs)&&null!=(r=null==(t=function(e,t){let r=null;for(let n of e)n.workflowName===t&&(!r||n.startedAt>r.startedAt)&&(r=n);return r}(ec.data.runs,P))?void 0:t.runId)?r:null},[P,null==(t=ec.data)?void 0:t.runs]),ep=null!=z?z:eu,eh=(0,S.uz)(ep),ex=(0,a.useMemo)(()=>{var e;if(null==(e=eh.data)?void 0:e.events)return function(e){let t={};for(let n of e)if(n.nodeId)switch(n.type){case"node_start":t[n.nodeId]||(t[n.nodeId]={status:"running"});break;case"node_done":{let e=n.result;if(null==e?void 0:e.ok)t[n.nodeId]={status:"done",durationMs:e.durationMs};else{let r={status:"failed"};(null==e?void 0:e.durationMs)!==void 0&&(r.durationMs=e.durationMs),(null==e?void 0:e.error)&&(r.error=e.error),t[n.nodeId]=r}break}case"node_skipped":{let e={status:"skipped"};n.reason&&(e.reason=n.reason),t[n.nodeId]=e;break}case"approval_pending":t[n.nodeId]={status:"awaiting_approval"};break;case"approval_resolved":var r;(null==(r=t[n.nodeId])?void 0:r.status)==="awaiting_approval"&&delete t[n.nodeId]}return t}(eh.data.events)},[null==(r=eh.data)?void 0:r.events]),ef=(0,S.zD)();(0,S.Ck)();let eg=(0,a.useMemo)(()=>{var e,t,r;return null!=(r=(null!=(t=null==(e=ef.data)?void 0:e.pending)?t:[]).find(e=>e.runId===z))?r:null},[ef.data,z]),eb=null!=(T=null==(l=ef.data)?void 0:l.pending.length)?T:0,[ev,ey]=(0,a.useState)(new Set);(0,a.useEffect)(()=>{ey(new Set)},[z]),(0,a.useEffect)(()=>{var e;q||(null==(e=el.data)?void 0:e.yaml)!==void 0&&L(el.data.yaml)},[null==(s=el.data)?void 0:s.yaml,q]);let ej=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(!R.trim())return;let e=setTimeout(()=>{var e;null==(e=ej.current)||e.abort();let t=new AbortController;ej.current=t,ei.mutateAsync({yaml:R,signal:t.signal}).catch(()=>void 0)},600);return()=>{var t;clearTimeout(e),null==(t=ej.current)||t.abort()}},[R]);let ew=(0,a.useMemo)(()=>{var e,t;let r={project:[],global:[],builtin:[]};for(let n of null!=(t=null==(e=I.data)?void 0:e.workflows)?t:[])r[n.source].push(n);return r},[null==(o=I.data)?void 0:o.workflows]),ek=null==(k=ei.data)?void 0:k.validation,eN=ek&&!ek.ok?ek.issues:[],eC=(0,a.useMemo)(()=>R.trim()?Y(R):null,[R]),eS=(0,a.useMemo)(()=>{if(eC&&0!==eN.length)return function(e,t){let r={},n=[];for(let a of e){let e=function(e,t){if("string"!=typeof e)return null;let r=/^nodes\[(\d+)\]/.exec(e);if(!r)return null;let n=Number.parseInt(r[1],10);if(!Number.isFinite(n)||n<0)return null;let a=Array.isArray(t.nodes)?t.nodes:[];if(n>=a.length)return null;let l=a[n];return l&&"string"==typeof l.id&&0!==l.id.length?l.id:null}(a.path,t);e?(r[e]||(r[e]=[]),r[e].push(a)):n.push(a)}return{byNodeId:r,rootIssues:n}}(eN,eC).byNodeId},[eC,eN]),eT=(0,a.useMemo)(()=>{if(!eC)return;let e=function(e){var t,r;let n=Array.isArray(e.nodes)?e.nodes:[],a=new Set,l=new Map;for(let e of n)e&&"string"==typeof e.id&&0!==e.id.length&&a.add(e.id);for(let e of n)if(e&&"string"==typeof e.id&&0!==e.id.length)for(let r of Array.isArray(e.depends_on)?e.depends_on:[]){if("string"!=typeof r||0===r.length||!a.has(r))continue;let n=null!=(t=l.get(r))?t:[];n.push(e.id),l.set(r,n)}let s=new Set,o=new Map,i=[];for(let e of a)(null!=(r=o.get(e))?r:0)===0&&function e(t){var r,n;for(let a of(o.set(t,1),i.push(t),null!=(r=l.get(t))?r:[])){let t=null!=(n=o.get(a))?n:0;if(1===t){let e=i.lastIndexOf(a);if(e>=0)for(let t=e;t<i.length;t++)s.add(i[t])}else 0===t&&e(a)}o.set(t,2),i.pop()}(e);return s}(eC);return e.size>0?e:void 0},[eC]),eA=e=>{O(e),G(!1),W(null),er(null)},eE=async()=>{let e=q?B.trim():P;if(e&&(!q||/^[a-z0-9]+(-[a-z0-9]+)*$/.test(e)))try{await es.mutateAsync({name:e,body:{yaml:R,scope:"project"}}),G(!1),O(e)}catch(e){}},e_=async()=>{if(P)try{let e=await ed.mutateAsync({name:P,args:D});W(e.runId)}catch(e){}},eM=async()=>{var e,t;if(!P||(null==(e=el.data)?void 0:e.source)==="builtin")return;let r=(null==(t=el.data)?void 0:t.source)==="global"?"global":"project";try{await eo.mutateAsync({name:P,scope:r}),O(null),L("")}catch(e){}},eI=(null==(N=el.data)?void 0:N.source)==="builtin",eP=ei.isPending?"pending":ek?ek.ok?"ok":"error":"idle",eO=function(){let[e,t]=(0,a.useState)(()=>eV),r=(0,a.useRef)(!1);(0,a.useEffect)(()=>{t(function(){try{var e,t,r;let n=window.localStorage.getItem(eY);if(!n)return{...eV};return(e=JSON.parse(n))&&"object"==typeof e?{leftCollapsed:"boolean"==typeof e.leftCollapsed?e.leftCollapsed:eV.leftCollapsed,rightCollapsed:"boolean"==typeof e.rightCollapsed?e.rightCollapsed:eV.rightCollapsed,canvasOnly:"boolean"==typeof e.canvasOnly?e.canvasOnly:eV.canvasOnly,leftWidthPx:eX(null!=(t=e.leftWidthPx)?t:eV.leftWidthPx,eV.leftWidthPx),rightWidthPx:eX(null!=(r=e.rightWidthPx)?r:eV.rightWidthPx,eV.rightWidthPx)}:{...eV}}catch(e){return{...eV}}}()),r.current=!0},[]),(0,a.useEffect)(()=>{if(r.current)try{window.localStorage.setItem(eY,JSON.stringify(e))}catch(e){}},[e]);let n=(0,a.useCallback)(()=>{t(e=>({...e,leftCollapsed:!e.leftCollapsed}))},[]),l=(0,a.useCallback)(()=>{t(e=>({...e,rightCollapsed:!e.rightCollapsed}))},[]),s=(0,a.useCallback)(()=>{t(e=>({...e,canvasOnly:!e.canvasOnly}))},[]),o=(0,a.useCallback)(e=>{t(t=>({...t,leftWidthPx:eX(e,t.leftWidthPx)}))},[]),i=(0,a.useCallback)(e=>{t(t=>({...t,rightWidthPx:eX(e,t.rightWidthPx)}))},[]),d=(0,a.useCallback)(()=>{t({...eV})},[]);return(0,a.useMemo)(()=>({...e,toggleLeft:n,toggleRight:l,toggleCanvasOnly:s,setLeftWidth:o,setRightWidth:i,reset:d}),[e,n,l,s,o,i,d])}(),eR=!eO.canvasOnly,eL=!eO.canvasOnly,eD=eO.leftCollapsed?40:eO.leftWidthPx,ez=eO.rightCollapsed?40:eO.rightWidthPx;(0,a.useEffect)(()=>{let e=e=>{var t;if("\\"!==e.key||!(e.metaKey||e.ctrlKey))return;let r=e.target,n=null==r||null==(t=r.tagName)?void 0:t.toLowerCase();"input"===n||"textarea"===n||null!=r&&r.isContentEditable||(e.preventDefault(),eO.toggleCanvasOnly())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[eO]);let eW=(0,a.useCallback)((e,t)=>{let r="left"===e?eO.leftWidthPx:eO.rightWidthPx,n="left"===e?eO.setLeftWidth:eO.setRightWidth,a="left"===e?1:-1;try{t.target.setPointerCapture(t.pointerId)}catch(e){}let l=e=>{n(r+a*(e.clientX-t.clientX))},s=()=>{window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",s);try{t.target.releasePointerCapture(t.pointerId)}catch(e){}};window.addEventListener("pointermove",l),window.addEventListener("pointerup",s)},[eO]);return(0,n.jsxs)("div",{className:"flex h-full flex-col",children:[(0,n.jsxs)("header",{className:"flex items-center justify-between border-b border-border px-4 py-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(i.A,{className:"h-4 w-4 text-text-tertiary"}),(0,n.jsx)("h1",{className:"text-sm font-semibold",children:"Workflows"}),(0,n.jsxs)("span",{className:"text-xs text-text-tertiary",children:[null!=(A=null==(C=I.data)?void 0:C.workflows.length)?A:0," declared"]})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("button",{type:"button",onClick:eO.toggleLeft,title:eO.leftCollapsed?"Show workflow list":"Collapse workflow list",className:"flex items-center gap-1 rounded-md border border-border px-2 py-1 text-[11px] text-text-tertiary hover:bg-surface-elevated",children:eO.leftCollapsed?(0,n.jsx)(d.A,{className:"h-3 w-3"}):(0,n.jsx)(c.A,{className:"h-3 w-3"})}),(0,n.jsx)("button",{type:"button",onClick:eO.toggleCanvasOnly,title:eO.canvasOnly?"Exit canvas-only (Cmd+\\)":"Canvas-only mode (Cmd+\\)",className:"flex items-center gap-1 rounded-md border px-2 py-1 text-[11px] transition-colors ".concat(eO.canvasOnly?"border-accent/50 bg-accent/15 text-accent":"border-border text-text-tertiary hover:bg-surface-elevated"),children:eO.canvasOnly?(0,n.jsx)(u.A,{className:"h-3 w-3"}):(0,n.jsx)(p.A,{className:"h-3 w-3"})}),(0,n.jsx)("button",{type:"button",onClick:eO.toggleRight,title:eO.rightCollapsed?"Show run panel":"Collapse run panel",className:"flex items-center gap-1 rounded-md border border-border px-2 py-1 text-[11px] text-text-tertiary hover:bg-surface-elevated",children:eO.rightCollapsed?(0,n.jsx)(h.A,{className:"h-3 w-3"}):(0,n.jsx)(x.A,{className:"h-3 w-3"})}),eb>0&&(0,n.jsxs)("button",{type:"button",onClick:()=>{var e;if(eg&&ev.has(eg.runId))return void(eg&&ey(e=>{let t=new Set(e);return t.delete(eg.runId),t}));let t=null==(e=ef.data)?void 0:e.pending[0];t&&t.runId!==z&&W(t.runId)},title:eg&&ev.has(eg.runId)?"Re-open approval modal for this run":"".concat(eb," run(s) waiting on approval — click to view"),className:"relative flex items-center gap-1 rounded-md border border-warning/40 bg-warning/10 px-2 py-1 text-[11px] text-warning hover:bg-warning/20",children:[(0,n.jsx)(m.A,{className:"h-3 w-3"}),(0,n.jsx)("span",{children:eb}),(0,n.jsx)("span",{className:"absolute -right-1 -top-1 h-2 w-2 animate-pulse rounded-full bg-warning ring-2 ring-surface"})]}),(0,n.jsxs)("button",{type:"button",onClick:()=>X(e=>!e),className:"flex items-center gap-1 rounded-md border px-2 py-1 text-[11px] transition-colors ".concat(V?"border-primary/40 bg-primary/15 text-primary":"border-border text-text-tertiary hover:bg-surface-elevated"),children:[(0,n.jsx)(f.A,{className:"h-3 w-3"}),V?"Editor":"All runs"]}),(0,n.jsxs)("button",{type:"button",onClick:()=>Z(e=>!e),title:Q?"Hide AI prompt":"Describe a workflow in plain text",className:"flex items-center gap-1 rounded-md border px-2 py-1 text-[11px] transition-colors ".concat(Q?"border-accent/50 bg-accent/15 text-accent":"border-border text-text-tertiary hover:bg-surface-elevated"),children:[(0,n.jsx)(g.A,{className:"h-3 w-3"}),"AI"]}),(0,n.jsx)("button",{type:"button",onClick:()=>{G(!0),O(null),H(""),L("name: my-workflow\ndescription: |\n Use when: …\n Triggers: …\n Does: …\n NOT for: …\n\nprovider: claude\nmodel: sonnet\n\nnodes:\n - id: first\n bash: echo hello\n"),W(null),er(null)},className:"rounded-md bg-primary px-3 py-1 text-xs font-medium text-primary-foreground hover:bg-accent-hover transition-colors",children:"+ New"})]})]}),(0,n.jsxs)("div",{className:"flex flex-1 overflow-hidden",children:[eR&&(0,n.jsx)("aside",{style:{width:eD},className:"shrink-0 overflow-y-auto border-r border-border",children:eO.leftCollapsed?(0,n.jsx)("button",{type:"button",onClick:eO.toggleLeft,title:"Expand workflow list",className:"flex h-full w-full items-center justify-center text-text-tertiary hover:bg-surface-elevated",children:(0,n.jsx)(d.A,{className:"h-4 w-4"})}):["project","global","builtin"].map(e=>(0,n.jsx)(e2,{label:eQ[e],entries:ew[e],selected:P,onSelect:eA},e))}),eR&&!eO.leftCollapsed&&(0,n.jsx)("div",{role:"separator","aria-orientation":"vertical","aria-label":"Resize workflow list",onPointerDown:e=>eW("left",{clientX:e.clientX,pointerId:e.pointerId,target:e.currentTarget}),className:"w-1 shrink-0 cursor-col-resize bg-transparent hover:bg-accent/30"}),(0,n.jsx)("section",{className:"flex flex-1 flex-col overflow-hidden min-w-0",children:V?(0,n.jsx)(eH,{selectedRunId:z,onSelect:(e,t)=>{W(e),O(t),G(!1),X(!1)}}):(0,n.jsxs)(n.Fragment,{children:[Q&&(0,n.jsx)(em,{currentYaml:R,onClose:()=>Z(!1),onGenerated:e=>{var t;e.yaml&&(L(e.yaml),(null==(t=e.definition)?void 0:t.name)&&(G(!0),O(null),H(e.definition.name),W(null)))}}),q&&(0,n.jsxs)("div",{className:"border-b border-border px-3 py-2",children:[(0,n.jsx)("label",{className:"block text-[10px] uppercase tracking-wide text-text-tertiary",children:"Workflow name (kebab-case)"}),(0,n.jsx)("input",{type:"text",value:B,onChange:e=>H(e.target.value),placeholder:"my-workflow",className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-sm font-mono",autoFocus:!0})]}),!q&&P&&(0,n.jsxs)("div",{className:"flex items-center justify-between border-b border-border px-3 py-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-3",children:[(0,n.jsx)("span",{className:"text-sm font-medium",children:P}),eI&&(0,n.jsx)("span",{className:"rounded bg-surface-elevated px-1.5 py-0.5 text-[10px] text-text-tertiary",children:"read-only (built-in)"}),(0,n.jsx)(e3,{mode:$,onChange:U})]}),(0,n.jsx)("div",{className:"flex items-center gap-2",children:(0,n.jsx)(e5,{status:eP})})]}),"graph"===$&&R.trim()?(0,n.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden bg-surface",children:[(0,n.jsx)("div",{className:et?"flex-1 min-h-[180px] overflow-hidden":"flex-1 overflow-hidden",children:(0,n.jsx)(ee,{palette:M,yaml:R,editable:!eI,onChangeYaml:L,onNodeClick:eI?void 0:e=>er(e),nodeStatuses:ex,nodeIssues:eS,cycleNodeIds:eT,focusNodeId:null!=(E=null==en?void 0:en.id)?E:null,focusNonce:null!=(_=null==en?void 0:en.nonce)?_:0,onRun:P&&!q?e_:void 0})}),et&&!eI&&(()=>{let e=Y(R);return e?(0,n.jsx)(eF,{definition:e,nodeId:et,onChange:e=>L(J(e)),onClose:()=>er(null),onDelete:()=>{L(J(K(e,et))),er(null)}}):null})()]}):(0,n.jsx)("textarea",{value:R,onChange:e=>L(e.target.value),readOnly:eI,placeholder:"Select a workflow on the left or click + New to start",spellCheck:!1,className:"flex-1 resize-none border-0 bg-surface px-3 py-2 font-mono text-xs leading-snug focus:outline-none"}),eN.length>0&&(0,n.jsx)("ul",{className:"max-h-32 overflow-y-auto border-t border-border bg-surface-elevated px-3 py-2 text-[11px]",children:eN.slice(0,8).map((e,t)=>{var r,a;let l=eC&&null!=(a=eS&&(null==(r=Object.entries(eS).find(t=>{let[,r]=t;return r.includes(e)}))?void 0:r[0]))?a:null,s=!!l;return(0,n.jsxs)("li",{className:"flex items-start gap-1.5 text-error ".concat(s?"cursor-pointer hover:bg-surface":""),...s?{onClick:()=>{U("graph"),ea(e=>{var t;return{id:l,nonce:(null!=(t=null==e?void 0:e.nonce)?t:0)+1}})},role:"button",tabIndex:0}:{},title:s?'Jump to node "'.concat(l,'"'):void 0,children:[(0,n.jsx)(b.A,{className:"mt-0.5 h-3 w-3 shrink-0"}),(0,n.jsxs)("span",{children:[(0,n.jsx)("span",{className:"font-mono text-text-tertiary",children:e.path||"(root)"})," ",e.message]})]},t)})}),(0,n.jsxs)("footer",{className:"flex items-center justify-end gap-2 border-t border-border px-3 py-2",children:[P&&!eI&&!q&&(0,n.jsxs)("button",{type:"button",onClick:eM,className:"flex items-center gap-1 rounded-md border border-error/40 px-2 py-1 text-[11px] text-error hover:bg-error/10",children:[(0,n.jsx)(v.A,{className:"h-3 w-3"}),"Delete"]}),(0,n.jsxs)("button",{type:"button",onClick:eE,disabled:!P&&!q||eI||es.isPending,className:"flex items-center gap-1 rounded-md bg-primary px-3 py-1 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:[es.isPending?(0,n.jsx)(y.A,{className:"h-3 w-3 animate-spin"}):(0,n.jsx)(j.A,{className:"h-3 w-3"}),"Save"]})]})]})}),eL&&!eO.rightCollapsed&&(0,n.jsx)("div",{role:"separator","aria-orientation":"vertical","aria-label":"Resize run panel",onPointerDown:e=>eW("right",{clientX:e.clientX,pointerId:e.pointerId,target:e.currentTarget}),className:"w-1 shrink-0 cursor-col-resize bg-transparent hover:bg-accent/30"}),eL&&(0,n.jsx)("aside",{style:{width:ez},className:"flex shrink-0 flex-col overflow-hidden border-l border-border",children:eO.rightCollapsed?(0,n.jsx)("button",{type:"button",onClick:eO.toggleRight,title:"Expand run panel",className:"flex h-full w-full items-center justify-center text-text-tertiary hover:bg-surface-elevated",children:(0,n.jsx)(h.A,{className:"h-4 w-4"})}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"border-b border-border px-3 py-2",children:[(0,n.jsx)("label",{className:"block text-[10px] uppercase tracking-wide text-text-tertiary",children:"Arguments"}),(0,n.jsx)("input",{type:"text",value:D,onChange:e=>F(e.target.value),placeholder:"passed as $ARGUMENTS",className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs"}),(0,n.jsxs)("button",{type:"button",onClick:e_,disabled:!P||q||ed.isPending,className:"mt-2 flex w-full items-center justify-center gap-1 rounded-md bg-accent px-2 py-1.5 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:[ed.isPending?(0,n.jsx)(y.A,{className:"h-3 w-3 animate-spin"}):(0,n.jsx)(w.A,{className:"h-3 w-3"}),"Run"]})]}),(0,n.jsxs)("div",{className:"flex-1 overflow-y-auto px-3 py-2 text-[11px]",children:[!z&&(0,n.jsx)("p",{className:"text-text-tertiary",children:"No active run. Press Run to start."}),z&&eh.data&&(0,n.jsx)(e4,{runId:z,events:eh.data.events,ok:eh.data.ok,outputs:eh.data.outputs})]})]})})]}),eg&&!ev.has(eg.runId)&&(0,n.jsx)(eJ,{runId:eg.runId,message:eg.message,onDismiss:()=>ey(e=>{let t=new Set(e);return t.add(eg.runId),t})})]})}function e2(e){let{label:t,entries:r,selected:a,onSelect:l}=e;return 0===r.length?null:(0,n.jsxs)("div",{className:"border-b border-border",children:[(0,n.jsx)("h2",{className:"px-3 py-1.5 text-[10px] font-medium uppercase tracking-wide text-text-tertiary",children:t}),(0,n.jsx)("ul",{children:r.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>l(e.name),className:["block w-full px-3 py-1.5 text-left text-xs transition-colors",a===e.name?"bg-accent/15 text-text-primary":"text-text-secondary hover:bg-surface-elevated"].join(" "),title:e.path,children:[(0,n.jsx)("div",{className:"font-medium",children:e.name}),(0,n.jsxs)("div",{className:"truncate text-[10px] text-text-tertiary",children:[e.nodeCount," node",1===e.nodeCount?"":"s"]})]})},e.path))})]})}function e3(e){let{mode:t,onChange:r}=e;return(0,n.jsxs)("div",{className:"flex items-center rounded-md border border-border text-[10px]",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>r("yaml"),className:"flex items-center gap-1 px-2 py-0.5 ".concat("yaml"===t?"bg-surface-elevated text-text-primary":"text-text-tertiary"),children:[(0,n.jsx)(k.A,{className:"h-3 w-3"}),"YAML"]}),(0,n.jsxs)("button",{type:"button",onClick:()=>r("graph"),className:"flex items-center gap-1 px-2 py-0.5 ".concat("graph"===t?"bg-surface-elevated text-text-primary":"text-text-tertiary"),children:[(0,n.jsx)(N.A,{className:"h-3 w-3"}),"Graph"]})]})}function e5(e){let{status:t}=e;return"pending"===t?(0,n.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-text-tertiary",children:[(0,n.jsx)(y.A,{className:"h-3 w-3 animate-spin"}),"validating"]}):"ok"===t?(0,n.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-success",children:[(0,n.jsx)(C.A,{className:"h-3 w-3"}),"valid"]}):"error"===t?(0,n.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-error",children:[(0,n.jsx)(b.A,{className:"h-3 w-3"}),"invalid"]}):null}function e4(e){let{runId:t,events:r,ok:a,outputs:l}=e;return(0,n.jsxs)("div",{className:"space-y-2 font-mono",children:[(0,n.jsxs)("div",{className:"text-[10px] text-text-tertiary",children:["runId: ",t]}),(0,n.jsx)("ul",{className:"space-y-1",children:r.map((e,t)=>{var r,a;return(0,n.jsxs)("li",{className:"flex items-start gap-1.5",children:[(0,n.jsx)("span",{className:"mt-0.5 h-1.5 w-1.5 rounded-full bg-text-tertiary"}),(0,n.jsxs)("span",{className:"break-all",children:[(0,n.jsx)("span",{className:"text-text-tertiary",children:e.type}),e.nodeId&&(0,n.jsx)("span",{className:"ml-1",children:e.nodeId}),e.reason&&(0,n.jsxs)("span",{className:"ml-1 text-text-tertiary",children:["— ",e.reason]}),e.error&&(0,n.jsxs)("span",{className:"ml-1 text-error",children:["— ",e.error]}),(null==(r=e.result)?void 0:r.ok)===!1&&(0,n.jsxs)("span",{className:"ml-1 text-error",children:["— ",null!=(a=e.result.error)?a:"failed"]})]})]},t)})}),!0===a&&(0,n.jsxs)("div",{className:"rounded-md bg-success/10 px-2 py-1 text-[10px] text-success",children:["completed \xb7 ",Object.keys(l).length," node output",1===Object.keys(l).length?"":"s"]}),!1===a&&(0,n.jsx)("div",{className:"rounded-md bg-error/10 px-2 py-1 text-[10px] text-error",children:"failed"}),Object.keys(l).length>0&&(0,n.jsx)(e6,{outputs:l})]})}function e6(e){let{outputs:t}=e;return(0,n.jsxs)("details",{className:"mt-2 rounded-md border border-border bg-surface-elevated",children:[(0,n.jsxs)("summary",{className:"cursor-pointer select-none px-2 py-1 text-[10px] font-semibold text-text-tertiary",children:["Outputs (",Object.keys(t).length,")"]}),(0,n.jsx)("ul",{className:"space-y-1 px-2 pb-2 pt-1 font-mono text-[10px]",children:Object.entries(t).map(e=>{let[t,r]=e;return(0,n.jsxs)("li",{className:"rounded bg-surface px-2 py-1",children:[(0,n.jsx)("div",{className:"text-[9px] uppercase tracking-wide text-text-tertiary",children:t}),(0,n.jsx)("pre",{className:"mt-0.5 max-h-40 overflow-auto whitespace-pre-wrap break-all",children:function(e){if(null==e)return"(no output)";if("string"==typeof e)return e.length>4096?"".concat(e.slice(0,4096),"\n…(truncated \xb7 ").concat(e.length," chars)"):e;try{let t=JSON.stringify(e,null,2);return t.length>4096?"".concat(t.slice(0,4096),"\n…(truncated \xb7 ").concat(t.length," chars)"):t}catch(t){return String(e)}}(r)})]},t)})})]})}var e9=r(24818),e8=r(6015),e7=r(42375);let te=["agent","gate","git","judge","observe","hitl","subgraph"],tt=["prompt","bash","skill","cft","approval","if","switch","iteration","classify","extract","set","filter","template","http","showroom","task","scheduleTrigger","webhookTrigger","discordTrigger","telegramTrigger","manualTrigger","chatTrigger"];function tr(e){return(0,B.jh)(e.contents)?e.contents:null}function tn(e){return(0,B.jn)(e)?e:null}function ta(e){let t=tn(e);return t&&("string"==typeof t.value||"number"==typeof t.value)?String(t.value):void 0}function tl(e,t){return e.items.find(e=>ta(e.key)===t)}function ts(e,t){var r;let n=null==(r=tl(e,t))?void 0:r.value;return(0,B.oP)(n)?n:null}function to(e){return(0,B.jh)(e)?e:null}function ti(e,t){var r;let n=tn(null==(r=tl(e,t))?void 0:r.value);return n&&("string"==typeof n.value||"number"==typeof n.value)?String(n.value):void 0}function td(e,t){return(function(e){let t=tr(e);if(!t)return[];let r=ts(t,"nodes");return r?r.items.flatMap(e=>{let t=to(e);return t?[t]:[]}):[]})(e).find(e=>ti(e,"node_id")===t)}function tc(e,t,r){var n;let a=tn(null==(n=tl(e,t))?void 0:n.value);if(a){a.value=r;return}e.set(t,r)}function tu(e){let t=(0,B.Tp)(e,{keepSourceTokens:!0});return t.src=e,t.removed=[],t}function tp(e){var t;return null!=(t=e.removed)?t:[]}function th(e){let t=tr(e),r=t?ts(t,"edges"):null;return r?r.items.flatMap(e=>{let t=to(e);return t?[t]:[]}):[]}function tx(e,t){return(null==e?void 0:e.range)?e.range[1]:t}function tm(e){var t;let r=null!=(t=e.src)?t:"";if(!r)return e.toString();let n=[],a=t=>{if((0,B.oP)(t))return void t.items.forEach((e,l)=>{if((0,B.jh)(e)&&!e.range){var s,o;let a=tx(l>0?t.items[l-1]:null,tx(t,r.length)),i=e.items.map(e=>{var t;let r=e.key instanceof B.CA||e.key instanceof B.Rw?"":String(null!=(t=e.key.value)?t:e.key),n=e.value,a=n&&"object"==typeof n&&"value"in n?String(n.value):String(e.value);return" ".concat(r,": ").concat(a)}),d=null!=(o=null==(s=i[0])?void 0:s.slice(2))?o:"";n.push({start:a,end:a,text:"\n- ".concat(d).concat(i.length>1?"\n".concat(i.slice(1).join("\n")):"")})}else a(e)});if((0,B.jh)(t))for(let l of t.items){let s=ta(l.key);if((0,B.jh)(l.value)||(0,B.oP)(l.value)){if(!l.value.range&&t.range&&s){let e=t.range[1],r=(0,B.jh)(l.value)?"".concat(s,":\n").concat(l.value.toString().replace(/\n$/,"").split("\n").map(e=>" ".concat(e)).join("\n")):"".concat(s,": ").concat(l.value.toString().trim());n.push({start:e,end:e,text:"\n".concat(r)})}else a(l.value);continue}let o=tn(l.value);if(!s||!o)continue;if(!o.range&&t.range){let e=t.range[1];n.push({start:e,end:e,text:"\n".concat(s,": ").concat(o.toString())});continue}if(!o.range)continue;let i=r.slice(o.range[0],o.range[1]),d=e.createNode(o.value).toString();i!==d&&n.push({start:o.range[0],end:o.range[1],text:d})}};for(let[t,r]of(a(e.contents),tp(e)))n.push({start:t,end:r,text:""});tp(e).length=0;let l=r;for(let e of n.sort((e,t)=>t.start-e.start||t.end-e.end))l="".concat(l.slice(0,e.start)).concat(e.text).concat(l.slice(e.end));return l}let tf={agent:"#3b82f6",gate:"#f59e0b",git:"#10b981",judge:"#a855f7",observe:"#06b6d4",hitl:"#f43f5e",subgraph:"#8b5cf6"},tg={run:function(e){var t;let{data:r}=e;return(0,n.jsxs)("div",{className:"min-w-[190px] rounded-lg border border-border bg-surface px-3 py-2 shadow-sm",style:{borderLeft:"4px solid ".concat(null!=(t=tf[r.kind])?t:"#64748b"),height:r.height},children:[r.inputHandles.map((e,t)=>(0,n.jsx)(T.h7,{id:e,type:"target",position:A.yX.Left,className:"!pointer-events-none",style:{top:"".concat((t+1)/(r.inputHandles.length+1)*100,"%")}},e)),(0,n.jsxs)("div",{className:"flex items-center gap-1 text-[10px] text-text-tertiary",children:[(0,n.jsx)("span",{children:r.kind}),r.entry&&(0,n.jsx)("span",{className:"rounded bg-success/15 px-1 text-success",children:"entry"}),r.terminal&&(0,n.jsx)("span",{className:"rounded bg-accent/15 px-1 text-accent",children:"terminal"})]}),(0,n.jsx)("div",{className:"font-mono text-xs font-semibold text-text-primary",children:r.label}),(0,n.jsxs)("div",{className:"max-w-[170px] truncate text-[10px] text-text-tertiary",title:r.recipe,children:[r.recipe," \xb7 max ",r.maxVisits]}),r.outcomes.length>0&&(0,n.jsx)("div",{className:"max-w-[170px] truncate text-[10px] text-text-tertiary",title:r.outcomes.join(" \xb7 "),children:r.outcomes.join(" \xb7 ")}),r.outputHandles.map((e,t)=>(0,n.jsx)(T.h7,{id:e,type:"source",position:A.yX.Right,className:"!pointer-events-none",style:{top:"".concat((t+1)/(r.outputHandles.length+1)*100,"%")}},e))]})}},tb={labelStyle:{fill:"var(--text-primary, #334155)",fontSize:12},labelBgStyle:{fill:"var(--surface, #fff)"}};function tv(e){if(e instanceof e7.Iu){var t;let r=e.body;return(null==r||null==(t=r.errors)?void 0:t.map(e=>e.message).filter(Boolean).join(" \xb7 "))||(null==r?void 0:r.reason)||"저장 검증 실패 (".concat(e.status,")")}return e instanceof Error?e.message:"저장에 실패했습니다."}function ty(){var e,t,r,s,i,d,c,u,p,h,x,m;let{palette:f}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},g=(0,o.M1)(),b=(0,e9.jE)(),[v,y]=(0,a.useState)(null),[j,w]=(0,a.useState)(null),[k,N]=(0,a.useState)(null),[C,S]=(0,a.useState)("note"),[A,_]=(0,a.useState)(te[0]),[M,I]=(0,a.useState)("read-only"),[P,O]=(0,a.useState)(""),[R,L]=(0,a.useState)("pass"),[D,F]=(0,a.useState)(""),[z,W]=(0,a.useState)(null),[q,G]=(0,a.useState)([]),[H,$]=(0,a.useState)(null),K=(0,l.I)({queryKey:["run-graphs"],queryFn:()=>g.getRunGraphs()}),U=(0,l.I)({queryKey:["graph-kinds","harness"],queryFn:()=>g.getGraphKinds("harness"),enabled:!f,retry:!1}),J=null!=(h=null!=f?f:(null==(e=U.data)?void 0:e.kinds.length)?U.data.kinds:null)?h:te.map(e=>({graph:"harness",kind:e,plugin:null,description:"",schema:{},core:!0})),Y=J.some(e=>e.kind===A)?A:null!=(x=null==(t=J[0])?void 0:t.kind)?x:A,V=null!=(m=null!=v?v:null==(s=K.data)||null==(r=s.graphs[0])?void 0:r.id)?m:null,X=null==(i=K.data)?void 0:i.graphs.find(e=>e.id===V),Q=(0,l.I)({queryKey:["run-graph",V],queryFn:()=>g.getRunGraph(V),enabled:null!==V}),Z=(null==X?void 0:X.editable)===!0&&"mine"===X.source&&(null==(d=Q.data)?void 0:d.id)===V&&"mine"===Q.data.source&&!0===Q.data.editable,ee=(0,l.I)({queryKey:["run-graph-yaml",Z?V:null],queryFn:()=>g.getRunGraphYaml(V),enabled:Z&&null!==V}),et=Z?j===V?k:(null==(c=ee.data)?void 0:c.id)===V&&"mine"===ee.data.source&&ee.data.editable?ee.data.yaml:null:null,er=(0,a.useMemo)(()=>Q.data&&Q.data.id===V?function(e){let t=e.edges.flatMap((e,t)=>e.map?Object.entries(e.map).map(r=>{let[n,a]=r;return{id:"".concat(t,":").concat(e.from,":").concat(n),source:e.from,target:a,label:n,data:{on:e.on},type:"straight"}}):e.to?[{id:"".concat(t,":").concat(e.from,":").concat(e.to),source:e.from,target:e.to,type:"smoothstep"}]:[]);for(let r of e.nodes){let e=t.filter(e=>e.source===r.node_id),n=t.filter(e=>e.target===r.node_id);e.forEach((e,t)=>{e.sourceHandle="out-".concat(t)}),n.forEach((e,t)=>{e.targetHandle="in-".concat(t)})}let r=new E.Ay.graphlib.Graph;for(let n of(r.setDefaultEdgeLabel(()=>({})),r.setGraph({rankdir:"LR",ranksep:110,nodesep:55,marginx:25,marginy:25}),e.nodes)){let e=Math.max(1,t.filter(e=>e.source===n.node_id).length,t.filter(e=>e.target===n.node_id).length);r.setNode(n.node_id,{width:190,height:Math.max(90,(e+1)*26)})}for(let e of t)r.setEdge(e.source,e.target);E.Ay.layout(r);let n=new Set(e.terminal_nodes);return{nodes:e.nodes.map(a=>{let l=r.node(a.node_id),s=t.filter(e=>e.source===a.node_id),o=t.filter(e=>e.target===a.node_id);return{id:a.node_id,position:{x:l.x-95,y:l.y-l.height/2},data:{label:a.node_id,kind:a.kind,recipe:a.recipe,maxVisits:a.max_visits,entry:e.entry_node===a.node_id,terminal:n.has(a.node_id),outcomes:s.filter(e=>"string"==typeof e.label).map(e=>e.label),inputHandles:o.map(e=>e.targetHandle),outputHandles:s.map(e=>e.sourceHandle),height:l.height}}}),edges:t}}(Q.data):null,[Q.data,V]),en=(0,a.useMemo)(()=>{var e;return null!=(e=null==er?void 0:er.nodes.map(e=>({...e,type:"run"})))?e:[]},[er]);function ea(e){if(Z&&V&&null!==et&&!es.isPending)try{let t=e(et);w(V),N(t),W(null),G([]),$(null)}catch(e){W(tv(e))}}let el=(0,e8.n)({mutationFn:()=>g.cloneRunGraph(V,"".concat(V,"-mine")),onSuccess:async e=>{w(null),N(null),W(null),$(null),G([]),await b.invalidateQueries({queryKey:["run-graphs"]}),y(e.id)}}),es=(0,e8.n)({mutationFn:async e=>{let{savingId:t,savingYaml:r}=e,n=await g.validateGraph("harness",r);return(G(n.ignoredKeys),!n.ok||n.errors.length>0)?void $(n.errors.map(e=>e.message).join(" \xb7 ")||"그래프 검증에 실패했습니다."):($(null),g.putRunGraphYaml(t,r))},onSuccess:async e=>{e&&(W(null),w(null),await b.invalidateQueries({queryKey:["run-graph",e.id]}),await b.invalidateQueries({queryKey:["run-graph-yaml",e.id]}))},onError:e=>W(tv(e))});return(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 overflow-hidden",children:[(0,n.jsxs)("aside",{className:"w-56 shrink-0 overflow-y-auto border-r border-border","aria-label":"실행 그래프 목록",children:[(0,n.jsx)("h2",{className:"px-3 py-3 text-xs font-semibold",children:"실행 그래프"}),K.isLoading&&(0,n.jsx)("p",{className:"px-3 text-xs text-text-tertiary",children:"불러오는 중…"}),K.isError&&(0,n.jsx)("p",{role:"alert",className:"px-3 text-xs text-error",children:"그래프 목록을 불러오지 못했습니다."}),(null==(u=K.data)?void 0:u.graphs.length)===0&&(0,n.jsx)("p",{className:"px-3 text-xs text-text-tertiary",children:"그래프가 없습니다."}),(0,n.jsx)("ul",{children:null==(p=K.data)?void 0:p.graphs.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>{y(e.id),W(null),$(null),G([])},disabled:es.isPending||el.isPending,"aria-current":V===e.id?"true":void 0,className:"w-full px-3 py-2 text-left text-xs hover:bg-surface-elevated ".concat(V===e.id?"bg-accent/15 text-text-primary":"text-text-secondary"),children:[(0,n.jsx)("span",{className:"block font-mono",children:e.id}),(0,n.jsxs)("span",{className:"text-[10px] text-text-tertiary",children:[e.nodeCount," nodes \xb7 ","mine"===e.source?"내 그래프":"core"," \xb7 ",e.editable?"편집":"읽기 전용"]})]})},e.id))})]}),(0,n.jsxs)("section",{className:"relative flex min-w-0 flex-1 flex-col bg-surface","aria-label":"실행 그래프 캔버스",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-b border-border px-3 py-2",children:[X&&!X.editable&&(0,n.jsx)("button",{type:"button",onClick:()=>el.mutate(),disabled:el.isPending,className:"rounded border border-border px-2 py-1 text-xs",children:"복제해서 고치기"}),Z&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("label",{className:"text-[10px] text-text-tertiary",children:["kind",(0,n.jsx)("select",{"aria-label":"노드 kind",value:Y,onChange:e=>_(e.target.value),className:"ml-1 text-xs",children:J.map(e=>{var t;return(0,n.jsxs)("option",{value:e.kind,children:[e.kind,e.plugin?" \xb7 ".concat(e.plugin):""]},"".concat(null!=(t=e.plugin)?t:"core",":").concat(e.kind))})})]}),(0,n.jsx)("input",{"aria-label":"노드 id",value:C,onChange:e=>S(e.target.value),className:"w-24 rounded border border-border px-1 text-xs"}),(0,n.jsx)("input",{"aria-label":"recipe",value:M,onChange:e=>I(e.target.value),className:"w-28 rounded border border-border px-1 text-xs"}),(0,n.jsx)("button",{type:"button",className:"rounded border border-border px-2 py-1 text-xs",onClick:()=>ea(e=>{let t=tu(e);return!function(e,t){var r;let n=tr(e);if(!n)throw Error("graph yaml root is not a map");let a=ts(n,"nodes");if(a||(n.set("nodes",[]),a=ts(n,"nodes")),!a)throw Error("nodes is not a sequence");if(td(e,t.nodeId))throw Error("node already exists: ".concat(t.nodeId));let l=new B.CA;l.set("node_id",t.nodeId),l.set("kind",t.kind),l.set("recipe",t.recipe),l.set("max_visits",null!=(r=t.maxVisits)?r:1),a.add(l)}(t,{nodeId:C,kind:Y,recipe:M}),tm(t)}),children:"노드 추가"}),(0,n.jsx)("button",{type:"button",className:"rounded border border-border px-2 py-1 text-xs",onClick:()=>ea(e=>{let t=tu(e);return!function(e,t){let r=tr(e),n=r?ts(r,"nodes"):null;if(!n)return;let a=n.items.findIndex(e=>{let r=to(e);return!!r&&ti(r,"node_id")===t});a>=0&&(function(e,t){var r;let n=null==t?void 0:t.range;n&&tp(e).push([n[0],null!=(r=n[2])?r:n[1]])}(e,n.items[a]),n.delete(a))}(t,C),tm(t)}),children:"노드 삭제"}),(0,n.jsx)("button",{type:"button",className:"rounded border border-border px-2 py-1 text-xs",onClick:()=>ea(e=>{let t=tu(e),r=td(t,C);if(!r)throw Error("node not found: ".concat(C));tc(r,"kind",Y);let n=td(t,C);if(!n)throw Error("node not found: ".concat(C));return tc(n,"recipe",M),tm(t)}),children:"kind/recipe"}),(0,n.jsx)("input",{"aria-label":"간선 from",value:P,onChange:e=>O(e.target.value),placeholder:"from",className:"w-20 rounded border border-border px-1 text-xs"}),(0,n.jsx)("input",{"aria-label":"간선 결과",value:R,onChange:e=>L(e.target.value),placeholder:"결과",className:"w-16 rounded border border-border px-1 text-xs"}),(0,n.jsx)("input",{"aria-label":"간선 to",value:D,onChange:e=>F(e.target.value),placeholder:"to",className:"w-20 rounded border border-border px-1 text-xs"}),(0,n.jsx)("button",{type:"button",className:"rounded border border-border px-2 py-1 text-xs",onClick:()=>ea(e=>{let t=tu(e);return!function(e,t){let r=tr(e);if(!r)throw Error("graph yaml root is not a map");let n=ts(r,"edges");if(n||(r.set("edges",[]),n=ts(r,"edges")),!n)throw Error("edges is not a sequence");let a=th(e).find(e=>ti(e,"from")===t.from&&tl(e,"map"));a||((a=new B.CA).set("from",t.from),n.add(a)),(function(e){var t;let r=null==(t=tl(e,"map"))?void 0:t.value;if((0,B.jh)(r))return r;let n=new B.CA;return e.set("map",n),n})(a).set(t.outcome,t.to)}(t,{from:P,outcome:R,to:D}),tm(t)}),children:"간선 추가"}),(0,n.jsx)("button",{type:"button",className:"rounded border border-border px-2 py-1 text-xs",onClick:()=>ea(e=>{let t=tu(e);return!function(e,t,r){for(let c of th(e)){var n,a,l,s,o,i,d;if(ti(c,"from")!==t)continue;let u=null==(n=tl(c,"map"))?void 0:n.value;if(!(0,B.jh)(u))continue;let p=u.items.findIndex(e=>ta(e.key)===r);if(p>=0){let t=u.items[p],r=null!=(i=null==(a=t.key.range)?void 0:a[0])?i:null==(l=t.value.range)?void 0:l[0],n=null!=(d=null==(s=t.value.range)?void 0:s[2])?d:null==(o=t.value.range)?void 0:o[1];void 0!==r&&void 0!==n&&tp(e).push([r,n]),u.delete(p)}}}(t,P,R),tm(t)}),children:"간선 삭제"}),(0,n.jsx)("button",{type:"button",onClick:()=>{Z&&V&&null!==et&&es.mutate({savingId:V,savingYaml:et})},disabled:null===et||es.isPending,className:"rounded bg-accent px-2 py-1 text-xs text-white",children:"저장"})]})]}),!f&&U.isError&&(0,n.jsx)("p",{role:"status",className:"px-3 py-1 text-xs text-warning",children:"어휘 목록을 불러오지 못해 코어 팔레트를 표시합니다."}),(H||z)&&(0,n.jsx)("p",{role:"alert",className:"px-3 py-1 text-xs text-error",children:H||z}),q.length>0&&(0,n.jsxs)("p",{role:"status",className:"px-3 py-1 text-xs text-warning",children:["무시되는 키: ",q.join(" \xb7 ")]}),el.isError&&(0,n.jsx)("p",{role:"alert",className:"px-3 py-1 text-xs text-error",children:tv(el.error)}),Q.isError&&(0,n.jsx)("p",{role:"alert",className:"p-4 text-xs text-error",children:"그래프를 불러오지 못했습니다."}),Q.isLoading&&(0,n.jsx)("p",{className:"p-4 text-xs text-text-tertiary",children:"불러오는 중…"}),er&&(0,n.jsxs)(T.Gc,{nodes:en,edges:er.edges,nodeTypes:tg,fitView:!0,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:Z,edgesReconnectable:!1,deleteKeyCode:null,nodesFocusable:Z,edgesFocusable:!1,defaultEdgeOptions:tb,className:"!bg-surface",children:[(0,n.jsx)(T.VS,{}),(0,n.jsx)(T.H2,{showInteractive:!1})]},null!=V?V:"")]})]})}function tj(){let e="harness"===(0,s.useSearchParams)().get("mode")?"harness":"workflow",t=(0,o.Qj)(),r=(0,l.I)({queryKey:["graph-kinds",e],queryFn:()=>t.getGraphKinds(e),enabled:null!==t,retry:!1}),i=(0,a.useMemo)(()=>{var t;return(null==(t=r.data)?void 0:t.kinds.length)?r.data.kinds:("harness"===e?te:tt).map(t=>({graph:e,kind:t,plugin:null,description:"",schema:{},core:!0}))},[r.data,e]),d=r.isError||r.isSuccess&&!r.data.kinds.length;return(0,n.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,n.jsxs)("header",{className:"flex flex-wrap items-center justify-between gap-2 border-b border-border px-4 py-2",children:[(0,n.jsx)("h1",{className:"text-sm font-semibold",children:"편집기"}),(0,n.jsx)("nav",{"aria-label":"그래프 편집 모드",className:"flex gap-1",children:["workflow","harness"].map(t=>(0,n.jsx)("a",{href:"/app/editor/?mode=".concat(t),"aria-current":e===t?"page":void 0,className:"rounded px-3 py-1 text-xs ".concat(e===t?"bg-accent/15 text-text-primary":"text-text-tertiary hover:bg-surface-elevated"),children:"workflow"===t?"워크플로":"실행 그래프"},t))})]}),(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col",children:[t&&(0,n.jsxs)("div",{className:"border-b border-border px-3 py-2 text-xs","aria-label":"노드 팔레트",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsx)("strong",{children:"노드 팔레트"}),i.map(e=>{var t;return(0,n.jsxs)("span",{title:e.description,className:"rounded border border-border px-2 py-0.5",children:[e.kind," ",e.plugin&&(0,n.jsx)("small",{className:"rounded bg-accent/15 px-1 text-accent",children:e.plugin})]},"".concat(null!=(t=e.plugin)?t:"core",":").concat(e.kind))})]}),d&&(0,n.jsx)("p",{role:"status",className:"mt-1 text-warning",children:"어휘 목록을 불러오지 못해 코어 팔레트를 표시합니다."})]}),"workflow"===e?(0,n.jsx)(eZ,{palette:i}):t?(0,n.jsx)(ty,{palette:i}):(0,n.jsx)("p",{className:"p-4 text-sm text-text-tertiary",children:"Daemon 연결이 설정되지 않았습니다. Settings 에서 Base URL 을 입력하세요."})]})]})}function tw(){return(0,n.jsx)(a.Suspense,{fallback:(0,n.jsx)("p",{className:"p-4 text-sm",children:"편집기를 불러오는 중…"}),children:(0,n.jsx)(tj,{})})}},15579:(e,t,r)=>{Promise.resolve().then(r.bind(r,14539))},51215:(e,t,r)=>{"use strict";let n;r.d(t,{cY:()=>c,x8:()=>o});let a={debug:0,info:1,warn:2,error:3},l="/v1/debug-logs/batch",s=null;function o(e){s=e}class i{health(){return{pending:this.queue.length,consecutiveFailures:this.consecutiveFailures,lastOkAt:this.lastOkAt,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches}}push(e){if(!(a[function(e){let t=e.slice(e.lastIndexOf(".")+1).toLowerCase();return/^(error|exception|crash|fail|failed)$/.test(t)?"error":/^(warn|degraded|timeout)$/.test(t)?"warn":/^(boot|ready|start|begin|open|ok|done|resolve|end|stop|close)$/.test(t)?"info":"debug"}(e.category)]<a[this.minLevel])){if(this.queue.push(e),this.queue.length>500){let e=this.queue.length-500;this.droppedByCap+=e,this.queue.splice(0,e)}null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},100))}}async flush(){if(this.timer&&(clearTimeout(this.timer),this.timer=null),this.inFlight||0===this.queue.length)return;let e=this.queue.slice(0,100);this.inFlight=!0;let t=!1,r=JSON.stringify({records:e});try{var n,a;t=await (n=this.fetchFn(r),a=this.postTimeoutMs,new Promise((e,t)=>{let r=setTimeout(()=>t(Error("debug-forward timeout after ".concat(a,"ms"))),a);n.then(t=>{clearTimeout(r),e(t)},e=>{clearTimeout(r),t(e)})}))}catch(e){t=!1}finally{this.inFlight=!1}if(!t){if(this.consecutiveFailures+=1,this.consecutiveFailures>=2&&s)try{await s(JSON.stringify({records:[...e,this.blockedNotice()]}))&&(this.fallbackBatches+=1)}catch(e){}this.wasFailing=!0,this.scheduleRetry();return}let l=this.lastOkAt;this.lastOkAt=Date.now();let o=this.consecutiveFailures;this.consecutiveFailures=0,this.queue.splice(0,e.length),this.wasFailing&&(this.wasFailing=!1,this.queue.push({ts:new Date().toISOString(),category:"pwa.debug-forwarder.recovered",event:"recovered",data:{consecutiveFailures:o,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches,pending:this.queue.length,previousOkAt:l},source:{platform:"pwa"}})),this.queue.length>0&&null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},100))}scheduleRetry(){if(null!==this.timer||0===this.queue.length)return;let e=Math.min(100*2**this.consecutiveFailures,3e4);this.timer=setTimeout(()=>{this.flush()},e)}blockedNotice(){return{ts:new Date().toISOString(),category:"pwa.debug-forwarder.http-blocked",event:"http-blocked",data:{consecutiveFailures:this.consecutiveFailures,pending:this.queue.length,droppedByCap:this.droppedByCap,lastOkAt:this.lastOkAt,via:"acp-fallback"},source:{platform:"pwa"}}}beaconFlush(){if(0!==this.queue.length)try{if("undefined"!=typeof navigator&&"function"==typeof navigator.sendBeacon){let e=this.queue.slice(0,100),t=new Blob([JSON.stringify({records:e})],{type:"application/json"});navigator.sendBeacon(l,t)&&this.queue.splice(0,e.length)}}catch(e){}}get pending(){return this.queue.length}constructor(e=d,t="debug",r=1e4){this.fetchFn=e,this.minLevel=t,this.postTimeoutMs=r,this.queue=[],this.timer=null,this.inFlight=!1,this.consecutiveFailures=0,this.lastOkAt=null,this.droppedByCap=0,this.fallbackBatches=0,this.wasFailing=!1}}async function d(e){return(await fetch(l,{method:"POST",headers:{"content-type":"application/json"},body:e,keepalive:!0,..."undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout?{signal:AbortSignal.timeout(1e4)}:{}})).ok}function c(e,t){if("undefined"==typeof console)return;let r=new Date().toISOString();if(void 0!==t){let n="";try{let e=new WeakSet;n=JSON.stringify(t,(t,r)=>{if("bigint"==typeof r)return"".concat(r.toString(),"n");if("function"==typeof r)return"[fn ".concat(r.name||"anon","]");if(r&&"object"==typeof r){if(e.has(r))return"[circular]";e.add(r)}return r})}catch(e){n="[unserializable: ".concat(String(e),"]")}n&&n.length>800&&(n=n.slice(0,797)+"..."),console.debug("[".concat(r,"] ").concat(e," ").concat(n),t),u(r,e,n)}else console.debug("[".concat(r,"] ").concat(e)),u(r,e,void 0)}function u(e,t,r){let a,l=function(){if(void 0!==n)return n;let e=function(){try{let e="off"!==window.localStorage.getItem("elanous.pwa.debug.forward"),t=window.localStorage.getItem("elanous.pwa.debug.forwardLevel");return{forward:e,level:"info"===t||"warn"===t||"error"===t?t:"debug"}}catch(e){return{forward:!0,level:"debug"}}}();if(!e.forward)return n=null,null;let t=new i(d,e.level);try{window.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&t.beaconFlush()})}catch(e){}return n=t,t}();if(!l)return;let s=t.slice(t.lastIndexOf(".")+1)||t;if(void 0!==r&&""!==r)try{a=JSON.parse(r)}catch(e){a=r}l.push({ts:e,category:t,event:s,...void 0!==a?{data:a}:{},source:{platform:"pwa"}})}},67842:(e,t,r)=>{"use strict";r.d(t,{AF:()=>n});let n={all:["nexus"],health:()=>[...n.all,"health"],snapshot:()=>[...n.all,"snapshot"],tabs:e=>e?[...n.all,"tabs",{kind:e}]:[...n.all,"tabs"],tab:e=>[...n.all,"tab",e],templates:()=>[...n.all,"templates"],template:e=>[...n.all,"template",e],config:()=>[...n.all,"config"],switches:()=>[...n.all,"switches"],switch:e=>[...n.all,"switch",e],secrets:()=>[...n.all,"secrets"],bindingChannels:()=>[...n.all,"bindings","channels"],bindings:e=>[...n.all,"bindings",e],binding:(e,t)=>[...n.all,"binding",e,t],logsTail:(e,t)=>t?[...n.all,"logs",e,{lines:t}]:[...n.all,"logs",e],workflows:()=>[...n.all,"workflows"],workflow:e=>[...n.all,"workflow",e],workflowRun:e=>[...n.all,"workflow-run",e],workflowRuns:()=>[...n.all,"workflow-runs"],pendingApprovals:()=>[...n.all,"workflow-pending-approvals"],platforms:()=>[...n.all,"platforms"],providers:()=>[...n.all,"providers"],worktrees:()=>[...n.all,"worktrees"],designCheck:()=>[...n.all,"design-check"],designPreviews:()=>[...n.all,"design-previews"],designPreview:e=>[...n.all,"design-preview",e],registryCatalog:()=>[...n.all,"registry-catalog"],resolvedView:()=>[...n.all,"resolved-view"]};n.snapshot(),n.tabs(),n.health(),n.snapshot(),n.config(),n.switches()},75814:()=>{},91514:(e,t,r)=>{"use strict";r.d(t,{M1:()=>d,Qj:()=>c,tI:()=>i});var n=r(41121),a=r(91269),l=r(19855),s=r(24818);let o=(0,a.createContext)(null);function i(e){let{client:t,queryClient:r,defaultStaleTimeMs:i,children:d}=e,c=(0,a.useMemo)(()=>null!=r?r:new l.E({defaultOptions:{queries:{staleTime:null!=i?i:2e3,refetchOnWindowFocus:!1}}}),[r,i]);return(0,n.jsx)(o.Provider,{value:t,children:(0,n.jsx)(s.Ht,{client:c,children:d})})}function d(){let e=(0,a.useContext)(o);if(!e)throw Error("useNexusClient must be used within <NexusProvider>");return e}function c(){return(0,a.useContext)(o)}},91644:(e,t,r)=>{"use strict";r.d(t,{Qb:()=>s,SI:()=>i,dJ:()=>o});let n="elanous:auth-required",a=null,l=!1;function s(e){null===a&&(a=e,window.dispatchEvent(new CustomEvent(n,{detail:{path:e}})))}function o(e){let t=window,r=t=>e(t.detail);return t.addEventListener(n,r),null===a||l||e({path:a}),()=>t.removeEventListener(n,r)}function i(){l=!0}}},e=>{e.O(0,[9668,6987,920,6998,5609,2982,2375,5791,2367,6725,7358],()=>e(e.s=15579)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3787,6815,9492],{27559:()=>{}},_=>{_.O(0,[2367,6725,7358],()=>_(_.s=27559)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[131],{12775:(e,t,r)=>{"use strict";r.d(t,{K:()=>n}),r(91269);let n={emit:async function(e){return{ok:!1,reason:"not-configured"}}}},53220:(e,t,r)=>{"use strict";r.d(t,{V5:()=>s,tV:()=>i});var n=r(94387);class a extends Error{constructor(e,t,r){super(r||t),this.status=e,this.error=t,this.reason=r,this.name="MergeApprovalsApiError"}}function s(e,t){return e instanceof a?401===e.status||"unauthorized"===e.error?{text:"이 기기에 소유자 토큰이 없어 승인 목록을 못 읽었습니다 — 이미 연결된 기기의 설정 › Connect token 에서 토큰을 만들어, 이 기기의 설정 › Daemon › Bearer token 칸에 붙이면 바로 보입니다.",href:"/app/settings/#bearer-token"}:"gh-failed"===e.error?{text:"데몬이 GitHub 를 읽지 못했습니다(데몬 기계의 gh 로그인\xb7네트워크) — 잠시 뒤 다시 열어 보세요.".concat(e.reason?" 사유: ".concat(e.reason.split("\n")[0].slice(0,160)):"")}:"gh-invalid-response"===e.error?{text:"GitHub 응답을 해석하지 못했습니다 — 잠시 뒤 다시 열어 보세요."}:"approvals-repo-unknown"===e.error?{text:"승인할 저장소를 모릅니다 — 데몬 설정 intake.approvals.repo(예: owner/repo)를 채워 주세요.",href:"/app/settings/"}:e.reason?{text:e.reason}:{text:"".concat(t," (").concat(e.status," ").concat(e.error,")")}:e instanceof TypeError?{text:"데몬에 닿지 못했습니다 — 데몬이 켜져 있는지, 이 기기가 같은 네트워크(tailnet)에 있는지 확인하세요."}:{text:e instanceof Error&&e.message?e.message:t}}function i(e){var t,r;let s=null!=(t=e.fetchImpl)?t:fetch,i=(null!=(r=e.baseUrl)?r:"").replace(/\/+$/,"");async function o(t,r){let n={...r,headers:{"content-type":"application/json",...e.authHeader?{authorization:e.authHeader}:{}}},o=e.client?await e.client.fetchResponse(t,n):await s("".concat(i).concat(t),n),d=await o.json().catch(()=>null);if(!o.ok){var l;let e=d&&"object"==typeof d?d:{};throw new a(o.status,null!=(l=e.error)?l:"request-failed",e.reason)}return d}return{list:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"open";return o("merged"===e?"".concat(n.r5,"?state=merged"):n.r5)},get:e=>o("".concat(n.r5,"/").concat(e)),check:(e,t)=>o("".concat(n.r5,"/").concat(e,"/check"),{method:"POST",body:JSON.stringify({headSha:t})}),merge:(e,t)=>o("".concat(n.r5,"/").concat(e,"/merge"),{method:"POST",body:JSON.stringify({headSha:t})})}}},72030:(e,t,r)=>{"use strict";r.d(t,{$:()=>d});var n=r(41121),a=r(72524),s=r(49155),i=r(82157);let o=(0,s.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function d(e){let{className:t,variant:r="default",size:s="default",...d}=e;return(0,n.jsx)(a.$,{"data-slot":"button",className:(0,i.cn)(o({variant:r,size:s,className:t})),...d})}},82157:(e,t,r)=>{"use strict";r.d(t,{cn:()=>s});var n=r(3511),a=r(97043);function s(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,a.QP)((0,n.$)(t))}},88832:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var n=r(41121),a=r(45609),s=r.n(a),i=r(91269),o=r(38519),d=r(53220);function l(e){let{items:t}=e,r=t.filter(e=>"OPEN"===e.state&&!e.draft);if(0===r.length)return null;let a=r.slice(0,3);return(0,n.jsx)("div",{className:"mx-auto max-w-lg px-4 pt-4",children:(0,n.jsxs)("section",{"aria-label":"승인 대기",className:"rounded-lg border border-emerald-600/40 bg-emerald-500/10 p-3 text-sm",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,n.jsxs)("p",{className:"font-semibold",children:["흡수 아이디어 승인 대기 ",r.length,"건"]}),(0,n.jsx)(s(),{href:"/approvals",className:"rounded-md bg-emerald-700 px-3 py-1 text-white hover:bg-emerald-800",children:"Approvals 에서 보기 →"})]}),(0,n.jsxs)("ul",{className:"mt-2 space-y-1",children:[a.map(e=>(0,n.jsxs)("li",{className:"break-words",children:[(0,n.jsxs)(s(),{href:"/approvals?pr=".concat(e.number),className:"underline",children:["#",e.number]})," \xb7 ",e.title]},e.number)),r.length>a.length&&(0,n.jsxs)("li",{className:"text-muted-foreground",children:["외 ",r.length-a.length,"건"]})]})]})})}function c(){let{client:e}=(0,o.Q)(),t=(0,i.useMemo)(()=>(0,d.tV)({client:e}),[e]),[r,a]=(0,i.useState)([]);return(0,i.useEffect)(()=>{let e=!0;return t.list().then(t=>{let{items:r}=t;e&&a(r)}).catch(()=>{e&&a([])}),()=>{e=!1}},[t]),(0,n.jsx)(l,{items:r})}var u=r(60737);function p(){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(c,{}),(0,n.jsx)(u.SY,{})]})}},99472:(e,t,r)=>{Promise.resolve().then(r.bind(r,88832))}},e=>{e.O(0,[2977,216,6062,7990,8519,9651,2367,6725,7358],()=>e(e.s=99472)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{1167:(e,t,r)=>{"use strict";r.d(t,{AppShell:()=>eA});var n=r(41121),a=r(91269),s=r(45609),o=r.n(s),l=r(9050),i=r(72754),d=r(82157),c=r(11980),u=r(28725),m=r(50940),p=r(73334),h=r(67089),x=r(11635),f=r(91514),b=r(75791);function g(e){let{compact:t=!1}=e,r=(0,f.Qj)();return t||!r?null:(0,n.jsx)(v,{})}function v(){var e,t,r;let s=(0,b.mP)(),o=(0,b.XL)(),[l,i]=(0,a.useState)(""),[d,c]=(0,a.useState)(""),[u,h]=(0,a.useState)({kind:"idle"}),x=null!=(r=null==(e=s.data)?void 0:e.workflows)?r:[],f=l||(null==(t=x[0])?void 0:t.name)||"",g=async()=>{if(f){h({kind:"pending"});try{let e=await o.mutateAsync({name:f,args:d});h({kind:"started",runId:e.runId,name:f})}catch(e){h({kind:"error",message:e instanceof Error?e.message:"run failed to start"})}}},v=(0,a.useMemo)(()=>(function(e){let t=new Map;for(let n of e){var r;let e=null!=(r=t.get(n.source))?r:[];e.push(n),t.set(n.source,e)}let n=[];for(let e of y){let r=t.get(e);r&&0!==r.length&&(r.sort((e,t)=>e.name.localeCompare(t.name)),n.push({source:e,label:k[e],items:r}))}return n})(x),[x]);return(0,n.jsxs)("div",{"data-testid":"sidebar-workflow-invoker",className:"border-t border-sidebar-border px-3 py-2.5 space-y-1.5",children:[(0,n.jsx)("div",{className:"text-[10px] font-medium uppercase tracking-wider text-sidebar-foreground/60",children:"Run workflow"}),(0,n.jsxs)("select",{value:f,onChange:e=>i(e.target.value),disabled:s.isLoading||0===x.length,"aria-label":"Select workflow to run",className:"block w-full truncate rounded border border-border bg-surface px-1.5 py-1 text-[11px] focus:outline-none focus:ring-1 focus:ring-primary disabled:opacity-50",children:[0===x.length&&(0,n.jsx)("option",{value:"",children:s.isLoading?"loading…":"no workflows"}),v.map(e=>(0,n.jsx)("optgroup",{label:e.label,children:e.items.map(e=>(0,n.jsx)("option",{value:e.name,children:e.name},e.name))},e.source))]}),(0,n.jsx)("input",{type:"text",value:d,onChange:e=>c(e.target.value),placeholder:"args (optional)","aria-label":"Workflow arguments",className:"block w-full rounded border border-border bg-surface px-1.5 py-1 text-[11px] focus:outline-none focus:ring-1 focus:ring-primary"}),(0,n.jsxs)("button",{type:"button",onClick:g,disabled:!f||"pending"===u.kind,"data-testid":"sidebar-workflow-invoker-run",className:"flex w-full items-center justify-center gap-1 rounded bg-primary px-2 py-1 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:["pending"===u.kind?(0,n.jsx)(m.A,{className:"h-3 w-3 animate-spin"}):(0,n.jsx)(p.A,{className:"h-3 w-3"}),"Run"]}),(0,n.jsx)(w,{status:u})]})}function w(e){let{status:t}=e;return"idle"===t.kind||"pending"===t.kind?null:"error"===t.kind?(0,n.jsxs)("p",{"data-testid":"sidebar-workflow-invoker-error",className:"flex items-start gap-1 text-[10px] leading-tight text-error",children:[(0,n.jsx)(h.A,{className:"mt-0.5 h-3 w-3 shrink-0"}),(0,n.jsx)("span",{className:"break-all",children:t.message})]}):(0,n.jsxs)("p",{"data-testid":"sidebar-workflow-invoker-started",className:"flex items-start gap-1 text-[10px] leading-tight text-muted-foreground",children:[(0,n.jsx)(x.A,{className:"mt-0.5 h-3 w-3 shrink-0 text-green-600"}),(0,n.jsxs)("span",{className:"min-w-0 flex-1 truncate",children:["started ",(0,n.jsx)("span",{className:"font-mono",children:t.runId.slice(0,14)})," \xb7"," ",(0,n.jsx)(o(),{href:"/workflows",className:"underline",children:"view"})]})]})}let y=["project","global","builtin"],k={project:"Project",global:"Global",builtin:"Built-in"};var j=r(70765),N=r(38519),S=r(28288),E=r(51215),A=r(44130);function L(){var e;let{compact:t=!1,onNavigate:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=(0,a.useContext)(N.C),o=(0,l.useRouter)(),i=(0,l.usePathname)(),c=(0,l.useSearchParams)(),u=null!=(e=null==c?void 0:c.get("show"))?e:null,[m,p]=(0,a.useState)([]),[h,x]=(0,a.useState)(!1);(0,a.useEffect)(()=>{if(!s)return;let e=!1;return(async()=>{try{let{layouts:t,source:r}=await (0,S.i$)(s.client);if(e)return;(0,E.cY)("showroom.sidebar.list",{count:t.length,source:r}),p(t)}catch(t){if(e)return;(0,E.cY)("showroom.sidebar.list.error",{error:String(t)})}finally{e||x(!0)}})(),()=>{e=!0}},[s]),(0,a.useEffect)(()=>{if(!s)return;let e=e=>{(!e.key||e.key.startsWith("elanous.showroom"))&&(async()=>{try{let{layouts:e}=await (0,S.i$)(s.client);p(e)}catch(e){}})()};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[s]),(0,a.useEffect)(()=>{if(!s)return;let e=s.client.showroomLayoutsEventsUrl();if(!e)return;let t=e=>async()=>{if("hello"!==e){(0,E.cY)("showroom.sidebar.sse.event",{kind:e});try{let{layouts:e}=await (0,S.i$)(s.client);p(e)}catch(e){}}};return(0,A.BX)(e,{events:{hello:t("hello"),upsert:t("upsert"),remove:t("remove")},onError:()=>{},onConstructError:e=>(0,E.cY)("showroom.sidebar.sse.construct-error",{error:String(e)})})},[s]);let f=(0,a.useCallback)(e=>{(0,E.cY)("showroom.sidebar.switch",{name:e}),o.push("/showroom?show=".concat(encodeURIComponent(e))),null==r||r()},[o,r]);return t||!s?null:(0,n.jsxs)("div",{className:"border-t border-sidebar-border/40 px-2 py-3","data-testid":"showroom-sidebar-section",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between px-1 pb-1",children:[(0,n.jsx)("span",{className:"text-[10px] font-medium uppercase tracking-wide text-sidebar-foreground/50",children:"Showrooms"}),(0,n.jsx)("span",{className:"text-[10px] text-sidebar-foreground/40",children:m.length})]}),!h&&0===m.length&&(0,n.jsx)("div",{className:"px-2 py-1 text-[11px] text-sidebar-foreground/40","data-testid":"showroom-sidebar-loading",children:"loading…"}),h&&0===m.length&&(0,n.jsxs)("div",{className:"px-2 py-1 text-[11px] leading-snug text-sidebar-foreground/50","data-testid":"showroom-sidebar-empty",children:["Save a layout in ",(0,n.jsx)("span",{className:"font-medium",children:"/showroom"})," to populate this rail."]}),m.length>0&&(0,n.jsxs)("ul",{className:"space-y-0.5",children:[m.slice(0,8).map(e=>{var t;let r=(t=e.name,!!i&&"/showroom"===i.replace(/\/+$/,"")&&!!u&&u===t);return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>f(e.name),"data-testid":"showroom-sidebar-item-".concat(e.name),className:(0,d.cn)("flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-[12px] transition-colors",r?"bg-primary/15 text-foreground font-semibold ring-1 ring-primary/40":"text-sidebar-foreground/75 hover:bg-sidebar-accent hover:text-sidebar-foreground"),"aria-current":r?"true":void 0,title:"".concat(e.name," — ").concat(e.panels.length," panels"),children:[(0,n.jsx)(j.A,{className:(0,d.cn)("size-3 shrink-0",r?"text-primary":"text-current"),"aria-hidden":!0}),(0,n.jsx)("span",{className:"flex-1 truncate",children:e.name}),(0,n.jsx)("span",{className:"shrink-0 text-[10px] text-sidebar-foreground/40",children:e.panels.length})]})},e.name)}),m.length>8&&(0,n.jsxs)("li",{className:"px-2 py-1 text-[10px] text-sidebar-foreground/40","data-testid":"showroom-sidebar-truncated",children:["+ ",m.length-8," more (open Showroom to browse)"]})]})]})}let C=c.Ue;function I(){let{onNavigate:e,onClose:t,compact:r=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=(0,l.usePathname)(),m=(0,l.useRouter)(),p=function(e){if(!e)return"/";let t=e.replace(/\/+$/,"");return""===t?"/":t}(null!=s?s:"/"),[h,x]=(0,a.useState)({showLabs:!1,showHidden:!1});(0,a.useEffect)(()=>{let e=()=>x({showLabs:(0,u.fG)(c.f4),showHidden:(0,u.fG)(c.vm)});return e(),window.addEventListener(u.OY,e),window.addEventListener("storage",e),()=>{window.removeEventListener(u.OY,e),window.removeEventListener("storage",e)}},[]);let f=(0,c.Ye)(C,h),b=t=>{var a;let s="/"===t.href?"/"===p:p===t.href||p.startsWith(t.href+"/")||(null!=(a=t.activeAlso)?a:[]).some(e=>p===e||p.startsWith(e+"/")),l=t.icon;return(0,n.jsxs)("li",{className:"group/nav relative",children:[(0,n.jsxs)(o(),{href:t.href,"aria-current":s?"page":void 0,onClick:r=>{var n,a;n=t,a=r,null!==n.kind&&(a.metaKey||a.ctrlKey||a.shiftKey||a.altKey||(a.preventDefault(),m.push("/workspace?intent=".concat(n.kind)),null==e||e())),r.defaultPrevented||null==e||e()},title:r?"".concat(t.label," — ").concat(t.hint):t.hint,"aria-label":"".concat(t.label," — ").concat(t.hint),className:(0,d.cn)("flex items-center rounded-md text-sm transition-colors",r?"justify-center px-1.5 py-2":"gap-3 px-3 py-2",s?"bg-primary/15 text-foreground font-semibold ring-1 ring-primary/40":"text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-foreground"),children:[(0,n.jsx)(l,{className:(0,d.cn)("h-4 w-4 shrink-0",s?"text-primary":"text-current")}),!r&&t.label,!r&&s&&(0,n.jsx)("span",{className:"ml-auto h-1.5 w-1.5 rounded-full bg-primary","aria-hidden":!0})]}),r&&(0,n.jsxs)("span",{role:"tooltip",className:"pointer-events-none absolute left-full top-1/2 z-50 ml-2 -translate-y-1/2 whitespace-nowrap rounded-md border border-border bg-popover px-2 py-1 text-[11px] text-popover-foreground opacity-0 shadow-md transition-opacity group-hover/nav:opacity-100 [@media(pointer:coarse)]:hidden",children:[(0,n.jsx)("span",{className:"font-medium",children:t.label}),(0,n.jsxs)("span",{className:"ml-1 text-muted-foreground",children:["— ",t.hint]})]})]},t.href)};return(0,n.jsxs)("nav",{className:"flex h-full flex-col",children:[t&&!r&&(0,n.jsxs)("div",{className:"flex items-center justify-between px-3 pt-3 pb-1",children:[(0,n.jsx)("span",{className:"text-[10px] font-medium uppercase tracking-wide text-sidebar-foreground/50",children:"menu"}),(0,n.jsx)("button",{type:"button",onClick:t,"aria-label":"close menu",title:"close menu",className:"rounded-md p-1.5 text-sidebar-foreground/60 hover:bg-sidebar-accent hover:text-sidebar-foreground",children:(0,n.jsx)(i.A,{className:"h-4 w-4"})})]}),(0,n.jsx)("ul",{className:(0,d.cn)("flex-1 space-y-1",r?"px-1 py-2":"px-2 py-3"),children:f.main.map(b)}),f.labs.length>0&&(0,n.jsx)(P,{label:"Labs",compact:r,children:f.labs.map(b)}),f.hidden.length>0&&(0,n.jsx)(P,{label:"Hidden",compact:r,children:f.hidden.map(b)}),h.showLabs&&(0,n.jsx)(a.Suspense,{fallback:null,children:(0,n.jsx)(L,{compact:r,onNavigate:e})}),h.showLabs&&(0,n.jsx)(g,{compact:r})]})}function P(e){let{label:t,compact:r,children:a}=e;return(0,n.jsxs)("div",{className:(0,d.cn)("border-t border-sidebar-border",r?"px-1 py-2":"px-2 py-2"),children:[!r&&(0,n.jsx)("span",{className:"px-3 text-[10px] font-medium uppercase tracking-wide text-sidebar-foreground/50",children:t}),(0,n.jsx)("ul",{className:"mt-1 space-y-1",children:a})]})}var Y=r(24721),M=r(82823),R=r(31159),z=r(95515),T=r(40148),O=r(94936),F=r(66062),B=r(42859),D=r(87216),U=r(50635),q=r(34881),W=r(84081),H=r(2961),$=r(30422),_=r(48619),G=r(65032),K=r(85576);let Q=[{kind:"chat",label:"chat",icon:B.A},{kind:"term",label:"terminal",icon:D.A},{kind:"intake",label:"intake",icon:U.A},{kind:"tasks",label:"tasks",icon:q.A},{kind:"control",label:"control",icon:H.A},{kind:"settings",label:"settings",icon:R.A}];function J(){let e=(0,_.hA)(),{addTab:t,activateOrAdd:r}=e,[s,o]=(0,a.useState)(!1),[l,i]=(0,a.useState)({top:0,left:0}),d=(0,a.useRef)(null),c=(0,a.useRef)(null);return(0,a.useLayoutEffect)(()=>{var e;if(!s)return;let t=null==(e=d.current)?void 0:e.getBoundingClientRect();t&&i({top:t.bottom+4,left:t.left})},[s]),(0,a.useEffect)(()=>{if(!s)return;let e=e=>{var t,r;let n=e.target;(null==(t=d.current)||!t.contains(n))&&(null!=(r=c.current)&&r.contains(n)||o(!1))};document.addEventListener("mousedown",e);let t=e=>{"Escape"===e.key&&o(!1)};document.addEventListener("keydown",t);let r=()=>o(!1);return window.addEventListener("scroll",r,!0),window.addEventListener("resize",r),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t),window.removeEventListener("scroll",r,!0),window.removeEventListener("resize",r)}},[s]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{ref:d,type:"button","aria-label":"add tab",title:"새 탭 (+)",onClick:()=>o(e=>!e),className:"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-secondary hover:text-foreground",children:(0,n.jsx)(K.A,{className:"h-4 w-4"})}),s&&"undefined"!=typeof document&&(0,G.createPortal)((0,n.jsx)("div",{ref:c,role:"menu",style:{position:"fixed",top:l.top,left:l.left,zIndex:100},className:"w-44 rounded-md border border-border bg-popover py-1 shadow-md",children:Q.map(t=>{let a=t.icon;return(0,n.jsxs)("button",{type:"button",role:"menuitem",onClick:()=>{var n;"chat"===(n=t.kind)?e.openPicker({kind:"addNewChat"}):r(n),o(!1)},className:"flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm hover:bg-secondary",children:[(0,n.jsx)(a,{className:"h-4 w-4 text-muted-foreground"}),(0,n.jsx)("span",{className:"flex-1",children:t.label})]},t.kind)})}),document.body)]})}var X=r(41431);let V={chat:B.A,term:D.A,intake:U.A,tasks:q.A,workflows:W.A,control:H.A,settings:R.A};function Z(e){let{open:t,onClose:r}=e,{state:s,activateTab:o,closeTab:l}=(0,_.hA)(),c=(0,X.ub)(s),u=(0,a.useRef)(null);if((0,a.useEffect)(()=>{if(!t)return;let e=e=>{"Escape"===e.key&&r()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[t,r]),!t)return null;let m=new Map,p=0;for(let e of c)"chat"===e.kind&&(p+=1,m.set(e.id,p));return(0,n.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":"탭 전환",className:"fixed inset-0 z-50 flex flex-col bg-background",children:[(0,n.jsxs)("div",{className:"flex h-9 shrink-0 items-center justify-between border-b border-border px-3",children:[(0,n.jsx)("h2",{className:"text-sm font-medium",children:"탭 전환"}),(0,n.jsx)("button",{type:"button","aria-label":"close",onClick:r,className:"rounded-md p-1 text-muted-foreground hover:bg-secondary hover:text-foreground",children:(0,n.jsx)(i.A,{className:"h-4 w-4"})})]}),(0,n.jsxs)("div",{ref:u,className:"flex-1 overflow-y-auto p-3 space-y-2",children:[0===c.length&&(0,n.jsx)("p",{className:"text-center text-sm text-muted-foreground py-6",children:"아직 탭이 없습니다."}),c.map(e=>{var t,a;let c=V[e.kind],u=s.activeId===e.id,p="chat"===e.kind&&null!=(t=m.get(e.id))?t:0,h="chat"===e.kind?null!=(a=e.title)?a:"chat#".concat(p):"term"===e.kind?"terminal":"tasks"===e.kind?"tasks":e.kind;return(0,n.jsxs)("div",{className:(0,d.cn)("flex items-center gap-3 rounded-lg border px-3 py-3 text-sm transition-colors",u?"border-primary bg-primary/10":"border-border bg-card hover:bg-secondary"),children:[(0,n.jsx)("span",{className:(0,d.cn)("inline-flex h-2 w-2 shrink-0 rounded-full",u?"bg-primary":"bg-muted-foreground/30"),"aria-hidden":!0}),(0,n.jsx)(c,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),(0,n.jsx)("button",{type:"button",onClick:()=>{o(e.id),r()},className:"flex-1 truncate text-left",children:h}),(0,n.jsx)("button",{type:"button","aria-label":"close ".concat(h),onClick:t=>{t.stopPropagation(),l(e.id)},className:"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-background hover:text-foreground",children:(0,n.jsx)(i.A,{className:"h-3.5 w-3.5"})})]},e.id)})]})]})}let ee={chat:B.A,term:D.A,intake:U.A,tasks:q.A,workflows:W.A,control:H.A,settings:R.A};function et(e,t){var r;return"chat"===e.kind?null!=(r=e.title)?r:"chat#".concat(t):"term"===e.kind?"terminal":e.kind}function er(){var e;let t=(0,_.tg)(),[r,s]=(0,a.useState)(!1);if(!t)return null;let o=(0,X.ub)(t.state);if(0===o.length)return null;let l=new Map,c=0;for(let e of o)"chat"===e.kind&&(c+=1,l.set(e.id,c));let u=o.find(e=>e.id===t.state.activeId),m=(null==u?void 0:u.kind)==="chat"&&null!=(e=l.get(u.id))?e:0,p=Math.max(0,o.length-!!u);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{role:"tablist","aria-label":"workspace tabs","data-elanous-component":"topbar-workspace-strip",className:"hidden sm:flex min-w-0 flex-1 items-center gap-1 overflow-x-auto px-1",children:[o.map(e=>{var r;let a=ee[e.kind],s=t.state.activeId===e.id,o="chat"===e.kind&&null!=(r=l.get(e.id))?r:0,c=et(e,o);return(0,n.jsxs)("div",{role:"tab","aria-selected":s,onClick:()=>t.activateTab(e.id),className:(0,d.cn)("group flex shrink-0 items-center gap-1 rounded-md px-1.5 py-0.5 text-[11px] font-medium transition-colors cursor-pointer",s?"bg-primary/15 text-foreground ring-1 ring-primary/40":"text-muted-foreground hover:bg-secondary hover:text-foreground"),children:[(0,n.jsx)(a,{className:"h-3 w-3 shrink-0"}),(0,n.jsx)("span",{className:"max-w-[120px] truncate",children:c}),(0,n.jsx)("button",{type:"button","aria-label":"close ".concat(c),onClick:r=>{r.stopPropagation(),t.closeTab(e.id)},className:"ml-0.5 inline-flex h-3.5 w-3.5 items-center justify-center rounded text-muted-foreground/60 opacity-0 transition-opacity hover:bg-background hover:text-foreground group-hover:opacity-100 data-[active=true]:opacity-100","data-active":s?"true":"false",children:(0,n.jsx)(i.A,{className:"h-2.5 w-2.5"})})]},e.id)}),(0,n.jsx)(J,{})]}),(0,n.jsxs)("div",{role:"tablist","aria-label":"workspace tabs (compact)","data-elanous-component":"topbar-workspace-strip-mobile",className:"flex sm:hidden min-w-0 flex-1 items-center gap-1 px-1",children:[u&&(0,n.jsxs)("div",{className:"flex flex-1 min-w-0 items-center gap-1 rounded-md bg-primary/15 px-1.5 py-0.5 text-[11px] font-medium ring-1 ring-primary/40",children:[(()=>{let e=ee[u.kind];return(0,n.jsx)(e,{className:"h-3 w-3 shrink-0"})})(),(0,n.jsx)("span",{className:"flex-1 truncate",children:et(u,m)}),(0,n.jsx)("button",{type:"button","aria-label":"close",onClick:()=>t.closeTab(u.id),className:"inline-flex h-3.5 w-3.5 items-center justify-center rounded hover:bg-background",children:(0,n.jsx)(i.A,{className:"h-2.5 w-2.5"})})]}),p>0&&(0,n.jsxs)("button",{type:"button","aria-label":"other tabs (".concat(p,")"),onClick:()=>s(!0),className:"inline-flex h-6 shrink-0 items-center gap-0.5 rounded-md px-1.5 text-[11px] text-muted-foreground hover:bg-secondary hover:text-foreground",children:[(0,n.jsx)($.A,{className:"h-3 w-3"}),(0,n.jsx)("span",{children:p})]}),(0,n.jsx)(J,{})]}),(0,n.jsx)(Z,{open:r,onClose:()=>s(!1)})]})}var en=r(28211),ea=r(38067);function es(e){return(null==e?void 0:e.kind)==="progress"&&"running"===e.status?3:(null==e?void 0:e.kind)==="progress"?2:1}function eo(e){var t,r;if("loading"===e.status)return{kind:"loading"};if("error"===e.status)return{kind:"error",message:e.message||"Failed to load activity"};let n=null!=(t=e.subjects)?t:[],a=(0,en.vq)(n,(0,ea.gA)(null!=(r=e.logs)?r:[])),s=function(e,t){var r,n;let a=e.filter(e=>"live"===(0,en.t_)(e));if(0===a.length)return null;let s=[...a].sort((e,r)=>{let n=es(t.get(r.id))-es(t.get(e.id));return 0!==n?n:(e.runId||e.id).localeCompare(r.runId||r.id)})[0];return{run:(r=t.get(s.id),{subjectId:s.id,runId:s.runId||s.id,origin:s.origin,progressLine:(null==r?void 0:r.kind)==="progress"?r.line:null,progressStatus:(null==r?void 0:r.kind)==="progress"?r.status:null,href:(n=s.id,"/observatory#".concat(encodeURIComponent(n)))}),extraLiveCount:a.length-1}}(n,a);return s?{kind:"active",run:s.run,extraLiveCount:s.extraLiveCount}:{kind:"quiet"}}function el(e){let{snapshot:t}=e;if("quiet"===t.kind||"loading"===t.kind)return null;if("error"===t.kind)return(0,n.jsx)("span",{role:"alert","data-elanous-component":"topbar-activity","data-activity-kind":"error",title:t.message,className:"max-w-[9rem] shrink-0 truncate rounded px-1.5 py-0.5 text-[10px] text-rose-500 sm:max-w-[16rem]",children:"activity error"});let r=function(e){let{run:t,extraLiveCount:r}=e,n=["LIVE ".concat(t.runId),"origin: ".concat(t.origin)];return t.progressStatus&&t.progressLine&&n.push("".concat(t.progressStatus," — ").concat(t.progressLine)),r>0&&n.push("+".concat(r," more")),n.join(" \xb7 ")}(t);return(0,n.jsxs)(o(),{href:t.run.href,"aria-label":r,title:r,"data-elanous-component":"topbar-activity","data-activity-kind":"active","data-run-id":t.run.runId,className:"flex min-w-0 max-w-[7.5rem] shrink items-center gap-1 rounded-md px-1.5 py-0.5 text-[10px] font-medium text-emerald-600 hover:bg-accent sm:max-w-[18rem]",children:[(0,n.jsx)("span",{className:"h-1.5 w-1.5 shrink-0 rounded-full bg-emerald-500","aria-hidden":!0}),(0,n.jsx)("span",{className:"hidden uppercase tracking-wide sm:inline",children:"LIVE"}),(0,n.jsx)("span",{className:"min-w-0 truncate",children:t.run.runId}),t.run.progressLine&&(0,n.jsx)("span",{className:"hidden min-w-0 truncate text-muted-foreground md:inline",children:t.run.progressLine}),t.extraLiveCount>0&&(0,n.jsxs)("span",{className:"shrink-0 text-muted-foreground",children:["+",t.extraLiveCount]})]})}let ei="elanous.pwa.wakeLockOn";function ed(e){let{onToggleSidebar:t,sidebarOpen:r,activity:s}=e,{sessionId:l,config:c}=(0,N.Q)(),{theme:u,setTheme:m}=(0,O.D)(),[p,h]=(0,a.useState)(!1),[x,f]=(0,a.useState)(!1),b=(0,a.useRef)(null),g=function(e){let[t,r]=(0,a.useState)({supported:"undefined"!=typeof navigator&&"wakeLock"in navigator,held:!1,error:null}),n=(0,a.useRef)(null),s=(0,a.useRef)(e);return s.current=e,(0,a.useEffect)(()=>{if("undefined"==typeof navigator)return;let t=navigator.wakeLock;if(!t)return void r(e=>({...e,supported:!1}));let a=async()=>{if(s.current&&(!n.current||n.current.released))try{let e=await t.request("screen");n.current=e,r({supported:!0,held:!0,error:null}),(0,E.cY)("webterm.wake-lock.acquired"),e.addEventListener("release",()=>{n.current=null,r(e=>({...e,held:!1})),(0,E.cY)("webterm.wake-lock.auto-released")})}catch(t){let e=t instanceof Error?t.message:String(t);r({supported:!0,held:!1,error:e}),(0,E.cY)("webterm.wake-lock.acquire-failed",{reason:e})}},o=async()=>{let e=n.current;if(e&&!e.released){try{await e.release(),(0,E.cY)("webterm.wake-lock.released")}catch(e){}n.current=null,r(e=>({...e,held:!1}))}};e?a():o();let l=()=>{"visible"===document.visibilityState&&s.current&&a()};return document.addEventListener("visibilitychange",l),()=>{document.removeEventListener("visibilitychange",l),o()}},[e]),t}(x);(0,a.useEffect)(()=>{"1"===window.localStorage.getItem(ei)&&f(!0)},[]),(0,a.useEffect)(()=>{if(!p)return;let e=e=>{b.current&&(b.current.contains(e.target)||h(!1))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[p]);let v=async()=>{if(l)try{await navigator.clipboard.writeText(l),F.oR.success("Session id copied"),(0,E.cY)("pwa.topbar.session-copy",{sessionId:l})}catch(e){F.oR.error("Copy failed"),(0,E.cY)("pwa.topbar.session-copy-error",{err:String(e)})}};return(0,n.jsxs)("header",{className:"flex h-9 shrink-0 items-center gap-1 border-b border-border bg-background px-2 text-xs",children:[(0,n.jsxs)("button",{type:"button",onClick:t,"aria-label":r?"close menu":"open menu",title:r?"close menu":"open menu",className:"flex shrink-0 items-center gap-1.5 rounded-md p-2 text-muted-foreground hover:bg-accent hover:text-foreground",children:[r?(0,n.jsx)(i.A,{className:"h-4 w-4"}):(0,n.jsx)(Y.A,{className:"h-4 w-4"}),(0,n.jsx)("span",{className:"hidden text-[11px] font-medium leading-none sm:inline",children:r?"닫기":"메뉴"})]}),(0,n.jsx)(er,{}),s&&(0,n.jsx)(el,{snapshot:s}),(0,n.jsxs)("div",{className:"ml-auto flex items-center gap-1",children:[(0,n.jsx)(o(),{href:"/","aria-label":"voice",title:"voice (HTTPS Tailscale Serve 필요)",className:"rounded-md p-1.5 text-muted-foreground hover:bg-accent hover:text-foreground",onClick:()=>(0,E.cY)("pwa.topbar.voice-link"),children:(0,n.jsx)(M.A,{className:"h-4 w-4"})}),(0,n.jsxs)("div",{ref:b,className:"relative",children:[(0,n.jsx)("button",{type:"button",onClick:()=>h(e=>!e),"aria-label":"settings",title:"session ".concat(l?l.slice(0,8):"—"," \xb7 theme ").concat(u),className:(0,d.cn)("rounded-md p-1.5 hover:bg-accent",p?"bg-accent text-foreground":"text-muted-foreground hover:text-foreground"),children:(0,n.jsx)(R.A,{className:"h-4 w-4"})}),p&&(0,n.jsxs)("div",{className:"absolute right-0 top-full z-50 mt-1 min-w-[240px] rounded-md border border-border bg-popover p-2 shadow-md",children:[(0,n.jsxs)("div",{className:"mb-2 border-b border-border pb-2",children:[(0,n.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-muted-foreground",children:"session"}),(0,n.jsxs)("button",{type:"button",onClick:v,className:"flex w-full items-center justify-between rounded border border-border bg-card px-2 py-1 font-mono text-[11px] hover:bg-secondary",title:"click to copy",children:[(0,n.jsx)("span",{className:"truncate",children:l||"— (not connected)"}),(0,n.jsx)(z.A,{className:"ml-2 h-3 w-3 shrink-0"})]}),c.provider&&(0,n.jsxs)("div",{className:"mt-1 text-[11px] text-muted-foreground",children:["provider: ",(0,n.jsx)("span",{className:"font-medium text-foreground",children:c.provider})]})]}),g.supported&&(0,n.jsxs)("div",{className:"mb-2 border-b border-border pb-2",children:[(0,n.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-muted-foreground",children:"screen"}),(0,n.jsxs)("button",{type:"button",onClick:()=>{f(e=>{let t=!e;return window.localStorage.setItem(ei,t?"1":"0"),(0,E.cY)("pwa.topbar.wake-lock.toggle",{next:t}),t})},className:(0,d.cn)("flex w-full items-center justify-between rounded-sm px-2 py-1 text-xs hover:bg-accent",x&&"bg-accent text-accent-foreground"),title:x?"화면 깨움 해제":"화면 깨움 유지",children:[(0,n.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,n.jsx)(T.A,{className:(0,d.cn)("h-3.5 w-3.5",x&&"text-amber-500"),"aria-hidden":!0}),"Wake Lock"]}),(0,n.jsx)("span",{className:"text-[10px] text-muted-foreground",children:g.held?"held":x?"requested":"off"})]}),g.error&&(0,n.jsx)("p",{className:"mt-1 truncate text-[10px] text-rose-500",title:g.error,children:g.error})]}),(0,n.jsxs)("div",{className:"mb-1",children:[(0,n.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-muted-foreground",children:"theme"}),(0,n.jsx)("ul",{className:"max-h-56 overflow-auto",children:O.z.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",className:(0,d.cn)("flex w-full items-center justify-between rounded-sm px-2 py-1 text-xs hover:bg-accent",e===u&&"bg-accent text-accent-foreground"),onClick:()=>{m(e),(0,E.cY)("pwa.topbar.theme",{theme:e})},children:[(0,n.jsx)("span",{className:"truncate",children:e}),e===u&&(0,n.jsx)("span",{className:"ml-2 text-[10px]",children:"✓"})]})},e))})]}),(0,n.jsx)("div",{className:"mt-2 border-t border-border pt-2",children:(0,n.jsx)(o(),{href:"/settings",className:"block rounded px-2 py-1 text-[11px] text-muted-foreground hover:bg-accent hover:text-foreground",onClick:()=>h(!1),children:"full settings →"})})]})]})]})]})}let ec=new(r(45012)).ki({baseUrl:"",token:"",provider:""});async function eu(){var e,t,r,n;let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=null!=(e=a.fetchImpl)?e:globalThis.fetch,o=null!=(t=a.listProgressFrames)?t:()=>ec.listProgressFrames().catch(()=>null);try{let[e,t]=await Promise.all([s("/v1/terminals").then(async e=>{if(!e.ok)throw Error("GET /v1/terminals failed (".concat(e.status,")"));return e.json()}),o()]);return eo({status:"ready",subjects:null!=(r=e.subjects)?r:[],logs:null!=(n=null==t?void 0:t.logs)?n:[]})}catch(e){return eo({status:"error",message:e instanceof Error?e.message:"Failed to load activity"})}}var em=r(78316),ep=r(69935);let eh="elanous.pwa.installBanner.dismissedAt";function ex(){let e=!0===window.navigator.standalone,t=!1;try{var r,n,a;t=(null==(n=(a=window).matchMedia)||null==(r=n.call(a,"(display-mode: standalone)"))?void 0:r.matches)===!0}catch(e){}return e||t}function ef(){try{return window.localStorage}catch(e){return null}}function eb(){let e=ef();if(!e)return null;let t=e.getItem(eh);if(null===t)return null;let r=Number(t);return Number.isFinite(r)?r:null}function eg(e){let t=ef();if(t)try{t.setItem(eh,String(e))}catch(e){}}function ev(e){return e.standalone?{show:!1,reason:"standalone"}:"unsupported"===e.platform?{show:!1,reason:"unsupported"}:null!==e.dismissedAt&&e.now-e.dismissedAt<6048e5?{show:!1,reason:"recently-dismissed"}:{show:!0,reason:"show"}}function ew(){let[e,t]=(0,a.useState)(!1),[r,s]=(0,a.useState)("unsupported"),[o,l]=(0,a.useState)(null);(0,a.useEffect)(()=>{let e=e=>{e.preventDefault(),l(e),s("beforeInstallPromptCapable");let r=ev({now:Date.now(),standalone:ex(),platform:"beforeInstallPromptCapable",dismissedAt:eb()});r.show&&t(!0),(0,E.cY)("pwa.install-banner.beforeinstallprompt",{decision:r})};window.addEventListener("beforeinstallprompt",e);let r=function(e,t){if(t)return"beforeInstallPromptCapable";if("string"!=typeof e||0===e.length)return"unsupported";let r=/iPad|iPhone|iPod/.test(e),n=/Safari/.test(e)&&!/CriOS|FxiOS|EdgiOS/.test(e);return r&&n?"iosSafari":"unsupported"}(navigator.userAgent,!1);s(r);let n=ev({now:Date.now(),standalone:ex(),platform:r,dismissedAt:eb()});n.show&&t(!0),(0,E.cY)("pwa.install-banner.mount",{platform:r,decision:n});let a=()=>{t(!1),(0,E.cY)("pwa.install-banner.appinstalled")};return window.addEventListener("appinstalled",a),()=>{window.removeEventListener("beforeinstallprompt",e),window.removeEventListener("appinstalled",a)}},[]);let d=async()=>{if(o)try{await o.prompt();let e=await o.userChoice;(0,E.cY)("pwa.install-banner.userChoice",{outcome:e.outcome}),"dismissed"===e.outcome&&(eg(Date.now()),t(!1))}catch(e){(0,E.cY)("pwa.install-banner.prompt-error",{reason:String(e)})}finally{l(null)}};return e?(0,n.jsx)("div",{role:"dialog","aria-label":"Install elanous to home screen","data-testid":"install-banner",className:"fixed inset-x-0 bottom-0 z-30 border-t border-border bg-card/95 px-4 py-3 shadow-lg backdrop-blur",children:(0,n.jsxs)("div",{className:"mx-auto flex max-w-2xl items-start gap-3",children:[(0,n.jsx)("div",{className:"mt-0.5 inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-primary/30 bg-primary/10 text-primary",children:(0,n.jsx)(em.A,{className:"h-4 w-4"})}),(0,n.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,n.jsx)("p",{className:"text-sm font-medium",children:"elanous 를 홈 화면에 추가하세요"}),"iosSafari"===r?(0,n.jsxs)("p",{className:"mt-1 text-[12px] leading-relaxed text-muted-foreground",children:[(0,n.jsx)(ep.A,{className:"inline-block h-3.5 w-3.5 align-text-bottom"})," 공유 버튼 →",(0,n.jsx)("span",{className:"mx-1 rounded bg-muted px-1 font-mono text-[11px]",children:"홈 화면에 추가"}),"로 PWA 로 사용. 알림 \xb7 카메라 \xb7 백그라운드 모두 활성화."]}):(0,n.jsx)("p",{className:"mt-1 text-[12px] leading-relaxed text-muted-foreground",children:"한 번의 클릭으로 PWA 설치 — 알림 \xb7 백그라운드 turn 보장."})]}),(0,n.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:["beforeInstallPromptCapable"===r&&o&&(0,n.jsx)("button",{type:"button",onClick:()=>{d()},className:"rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90","data-testid":"install-banner-install",children:"설치"}),(0,n.jsx)("button",{type:"button",onClick:()=>{t(!1),eg(Date.now()),(0,E.cY)("pwa.install-banner.dismiss")},"aria-label":"dismiss install banner","data-testid":"install-banner-dismiss",className:"inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground",children:(0,n.jsx)(i.A,{className:"h-4 w-4"})})]})]})}):null}var ey=r(97338),ek=r(9395);function ej(){let e=(0,l.usePathname)(),t=(0,ey._r)(),r=null==e||t.isError||t.isPending||t.isLoading?null:(0,ek.C)(t.data,e);return r?(0,n.jsxs)("div",{role:"status","data-testid":"setup-mode-banner",className:"flex items-center justify-between gap-3 border-b border-border bg-muted px-3 py-1.5 text-xs text-foreground",children:[(0,n.jsx)("span",{children:r}),(0,n.jsx)(o(),{href:"/setup",className:"shrink-0 font-semibold underline underline-offset-2",children:"/setup"})]}):null}var eN=r(91644);function eS(){let[e,t]=(0,a.useState)(!1);return((0,a.useEffect)(()=>(0,eN.dJ)(()=>t(!0)),[]),e)?(0,n.jsxs)("div",{role:"alert","data-testid":"auth-required-banner",className:"flex items-center justify-between gap-3 border-b border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-foreground",children:[(0,n.jsx)("span",{children:"이 기기는 아직 데몬에 연결되지 않았습니다(인증 필요). 연결된 기기의 설정 › Connect token (other devices) 에서 토큰을 만들어, 이 기기의 설정 › Daemon › Bearer token 에 붙여넣으세요."}),(0,n.jsx)(o(),{href:"/settings",className:"shrink-0 font-semibold underline underline-offset-2",children:"/settings"}),(0,n.jsx)("button",{type:"button","aria-label":"연결 안내 닫기",onClick:()=>{(0,eN.SI)(),t(!1)},className:"shrink-0 rounded px-2 py-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring",children:"닫기"})]}):null}let eE="elanous.pwa.sidebarOpen";function eA(e){let{children:t,activity:r}=e,[s,o]=(0,a.useState)(!1),i=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:8e3,[r,n]=(0,a.useState)({kind:"loading"});return(0,a.useEffect)(()=>(function(e){let t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:8e3,a=!1,s=async()=>{let o=await eu(r);a||(e(o),t=setTimeout(()=>{s()},n))};return s(),()=>{a=!0,void 0!==t&&clearTimeout(t)}})(n,e,t),[e.fetchImpl,e.listProgressFrames,t]),r}(),d=(0,l.usePathname)(),u=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=function(e,t,r,n){var a;let s=function(e,t){var r,n;let a=(null!=(r=e.split(/[?#]/)[0])?r:"/").replace(/\/+$/,"")||"/",s=null;for(let e of t){let t=e.href.split("?")[0].replace(/\/+$/,"")||"/";("/"===t?"/"===a:a===t||a.startsWith("".concat(t,"/")))&&(!s||t.length>s.href.length)&&(s={...e,href:t})}return s?{tab:s.href,visibility:null!=(n=s.visibility)?n:"public"}:{tab:"other",visibility:"other"}}(t,n);return e&&e.tab===s.tab?null:{record:{tab:s.tab,visibility:s.visibility,from:null!=(a=null==e?void 0:e.tab)?a:null,dwellMs:e?Math.max(0,r-e.at):null},next:{tab:s.tab,at:r}}}(u.current,null!=d?d:"/",Date.now(),c.Ue);e&&(u.current=e.next,(0,E.cY)("pwa.nav.visit",e.record))},[d]),(0,a.useEffect)(()=>{let e=()=>{let e=u.current;"hidden"===document.visibilityState&&e&&((0,E.cY)("pwa.nav.leave",{tab:e.tab,dwellMs:Math.max(0,Date.now()-e.at)}),u.current={tab:e.tab,at:1/0})},t=()=>{"visible"===document.visibilityState&&u.current&&!Number.isFinite(u.current.at)&&(u.current={tab:u.current.tab,at:Date.now()})};return document.addEventListener("visibilitychange",e),document.addEventListener("visibilitychange",t),()=>{document.removeEventListener("visibilitychange",e),document.removeEventListener("visibilitychange",t)}},[]),(0,a.useEffect)(()=>{"1"===window.localStorage.getItem(eE)&&o(!0)},[]);let m=()=>{o(!1),window.localStorage.setItem(eE,"0")};return(0,n.jsx)(_.$M,{children:(0,n.jsxs)("div",{className:"flex h-screen w-full flex-col bg-background text-foreground",children:[(0,n.jsx)(eS,{}),(0,n.jsx)(ej,{}),(0,n.jsx)(ed,{onToggleSidebar:()=>{o(e=>{let t=!e;return window.localStorage.setItem(eE,t?"1":"0"),t})},sidebarOpen:s,activity:null!=r?r:i}),(0,n.jsxs)("div",{className:"flex flex-1 min-h-0",children:[s?(0,n.jsx)("aside",{className:"hidden md:flex md:w-56 md:flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground",children:(0,n.jsx)(I,{onNavigate:m,onClose:m})}):(0,n.jsx)("aside",{className:"hidden md:flex md:w-10 md:flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground",children:(0,n.jsx)(I,{onNavigate:m,compact:!0})}),s&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{type:"button","aria-label":"close menu",className:"fixed inset-0 z-30 bg-black/40 md:hidden",onClick:m}),(0,n.jsx)("aside",{className:"fixed left-0 top-9 z-40 h-[calc(100vh-2.25rem)] w-56 border-r border-sidebar-border bg-sidebar text-sidebar-foreground md:hidden",children:(0,n.jsx)(I,{onNavigate:m,onClose:m})})]}),(0,n.jsx)("main",{className:"flex-1 overflow-auto min-w-0",children:t})]}),(0,n.jsx)(ew,{})]})})}},8687:(e,t,r)=>{"use strict";r.d(t,{NexusClientProvider:()=>d});var n=r(41121),a=r(91269),s=r(42375),o=r(91514),l=r(49536);function i(){let e=(0,l.Fp)();return{baseUrl:e.baseUrl,token:e.token}}function d(e){let{children:t}=e,[r,l]=(0,a.useState)({baseUrl:"",token:""});(0,a.useEffect)(()=>{l(i());let e=()=>l(i());return window.addEventListener("storage",e),window.addEventListener("elanous.daemon.changed",e),()=>{window.removeEventListener("storage",e),window.removeEventListener("elanous.daemon.changed",e)}},[]);let d=(0,a.useMemo)(()=>r.baseUrl?(0,s.xX)({baseUrl:r.baseUrl,...r.token?{token:r.token}:{}}):null,[r.baseUrl,r.token]);return d?(0,n.jsx)(o.tI,{client:d,children:t}):(0,n.jsx)(n.Fragment,{children:t})}},12248:(e,t,r)=>{"use strict";r.d(t,{NewBuildBanner:()=>d});var n=r(41121),a=r(91269),s=r(51215);let o=/\\?"b\\?":\\?"([A-Za-z0-9_-]{8,})\\?"/;function l(e){var t,r;return null!=(r=null==(t=o.exec(e))?void 0:t[1])?r:null}function i(e,t){return null!==e&&null!==t&&e!==t}function d(){let[e,t]=(0,a.useState)(null),[r,o]=(0,a.useState)(null);return((0,a.useEffect)(()=>{let e=function(){for(let e of Array.from(document.scripts)){let t=e.textContent?l(e.textContent):null;if(t)return t}return null}();o(e);let r=!1,n=async()=>{if("visible"===document.visibilityState)try{let n=await fetch("/app/",{cache:"no-store"});if(!n.ok)return;let a=l(await n.text());if(r)return;t(a),i(e,a)&&(0,s.cY)("pwa.new-build.detected",{current:e,served:a})}catch(e){}},a=window.setInterval(()=>{n()},12e4),d=()=>{n()};return document.addEventListener("visibilitychange",d),n(),()=>{r=!0,window.clearInterval(a),document.removeEventListener("visibilitychange",d)}},[]),i(r,e))?(0,n.jsxs)("div",{role:"status",className:"fixed inset-x-2 bottom-2 z-[60] mx-auto flex max-w-md items-center gap-3 rounded-md border border-primary/50 bg-background/95 px-3 py-2 text-sm shadow-lg","data-pwa-new-build":!0,children:[(0,n.jsx)("span",{className:"flex-1",children:"새 판이 있습니다 — 이 화면은 이전 판으로 돌고 있어요."}),(0,n.jsx)("button",{type:"button",onClick:()=>{(0,s.cY)("pwa.new-build.reload",{current:r,served:e}),window.location.reload()},className:"rounded-md bg-primary px-2 py-1 text-primary-foreground",children:"새로고침"})]}):null}},21545:(e,t,r)=>{"use strict";r.d(t,{ToastProvider:()=>m});var n=r(41121),a=r(99993),s=r(66062),o=r(11635),l=r(30448),i=r(93981),d=r(91968),c=r(50940);let u=e=>{let{...t}=e,{theme:r="system"}=(0,a.D)();return(0,n.jsx)(s.l$,{theme:r,className:"toaster group",icons:{success:(0,n.jsx)(o.A,{className:"size-4"}),info:(0,n.jsx)(l.A,{className:"size-4"}),warning:(0,n.jsx)(i.A,{className:"size-4"}),error:(0,n.jsx)(d.A,{className:"size-4"}),loading:(0,n.jsx)(c.A,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},toastOptions:{classNames:{toast:"cn-toast"}},...t})};function m(e){let{children:t}=e;return(0,n.jsxs)(n.Fragment,{children:[t,(0,n.jsx)(u,{})]})}},28288:(e,t,r)=>{"use strict";r.d(t,{i$:()=>l,nZ:()=>c,oM:()=>d,sF:()=>i});let n="elanous.showroom.layouts";function a(){return window.localStorage?window.localStorage:{getItem:()=>null,setItem:()=>{},removeItem:()=>{}}}function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a(),t=e.getItem(n);if(!t)return{};try{let e=JSON.parse(t);if(!e||"object"!=typeof e)return{};return e}catch(e){return{}}}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a(),r=JSON.stringify(e);if(r.length>102400)return{ok:!1,reason:"storage quota exceeded (".concat(r.length," > ").concat(102400,")")};try{return t.setItem(n,r),{ok:!0}}catch(e){return{ok:!1,reason:String(e)}}}async function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a();try{let{layouts:r}=await e.listShowroomLayouts(),n={};for(let e of r)n[e.name]=e;return o(n,t),{layouts:r.slice().sort((e,t)=>t.savedAt-e.savedAt),source:"daemon"}}catch(e){return{layouts:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a();return Object.values(s(e)).sort((e,t)=>t.savedAt-e.savedAt)}(t),source:"local"}}}async function i(e,t,r){var n;let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=e.trim();if(!i)return{ok:!1,reason:"name required"};let d=null!=(n=l.backend)?n:a(),c=function(e,t){var r;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=e.trim();if(!l)return{ok:!1,reason:"name required"};let i=null!=(r=n.backend)?r:a(),d=s(i),c={name:l,savedAt:Date.now(),panels:t.map(e=>({id:e.id,kind:e.kind,provider:e.provider,...e.agentBrand?{agentBrand:e.agentBrand}:{},...e.roleHint?{roleHint:e.roleHint}:{},...e.personaId?{personaId:e.personaId}:{},state:e.state})),...n.layoutMode?{layoutMode:n.layoutMode}:{}};d[l]=c;let u=o(d,i);return u.ok?{ok:!0,saved:c}:u}(i,t,l);if(!c.ok)return c;let u=0;try{let e=await r.listShowroomLayouts();if(0===e.layouts.length){let e=s(d);for(let t of Object.values(e))try{await r.saveShowroomLayout(t.name,{savedAt:t.savedAt,panels:t.panels,...t.layoutMode?{layoutMode:t.layoutMode}:{}}),u+=1}catch(e){}return{ok:!0,saved:c.saved,source:"daemon",migrated:u}}return await r.saveShowroomLayout(i,{savedAt:c.saved.savedAt,panels:c.saved.panels,...c.saved.layoutMode?{layoutMode:c.saved.layoutMode}:{}}),{ok:!0,saved:c.saved,source:"daemon",migrated:0}}catch(e){return{ok:!0,saved:c.saved,source:"local",migrated:0}}}async function d(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a(),n=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a(),r=s(t);return e.trim()in r&&(delete r[e.trim()],o(r,t),!0)}(e,r);try{return await t.deleteShowroomLayout(e),{ok:!0,source:"daemon"}}catch(e){return{ok:n,source:"local"}}}function c(e){return e.panels.map(e=>({id:e.id,kind:e.kind,provider:e.provider,...e.agentBrand?{agentBrand:e.agentBrand}:{},...e.roleHint?{roleHint:e.roleHint}:{},...e.personaId?{personaId:e.personaId}:{},sessionId:null,state:e.state}))}},28725:(e,t,r)=>{"use strict";r.d(t,{MQ:()=>s,OY:()=>n,fG:()=>a});let n="elanous:nav-prefs";function a(e){try{return"1"===window.localStorage.getItem(e)}catch(e){return!1}}function s(e,t){try{t?window.localStorage.setItem(e,"1"):window.localStorage.removeItem(e)}catch(e){}try{window.dispatchEvent(new Event(n))}catch(e){}}},66428:(e,t,r)=>{Promise.resolve().then(r.t.bind(r,72069,23)),Promise.resolve().then(r.bind(r,38519)),Promise.resolve().then(r.bind(r,12248)),Promise.resolve().then(r.bind(r,8687)),Promise.resolve().then(r.bind(r,67976)),Promise.resolve().then(r.bind(r,94936)),Promise.resolve().then(r.bind(r,21545)),Promise.resolve().then(r.bind(r,1167)),Promise.resolve().then(r.bind(r,85039)),Promise.resolve().then(r.t.bind(r,19696,23))},67976:(e,t,r)=>{"use strict";r.d(t,{ServiceWorkerRegister:()=>o});var n=r(91269),a=r(51215);async function s(){if("undefined"==typeof navigator)return{status:"unsupported",reason:"no window/navigator (SSR)"};if(!("serviceWorker"in navigator))return{status:"unsupported",reason:"navigator.serviceWorker absent"};if(!window.isSecureContext)return{status:"unsupported",reason:"page not in a secure context (HTTPS or localhost required)"};try{let e=await navigator.serviceWorker.register("/app/sw.js",{scope:"/app/"});if((0,a.cY)("pwa.sw.registered",{scope:e.scope}),e.waiting)return(0,a.cY)("pwa.sw.update-waiting"),{status:"registered",scope:e.scope,updateAvailable:!0};return e.addEventListener("updatefound",()=>{let t=e.installing;t&&t.addEventListener("statechange",()=>{(0,a.cY)("pwa.sw.statechange",{state:t.state})})}),{status:"registered",scope:e.scope,updateAvailable:!1}}catch(t){let e=t instanceof Error?t.message:String(t);return(0,a.cY)("pwa.sw.register-failed",{reason:e}),{status:"error",reason:e}}}function o(){let e=(0,n.useRef)(!1);return(0,n.useEffect)(()=>{e.current||(e.current=!0,s())},[]),null}},72069:()=>{},85039:(e,t,r)=>{"use strict";r.d(t,{TooltipProvider:()=>s});var n=r(41121),a=r(34419);function s(e){let{delay:t=0,...r}=e;return(0,n.jsx)(a.B,{"data-slot":"tooltip-provider",delay:t,...r})}},94936:(e,t,r)=>{"use strict";r.d(t,{D:()=>h,ThemeProvider:()=>p,z:()=>l});var n=r(41121),a=r(91269),s=r(51215),o=r(91514);let l=["catppuccin-mocha","mocha-pastel-accent","catppuccin-latte","rose-pine-dawn","nord-light","elanous-pastel-default"],i="elanous.pwa.theme",d="dashboard.theme.active",c="catppuccin-mocha";function u(e){return"string"==typeof e&&l.includes(e)}let m=(0,a.createContext)(null);function p(e){let{children:t}=e,r=(0,o.Qj)(),[p,h]=(0,a.useState)(c),x=(0,a.useRef)(0),f=(0,a.useCallback)(e=>{h(e),document.documentElement.dataset.theme=e},[]);(0,a.useEffect)(()=>{let e=localStorage.getItem(i),t=u(e)?e:c;f(t),(0,s.cY)("webterm.provider.theme.init",{theme:t})},[f]),(0,a.useEffect)(()=>{if(!r)return;let e=!0,t=x.current;return r.getSwitch(d).then(r=>{let{switch:n}=r;e&&t===x.current&&u(n.value)&&(f(n.value),localStorage.setItem(i,n.value))}).catch(()=>void 0),()=>{e=!1}},[f,r]);let b=(0,a.useCallback)(e=>{u(e)&&(x.current+=1,f(e),localStorage.setItem(i,e),(0,s.cY)("webterm.provider.theme.set",{theme:e}),null==r||r.putSwitch(d,{value:e}).catch(()=>void 0))},[f,r]);return(0,n.jsx)(m.Provider,{value:{theme:p,setTheme:b,themes:l},children:t})}function h(){let e=(0,a.useContext)(m);if(!e)throw Error("useTheme must be used inside <ThemeProvider>");return e}}},e=>{e.O(0,[1026,626,2977,920,6062,7990,6998,1201,9804,8519,2375,8067,8619,319,5791,2367,6725,7358],()=>e(e.s=66428)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3141],{7347:(e,a,t)=>{"use strict";t.d(a,{A:()=>s});let s=(0,t(89117).A)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]])},10793:(e,a,t)=>{"use strict";t.d(a,{A:()=>s});let s=(0,t(89117).A)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]])},72282:(e,a,t)=>{Promise.resolve().then(t.bind(t,73232))},73232:(e,a,t)=>{"use strict";t.r(a),t.d(a,{default:()=>I});var s=t(41121),n=t(91269),l=t(42012),r=t(7347),i=t(10793),d=t(91514),o=t(54061),c=t(90686),x=t(20796),u=t(19528),m=t(82157);let p={PLAN:"text-sky-600 dark:text-sky-400",ROUTE:"text-violet-600 dark:text-violet-400",VERIFY:"text-amber-600 dark:text-amber-400",HEAL:"text-emerald-600 dark:text-emerald-400",ESCALATE:"text-rose-600 dark:text-rose-400",SHIP:"text-green-700 dark:text-green-400 font-semibold"};function h(e){let{board:a,lines:t,mode:n,onSelectRun:l,selectedRunId:r}=e,i="max"===n,d=a.gauges,{snapshot:o}=a;return(0,s.jsxs)("div",{className:(0,m.cn)("space-y-4",i&&"live-max"),"data-live-mode":n,children:[(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-3 lg:grid-cols-6",children:[(0,s.jsx)(b,{label:"LIVE",hint:"도는 런",value:String(d.live),tone:d.live>0?"live":"idle",max:i}),(0,s.jsx)(b,{label:"DECISIONS/MIN",hint:"판단 ".concat(d.decisions,"건"),value:String(d.decisionsPerMin),max:i}),(0,s.jsx)(b,{label:"SHIPPED",hint:"병합\xb7PR",value:String(d.shipped),tone:"ok",max:i}),(0,s.jsx)(b,{label:"SELF-HEAL",hint:d.selfHealRuns?"수리 런 ".concat(d.selfHealRuns):"수리 런 없음",value:null===d.selfHealRate?"—":"".concat(d.selfHealRate,"%"),max:i}),(0,s.jsx)(b,{label:"BURN",hint:"토큰/분",value:g(d.burnTokensPerMin),max:i}),(0,s.jsx)(b,{label:"BLOCKED",hint:"막힌 런",value:String(o.counters.blocked),tone:o.counters.blocked?"bad":"idle",max:i})]}),(0,s.jsxs)("section",{className:"space-y-2","aria-label":"런",children:[(0,s.jsxs)("h2",{className:"text-sm font-medium",children:["런 ",(0,s.jsxs)("span",{className:"text-xs text-muted-foreground",children:["최근 ",o.windowMinutes,"분 \xb7 ",o.runs.length]})]}),0===o.runs.length?(0,s.jsx)("p",{className:"rounded-md border border-dashed p-4 text-sm text-muted-foreground","data-live-empty":!0,children:"지금 이 창에 런 신호가 없습니다 — 텔레그램이나 Intake 로 한 줄 보내면 여기에 런이 뜹니다."}):(0,s.jsx)("ul",{className:"space-y-1.5",children:o.runs.slice(0,12).map(e=>(0,s.jsx)(f,{run:e,round:a.rounds[e.runId],max:i,selected:e.runId===r,onSelect:l},e.runId))})]}),(0,s.jsxs)("div",{className:"grid gap-4 lg:grid-cols-5",children:[(0,s.jsxs)("section",{className:"space-y-2 lg:col-span-3","aria-label":"판단 스트림",children:[(0,s.jsxs)("h2",{className:"flex flex-wrap items-center gap-2 text-sm font-medium",children:["판단 스트림",c.jg.map(e=>(0,s.jsx)("span",{className:(0,m.cn)("text-[11px] lg:text-[10px] font-mono",p[e]),children:e},e))]}),0===a.stream.length?(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:"이 창에 판단 신호가 없습니다."}):(0,s.jsx)("ul",{className:"max-h-80 space-y-1 overflow-auto rounded-md border p-2 font-mono text-[11px]","data-live-stream":!0,children:a.stream.slice(0,40).map((e,a)=>(0,s.jsxs)("li",{className:(0,m.cn)("leading-relaxed",i&&0===a&&"live-line-in",i&&"SHIP"===e.kind&&"live-ship"),children:[(0,s.jsxs)("span",{className:"text-muted-foreground",children:[(0,s.jsx)("span",{title:e.ts,children:(0,c.qo)(e.ts)})," "]}),(0,s.jsxs)("span",{className:p[e.kind],children:["[",e.kind,"]"]})," ",e.what,e.why&&(0,s.jsxs)("span",{className:"text-muted-foreground",children:[" \xb7 왜: ",e.why]}),e.purpose&&(0,s.jsxs)("span",{className:"text-muted-foreground",children:[" \xb7 목적: ",e.purpose]}),e.target&&(0,s.jsxs)("span",{className:"text-muted-foreground",children:[" → ",e.target]})]},"".concat(e.ts,"-").concat(a)))})]}),(0,s.jsxs)("section",{className:"space-y-2 lg:col-span-2","aria-label":"성적표",children:[(0,s.jsx)("h2",{className:"text-sm font-medium",children:"모델 성적표"}),0===a.scorecard.length?(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:"이 창에 모델 요청이 없습니다."}):(0,s.jsxs)("table",{className:"w-full text-[11px]",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{className:"text-muted-foreground",children:[(0,s.jsx)("th",{className:"text-left font-normal",children:"모델"}),(0,s.jsx)("th",{className:"text-right font-normal",children:"요청"}),(0,s.jsx)("th",{className:"text-right font-normal",children:"토큰"}),(0,s.jsx)("th",{className:"text-right font-normal",children:"과금"})]})}),(0,s.jsx)("tbody",{children:a.scorecard.slice(0,8).map(e=>{var a;return(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"truncate",children:e.model}),(0,s.jsx)("td",{className:"text-right tabular-nums",children:e.requests}),(0,s.jsx)("td",{className:"text-right tabular-nums",children:g(e.tokens)}),(0,s.jsx)("td",{className:"text-right text-muted-foreground",children:null!=(a=e.billing)?a:"—"})]},e.model)})})]}),(0,s.jsx)("h2",{className:"pt-2 text-sm font-medium",children:"리뷰 판정"}),(0,s.jsx)(v,{items:o.reviewVerdicts,max:i})]})]}),(0,s.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[(0,s.jsxs)("section",{className:"space-y-2","aria-label":"흐르는 로그",children:[(0,s.jsx)("h2",{className:"text-sm font-medium",children:"흐르는 로그"}),(0,s.jsx)("pre",{className:"max-h-60 overflow-auto rounded-md border bg-muted/30 p-2 text-[11px] leading-relaxed","data-live-log":!0,children:t.slice(0,60).join("\n")||"—"})]}),(0,s.jsxs)("section",{className:"space-y-2","aria-label":"빈 칸 표",children:[(0,s.jsxs)("h2",{className:"text-sm font-medium",children:["빈 칸 표 ",(0,s.jsx)("span",{className:"text-xs text-muted-foreground",children:"판단 로그에 없는 칸"})]}),0===a.missing.length?(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:"빈 칸 없음."}):(0,s.jsx)("table",{className:"w-full text-[11px]","data-live-missing":!0,children:(0,s.jsx)("tbody",{children:a.missing.slice(0,10).map(e=>(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{className:"font-mono",children:e.key}),(0,s.jsx)("td",{className:"text-right tabular-nums",children:e.count}),(0,s.jsx)("td",{className:"pl-2 text-muted-foreground",children:e.lacks.join(" \xb7 ")})]},e.key))})})]})]})]})}function g(e){return e>=1e6?"".concat((e/1e6).toFixed(1),"M"):e>=1e3?"".concat((e/1e3).toFixed(e>=1e5?0:1),"k"):String(e)}function b(e){let{label:a,hint:t,value:n,tone:l="idle",max:r}=e;return(0,s.jsxs)("div",{className:(0,m.cn)("rounded-lg border p-3","live"===l&&"border-primary/50","bad"===l&&"border-error/50","ok"===l&&"border-green-600/40",r&&"live-gauge",r&&"live"===l&&"live-glow"),children:[(0,s.jsx)("div",{className:"font-mono text-[11px] lg:text-[10px] tracking-wider text-muted-foreground",children:a}),(0,s.jsx)("div",{className:(0,m.cn)("text-2xl font-semibold tabular-nums",r&&"live-count"),"data-live-gauge":a,children:n}),(0,s.jsx)("div",{className:"text-[11px] lg:text-[10px] text-muted-foreground",children:t})]})}function f(e){let{run:a,round:t,max:n,selected:l,onSelect:r}=e;return(0,s.jsx)("li",{children:(0,s.jsxs)("button",{type:"button","data-live-run":a.runId,onClick:()=>null==r?void 0:r(a.runId),className:(0,m.cn)("flex w-full items-center gap-3 rounded-md border px-3 py-2 text-left text-xs hover:bg-muted/40",l&&"ring-1 ring-primary"),children:[(0,s.jsx)("span",{className:"w-24 shrink-0 truncate font-mono text-[11px] text-muted-foreground",children:a.runId.replace(/^run-/,"").slice(0,8)}),(0,s.jsx)("span",{className:"flex flex-1 gap-1","aria-label":"단계",children:c.lV.map(e=>{let t=a.stages[e],l=a.current===e;return(0,s.jsx)("span",{title:"".concat(c.fQ[e]," \xb7 ").concat(null!=t?t:"신호 없음"),"data-stage":e,"data-tone":null!=t?t:"none",className:(0,m.cn)("h-2 flex-1 rounded-full bg-muted","info"===t&&"bg-primary/60","ok"===t&&"bg-green-600","bad"===t&&"bg-error",n&&l&&"bad"!==t&&"live-pulse",n&&l&&"bad"===t&&"live-pulse-bad")},e)})}),(0,s.jsx)("span",{className:"w-14 shrink-0 text-right font-mono text-[11px] lg:text-[10px] text-muted-foreground",children:t?"R ".concat(t,"/3"):""}),(0,s.jsx)("span",{className:"w-24 shrink-0 text-right text-[11px]",children:a.blocked?(0,s.jsx)("span",{className:"text-error",children:"막힘"}):"ok"===a.stages.land?(0,s.jsxs)("span",{className:"text-green-700",children:["착지",a.pr?" #".concat(a.pr):""]}):a.current?c.fQ[a.current]:""})]})})}function v(e){let{items:a,max:t}=e,n=Math.max(1,...a.map(e=>e.count));return 0===a.length?(0,s.jsx)("div",{className:"text-[11px] text-muted-foreground",children:"—"}):(0,s.jsx)("ul",{className:"space-y-1",children:a.slice(0,6).map(e=>(0,s.jsxs)("li",{className:"flex items-center gap-2 text-[11px]",children:[(0,s.jsx)("span",{className:"w-24 shrink-0 truncate",children:e.name}),(0,s.jsx)("span",{className:"h-1.5 flex-1 rounded-full bg-muted",children:(0,s.jsx)("span",{className:(0,m.cn)("block h-1.5 rounded-full bg-primary/70",t&&"transition-[width] duration-700"),style:{width:"".concat(e.count/n*100,"%")}})}),(0,s.jsx)("span",{className:"w-8 text-right tabular-nums",children:e.count})]},e.name))})}var j=t(99482),N=t(68550);let y=[15,60,360,1440],k="@active";function w(){return(0,d.Qj)()?(0,s.jsx)(S,{}):(0,s.jsxs)("div",{className:"mx-auto max-w-2xl space-y-2 p-6",children:[(0,s.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Live"}),(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"Connect to a NEXUS daemon to watch runs live."})]})}function S(){var e,a,t,m,p,g;let[b,f]=(0,n.useState)("practical"),[v,w]=(0,n.useState)(null),[S,I]=(0,n.useState)("all"),[A,R]=(0,n.useState)(!1);(0,n.useEffect)(()=>{try{window.localStorage.removeItem("elanous.live.mode")}catch(e){}},[]),(0,n.useEffect)(()=>{if(!v)return;let e=setTimeout(()=>{f("practical"),w(null)},Math.max(0,v-Date.now()));return()=>clearTimeout(e)},[v]);let C=(0,d.M1)(),[L,H]=(0,n.useState)(null),D=e=>{e.on?(f("max"),I(e.scope&&"all"!==e.scope?"run":"all"),w(e.until?Date.parse(e.until):Date.now()+18e5)):(f("practical"),w(null))};(0,n.useEffect)(()=>{let e=!0;return C.getLiveDetail().then(a=>{e&&D(a)}).catch(()=>{}),()=>{e=!1}},[C]);let P=e=>{R(!1),H(null);let a="run"===e&&_?_:"all";C.setLiveDetail({scope:a,ttlMin:30,by:"pwa-live"}).then(D).catch(e=>H(e instanceof Error?e.message:String(e)))},[X,q]=(0,n.useState)(60),[O,T]=(0,n.useState)(""),U=(0,n.useRef)(!1);(0,n.useEffect)(()=>{"max"!==b||U.current||(U.current=!0,T(k),q(1440)),"max"!==b&&(U.current=!1)},[b]);let[_,B]=(0,n.useState)(null),{logs:F,runs:K,instances:V}=(0,o.HI)({store:O||void 0,windowMinutes:X}),[z,Q]=(0,n.useState)(()=>Date.now());(0,n.useEffect)(()=>{Q(Date.now())},[F.dataUpdatedAt]);let[Y,J]=(0,n.useState)(!1);(0,n.useEffect)(()=>{"public"===new URLSearchParams(window.location.search).get("capture")&&J(!0)},[]);let Z=null!=(m=null==(e=F.data)?void 0:e.logs)?m:M,G=(0,n.useMemo)(()=>Y?(0,u.yR)(Z):Z,[Z,Y]),W=(0,l.I)({queryKey:["live","shipped",X],queryFn:()=>C.getLiveShipped("".concat(X,"m")),refetchInterval:6e4}),$=(0,n.useMemo)(()=>{var e,a,t;let s=(0,c.Hc)(G,null!=(t=null==(e=K.data)?void 0:e.entries)?t:[],{now:z,windowMinutes:X}),n=null==(a=W.data)?void 0:a.merged;if("number"!=typeof n)return s;let l=(0,x.NZ)(G).length;return{...s,gauges:{...s.gauges,shipped:n,selfHealRuns:l,selfHealRate:n>0?Math.round(l/n*100):null}}},[G,K.data,z,X,W.data]),ee=X>0?Math.round(G.length/X*10)/10:0,ea=Math.round(JSON.stringify(G).length/1024),et=(0,n.useMemo)(()=>G.filter(e=>{var a;return!_||(null==(a=e.data)?void 0:a.runId)===_}).map(e=>(0,c.BP)(e)),[G,_]),es=(null!=(p=null==(a=V.data)?void 0:a.instances)?p:[]).filter(e=>!1!==e.dbExists&&!e.current);return(0,s.jsxs)("div",{className:"mx-auto ".concat("max"===b?"max-w-none space-y-2 p-2":"max-w-6xl space-y-4 p-4 sm:p-6"),children:[(0,s.jsx)("style",{children:E}),(0,s.jsxs)("header",{className:"flex flex-wrap items-center gap-3 ".concat("max"===b?"justify-end":"justify-between"),children:[(0,s.jsxs)("div",{className:"max"===b?"hidden":"",children:[(0,s.jsxs)("h1",{className:"flex items-center gap-2 text-xl font-semibold tracking-tight",children:[(0,s.jsx)(r.A,{className:"h-5 w-5","aria-hidden":!0})," Live"]}),(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"하니스 런이 판단하고 기획하는 신호 — 보이는 수는 전부 진짜다."})]}),(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[(0,s.jsx)("select",{"aria-label":"시간 창",value:X,onChange:e=>q(Number(e.target.value)),className:"rounded-md border bg-background px-2 py-1",children:y.map(e=>(0,s.jsx)("option",{value:e,children:e<60?"".concat(e,"분"):"".concat(e/60,"시간")},e))}),(0,s.jsxs)("select",{"aria-label":"신호 출처",value:O,onChange:e=>T(e.target.value),className:"max-w-48 rounded-md border bg-background px-2 py-1",children:[(0,s.jsx)("option",{value:"",children:"이 인스턴스"}),(0,s.jsx)("option",{value:k,children:"전체(연합 \xb7 최근 24시간에 쓰인 우주)"}),es.map(e=>(0,s.jsx)("option",{value:e.name,children:e.name},e.name))]}),(0,s.jsx)("button",{type:"button","data-elanous-action":"live-public-capture","aria-pressed":Y,onClick:()=>J(e=>!e),title:"녹화\xb7스크린샷용 — 계정 이름 → account-N \xb7 크레딧\xb7USD 숨김 \xb7 홈 경로 가림",className:"rounded-md border px-2 py-1 ".concat(Y?"border-emerald-500 text-emerald-600 dark:text-emerald-300":"hover:bg-muted"),children:Y?"● 공개 캡처 켜짐":"공개 캡처"}),"max"===b?(0,s.jsxs)("button",{type:"button","data-elanous-action":"live-max-off",onClick:()=>{H(null),C.setLiveDetail({scope:"all",ttlMin:0,by:"pwa-live"}).then(D).catch(e=>H(e instanceof Error?e.message:String(e))),f("practical"),w(null)},className:"inline-flex items-center gap-1 rounded-md border border-primary px-2 py-1 text-primary hover:bg-muted",children:[(0,s.jsx)(i.A,{className:"h-3.5 w-3.5","aria-hidden":!0})," 화려함 MAX 켜짐 \xb7 끄기"]}):(0,s.jsxs)("button",{type:"button","data-elanous-action":"live-max-on",onClick:()=>R(!0),className:"inline-flex items-center gap-1 rounded-md border px-2 py-1 hover:bg-muted",children:[(0,s.jsx)(i.A,{className:"h-3.5 w-3.5","aria-hidden":!0})," 화려함 MAX"]})]})]}),A&&(0,s.jsxs)("div",{role:"dialog","aria-label":"화려함 MAX 켜기",className:"space-y-2 rounded-md border border-primary/50 bg-primary/5 p-3 text-sm","data-live-max-confirm":!0,children:[(0,s.jsx)("p",{className:"font-medium",children:"화려함 MAX 를 켤까요?"}),(0,s.jsxs)("p",{className:"text-xs text-muted-foreground",children:["마케팅(시연\xb7녹화)과 상세 런 디버깅용입니다. 켜면 하니스가 판단마다 \xab왜\xb7목적\xb7보낸 곳\xbb을 추가로 기록합니다(부하가 듭니다) — 30분 뒤 자동으로 꺼지고, 다른 기기에서도 같은 상태로 보입니다. 지금 이 화면이 받는 신호: 분당 ",ee,"건 \xb7 응답 약 ",ea,"KB."]}),(0,s.jsxs)("div",{className:"flex flex-wrap gap-2 text-xs",children:[(0,s.jsx)("button",{type:"button","data-elanous-action":"live-max-all",onClick:()=>P("all"),className:"rounded-md border px-2 py-1 hover:bg-muted",children:"전체로 켜기"}),(0,s.jsx)("button",{type:"button","data-elanous-action":"live-max-run",disabled:!_,onClick:()=>P("run"),className:"rounded-md border px-2 py-1 hover:bg-muted disabled:opacity-50",children:_?"이 런만 켜기":"이 런만 켜기(먼저 런을 고르세요)"}),(0,s.jsx)("button",{type:"button",onClick:()=>R(!1),className:"rounded-md px-2 py-1 text-muted-foreground hover:bg-muted",children:"취소"})]})]}),L&&(0,s.jsxs)("p",{className:"rounded-md bg-error/10 p-2 text-xs text-error",children:["MAX 스위치를 못 바꿨다: ",L]}),"max"===b&&(0,s.jsxs)("p",{className:"rounded-md border border-primary/40 px-3 py-1 text-[11px] lg:text-[10px] text-muted-foreground","data-live-cost-badge":!0,children:["화려함 MAX \xb7 범위 ","run"===S&&_?"런 ".concat(_.replace(/^run-/,"").slice(0,8)):"전체"," \xb7 받는 신호 분당 ",ee,"건 \xb7 응답 약 ",ea,"KB",v?" \xb7 ".concat(Math.max(0,Math.round((v-z)/6e4)),"분 뒤 자동 꺼짐"):""," \xb7 하니스 판단 이벤트 ",$.emitted,"건"]}),F.error?(0,s.jsxs)("p",{className:"rounded-md bg-error/10 p-3 text-sm text-error",children:["신호를 못 읽었다: ",F.error instanceof Error?F.error.message:String(F.error)]}):null,_&&(0,s.jsx)(N.RT,{runId:_,run:null!=(g=$.snapshot.runs.find(e=>e.runId===_))?g:null,lines:et,onClose:()=>B(null)}),"max"===b?(0,s.jsx)(j.xl,{board:$,rows:G,windowMinutes:X,sourceLabel:O===k?"federated":O||"this instance",shippedSource:"number"==typeof(null==(t=W.data)?void 0:t.merged)?"github":"log",publicCapture:Y,onSelectRun:e=>B(a=>a===e?null:e)}):(0,s.jsx)(h,{board:$,lines:et,mode:b,selectedRunId:_,onSelectRun:e=>B(a=>a===e?null:e)}),(0,s.jsxs)("p",{className:"text-[11px] text-muted-foreground ".concat("max"===b?"hidden":""),children:["갱신 5초 \xb7 출처 ",(0,s.jsx)("code",{children:"/v1/logs"})," \xb7 ",(0,s.jsx)("code",{children:"/v1/harness/runs"})," \xb7 비밀처럼 보이는 조각은 가린다."]})]})}let M=[],E="\n@keyframes live-pulse { 0%,100% { opacity: 1; box-shadow: 0 0 0 0 rgba(99,102,241,0) } 50% { opacity: .55; box-shadow: 0 0 10px 2px rgba(99,102,241,.55) } }\n@keyframes live-pulse-bad { 0%,100% { opacity: 1 } 50% { opacity: .4; box-shadow: 0 0 10px 2px rgba(239,68,68,.6) } }\n@keyframes live-glow { 0%,100% { box-shadow: 0 0 0 0 rgba(99,102,241,0) } 50% { box-shadow: 0 0 18px 2px rgba(99,102,241,.35) } }\n@keyframes live-line-in { from { transform: translateY(-6px); opacity: 0 } to { transform: none; opacity: 1 } }\n@keyframes live-ship { 0% { background: rgba(34,197,94,.35) } 100% { background: transparent } }\n.live-max .live-pulse { animation: live-pulse 1.4s ease-in-out infinite }\n.live-max .live-pulse-bad { animation: live-pulse-bad 1s ease-in-out infinite }\n.live-max .live-glow { animation: live-glow 2.4s ease-in-out infinite }\n.live-max .live-line-in { animation: live-line-in .45s ease-out }\n.live-max .live-ship { animation: live-ship 2.4s ease-out; font-size: 12px }\n.live-max .live-gauge { background: radial-gradient(120% 120% at 0% 0%, rgba(99,102,241,.10), transparent 60%) }\n.live-max .live-count { text-shadow: 0 0 12px rgba(99,102,241,.45) }\n.live-stage { background: radial-gradient(120% 90% at 50% 0%, rgba(79,70,229,.25), rgba(2,6,23,.98) 60%), #020617; box-shadow: inset 0 0 0 1px rgba(99,102,241,.25) }\n.live-stage .live-line-in { animation: live-line-in .45s ease-out }\n@keyframes live-v5-marquee { from { transform: translateX(0) } to { transform: translateX(-50%) } }\n@keyframes live-v5-blink { 0%,100% { opacity: 1 } 50% { opacity: .45 } }\n@keyframes live-v5-hot { 0%,100% { box-shadow: 0 0 14px #a78bfa55, inset 0 0 14px #a78bfa22 } 50% { box-shadow: 0 0 26px #a78bfa99, inset 0 0 22px #a78bfa44 } }\n.live-v5-marquee { animation: live-v5-marquee linear infinite }\n.live-v5-blink { animation: live-v5-blink 1.6s ease-in-out infinite }\n.live-v5-hot { animation: live-v5-hot 1.8s ease-in-out infinite }\n@media (prefers-reduced-motion: reduce) { .live-max *, .live-v5 * { animation: none !important; transition: none !important } }\n";function I(){return(0,s.jsx)(w,{})}}},e=>{e.O(0,[2977,920,7990,6998,9740,2367,6725,7358],()=>e(e.s=72282)),_N_E=e.O()}]);
|