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
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
import type { TelegramEvent } from '../../workflow-runtime/triggers/telegram-source.js';
|
|
19
19
|
import { spawnSync } from 'node:child_process';
|
|
20
20
|
import type { NexusState } from '../state/state.js';
|
|
21
|
+
import { DEFAULT_NEXUS_HTTP_PORT } from '../default-port.js';
|
|
22
|
+
export { DEFAULT_NEXUS_HTTP_PORT } from '../default-port.js';
|
|
21
23
|
import type { TabRegistry } from '../state/tab-registry.js';
|
|
22
24
|
import type { FeedbackEnvelope } from '../../feedback/envelope.js';
|
|
23
25
|
import type { Supervisor } from '../supervisor/index.js';
|
|
@@ -31,7 +33,7 @@ import {
|
|
|
31
33
|
} from './admin-dev-proxy.js';
|
|
32
34
|
import { handleDevProxyHttpRequest, pathMatchesDevProxy } from './dev-proxy.js';
|
|
33
35
|
import { OPENAI_RELAY_PATH, tryHandleOpenAiRelay } from './openai-relay.js';
|
|
34
|
-
import { handleHealth } from './health.js';
|
|
36
|
+
import { handleHealth, type HealthSetupContext } from './health.js';
|
|
35
37
|
import { handleTabsList, handleTabDetail, handleNexusSnapshot } from './tabs.js';
|
|
36
38
|
import { handleSseEvents } from './events.js';
|
|
37
39
|
import { dispatchIntentPredictionRoute } from './intent-prediction.js';
|
|
@@ -142,11 +144,12 @@ import {
|
|
|
142
144
|
} from './autopilot-api.js';
|
|
143
145
|
import {
|
|
144
146
|
handleVaultGet,
|
|
147
|
+
handleVaultFilePut,
|
|
145
148
|
handleTemplateExpand,
|
|
146
149
|
parseVaultPath,
|
|
147
150
|
} from './vault-api.js';
|
|
148
151
|
import { handleBuildsGet, parseBuildsPath } from './builds-api.js';
|
|
149
|
-
import { handleHarnessAskPost, handleHarnessAskStatusGet, handleHarnessRunEventsGet, handleHarnessRunsGet, handleHarnessStopPost } from './harness-api.js';
|
|
152
|
+
import { handleHarnessAskPost, handleHarnessAskStatusGet, handleHarnessRunEventsGet, handleHarnessRunScreenGet, handleHarnessRunsGet, handleHarnessStopPost } from './harness-api.js';
|
|
150
153
|
import { dispatchPersonaRoute } from './personas.js';
|
|
151
154
|
import { handleRoleJudge } from './role-judge.js';
|
|
152
155
|
import { handleAudioStt } from './audio-stt.js';
|
|
@@ -157,6 +160,10 @@ import {
|
|
|
157
160
|
handleLlmProvidersList,
|
|
158
161
|
handleLlmProviderSet,
|
|
159
162
|
} from './setup-llm-provider.js';
|
|
163
|
+
import { handleObsidianSkillsGet, handleObsidianSet, handleSkillsSet } from './setup-obsidian-skills.js';
|
|
164
|
+
import { handleChildLlmGet, handleChildLlmSet } from './setup-child-llm.js';
|
|
165
|
+
import { handleAnswerPriorityGet, handleAnswerPrioritySet } from './setup-answer-priority.js';
|
|
166
|
+
import { handleChannelBotsGet, handleChannelBotSet } from './setup-channel-bot.js';
|
|
160
167
|
import { handleLlmRoutePredict } from './llm-route-predict.js';
|
|
161
168
|
import type { MissionRouter } from '../../llm/mission-router.js';
|
|
162
169
|
import { handleContextFetchUrl } from './context-url.js';
|
|
@@ -175,7 +182,9 @@ import {
|
|
|
175
182
|
} from './registry-discovery.js';
|
|
176
183
|
import { handleWorktrees, handleWorktreeDispose } from './worktrees.js';
|
|
177
184
|
import { handleBotCommands } from './bot-commands.js';
|
|
178
|
-
import { handleDesignCheck } from './design-check.js';
|
|
185
|
+
import { handleDesignCheck, handleDesignDirectionPost } from './design-check.js';
|
|
186
|
+
import { handleDesignPreviews } from './design-previews-route.js';
|
|
187
|
+
import { handleDesignSystemCreate } from './design-system-create-route.js';
|
|
179
188
|
import { handleHitlAuditRecent, handleHitlTestPushcut } from './hitl-pushcut-settings.js';
|
|
180
189
|
import { handleWorkflowRoute } from './workflow-router.js';
|
|
181
190
|
import { handleSkillRoute } from './skill-router.js';
|
|
@@ -184,9 +193,13 @@ import { handleTemplatesList, handleTemplateGet, handleTemplateSave } from './te
|
|
|
184
193
|
import { handleMcpHttpPost } from './mcp-http.js';
|
|
185
194
|
import { handleMcpResourceGet, MCP_RESOURCE_ROUTE_PATH } from './mcp-resource-route.js';
|
|
186
195
|
// ⛔ 라우트 상수를 «디스패처»가 안 쓰고 문자열로 베끼고 있었다(16차 실측) — 잎에서 읽는다.
|
|
187
|
-
import { IPA_PATH_PREFIX, MANIFEST_PATH } from './rest-route-paths.js';
|
|
196
|
+
import { APPROVALS_MERGES_PATH, DESIGN_DIRECTION_PATH, DESIGN_PREVIEW_PATH_PREFIX, DESIGN_PREVIEWS_PATH, DESIGN_SYSTEM_PATH, IPA_PATH_PREFIX, MANIFEST_PATH } from './rest-route-paths.js';
|
|
197
|
+
import { handleMergeApprovals } from './merge-approvals.js';
|
|
198
|
+
import { handleLiveDetail, LIVE_DETAIL_PATH } from './live-detail.js';
|
|
199
|
+
import { handleLiveShipped, LIVE_SHIPPED_PATH } from './live-shipped.js';
|
|
188
200
|
import { handleMcpWidgetCall, MCP_WIDGET_CALL_ROUTE_PATH, persistWidgetTurnToSessionStore } from './mcp-widget-call-route.js';
|
|
189
201
|
import type { McpClientsHandle } from '../boot/register-mcp-clients.js';
|
|
202
|
+
import { mcpUnauthorizedResponse, oauthRegistrationRejected } from './mcp-oauth-hint.js';
|
|
190
203
|
import { handleTabLogs } from './logs.js';
|
|
191
204
|
import {
|
|
192
205
|
handleConfigGet,
|
|
@@ -219,7 +232,7 @@ import {
|
|
|
219
232
|
parseErrorsPath,
|
|
220
233
|
} from './errors.js';
|
|
221
234
|
import { handleChatBackendDetection } from './chat-backend-detection.js';
|
|
222
|
-
import { handleConnectInfoGet, handleConnectTokenMint, type ConnectInfoCtx } from './connect-info.js';
|
|
235
|
+
import { connectInfoTokenAllowed, handleConnectInfoGet, handleConnectTokenMint, type ConnectInfoCtx } from './connect-info.js';
|
|
223
236
|
import { handleStaticAppRequest, pathMatchesStaticPrefix } from './static-app.js';
|
|
224
237
|
import {
|
|
225
238
|
createWsBridge,
|
|
@@ -244,11 +257,16 @@ import {
|
|
|
244
257
|
} from './meta-api.js';
|
|
245
258
|
import { handleIntakePipelinePreviewPost } from './intake-pipeline-preview.js';
|
|
246
259
|
import { handleIntakePipelineCommitPost } from './intake-pipeline-commit.js';
|
|
260
|
+
import { handleIntakeRoutePost } from './intake-route.js';
|
|
261
|
+
import { corsPreflight, jsonResponse } from './json-response.js';
|
|
262
|
+
import { isPublicRoute } from './public-routes.js';
|
|
247
263
|
import { handleSchedulesActionPost } from './schedules-action.js';
|
|
264
|
+
import { handleSchedulesList, handleScheduleDetail, handleScheduleRuns } from './schedules-read.js';
|
|
248
265
|
import { handleIntakeRunsList } from './intake-runs.js';
|
|
249
266
|
import { handleMissionsList, handleMissionDetail } from './missions.js';
|
|
250
267
|
import { handleSessionsStoreList, handleSessionsStoreGet, handleSessionsStoreFork, handleSessionsStoreDelete } from './sessions-store.js';
|
|
251
268
|
import { handleLogsQuery, handleLogsStream, handleLogsLevelGet, handleLogsLevelPost, handleLogsFacets, handleLogsHistogram, handleLogsInstances } from './log-fabric.js';
|
|
269
|
+
import { handleTrace, handleTraceEvidence } from './trace.js';
|
|
252
270
|
import { handleDispatchRunsList } from './dispatch-runs.js';
|
|
253
271
|
import {
|
|
254
272
|
handleWorkflowLifecycleGet,
|
|
@@ -293,6 +311,9 @@ import {
|
|
|
293
311
|
handleTasksList,
|
|
294
312
|
handleTaskDetail,
|
|
295
313
|
} from './tasks-scheduler.js';
|
|
314
|
+
import { handleTaskCardsGet } from './task-cards-api.js';
|
|
315
|
+
import { handleTaskCreatePost, handleTaskApprovePost } from './tasks-create.js';
|
|
316
|
+
import { matchIngestAuthorization } from './ingest-token.js';
|
|
296
317
|
import {
|
|
297
318
|
handleWorkflowApprovalApprove,
|
|
298
319
|
handleWorkflowApprovalReject,
|
|
@@ -309,6 +330,9 @@ import {
|
|
|
309
330
|
} from './workflows.js';
|
|
310
331
|
import { handleTriggersSnapshot } from './triggers.js';
|
|
311
332
|
import { handleWorkflowTemplatesList } from './workflow-templates.js';
|
|
333
|
+
import { handleGraphsGet, handleGraphsMutation } from './graphs-api.js';
|
|
334
|
+
import { handleGraphKindsGet, handleGraphsValidatePost } from './graph-kinds.js';
|
|
335
|
+
import { handlePluginsIndexGet, handlePluginsGet } from './plugins-market.js';
|
|
312
336
|
import {
|
|
313
337
|
handleWorkflowsList,
|
|
314
338
|
} from './workflows.js';
|
|
@@ -333,7 +357,7 @@ import {
|
|
|
333
357
|
parseTerminalRenamePath,
|
|
334
358
|
parseTerminalsPrunePath,
|
|
335
359
|
parseTerminalTerminatePath,
|
|
336
|
-
parseScrollbackPath,
|
|
360
|
+
parseScrollbackPath, parseTerminalStreamPath, handleTerminalStream,
|
|
337
361
|
parseFramePath,
|
|
338
362
|
parsePngPath,
|
|
339
363
|
} from './terminals.js';
|
|
@@ -345,6 +369,7 @@ import {
|
|
|
345
369
|
parseAgentCliSessionPath,
|
|
346
370
|
} from './agent-cli.js';
|
|
347
371
|
import { handleSessionTurnControl, SESSION_TURN_CONTROL_PATH } from '../../session/session-turn-control.js';
|
|
372
|
+
import { authenticatePodCredential, handlePodGrokCredential, POD_CREDENTIAL_GROK_PATH } from './pod-credential-api.js';
|
|
348
373
|
import { handleOutboundReport } from './outbound-report.js';
|
|
349
374
|
import { handleSelfEvent } from './self-event.js';
|
|
350
375
|
/** 매매 «실행»은 애드온이다(대표 09-20 결정 ③ · 별도 상용 저장소 · release/trading-export.yaml) — 공개 코어엔 없다.
|
|
@@ -359,7 +384,6 @@ import {
|
|
|
359
384
|
parseShowroomLayoutPath,
|
|
360
385
|
} from './showroom-layouts.js';
|
|
361
386
|
|
|
362
|
-
export const DEFAULT_NEXUS_HTTP_PORT = 31415;
|
|
363
387
|
export const NEXUS_HTTP_PORT_RANGE = 16; // try 31415..31430
|
|
364
388
|
/** Short timeout for the pre-bind localhost occupancy probe. */
|
|
365
389
|
export const NEXUS_PORT_PROBE_TIMEOUT_MS = 400;
|
|
@@ -456,6 +480,8 @@ export interface NexusHttpServerOpts {
|
|
|
456
480
|
portRange?: number;
|
|
457
481
|
/** Hostname to bind. Defaults to '127.0.0.1' (loopback). */
|
|
458
482
|
hostname?: string;
|
|
483
|
+
/** 넥서스 기동 때 한 번 정한 셋업 상태. `/v1/health` 가 요청마다 다시 읽지 않고 이 값을 싣는다. */
|
|
484
|
+
setup?: HealthSetupContext;
|
|
459
485
|
/** Optional occupancy probe asked before each bind. Default is a short
|
|
460
486
|
* localhost GET of `/v1/health`. Occupied ports are skipped; probe
|
|
461
487
|
* failures and timeouts fail open as available. */
|
|
@@ -748,7 +774,7 @@ function isPortBusy(err: unknown): boolean {
|
|
|
748
774
|
return /EADDRINUSE|address already in use/i.test(msg);
|
|
749
775
|
}
|
|
750
776
|
|
|
751
|
-
async function routeRequest(
|
|
777
|
+
export async function routeRequest(
|
|
752
778
|
req: Request,
|
|
753
779
|
opts: NexusHttpServerOpts,
|
|
754
780
|
server: BunServerLike,
|
|
@@ -790,6 +816,36 @@ async function routeRequest(
|
|
|
790
816
|
const { pathname } = url;
|
|
791
817
|
const method = req.method;
|
|
792
818
|
|
|
819
|
+
// Default-deny for every `/v1/` path that is not on PUBLIC_ROUTES.
|
|
820
|
+
// Reuses checkAuth (same-origin exemption + constant-time bearer).
|
|
821
|
+
// setupMode is not implemented on this server (P24b) — pass false.
|
|
822
|
+
// Per-route checkAuth calls below stay in place.
|
|
823
|
+
// OPTIONS is a CORS preflight and cannot carry Authorization; existing
|
|
824
|
+
// handlers answer it themselves, so the gate does not swallow it.
|
|
825
|
+
if (
|
|
826
|
+
method !== 'OPTIONS'
|
|
827
|
+
&& pathname.startsWith('/v1/')
|
|
828
|
+
&& !isPublicRoute(method, pathname, { setupMode: false })
|
|
829
|
+
) {
|
|
830
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) {
|
|
831
|
+
const name = method === 'POST' && pathname === '/v1/tasks' && opts.metaApi
|
|
832
|
+
? matchIngestAuthorization(req)?.name
|
|
833
|
+
: undefined;
|
|
834
|
+
if (name === undefined) {
|
|
835
|
+
debug.log('nexus.auth', 'default-deny', { method, pathname });
|
|
836
|
+
// MCP 클라이언트(Claude Code)에게는 «할 일»을 말한다 — 안 그러면 OAuth 로 가서 /register 405 를 만난다.
|
|
837
|
+
if (pathname === '/v1/mcp') return mcpUnauthorizedResponse();
|
|
838
|
+
return jsonResponse({ error: 'unauthorized' }, 401);
|
|
839
|
+
}
|
|
840
|
+
debug.log('nexus.auth', 'ingest-token', { name, pathname });
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
// OAuth 동적 클라이언트 등록(RFC 7591) — Elanous 는 OAuth 를 쓰지 않는다. 405 대신 «이렇게 등록하라»를 돌려준다.
|
|
844
|
+
if (method === 'POST' && pathname === '/register') {
|
|
845
|
+
debug.log('nexus.auth', 'oauth-register-rejected', { pathname });
|
|
846
|
+
return oauthRegistrationRejected();
|
|
847
|
+
}
|
|
848
|
+
|
|
793
849
|
// FU2 (2026-05-12) — root-level browser conveniences. The PWA serves
|
|
794
850
|
// its assets under `/app/*`, but browsers still probe the origin root
|
|
795
851
|
// for `/favicon.ico` and bookmark `/`. Without these two handlers the
|
|
@@ -834,6 +890,21 @@ async function routeRequest(
|
|
|
834
890
|
}
|
|
835
891
|
}
|
|
836
892
|
|
|
893
|
+
if (pathname === LIVE_SHIPPED_PATH) {
|
|
894
|
+
return handleLiveShipped(req, { authorize: (request) => !!opts.metaApi && checkAuth(request, opts.metaApi) });
|
|
895
|
+
}
|
|
896
|
+
if (pathname === LIVE_DETAIL_PATH) {
|
|
897
|
+
return handleLiveDetail(req, {
|
|
898
|
+
authorize: (request) => !!opts.metaApi && checkAuth(request, opts.metaApi),
|
|
899
|
+
});
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
if (pathname === APPROVALS_MERGES_PATH || pathname.startsWith(`${APPROVALS_MERGES_PATH}/`)) {
|
|
903
|
+
return handleMergeApprovals(req, {
|
|
904
|
+
authorize: (request) => !!opts.metaApi && checkAuth(request, opts.metaApi),
|
|
905
|
+
});
|
|
906
|
+
}
|
|
907
|
+
|
|
837
908
|
if (pathname === MCP_RESOURCE_ROUTE_PATH && method === 'GET') {
|
|
838
909
|
if (!opts.metaApi) return jsonResponse({ error: 'mcp-resource-route-not-wired' }, 503);
|
|
839
910
|
return handleMcpResourceGet(req, {
|
|
@@ -1073,16 +1144,77 @@ async function routeRequest(
|
|
|
1073
1144
|
return handleHarnessAskStatusGet(req, opts.metaApi);
|
|
1074
1145
|
}
|
|
1075
1146
|
|
|
1147
|
+
if (pathname === '/v1/harness/run-screen' && method === 'GET') {
|
|
1148
|
+
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-runtime-not-wired' }, 503);
|
|
1149
|
+
if (!checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1150
|
+
return handleHarnessRunScreenGet(req, opts.metaApi);
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1076
1153
|
if (pathname === '/v1/harness/run-events' && method === 'GET') {
|
|
1077
1154
|
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-runtime-not-wired' }, 503);
|
|
1078
1155
|
if (!checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1079
1156
|
return handleHarnessRunEventsGet(req, opts.metaApi);
|
|
1080
1157
|
}
|
|
1081
1158
|
|
|
1159
|
+
// Design direction is a write: check owner auth before the handler reads the body.
|
|
1160
|
+
// Keep this POST ahead of the mutation fallback, and never make it a public route.
|
|
1161
|
+
if (method === 'POST' && pathname === DESIGN_DIRECTION_PATH) {
|
|
1162
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1163
|
+
return handleDesignDirectionPost(req);
|
|
1164
|
+
}
|
|
1165
|
+
// Custom system create is a write that launches an extract. Auth before the body.
|
|
1166
|
+
// The default-deny gate above already refuses anonymous /v1 writes; this check
|
|
1167
|
+
// stays so a future gate change cannot reach the extractor without an owner.
|
|
1168
|
+
if (method === 'POST' && pathname === DESIGN_SYSTEM_PATH) {
|
|
1169
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1170
|
+
// Same-origin exemption is enough for a direction pick. An extract writes a
|
|
1171
|
+
// library and launches Chrome, so it also requires the owner bearer.
|
|
1172
|
+
const owner = opts.metaApi.bearerToken;
|
|
1173
|
+
const offered = (req.headers.get('authorization') ?? '').startsWith('Bearer ')
|
|
1174
|
+
? (req.headers.get('authorization') ?? '').slice('Bearer '.length).trim()
|
|
1175
|
+
: '';
|
|
1176
|
+
if (!owner || offered.length !== owner.length) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1177
|
+
let bearerDiff = 0;
|
|
1178
|
+
for (let i = 0; i < offered.length; i += 1) bearerDiff |= offered.charCodeAt(i) ^ owner.charCodeAt(i);
|
|
1179
|
+
if (bearerDiff !== 0) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1180
|
+
return handleDesignSystemCreate(req);
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
if (method === 'POST' && pathname === '/v1/graphs/validate') {
|
|
1184
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1185
|
+
return handleGraphsValidatePost(req, opts.metaApi);
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1082
1188
|
// Mutation routes (PR ι) — POST/PATCH/DELETE on /v1/nexus/tabs[/:id[/action]].
|
|
1083
1189
|
// Templates POST handled here too (PR κ).
|
|
1084
1190
|
// Config / secrets PUT/POST/DELETE here too (PR μ).
|
|
1085
1191
|
if (method !== 'GET') {
|
|
1192
|
+
if ((method === 'PUT' || method === 'POST') && pathname.startsWith('/v1/graphs/')) {
|
|
1193
|
+
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-not-wired' }, 503);
|
|
1194
|
+
if (!checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1195
|
+
const mutated = await handleGraphsMutation(pathname, req);
|
|
1196
|
+
if (mutated) return mutated;
|
|
1197
|
+
}
|
|
1198
|
+
if (method === 'POST' && pathname === '/v1/tasks') {
|
|
1199
|
+
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-not-wired' }, 503);
|
|
1200
|
+
return handleTaskCreatePost(req, opts.metaApi);
|
|
1201
|
+
}
|
|
1202
|
+
if (method === 'POST' && pathname.startsWith('/v1/tasks/') && pathname.endsWith('/approve')) {
|
|
1203
|
+
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-not-wired' }, 503);
|
|
1204
|
+
let taskId: string;
|
|
1205
|
+
try { taskId = decodeURIComponent(pathname.slice('/v1/tasks/'.length, -'/approve'.length)); }
|
|
1206
|
+
catch { return jsonResponse({ error: 'bad_request', reason: 'invalid taskId' }, 400); }
|
|
1207
|
+
if (!taskId || taskId.includes('/') || taskId.includes('\\') || taskId.includes('..')) {
|
|
1208
|
+
return jsonResponse({ error: 'bad_request', reason: 'invalid taskId' }, 400);
|
|
1209
|
+
}
|
|
1210
|
+
return handleTaskApprovePost(req, taskId, opts.metaApi);
|
|
1211
|
+
}
|
|
1212
|
+
// Pod grok access 재발급. 넥서스 bearer 가 아니라 llm-credential 토큰을 본문 파싱 전에 검증한다.
|
|
1213
|
+
if (pathname === POD_CREDENTIAL_GROK_PATH && method === 'POST') {
|
|
1214
|
+
const gate = await authenticatePodCredential(req);
|
|
1215
|
+
if (!gate.ok) return gate.response;
|
|
1216
|
+
return handlePodGrokCredential(req);
|
|
1217
|
+
}
|
|
1086
1218
|
if (pathname === '/v1/harness/ask' && method === 'POST') {
|
|
1087
1219
|
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-runtime-not-wired' }, 503);
|
|
1088
1220
|
if (!checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
@@ -1171,7 +1303,8 @@ async function routeRequest(
|
|
|
1171
1303
|
}
|
|
1172
1304
|
// B 트랙 closure piece (RFC #2474) — MCP Streamable HTTP transport.
|
|
1173
1305
|
// External MCP clients (Claude Code · Cursor · Codex) register elanous
|
|
1174
|
-
// via `claude mcp add --transport http elanous http://localhost:31415/v1/mcp`
|
|
1306
|
+
// via `claude mcp add --transport http elanous http://localhost:31415/v1/mcp --header "Authorization: Bearer <acp-token>"`
|
|
1307
|
+
// (토큰 없이 붙이면 401 → Claude Code 가 OAuth 를 시도한다 — mcp-oauth-hint.ts)
|
|
1175
1308
|
// and reach the NEXUS daemon's ToolRuntime registry directly — no
|
|
1176
1309
|
// child process spawn (cf. `elanous mcp serve` stdio · #2485), every
|
|
1177
1310
|
// call flows through the PFC capture seam. Placed inside the
|
|
@@ -1200,7 +1333,10 @@ async function routeRequest(
|
|
|
1200
1333
|
return handleRuntimeToolCall(req, opts.metaApi, restToolId);
|
|
1201
1334
|
}
|
|
1202
1335
|
}
|
|
1336
|
+
// ⛔ 설정 쓰기 여섯(스위치·모델 티어·LLM provider·LLM 호스트·회전·미션 제어)은 인증 없이 핸들러에 닿았다
|
|
1337
|
+
// (2026-09-26 🅢 비파괴 탐침: 무인증 PUT → 404/400 · 같은 조건 /v1/config/secrets → 401). PWA 는 same-origin 으로 통과.
|
|
1203
1338
|
if (pathname.startsWith('/v1/config/switches/') && method === 'PUT') {
|
|
1339
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1204
1340
|
const switchId = pathname.slice('/v1/config/switches/'.length);
|
|
1205
1341
|
return handleSwitchPut(req, makeConfigCtx(opts), switchId);
|
|
1206
1342
|
}
|
|
@@ -1213,6 +1349,7 @@ async function routeRequest(
|
|
|
1213
1349
|
// sub-trees into UserConfig (Path A). Validation lives in the
|
|
1214
1350
|
// handler so invalid tier strings can't pollute the file.
|
|
1215
1351
|
if (pathname === '/v1/config/model-tier' && method === 'PUT') {
|
|
1352
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1216
1353
|
const { handleModelTierPut } = await import('./config-model-tier.js');
|
|
1217
1354
|
return handleModelTierPut(req);
|
|
1218
1355
|
}
|
|
@@ -1252,12 +1389,14 @@ async function routeRequest(
|
|
|
1252
1389
|
// PUT + DELETE in the mutation block; GET sits in the GET-only
|
|
1253
1390
|
// block alongside /v1/llm/models.
|
|
1254
1391
|
if (pathname === '/v1/llm/hosts' && (method === 'OPTIONS' || method === 'PUT' || method === 'DELETE')) {
|
|
1392
|
+
if (method !== 'OPTIONS') { if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401); }
|
|
1255
1393
|
return handleLlmHostsConfig(req);
|
|
1256
1394
|
}
|
|
1257
1395
|
// iOS Phase 1.5 (2026-05-13) — provider rotation advance. POST
|
|
1258
1396
|
// here in the mutation block (memory `feedback_post_route_must_be_in_method_block`),
|
|
1259
1397
|
// GET sibling in the GET block below.
|
|
1260
1398
|
if (pathname === '/v1/llm/rotation/next' && (method === 'POST' || method === 'OPTIONS')) {
|
|
1399
|
+
if (method === 'POST') { if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401); }
|
|
1261
1400
|
return handleLlmRotationNext(req);
|
|
1262
1401
|
}
|
|
1263
1402
|
if (pathname === '/v1/llm/rotation' && method === 'OPTIONS') {
|
|
@@ -1267,11 +1406,35 @@ async function routeRequest(
|
|
|
1267
1406
|
// POST 는 mutation 블록 안에서 등록 (memory `feedback_post_route_must_be_in_method_block`).
|
|
1268
1407
|
// GET sibling 은 아래 GET-only 블록에 등록.
|
|
1269
1408
|
if (pathname === '/v1/setup/llm-provider' && (method === 'POST' || method === 'OPTIONS')) {
|
|
1409
|
+
if (method === 'POST') { if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401); }
|
|
1270
1410
|
return handleLlmProviderSet(req);
|
|
1271
1411
|
}
|
|
1272
1412
|
if (pathname === '/v1/setup/llm-providers' && method === 'OPTIONS') {
|
|
1273
1413
|
return handleLlmProvidersList(req);
|
|
1274
1414
|
}
|
|
1415
|
+
if (pathname === '/v1/setup/obsidian' && (method === 'POST' || method === 'OPTIONS')) {
|
|
1416
|
+
if (method === 'OPTIONS') return corsPreflight('POST, OPTIONS');
|
|
1417
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1418
|
+
return handleObsidianSet(req);
|
|
1419
|
+
}
|
|
1420
|
+
if (pathname === '/v1/setup/skills' && (method === 'POST' || method === 'OPTIONS')) {
|
|
1421
|
+
if (method === 'OPTIONS') return corsPreflight('POST, OPTIONS');
|
|
1422
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1423
|
+
return handleSkillsSet(req);
|
|
1424
|
+
}
|
|
1425
|
+
if (pathname === '/v1/setup/obsidian-skills' && method === 'OPTIONS') return corsPreflight('GET, OPTIONS');
|
|
1426
|
+
if (pathname === '/v1/setup/channel-bot' && (method === 'POST' || method === 'OPTIONS')) {
|
|
1427
|
+
if (method === 'OPTIONS') return corsPreflight('POST, OPTIONS');
|
|
1428
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1429
|
+
return handleChannelBotSet(req);
|
|
1430
|
+
}
|
|
1431
|
+
if (pathname === '/v1/setup/channel-bots' && method === 'OPTIONS') return corsPreflight('GET, OPTIONS');
|
|
1432
|
+
if ((pathname === '/v1/setup/child-llm' || pathname === '/v1/setup/answer-priority')
|
|
1433
|
+
&& (method === 'POST' || method === 'OPTIONS')) {
|
|
1434
|
+
if (method === 'OPTIONS') return corsPreflight('GET, POST, OPTIONS');
|
|
1435
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1436
|
+
return pathname === '/v1/setup/child-llm' ? handleChildLlmSet(req) : handleAnswerPrioritySet(req);
|
|
1437
|
+
}
|
|
1275
1438
|
// PWA `/settings` Phase 3 (2026-05-19) — persona description PATCH.
|
|
1276
1439
|
// dispatchPersonaRoute 가 PATCH 분기를 자체 처리. GET sibling 은
|
|
1277
1440
|
// 아래 GET-only 블록의 기존 /v1/personas 핸들러.
|
|
@@ -1580,6 +1743,12 @@ async function routeRequest(
|
|
|
1580
1743
|
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-runtime-not-wired' }, 503);
|
|
1581
1744
|
return handleIntakePipelineCommitPost(req, opts.metaApi);
|
|
1582
1745
|
}
|
|
1746
|
+
// I1 — 판정만. `/v1/intake/` 세션 id 캐치올보다 앞에 둔다(pipeline-preview 와 같은 자리).
|
|
1747
|
+
if (pathname === '/v1/intake/route' && (method === 'POST' || method === 'OPTIONS')) {
|
|
1748
|
+
if (method === 'OPTIONS') return corsPreflight('POST, OPTIONS');
|
|
1749
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1750
|
+
return handleIntakeRoutePost(req);
|
|
1751
|
+
}
|
|
1583
1752
|
if (pathname.startsWith('/v1/intake/')) {
|
|
1584
1753
|
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-runtime-not-wired' }, 503);
|
|
1585
1754
|
const suffix = pathname.slice('/v1/intake/'.length);
|
|
@@ -1765,10 +1934,27 @@ async function routeRequest(
|
|
|
1765
1934
|
return handleTriagePreview(req);
|
|
1766
1935
|
}
|
|
1767
1936
|
if (pathname === '/v1/autopilot/mission-action' && method === 'POST') {
|
|
1937
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1768
1938
|
return handleMissionAction(req);
|
|
1769
1939
|
}
|
|
1940
|
+
// 흡수 원장 입구(RFC-pwa-intake-front-door A3 absorb) — 넣기·추적 둘 다 인증(PWA 칸은 user-private).
|
|
1941
|
+
if (pathname === '/v1/intake-ledger/items' && method === 'POST') {
|
|
1942
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1943
|
+
const { handleIntakeLedgerPost } = await import('./intake-ledger-api.js');
|
|
1944
|
+
return handleIntakeLedgerPost(req);
|
|
1945
|
+
}
|
|
1946
|
+
if (pathname === '/v1/vault/file' && (method === 'PUT' || method === 'OPTIONS')) {
|
|
1947
|
+
if (method === 'OPTIONS') return corsPreflight('PUT, OPTIONS');
|
|
1948
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1949
|
+
return handleVaultFilePut(req);
|
|
1950
|
+
}
|
|
1951
|
+
{
|
|
1952
|
+
const vaultSeg = parseVaultPath(pathname);
|
|
1953
|
+
if (vaultSeg !== null && method === 'OPTIONS') return corsPreflight('GET, OPTIONS');
|
|
1954
|
+
}
|
|
1770
1955
|
// Obsidian Vault PWA 이식 OP0 (2026-07-09) — 템플릿 전개(POST). GET reads 는 아래.
|
|
1771
1956
|
if (pathname === '/v1/vault/template-expand' && method === 'POST') {
|
|
1957
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
1772
1958
|
return handleTemplateExpand(req);
|
|
1773
1959
|
}
|
|
1774
1960
|
// B outbound — unified send: openclaw reports + Conatus alerts POST here
|
|
@@ -1838,7 +2024,10 @@ async function routeRequest(
|
|
|
1838
2024
|
return jsonResponse({ error: 'static-not-wired' }, 404);
|
|
1839
2025
|
}
|
|
1840
2026
|
if (pathname === '/v1/health') {
|
|
1841
|
-
return handleHealth(opts.state, opts.registry, {
|
|
2027
|
+
return handleHealth(opts.state, opts.registry, {
|
|
2028
|
+
bindHost: bind.hostname,
|
|
2029
|
+
...(opts.setup ? { setup: opts.setup } : {}),
|
|
2030
|
+
});
|
|
1842
2031
|
}
|
|
1843
2032
|
if (pathname === '/v1/nexus') return handleNexusSnapshot(opts.state, opts.registry);
|
|
1844
2033
|
if (pathname === '/v1/nexus/tabs') return handleTabsList(opts.registry, url);
|
|
@@ -1923,6 +2112,13 @@ async function routeRequest(
|
|
|
1923
2112
|
return handleTerminalRunParticipants(req, opts.metaApi, runId);
|
|
1924
2113
|
}
|
|
1925
2114
|
}
|
|
2115
|
+
{
|
|
2116
|
+
const streamId = parseTerminalStreamPath(pathname);
|
|
2117
|
+
if (streamId !== null) {
|
|
2118
|
+
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-runtime-not-wired' }, 503);
|
|
2119
|
+
return handleTerminalStream(req, opts.metaApi, streamId);
|
|
2120
|
+
}
|
|
2121
|
+
}
|
|
1926
2122
|
{
|
|
1927
2123
|
const scrollbackId = parseScrollbackPath(pathname);
|
|
1928
2124
|
if (scrollbackId !== null) {
|
|
@@ -1979,6 +2175,15 @@ async function routeRequest(
|
|
|
1979
2175
|
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-runtime-not-wired' }, 503);
|
|
1980
2176
|
return handleLogsQuery(req, opts.metaApi);
|
|
1981
2177
|
}
|
|
2178
|
+
// Trace (v6 T1 · 2026-09-28) — 판단 사슬 L0–L3 ⊕ 증거 한 줄. 읽기만 한다.
|
|
2179
|
+
if (pathname === '/v1/trace' && method === 'GET') {
|
|
2180
|
+
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-runtime-not-wired' }, 503);
|
|
2181
|
+
return handleTrace(req, opts.metaApi);
|
|
2182
|
+
}
|
|
2183
|
+
if (pathname.startsWith('/v1/trace/evidence/') && method === 'GET') {
|
|
2184
|
+
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-runtime-not-wired' }, 503);
|
|
2185
|
+
return handleTraceEvidence(req, opts.metaApi, pathname.slice('/v1/trace/evidence/'.length));
|
|
2186
|
+
}
|
|
1982
2187
|
if (pathname === '/v1/logs/stream' && method === 'GET') {
|
|
1983
2188
|
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-runtime-not-wired' }, 503);
|
|
1984
2189
|
return handleLogsStream(req, opts.metaApi);
|
|
@@ -2044,6 +2249,7 @@ async function routeRequest(
|
|
|
2044
2249
|
{
|
|
2045
2250
|
const seg = parseVaultPath(pathname);
|
|
2046
2251
|
if (seg !== null) {
|
|
2252
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
2047
2253
|
return handleVaultGet(req, seg);
|
|
2048
2254
|
}
|
|
2049
2255
|
}
|
|
@@ -2072,6 +2278,18 @@ async function routeRequest(
|
|
|
2072
2278
|
if (pathname === '/v1/setup/llm-providers') {
|
|
2073
2279
|
return handleLlmProvidersList(req);
|
|
2074
2280
|
}
|
|
2281
|
+
if (pathname === '/v1/setup/obsidian-skills') {
|
|
2282
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
2283
|
+
return handleObsidianSkillsGet();
|
|
2284
|
+
}
|
|
2285
|
+
if (pathname === '/v1/setup/channel-bots') {
|
|
2286
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
2287
|
+
return handleChannelBotsGet();
|
|
2288
|
+
}
|
|
2289
|
+
if (pathname === '/v1/setup/child-llm' || pathname === '/v1/setup/answer-priority') {
|
|
2290
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
2291
|
+
return pathname === '/v1/setup/child-llm' ? handleChildLlmGet() : handleAnswerPriorityGet();
|
|
2292
|
+
}
|
|
2075
2293
|
// P1-FU1 (2026-05-14) — mission router prediction is POST-only.
|
|
2076
2294
|
// GET reaches here AFTER the mutation block (which only fires when
|
|
2077
2295
|
// `method !== 'GET'`); routing the path here lets the handler
|
|
@@ -2106,6 +2324,12 @@ async function routeRequest(
|
|
|
2106
2324
|
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-runtime-not-wired' }, 503);
|
|
2107
2325
|
return handleIntakeListGet(req, url, opts.metaApi);
|
|
2108
2326
|
}
|
|
2327
|
+
// 흡수 원장 추적 — 인증 필수(PWA 칸은 user-private · 넣기는 위 method!=='GET' 블록).
|
|
2328
|
+
if (pathname.startsWith('/v1/intake-ledger/items/')) {
|
|
2329
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
2330
|
+
const { handleIntakeLedgerGet } = await import('./intake-ledger-api.js');
|
|
2331
|
+
return handleIntakeLedgerGet(decodeURIComponent(pathname.slice('/v1/intake-ledger/items/'.length)));
|
|
2332
|
+
}
|
|
2109
2333
|
// I10 (2026-05-12) — dogfood retrospective. Reads recent rows from
|
|
2110
2334
|
// ~/.elanous/intake/pipeline-runs.jsonl + aggregates across the full
|
|
2111
2335
|
// file. Sibling to the POST emitters (pipeline-preview / commit ·
|
|
@@ -2168,6 +2392,28 @@ async function routeRequest(
|
|
|
2168
2392
|
// 접근. 둘 다 process-singleton store (TaskStore · getSchedulerStore)
|
|
2169
2393
|
// 라 zero-migration. metaApi 미wired 환경에서는 503 — daemon-public
|
|
2170
2394
|
// grace-window 가 닫힌 후에도 PWA 가 stable error 만 보도록.
|
|
2395
|
+
if (pathname === '/v1/schedules' && method === 'GET') {
|
|
2396
|
+
if (!opts.metaApi) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
2397
|
+
return handleSchedulesList(req, opts.metaApi);
|
|
2398
|
+
}
|
|
2399
|
+
const scheduleRunsMatch = /^\/v1\/schedules\/([^/]+)\/runs$/.exec(pathname);
|
|
2400
|
+
if (scheduleRunsMatch && method === 'GET') {
|
|
2401
|
+
if (!opts.metaApi) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
2402
|
+
let id: string;
|
|
2403
|
+
try { id = decodeURIComponent(scheduleRunsMatch[1]!); }
|
|
2404
|
+
catch { return jsonResponse({ error: 'bad_request' }, 400); }
|
|
2405
|
+
return handleScheduleRuns(req, id, opts.metaApi);
|
|
2406
|
+
}
|
|
2407
|
+
if (pathname.startsWith('/v1/schedules/') && method === 'GET') {
|
|
2408
|
+
if (!opts.metaApi) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
2409
|
+
let id: string;
|
|
2410
|
+
try { id = decodeURIComponent(pathname.slice('/v1/schedules/'.length)); }
|
|
2411
|
+
catch { return jsonResponse({ error: 'bad_request' }, 400); }
|
|
2412
|
+
return handleScheduleDetail(req, id, opts.metaApi);
|
|
2413
|
+
}
|
|
2414
|
+
if (pathname === '/v1/task-cards' || /^\/v1\/task-cards\/[^/]+$/.test(pathname)) {
|
|
2415
|
+
return handleTaskCardsGet(pathname);
|
|
2416
|
+
}
|
|
2171
2417
|
if (pathname === '/v1/tasks') {
|
|
2172
2418
|
if (!opts.metaApi) return jsonResponse({ error: 'meta-api-not-wired' }, 503);
|
|
2173
2419
|
return handleTasksList(req, opts.metaApi);
|
|
@@ -2185,6 +2431,18 @@ async function routeRequest(
|
|
|
2185
2431
|
// surface (`/v1/workflows` · `~/.elanous/workflows-runs/`) covers the same
|
|
2186
2432
|
// user need.
|
|
2187
2433
|
|
|
2434
|
+
if (method === 'GET' && (pathname === '/v1/plugins/index' || pathname === '/v1/plugins')) {
|
|
2435
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
2436
|
+
return pathname === '/v1/plugins/index' ? handlePluginsIndexGet(req, opts.metaApi) : handlePluginsGet(req, opts.metaApi);
|
|
2437
|
+
}
|
|
2438
|
+
if (method === 'GET' && pathname === '/v1/graph/kinds') {
|
|
2439
|
+
if (!opts.metaApi || !checkAuth(req, opts.metaApi)) return jsonResponse({ error: 'unauthorized' }, 401);
|
|
2440
|
+
return handleGraphKindsGet(req, opts.metaApi);
|
|
2441
|
+
}
|
|
2442
|
+
// F-M1 read + P-F1 raw YAML. Writes live in the mutation block and never touch core graphs/.
|
|
2443
|
+
if (method === 'GET' && (pathname === '/v1/graphs' || /^\/v1\/graphs\/[^/]+$/.test(pathname) || /^\/v1\/graphs\/[^/]+\/yaml$/.test(pathname))) {
|
|
2444
|
+
return handleGraphsGet(pathname);
|
|
2445
|
+
}
|
|
2188
2446
|
// Archon-port T2.3 (2026-05-08) — workflow GET surface.
|
|
2189
2447
|
// (POST /validate · POST /:name/run · PUT/DELETE /:name landed
|
|
2190
2448
|
// inside the mutation block above.)
|
|
@@ -2286,6 +2544,7 @@ async function routeRequest(
|
|
|
2286
2544
|
...(ci?.acpTokenPath !== undefined ? { acpTokenPath: ci.acpTokenPath } : {}),
|
|
2287
2545
|
...(ci?.acpTokenOverride !== undefined ? { acpTokenOverride: ci.acpTokenOverride } : {}),
|
|
2288
2546
|
...(requestHost ? { requestHost } : {}),
|
|
2547
|
+
allowAutoToken: connectInfoTokenAllowed(req.headers.get('origin'), requestHost || null),
|
|
2289
2548
|
};
|
|
2290
2549
|
return handleConnectInfoGet(ctx);
|
|
2291
2550
|
}
|
|
@@ -2369,6 +2628,10 @@ async function routeRequest(
|
|
|
2369
2628
|
// B4 — the `elanous repo design-check` verdict over the wire, so the PWA
|
|
2370
2629
|
// renders the SAME resolution the CLI prints instead of re-deriving it.
|
|
2371
2630
|
if (pathname === '/v1/design-check') return handleDesignCheck();
|
|
2631
|
+
// RFC design loop §A2 — HTML previews under the same repository as design-check.
|
|
2632
|
+
if (pathname === DESIGN_PREVIEWS_PATH || pathname.startsWith(DESIGN_PREVIEW_PATH_PREFIX)) {
|
|
2633
|
+
return handleDesignPreviews(pathname);
|
|
2634
|
+
}
|
|
2372
2635
|
// RFC #2161 Phase 3 — Layer A static catalog snapshot. Read-only ·
|
|
2373
2636
|
// refreshed on demand by the PWA Showroom dropdown + future
|
|
2374
2637
|
// LlmCatalogCard. Phase 5 adds /v1/registry/resolved for live
|
|
@@ -2442,36 +2705,4 @@ export function parseTelegramDispatchEvent(body: unknown): TelegramEvent | null
|
|
|
2442
2705
|
};
|
|
2443
2706
|
}
|
|
2444
2707
|
|
|
2445
|
-
export
|
|
2446
|
-
return new Response(JSON.stringify(body), {
|
|
2447
|
-
status,
|
|
2448
|
-
headers: {
|
|
2449
|
-
'content-type': 'application/json; charset=utf-8',
|
|
2450
|
-
// micro.1 (2026-05-09 · FU.4 envelope audit recommendation #2
|
|
2451
|
-
// enforce-by-default) — every JSON envelope now carries the
|
|
2452
|
-
// CORS allow-origin wildcard so PWA dev (cross-port) + future
|
|
2453
|
-
// remote dogfood (Tailscale URL) reach the daemon without
|
|
2454
|
-
// per-endpoint patching. Production same-origin is unaffected
|
|
2455
|
-
// (browsers ignore the header on same-origin requests). elanous
|
|
2456
|
-
// daemon uses bearer-token auth only (no cookies), so the
|
|
2457
|
-
// wildcard does not conflict with `credentials: include`.
|
|
2458
|
-
'access-control-allow-origin': '*',
|
|
2459
|
-
},
|
|
2460
|
-
});
|
|
2461
|
-
}
|
|
2462
|
-
|
|
2463
|
-
/** OPTIONS preflight response for JSON-body POST/PUT/DELETE routes
|
|
2464
|
-
* in the mutation block. Mirrors the audio-stt + role-judge pattern
|
|
2465
|
-
* so any new POST endpoint gets cross-origin support with one line:
|
|
2466
|
-
* `if (... && method === 'OPTIONS') return corsPreflight();`. */
|
|
2467
|
-
export function corsPreflight(allowedMethods = 'POST, PUT, DELETE, OPTIONS'): Response {
|
|
2468
|
-
return new Response(null, {
|
|
2469
|
-
status: 204,
|
|
2470
|
-
headers: {
|
|
2471
|
-
'access-control-allow-origin': '*',
|
|
2472
|
-
'access-control-allow-methods': allowedMethods,
|
|
2473
|
-
'access-control-allow-headers': 'content-type, authorization',
|
|
2474
|
-
'access-control-max-age': '600',
|
|
2475
|
-
},
|
|
2476
|
-
});
|
|
2477
|
-
}
|
|
2708
|
+
export { corsPreflight, jsonResponse } from './json-response.js';
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
// - sha256(prompt+ts) for deterministic uniqueness without random
|
|
53
53
|
// - .png because gpt-image-2 default; future variants pick by mime
|
|
54
54
|
|
|
55
|
+
import { assertVaultWriteAllowed } from '../../obsidian/vault-write-guard.js';
|
|
55
56
|
import { mkdirSync, writeFileSync, existsSync } from 'node:fs';
|
|
56
57
|
import { join, dirname } from 'node:path';
|
|
57
58
|
import { createHash } from 'node:crypto';
|
|
@@ -251,6 +252,7 @@ export async function handleImageGenerate(
|
|
|
251
252
|
const relPath = buildRelPath({ ts, prompt });
|
|
252
253
|
const absPath = join(opts.vault.root, relPath);
|
|
253
254
|
try {
|
|
255
|
+
assertVaultWriteAllowed(absPath); // ⛔ 격리 우주는 운영 볼트에 쓰지 않는다(아래 catch 가 500 과 사유로 돌려준다)
|
|
254
256
|
mkdirSync(dirname(absPath), { recursive: true });
|
|
255
257
|
const bytes = Buffer.from(b64, 'base64');
|
|
256
258
|
writeFileSync(absPath, bytes);
|
|
@@ -441,6 +443,7 @@ export async function handleImageEdit(
|
|
|
441
443
|
const relPath = buildRelPath({ ts, prompt: `edit:${prompt}` });
|
|
442
444
|
const absPath = join(opts.vault.root, relPath);
|
|
443
445
|
try {
|
|
446
|
+
assertVaultWriteAllowed(absPath); // ⛔ 격리 우주는 운영 볼트에 쓰지 않는다(아래 catch 가 500 과 사유로 돌려준다)
|
|
444
447
|
mkdirSync(dirname(absPath), { recursive: true });
|
|
445
448
|
const bytes = Buffer.from(b64, 'base64');
|
|
446
449
|
writeFileSync(absPath, bytes);
|