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
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { readdirSync, readFileSync, statSync } from 'node:fs';
|
|
2
2
|
import { join, normalize } from 'node:path/posix';
|
|
3
3
|
import type { GoalType } from './goal-author.js';
|
|
4
|
-
import {
|
|
4
|
+
import type { UserConfig } from '../user-config.js';
|
|
5
5
|
import ts from 'typescript';
|
|
6
|
-
import { resolveRunControl } from './run-controls.js';
|
|
7
6
|
import {
|
|
8
7
|
GRAPH_SPECS,
|
|
9
8
|
GRAPH_TEMPLATES,
|
|
@@ -19,50 +18,37 @@ import { applyGraphOverlays, selectOverlays, type GraphOverlaySpec, type Overlay
|
|
|
19
18
|
import type { OverlayPatch } from './graph-overlay.js';
|
|
20
19
|
import type { GraphTemplateSpec } from './graph-yaml.js';
|
|
21
20
|
|
|
22
|
-
/**
|
|
23
|
-
|
|
24
|
-
* ⭐ **실행 기본은 user-config adapter에서 켜짐**이다. 명시로 끈 상태에서는 종전과
|
|
25
|
-
* «같은» 걸음이어야 한다 — 그것이 이 모듈의 첫째 반증이다.
|
|
26
|
-
*
|
|
27
|
-
* ⛔ **「아무도 정하지 않았다」와 「명시로 켰다/껐다」를 가른다** — `source` 가 그 축이다.
|
|
28
|
-
* (`observeOnlySource` 의 선례를 그대로 따른다: 그것을 안 갈라서 측정이 한 번 무효가 됐다.) */
|
|
29
|
-
export type GraphAuthoritySource = 'flag' | 'config' | 'default';
|
|
21
|
+
/** 2026-09-26 설정 졸업 — 그래프 권위는 항상 켬. 관측 출처는 default로 고정한다. */
|
|
22
|
+
export type GraphAuthoritySource = 'default';
|
|
30
23
|
|
|
31
24
|
export interface GraphAuthority {
|
|
32
25
|
readonly enabled: boolean;
|
|
33
26
|
readonly source: GraphAuthoritySource;
|
|
34
27
|
}
|
|
35
28
|
|
|
36
|
-
/**
|
|
37
|
-
export function resolveGraphAuthority(
|
|
29
|
+
/** 옛 호출자의 입력은 해석하지 않는다. 권위는 항상 켜져 있다. */
|
|
30
|
+
export function resolveGraphAuthority(_input: {
|
|
38
31
|
readonly flag?: boolean | undefined;
|
|
39
32
|
readonly config?: boolean | undefined;
|
|
40
|
-
}): GraphAuthority {
|
|
41
|
-
|
|
42
|
-
...(input.flag === undefined ? {} : { flag: { graph: input.flag } }),
|
|
43
|
-
...(input.config === undefined ? {} : { config: { graph: input.config } }),
|
|
44
|
-
});
|
|
45
|
-
return { enabled: resolved.value as boolean, source: resolved.source === 'prefix' ? 'flag' : resolved.source };
|
|
33
|
+
} = {}): GraphAuthority {
|
|
34
|
+
return { enabled: true, source: 'default' };
|
|
46
35
|
}
|
|
47
36
|
|
|
48
37
|
export function resolveGraphAuthorityForUserConfig(
|
|
49
|
-
|
|
50
|
-
|
|
38
|
+
_config?: UserConfig,
|
|
39
|
+
_flag?: boolean,
|
|
51
40
|
): GraphAuthority {
|
|
52
|
-
|
|
53
|
-
if (flag !== undefined) return resolveGraphAuthority({ flag, ...(graphConfig === undefined ? {} : { config: graphConfig }) });
|
|
54
|
-
if (graphConfig !== undefined) return resolveGraphAuthority({ config: graphConfig });
|
|
55
|
-
return { enabled: config.tools.selfImplement.graphAuthoritative, source: 'default' };
|
|
41
|
+
return { enabled: true, source: 'default' };
|
|
56
42
|
}
|
|
57
43
|
|
|
58
|
-
/** 이 런이 실제로 따를 템플릿.
|
|
44
|
+
/** 이 런이 실제로 따를 템플릿. 기존 비권위 입력을 직접 주입한 호출은 구현 루프로 폴백한다. */
|
|
59
45
|
export function activeTemplate(goalType: GoalType | undefined, authority: GraphAuthority): GraphTemplate {
|
|
60
46
|
const implementLoop = GRAPH_TEMPLATES['self-implement'] as GraphTemplate;
|
|
61
47
|
if (!authority.enabled) return implementLoop;
|
|
62
48
|
return templateForGoalType(goalType) ?? implementLoop;
|
|
63
49
|
}
|
|
64
50
|
|
|
65
|
-
/** 앞단 관측의 구현 골 정체성.
|
|
51
|
+
/** 앞단 관측의 구현 골 정체성. implement의 활성 템플릿을 사용한다. */
|
|
66
52
|
export function activeImplementTemplate(): GraphTemplate {
|
|
67
53
|
return activeTemplate('implement', resolveGraphAuthority({}));
|
|
68
54
|
}
|
|
@@ -292,8 +278,7 @@ export function graphAuthorityFields(authority: GraphAuthority, template: GraphT
|
|
|
292
278
|
* 목적지 목록으로 접어 버려서 패치 포인터가 가리킬 자리가 «없다».
|
|
293
279
|
* ⛔ **선택을 «전부» 낸다** — 얹힌 것만 내면 「왜 안 얹혔나」를 못 묻는다
|
|
294
280
|
* (`wrong-stage` · `does-not-apply` · `key-absent` · `unparseable` 이 서로 다른 처방이다).
|
|
295
|
-
* ⛔ **거절은 조용하지 않다** — 패치가 안 물면 `rejections` 로 나오고 «기준 선언»이 그대로 산다.
|
|
296
|
-
* ⛔ 승격이 꺼져 있으면 «변형도 없다» — 오늘과 같은 걸음이어야 한다(이 모듈의 첫째 반증). */
|
|
281
|
+
* ⛔ **거절은 조용하지 않다** — 패치가 안 물면 `rejections` 로 나오고 «기준 선언»이 그대로 산다. */
|
|
297
282
|
/** 오버레이 조건이 «읽을 수 있는» 상태 키. ⛔ 여기 없는 키는 원장에 값이 안 실린다.
|
|
298
283
|
* 🔑 그래서 «떨어뜨리되 말은 한다» — 아래 `stateExtraKeys` 가 그 이름을 남긴다. */
|
|
299
284
|
export const OVERLAY_STATE_KEYS = ['attempts', 'goal_id'] as const;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { parse as parseYaml } from 'yaml';
|
|
4
|
+
import type { GraphNodeKind, GraphTemplateSpec } from './graph-yaml.js';
|
|
5
|
+
|
|
6
|
+
export interface NodeCatalogRole {
|
|
7
|
+
readonly kind: GraphNodeKind;
|
|
8
|
+
readonly outcomes: readonly string[];
|
|
9
|
+
readonly spawn: string;
|
|
10
|
+
readonly grain: string;
|
|
11
|
+
readonly effects: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface NodeCatalog {
|
|
15
|
+
readonly roles: Map<string, NodeCatalogRole>;
|
|
16
|
+
readonly kinds: string[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Catalog location follows this repository's source, not the caller's working directory. */
|
|
20
|
+
export function loadNodeCatalog(path = join(import.meta.dir, '../../graphs/catalog/catalog.yaml')): NodeCatalog {
|
|
21
|
+
const doc = parseYaml(readFileSync(path, 'utf8')) as {
|
|
22
|
+
kinds: { existing: string[]; proposed: Record<string, string> };
|
|
23
|
+
roles: Array<{ role: string; kind: GraphNodeKind; outcomes: string[]; spawn: string; grain: string; effects: string }>;
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
roles: new Map(doc.roles.map(({ role, kind, outcomes, spawn, grain, effects }) =>
|
|
27
|
+
[role, { kind, outcomes, spawn, grain, effects }])),
|
|
28
|
+
kinds: [...doc.kinds.existing, ...Object.keys(doc.kinds.proposed)],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface RecipeCatalogIssue {
|
|
33
|
+
readonly nodeId: string;
|
|
34
|
+
readonly recipe: string;
|
|
35
|
+
readonly problem: 'unknown-role' | 'kind-mismatch';
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Declaration-only inspection: existing recipes are reported, never rejected at execution time. */
|
|
39
|
+
export function inspectRecipesAgainstCatalog(template: GraphTemplateSpec, catalog: NodeCatalog): RecipeCatalogIssue[] {
|
|
40
|
+
const issues: RecipeCatalogIssue[] = [];
|
|
41
|
+
for (const { nodeId, kind, recipe } of template.nodes) {
|
|
42
|
+
if (recipe === 'none' || recipe.startsWith('cmd:') || recipe.startsWith('approval:') || recipe.startsWith('wf:')) continue;
|
|
43
|
+
const role = catalog.roles.get(recipe);
|
|
44
|
+
if (!role) issues.push({ nodeId, recipe, problem: 'unknown-role' });
|
|
45
|
+
else if (kind !== role.kind) issues.push({ nodeId, recipe, problem: 'kind-mismatch' });
|
|
46
|
+
}
|
|
47
|
+
return issues;
|
|
48
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/** ⭐ 런 계약 — 그래프가 «시작할 때 한 번» 정하고 모든 노드가 따르는 약속(대표 2026-09-26).
|
|
2
|
+
*
|
|
3
|
+
* 대표: «초반에 계약을 기술하면 안에 있는 그래프 노드들이 그 계약(원격)을 준수하는 구조».
|
|
4
|
+
* 🩸 그 전까지 그래프 선언에는 «실행 칸»을 적을 자리가 없었다(`graph-yaml.ts` 최상위 칸 여덟).
|
|
5
|
+
* `--substrate pod` 는 CLI 갈래였고, Pod 안의 그래프는 자기가 Pod 인 줄 몰랐다 —
|
|
6
|
+
* 그래서 Pod 안에서 `completion: worktree-only` 로 끝나면 결과가 Pod 와 함께 사라질 수 있었다.
|
|
7
|
+
*
|
|
8
|
+
* 해석 순서(먼저 있는 것이 이긴다): 발사 인자 → 부모가 실어 준 계약(env) → 그래프 선언 → 기본(local).
|
|
9
|
+
* ⛔ 계약은 런 안에서 «바뀌지 않는다» — 미래 노드를 바꾸는 것은 계약에서 «파생»된 오버레이다(RFC §4.3 ⑴).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export type RunSubstrate = 'local' | 'pod';
|
|
13
|
+
/** 허용 부작용(우주 RFC #20662 A3) — 발급 자격과 «짝»으로 검증된다(시크릿 콜렉션 뒤). */
|
|
14
|
+
export type RunEffects = 'none' | 'draft-pr' | 'merge' | 'outbound';
|
|
15
|
+
const EFFECTS: readonly RunEffects[] = ['none', 'draft-pr', 'merge', 'outbound'];
|
|
16
|
+
export function isRunEffects(value: unknown): value is RunEffects {
|
|
17
|
+
return typeof value === 'string' && (EFFECTS as readonly string[]).includes(value);
|
|
18
|
+
}
|
|
19
|
+
export type RunContractSource = 'launch' | 'parent' | 'graph' | 'default';
|
|
20
|
+
|
|
21
|
+
export interface RunContract {
|
|
22
|
+
readonly substrate: RunSubstrate;
|
|
23
|
+
readonly source: RunContractSource;
|
|
24
|
+
/** 주입 프로필 이름(우주 RFC #20662 A1) — 없으면 «선언 안 됨». */
|
|
25
|
+
readonly profile?: string;
|
|
26
|
+
readonly profileSource?: RunContractSource;
|
|
27
|
+
readonly effects?: RunEffects;
|
|
28
|
+
readonly effectsSource?: RunContractSource;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** 그래프 YAML 의 `run_contract:` 칸(선택). */
|
|
32
|
+
export interface GraphRunContractSpec {
|
|
33
|
+
readonly substrate?: RunSubstrate;
|
|
34
|
+
readonly profile?: string;
|
|
35
|
+
readonly effects?: RunEffects;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** 부모가 자식(Pod)에게 계약을 싣는 환경 변수. */
|
|
39
|
+
export const RUN_CONTRACT_ENV = 'ELANOUS_RUN_CONTRACT';
|
|
40
|
+
/** 지금 프로세스가 «실제로» 어느 칸에서 도는가 — Pod 매니페스트가 단다. */
|
|
41
|
+
export const ACTUAL_SUBSTRATE_ENV = 'ELANOUS_SUBSTRATE';
|
|
42
|
+
|
|
43
|
+
export function isRunSubstrate(value: unknown): value is RunSubstrate {
|
|
44
|
+
return value === 'local' || value === 'pod';
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const PROFILE_NAME = /^[A-Za-z0-9][A-Za-z0-9_-]*$/u;
|
|
48
|
+
|
|
49
|
+
export function parseGraphRunContract(raw: unknown): { spec?: GraphRunContractSpec; error?: string } {
|
|
50
|
+
if (raw === undefined) return {};
|
|
51
|
+
if (raw === null || typeof raw !== 'object') return { error: 'run_contract 는 맵이어야 한다' };
|
|
52
|
+
const r = raw as Record<string, unknown>;
|
|
53
|
+
if (r.substrate !== undefined && !isRunSubstrate(r.substrate)) return { error: `run_contract.substrate 는 local|pod (받은 값: ${JSON.stringify(r.substrate)})` };
|
|
54
|
+
if (r.profile !== undefined && (typeof r.profile !== 'string' || !PROFILE_NAME.test(r.profile))) return { error: `run_contract.profile 은 이름(영숫자·-·_) (받은 값: ${JSON.stringify(r.profile)})` };
|
|
55
|
+
if (r.effects !== undefined && !isRunEffects(r.effects)) return { error: `run_contract.effects 는 ${EFFECTS.join('|')} (받은 값: ${JSON.stringify(r.effects)})` };
|
|
56
|
+
return { spec: { ...(r.substrate !== undefined ? { substrate: r.substrate as RunSubstrate } : {}), ...(r.profile !== undefined ? { profile: r.profile as string } : {}), ...(r.effects !== undefined ? { effects: r.effects as RunEffects } : {}) } };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function resolveRunContract(input: {
|
|
60
|
+
launch?: RunSubstrate;
|
|
61
|
+
launchProfile?: string;
|
|
62
|
+
launchEffects?: RunEffects;
|
|
63
|
+
graph?: GraphRunContractSpec;
|
|
64
|
+
env?: NodeJS.ProcessEnv;
|
|
65
|
+
}): RunContract {
|
|
66
|
+
const carried = readCarriedContract(input.env ?? process.env);
|
|
67
|
+
// 칸마다 따로 푼다 — 발사 인자 → 부모가 실은 계약 → 그래프 선언 → 기본.
|
|
68
|
+
const pick = <T>(launch: T | undefined, parent: T | undefined, graph: T | undefined): { value?: T; source?: RunContractSource } =>
|
|
69
|
+
launch !== undefined ? { value: launch, source: 'launch' }
|
|
70
|
+
: parent !== undefined ? { value: parent, source: 'parent' }
|
|
71
|
+
: graph !== undefined ? { value: graph, source: 'graph' } : {};
|
|
72
|
+
const sub = pick(input.launch, carried?.substrate, input.graph?.substrate);
|
|
73
|
+
const profile = pick(input.launchProfile, carried?.profile, input.graph?.profile);
|
|
74
|
+
const effects = pick(input.launchEffects, carried?.effects, input.graph?.effects);
|
|
75
|
+
return {
|
|
76
|
+
substrate: sub.value ?? 'local', source: sub.source ?? 'default',
|
|
77
|
+
...(profile.value !== undefined ? { profile: profile.value, profileSource: profile.source! } : {}),
|
|
78
|
+
...(effects.value !== undefined ? { effects: effects.value, effectsSource: effects.source! } : {}),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function readCarriedContract(env: NodeJS.ProcessEnv): { substrate?: RunSubstrate; profile?: string; effects?: RunEffects } | null {
|
|
83
|
+
const raw = env[RUN_CONTRACT_ENV]?.trim();
|
|
84
|
+
if (!raw) return null;
|
|
85
|
+
try {
|
|
86
|
+
const parsed = JSON.parse(raw) as { substrate?: unknown; profile?: unknown; effects?: unknown };
|
|
87
|
+
const out = {
|
|
88
|
+
...(isRunSubstrate(parsed.substrate) ? { substrate: parsed.substrate } : {}),
|
|
89
|
+
...(typeof parsed.profile === 'string' && PROFILE_NAME.test(parsed.profile) ? { profile: parsed.profile } : {}),
|
|
90
|
+
...(isRunEffects(parsed.effects) ? { effects: parsed.effects } : {}),
|
|
91
|
+
};
|
|
92
|
+
return Object.keys(out).length > 0 ? out : null;
|
|
93
|
+
} catch { return null; }
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** 자식에게 실을 값 — 부모가 정한 계약을 그대로 넘긴다(자식이 다시 고르지 않는다). */
|
|
97
|
+
export function carryRunContract(contract: Pick<RunContract, 'substrate'> & Partial<Pick<RunContract, 'profile' | 'effects'>>): string {
|
|
98
|
+
return JSON.stringify({ substrate: contract.substrate, ...(contract.profile ? { profile: contract.profile } : {}), ...(contract.effects ? { effects: contract.effects } : {}) });
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function actualSubstrate(env: NodeJS.ProcessEnv = process.env): RunSubstrate {
|
|
102
|
+
return env[ACTUAL_SUBSTRATE_ENV] === 'pod' ? 'pod' : 'local';
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** 노드 진입마다 싣는 대조 — 「이 걸음이 계약대로의 칸에서 났나」를 원장이 답하게 한다. */
|
|
106
|
+
export function runContractAtNode(contract: RunContract, env: NodeJS.ProcessEnv = process.env): {
|
|
107
|
+
readonly contractSubstrate: RunSubstrate;
|
|
108
|
+
readonly actualSubstrate: RunSubstrate;
|
|
109
|
+
readonly contractHonored: boolean;
|
|
110
|
+
readonly profile?: string;
|
|
111
|
+
readonly effects?: RunEffects;
|
|
112
|
+
/** 발급 자격 ↔ effects 짝. ⛔ 시크릿 콜렉션(발급 원장)이 서기 전엔 잴 수 없다 — true 로 채우지 않는다. */
|
|
113
|
+
readonly effectsHonored: boolean | 'unmeasured';
|
|
114
|
+
} {
|
|
115
|
+
const actual = actualSubstrate(env);
|
|
116
|
+
return {
|
|
117
|
+
contractSubstrate: contract.substrate, actualSubstrate: actual, contractHonored: actual === contract.substrate,
|
|
118
|
+
...(contract.profile !== undefined ? { profile: contract.profile } : {}),
|
|
119
|
+
...(contract.effects !== undefined ? { effects: contract.effects } : {}),
|
|
120
|
+
effectsHonored: 'unmeasured',
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** 계약에서 파생된 완료 하한 — Pod 는 끝나면 사라지므로 작업 트리로만 끝내면 결과가 없어진다. */
|
|
125
|
+
export function completionFloorFor(contract: Pick<RunContract, 'substrate'>): 'pr' | null {
|
|
126
|
+
return contract.substrate === 'pod' ? 'pr' : null;
|
|
127
|
+
}
|
|
@@ -4,7 +4,8 @@ import { dirname, join } from 'node:path';
|
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
5
|
import ts from 'typescript';
|
|
6
6
|
import { GOAL_TYPES, type GoalType } from './goal-author.js';
|
|
7
|
-
import
|
|
7
|
+
import type { GraphRunContractSpec } from './graph-run-contract.js';
|
|
8
|
+
import { edgeMapOf, loadGraphTemplates, type GraphNodeContract, type GraphNodeKind, type GraphNodeSpec, type GraphTemplateSpec } from './graph-yaml.js';
|
|
8
9
|
|
|
9
10
|
/** ⭐ RFC §5 «3단계» — 템플릿을 «데이터»로 둔다(RFC §4.1 어휘).
|
|
10
11
|
*
|
|
@@ -13,14 +14,17 @@ import { edgeMapOf, loadGraphTemplates, type GraphNodeContract, type GraphNodeSp
|
|
|
13
14
|
* 이 선언은 한때 그림자였으나, 승격 게이트 넷이 2026-09-08에 모두 서서 대표 승인으로 승격했다.
|
|
14
15
|
* 정정 이력과 게이트 근거는 `내부 문서 `RFC-graph-engineering-for-the-harness-2026-09-07``를 따른다.
|
|
15
16
|
*
|
|
16
|
-
* ⛔
|
|
17
|
-
export type GraphNodeKind
|
|
17
|
+
* ⛔ RFC §7 의 kind 어휘 제한은 2026-09-26 지시로 열렸다. 정의는 graph-yaml.ts 한 곳이다. */
|
|
18
|
+
export type { GraphNodeKind } from './graph-yaml.js';
|
|
18
19
|
|
|
19
20
|
export interface GraphTemplateNode {
|
|
20
21
|
readonly nodeId: string;
|
|
21
|
-
|
|
22
|
+
// 플러그인 kind(`<plugin>:<kind>`)가 들어오므로 스펙과 같은 넓은 형(P-T1 #21684) — 좁은 union 이면 PWA(Next) 타입 검사가 빌드를 막는다.
|
|
23
|
+
readonly kind: GraphNodeSpec['kind'];
|
|
22
24
|
/** 그 노드의 재방문 상한. ⛔ 지금의 rework 상한이 «여기로 올라올» 자리다(RFC §4.1). */
|
|
23
25
|
readonly maxVisits: number;
|
|
26
|
+
/** YAML recipe identifier; existing orchestrator does not execute it. */
|
|
27
|
+
readonly recipe?: string;
|
|
24
28
|
/** YAML이 선언한 선택 계약. 관측용이며 실행 권한을 강제하지 않는다. */
|
|
25
29
|
readonly contract?: GraphNodeContract;
|
|
26
30
|
}
|
|
@@ -32,6 +36,8 @@ export interface GraphTemplate {
|
|
|
32
36
|
readonly terminalNodes: readonly string[];
|
|
33
37
|
/** YAML 템플릿이 선언한 문서 전용 변경의 gate 건너뛰기 정책. */
|
|
34
38
|
readonly docsOnlyGateSkip?: boolean;
|
|
39
|
+
/** 선언된 런 계약(선택) — 런 시작 때 발사 인자·부모 계약과 함께 한 번 해석된다. */
|
|
40
|
+
readonly runContract?: GraphRunContractSpec;
|
|
35
41
|
readonly nodes: readonly GraphTemplateNode[];
|
|
36
42
|
readonly edges: Readonly<Record<string, readonly string[]>>;
|
|
37
43
|
}
|
|
@@ -98,7 +104,7 @@ export function defaultGraphsDir(): string {
|
|
|
98
104
|
return join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'graphs');
|
|
99
105
|
}
|
|
100
106
|
|
|
101
|
-
export type DiscardedGraphNodeField = Exclude<keyof GraphNodeSpec, 'nodeId' | 'kind' | 'maxVisits' | 'contract'>;
|
|
107
|
+
export type DiscardedGraphNodeField = Exclude<keyof GraphNodeSpec, 'nodeId' | 'kind' | 'maxVisits' | 'recipe' | 'contract'>;
|
|
102
108
|
|
|
103
109
|
export interface GraphTemplateCompilation {
|
|
104
110
|
readonly template: GraphTemplate;
|
|
@@ -109,7 +115,6 @@ export interface GraphTemplateCompilation {
|
|
|
109
115
|
}
|
|
110
116
|
|
|
111
117
|
const DISCARDED_NODE_FIELDS: readonly DiscardedGraphNodeField[] = [
|
|
112
|
-
'recipe',
|
|
113
118
|
'progress',
|
|
114
119
|
'phases',
|
|
115
120
|
'terminalStages',
|
|
@@ -125,10 +130,12 @@ export function compileGraphTemplate(spec: GraphTemplateSpec): GraphTemplateComp
|
|
|
125
130
|
entryNode: spec.entryNode,
|
|
126
131
|
terminalNodes: spec.terminalNodes,
|
|
127
132
|
...(spec.docsOnlyGateSkip !== undefined ? { docsOnlyGateSkip: spec.docsOnlyGateSkip } : {}),
|
|
133
|
+
...(spec.runContract !== undefined ? { runContract: spec.runContract } : {}),
|
|
128
134
|
nodes: spec.nodes.map((n) => ({
|
|
129
135
|
nodeId: n.nodeId,
|
|
130
|
-
kind: n.kind
|
|
136
|
+
kind: n.kind,
|
|
131
137
|
maxVisits: n.maxVisits,
|
|
138
|
+
...(n.recipe === undefined ? {} : { recipe: n.recipe }),
|
|
132
139
|
...(n.contract === undefined ? {} : { contract: n.contract }),
|
|
133
140
|
})),
|
|
134
141
|
edges: edgeMapOf(spec),
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { parseGraphRunContract, type GraphRunContractSpec } from './graph-run-contract.js';
|
|
1
2
|
import { createHash } from 'node:crypto';
|
|
2
3
|
import { readFileSync, readdirSync } from 'node:fs';
|
|
3
4
|
import { join } from 'node:path';
|
|
4
5
|
import { parse as parseYaml } from 'yaml';
|
|
6
|
+
import { HARNESS_CORE_KINDS, hasNodeKind } from '../graph-kinds/registry.js';
|
|
5
7
|
|
|
6
8
|
/** ⭐ RFC-graph-templates-as-yaml §5 «0단계» — YAML 저작본을 읽어 실행·해시·원장용 정규형으로.
|
|
7
9
|
*
|
|
@@ -9,7 +11,7 @@ import { parse as parseYaml } from 'yaml';
|
|
|
9
11
|
* (`playground-scenario/yaml-parser.ts` 의 계약을 따른다 · 재발명 0).
|
|
10
12
|
* ⛔⭐ **뿌리를 «인자»로 받는다** — `import.meta.url` 로 코드 트리에 묶지 않는다.
|
|
11
13
|
* 🩸 §4.6 이 지목한 병: `mission-capabilities/registry.ts` 가 그 방식이라 `--root` 격리가 불가능하다. */
|
|
12
|
-
export type GraphNodeKind =
|
|
14
|
+
export type GraphNodeKind = typeof HARNESS_CORE_KINDS[number];
|
|
13
15
|
|
|
14
16
|
export interface GraphNodeContract {
|
|
15
17
|
readonly inputs: readonly string[];
|
|
@@ -19,7 +21,7 @@ export interface GraphNodeContract {
|
|
|
19
21
|
|
|
20
22
|
export interface GraphNodeSpec {
|
|
21
23
|
readonly nodeId: string;
|
|
22
|
-
readonly kind: GraphNodeKind;
|
|
24
|
+
readonly kind: GraphNodeKind | (string & {});
|
|
23
25
|
readonly recipe: string;
|
|
24
26
|
readonly maxVisits: number;
|
|
25
27
|
readonly progress?: readonly string[];
|
|
@@ -43,6 +45,7 @@ export interface GraphEdgeSpec {
|
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
export interface GraphTemplateSpec {
|
|
48
|
+
readonly loop?: { readonly title?: string; readonly description?: string; readonly trigger?: { readonly cron?: string; readonly events?: readonly string[] } };
|
|
46
49
|
readonly graphId: string;
|
|
47
50
|
readonly version: number;
|
|
48
51
|
readonly entryNode: string;
|
|
@@ -50,6 +53,8 @@ export interface GraphTemplateSpec {
|
|
|
50
53
|
/** 문서 전용 변경이면 gate 노드를 건너뛸 수 있다는 템플릿 정책. */
|
|
51
54
|
readonly docsOnlyGateSkip?: boolean;
|
|
52
55
|
readonly state?: readonly string[];
|
|
56
|
+
/** ⭐ 런 계약(선택) — 이 그래프가 «기본으로» 요구하는 실행 칸 등. 발사 인자가 덮는다(graph-run-contract.ts). */
|
|
57
|
+
readonly runContract?: GraphRunContractSpec;
|
|
53
58
|
readonly nodes: readonly GraphNodeSpec[];
|
|
54
59
|
readonly edges: readonly GraphEdgeSpec[];
|
|
55
60
|
}
|
|
@@ -65,7 +70,6 @@ export interface GraphParseResult {
|
|
|
65
70
|
readonly warnings: readonly GraphParseIssue[];
|
|
66
71
|
}
|
|
67
72
|
|
|
68
|
-
const KINDS = new Set<GraphNodeKind>(['agent', 'gate', 'git', 'judge']);
|
|
69
73
|
/** ⚠️ YAML 함정 — `no`/`off`/`yes`/`on` 이 boolean 으로 파싱된다(Norway 문제). 노드 이름에 쓰면 조용히 깨진다. */
|
|
70
74
|
const YAML_TRAP_WORDS = new Set(['true', 'false', 'yes', 'no', 'on', 'off', 'null', '~']);
|
|
71
75
|
|
|
@@ -111,8 +115,8 @@ export function parseGraphTemplateYaml(source: string, label = '<inline>'): Grap
|
|
|
111
115
|
}
|
|
112
116
|
if (YAML_TRAP_WORDS.has(nodeId.toLowerCase())) warnings.push({ path: `${at}/node_id`, message: `'${nodeId}' 는 YAML 이 다른 값으로 읽을 수 있는 낱말이다` });
|
|
113
117
|
const kind = n.kind;
|
|
114
|
-
if (typeof kind !== 'string' || !
|
|
115
|
-
errors.push({ path: `${at}/kind`, message: `kind 는 ${
|
|
118
|
+
if (typeof kind !== 'string' || !hasNodeKind('harness', kind)) {
|
|
119
|
+
errors.push({ path: `${at}/kind`, message: `kind 는 ${HARNESS_CORE_KINDS.join('|')} 또는 등록된 플러그인 종류여야 한다 (받은 값: ${JSON.stringify(kind)})` });
|
|
116
120
|
continue;
|
|
117
121
|
}
|
|
118
122
|
const recipe = n.recipe;
|
|
@@ -135,7 +139,7 @@ export function parseGraphTemplateYaml(source: string, label = '<inline>'): Grap
|
|
|
135
139
|
else if (contract.tools === '') warnings.push({ path: `${at}/contract/tools`, message: 'tools 가 비었다' });
|
|
136
140
|
|
|
137
141
|
nodes.push({
|
|
138
|
-
nodeId, kind
|
|
142
|
+
nodeId, kind, recipe, maxVisits,
|
|
139
143
|
...(Array.isArray(n.progress) ? { progress: n.progress.filter((v): v is string => typeof v === 'string') } : {}),
|
|
140
144
|
...(Array.isArray(n.phases) ? { phases: n.phases.filter((v): v is string => typeof v === 'string') } : {}),
|
|
141
145
|
...(Array.isArray(n.terminal_stages) ? { terminalStages: n.terminal_stages.filter((v): v is string => typeof v === 'string') } : {}),
|
|
@@ -194,12 +198,37 @@ export function parseGraphTemplateYaml(source: string, label = '<inline>'): Grap
|
|
|
194
198
|
if (entryNode !== undefined && !known.has(entryNode)) errors.push({ path: `${label}/entry_node`, message: `'${entryNode}' 는 선언된 노드가 아니다` });
|
|
195
199
|
for (const t of terminalNodes) if (!known.has(t)) errors.push({ path: `${label}/terminal_nodes`, message: `'${t}' 는 선언된 노드가 아니다` });
|
|
196
200
|
|
|
201
|
+
const runContract = parseGraphRunContract(doc.run_contract);
|
|
202
|
+
if (runContract.error) errors.push({ path: `${label}/run_contract`, message: runContract.error });
|
|
203
|
+
let loop: GraphTemplateSpec['loop'];
|
|
204
|
+
if (doc.loop !== undefined) {
|
|
205
|
+
const l = doc.loop;
|
|
206
|
+
if (!l || typeof l !== 'object' || Array.isArray(l)) errors.push({ path: `${label}/loop`, message: 'loop 는 맵이어야 한다' });
|
|
207
|
+
else {
|
|
208
|
+
const obj = l as Record<string, unknown>;
|
|
209
|
+
const t = obj.trigger;
|
|
210
|
+
if (obj.title !== undefined && typeof obj.title !== 'string') errors.push({ path: `${label}/loop/title`, message: 'title 은 문자열이어야 한다' });
|
|
211
|
+
if (obj.description !== undefined && typeof obj.description !== 'string') errors.push({ path: `${label}/loop/description`, message: 'description 은 문자열이어야 한다' });
|
|
212
|
+
if (t !== undefined && (!t || typeof t !== 'object' || Array.isArray(t))) errors.push({ path: `${label}/loop/trigger`, message: 'trigger 는 맵이어야 한다' });
|
|
213
|
+
const trigger = t && typeof t === 'object' && !Array.isArray(t) ? t as Record<string, unknown> : null;
|
|
214
|
+
if (trigger?.cron !== undefined && typeof trigger.cron !== 'string') errors.push({ path: `${label}/loop/trigger/cron`, message: 'cron 은 문자열이어야 한다' });
|
|
215
|
+
if (trigger?.events !== undefined && (!Array.isArray(trigger.events) || !trigger.events.every(e => typeof e === 'string'))) errors.push({ path: `${label}/loop/trigger/events`, message: 'events 는 문자열 배열이어야 한다' });
|
|
216
|
+
loop = {
|
|
217
|
+
...(typeof obj.title === 'string' ? { title: obj.title } : {}),
|
|
218
|
+
...(typeof obj.description === 'string' ? { description: obj.description } : {}),
|
|
219
|
+
...(trigger ? { trigger: { ...(typeof trigger.cron === 'string' ? { cron: trigger.cron } : {}),
|
|
220
|
+
...(Array.isArray(trigger.events) ? { events: trigger.events as string[] } : {}) } } : {}),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
}
|
|
197
224
|
if (errors.length > 0) return { errors, warnings };
|
|
198
225
|
return {
|
|
199
226
|
template: {
|
|
200
227
|
graphId: graphId!, version: version!, entryNode: entryNode!, terminalNodes, nodes, edges,
|
|
228
|
+
...(loop ? { loop } : {}),
|
|
201
229
|
...(typeof doc.docs_only_gate_skip === 'boolean' ? { docsOnlyGateSkip: doc.docs_only_gate_skip } : {}),
|
|
202
230
|
...(Array.isArray(doc.state) ? { state: doc.state.filter((v): v is string => typeof v === 'string') } : {}),
|
|
231
|
+
...(runContract.spec ? { runContract: runContract.spec } : {}),
|
|
203
232
|
},
|
|
204
233
|
errors, warnings,
|
|
205
234
|
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { statSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { runIsolationHardcodeGate } from '../../scripts/ci-isolation-hardcode-gate.js';
|
|
4
|
+
import { runMockModuleRestoreGate } from '../../scripts/ci-mock-module-restore-gate.js';
|
|
5
|
+
import { runModelHardcodeGate } from '../../scripts/ci-model-hardcode-gate.js';
|
|
6
|
+
import { runDaemonPortGate } from '../../scripts/ci-daemon-port-gate.js';
|
|
7
|
+
|
|
8
|
+
type GateName = 'isolation-gate' | 'mock-module-restore-gate' | 'model-hardcode-gate' | 'daemon-port-gate';
|
|
9
|
+
type GateOutput = { args: string[]; cwd: string; log: (line: string) => void; error: (line: string) => void };
|
|
10
|
+
type GateRunner = (out: GateOutput) => number;
|
|
11
|
+
|
|
12
|
+
export function runHarnessPolicyGates(input: {
|
|
13
|
+
cwd: string;
|
|
14
|
+
changedFiles: readonly string[];
|
|
15
|
+
gates?: Partial<Record<GateName, GateRunner>>;
|
|
16
|
+
}): { passed: boolean; failures: Array<{ gate: GateName; lines: string[] }>; skipped?: string } {
|
|
17
|
+
try {
|
|
18
|
+
if (!statSync(join(input.cwd, 'scripts')).isDirectory()) {
|
|
19
|
+
return { passed: true, failures: [], skipped: 'no-scripts' };
|
|
20
|
+
}
|
|
21
|
+
} catch {
|
|
22
|
+
return { passed: true, failures: [], skipped: 'no-scripts' };
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const runners: readonly [GateName, GateRunner][] = [
|
|
26
|
+
['isolation-gate', input.gates?.['isolation-gate'] ?? runIsolationHardcodeGate],
|
|
27
|
+
['mock-module-restore-gate', input.gates?.['mock-module-restore-gate'] ?? runMockModuleRestoreGate],
|
|
28
|
+
['model-hardcode-gate', input.gates?.['model-hardcode-gate'] ?? runModelHardcodeGate],
|
|
29
|
+
['daemon-port-gate', input.gates?.['daemon-port-gate'] ?? ((out) => runDaemonPortGate({ log: out.log, error: out.error, cwd: out.cwd, args: [] }))],
|
|
30
|
+
];
|
|
31
|
+
const failures: Array<{ gate: GateName; lines: string[] }> = [];
|
|
32
|
+
for (const [gate, run] of runners) {
|
|
33
|
+
const lines: string[] = [];
|
|
34
|
+
try {
|
|
35
|
+
const status = run({ cwd: input.cwd, args: ['--changed-files', ...input.changedFiles], log: (line) => lines.push(line), error: (line) => lines.push(line) });
|
|
36
|
+
if (status !== 0) failures.push({ gate, lines: [...lines, `✗ ${gate}: violation detected`] });
|
|
37
|
+
} catch (error) {
|
|
38
|
+
failures.push({ gate, lines: [...lines, `⚠ ${gate}: 게이트가 «못 쟀다» — ${error instanceof Error ? error.message : String(error)}`] });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return { passed: failures.length === 0, failures };
|
|
42
|
+
}
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
resolveChildLivenessHeartbeatPath,
|
|
22
22
|
} from '../core-turn/child-liveness-heartbeat.js';
|
|
23
23
|
import { resolveNexusPwa, type NexusPwaResolution } from '../cli/nexus-show.js';
|
|
24
|
+
import { ptyWebAddress } from '../cli/pty-web-address.js';
|
|
24
25
|
import { startPty, mintPtyId, ptyAvailable } from '../pty-shell/registry.js';
|
|
25
26
|
import { probeControlStance, stanceBlocksWrite } from '../pty-shell/pty-control-stance.js';
|
|
26
27
|
import { externalWriteProvenance } from '../pty-shell/pty-write-provenance.js';
|
|
@@ -49,6 +50,7 @@ import { brainTrigger } from './brain-consultation.js';
|
|
|
49
50
|
import { decideAutoAssist, decideAutoStop, decideBoundaryApproval, decideScreenStallSilenceTermination, hasNovelCompletionSignal, NO_STALL, parseBoundaryApprovalRequest, UNKNOWN_OBSERVED_RAW_SHELL_METACHARACTERS, type AutoAssistInput, type AutoStopInput, type AutoStopVerdict, type BoundaryApprovalRequestKind, type DeterministicCompletionState, type ScreenStallSilenceInput } from './auto-intervene.js';
|
|
50
51
|
import { decideByRecipe, missingStateKeys, parseRecipe, type Recipe, type RecipeDecision } from '../decide/recipe.js';
|
|
51
52
|
import { callJev, gateAnswer, probeKey, type JevAnswer } from '../decide/jev.js';
|
|
53
|
+
import { shadowBoundaryDecision, type BoundaryShadowConfig, type BoundaryShadowDeps } from '../decide/boundary-shadow.js';
|
|
52
54
|
import { decideOutputArtifactWatchdog, type OutputArtifactSnapshot, type OutputWatchdogPolicy } from './output-artifact-watchdog.js';
|
|
53
55
|
import { mapBrainAction, mapControlStance, supervisionObservationFields } from './supervision-vocabulary.js';
|
|
54
56
|
import { decideInterventionStep, type InterventionStep } from './intervention-step.js';
|
|
@@ -61,6 +63,8 @@ import { childPtyIdentityEnv } from '../agent/pty-identity.js';
|
|
|
61
63
|
import { elanousTuiSpawnOptions } from './elanous-tui-spawn.js';
|
|
62
64
|
import { describeGrokCredentialFreshness, readGrokTokenFreshness, type GrokCredentialFreshnessSnapshot } from '../acp/grok-auth.js';
|
|
63
65
|
import { debug } from '../debug/log.js';
|
|
66
|
+
import { sendOutbound } from '../domains/outbound-alert.js';
|
|
67
|
+
import { formatPtyLinkMessage, readReportOrigin } from './report-origin.js';
|
|
64
68
|
import { DETACHED_PROGRESS_FRAME_PREFIX, decodeDetachedProgressFrame } from '../harness/dispatch-detached.js';
|
|
65
69
|
import { setEventLoopActivity } from '../debug/event-loop-watchdog.js';
|
|
66
70
|
import { resolveEscalateTarget, resolveExplicitChildEscalateTarget } from './rework-policy.js';
|
|
@@ -151,17 +155,14 @@ export function formatWaitSupervisionBatchReason(waitCount: number, latestJudgme
|
|
|
151
155
|
return `waitCount=${waitCount} latestJudgment=${singleLineBoundarySurfaceValue(latestJudgment ?? 'wait')}`;
|
|
152
156
|
}
|
|
153
157
|
|
|
154
|
-
/** Renders the spawned child's PWA terminal link or the typed reason it is unavailable. */
|
|
155
158
|
/** The child's terminal URL, or `null` when no PWA base is resolvable.
|
|
156
159
|
* ⛔⭐ Reads `url` (what the resolver ALREADY chose), never `loopback` — the resolver may have
|
|
157
160
|
* picked a tailnet base, and reading `loopback` silently discarded that choice (`GOAL-T80`).
|
|
158
161
|
* ⛔ Exists so the structured observation is built from the SAME value the human line shows,
|
|
159
162
|
* instead of string-slicing that line (which glued ` source=…` into the URL). */
|
|
160
163
|
export function surfaceLinkUrlFor(ptyId: string, pwa: NexusPwaResolution): string | null {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
url.search = new URLSearchParams({ pty: ptyId }).toString();
|
|
164
|
-
return url.toString();
|
|
164
|
+
// 링크 모양은 한 곳(`src/cli/pty-web-address.ts`)에서만 만든다 — agent-mission `watch=` 줄·`pty list` 와 같은 값.
|
|
165
|
+
return ptyWebAddress(ptyId, pwa).webUrl;
|
|
165
166
|
}
|
|
166
167
|
|
|
167
168
|
/** Renders the spawned child's PWA terminal link or the typed reason it is unavailable. */
|
|
@@ -271,6 +272,9 @@ export interface BoundaryRequestWatchOptions {
|
|
|
271
272
|
onCommandStart?: (commandFirstToken: string) => void;
|
|
272
273
|
/** Test seam for the behavior-axis shadow. Default reads recipes/tool-guard.json and calls Jev. */
|
|
273
274
|
behaviorAxis?: BoundaryBehaviorAxis;
|
|
275
|
+
/** Test seam for the Jev boundary shadow; production reads raw.decide.boundaryShadow. */
|
|
276
|
+
boundaryShadow?: BoundaryShadowConfig;
|
|
277
|
+
boundaryShadowDeps?: BoundaryShadowDeps;
|
|
274
278
|
}
|
|
275
279
|
|
|
276
280
|
const BEHAVIOR_AXIS_QUESTIONS = ['irreversible', 'outside_workdir', 'reaches_network'] as const;
|
|
@@ -519,6 +523,13 @@ export function watchHarnessBoundaryRequests(
|
|
|
519
523
|
try {
|
|
520
524
|
observeBoundaryBehaviorAxis(request, verdict, context, options.behaviorAxis);
|
|
521
525
|
} catch (error) { observeFailure(error); }
|
|
526
|
+
try {
|
|
527
|
+
const rawDecide = getUserConfig().raw.decide;
|
|
528
|
+
const config = options.boundaryShadow ?? (rawDecide && typeof rawDecide === 'object'
|
|
529
|
+
? (rawDecide as { boundaryShadow?: BoundaryShadowConfig }).boundaryShadow
|
|
530
|
+
: undefined);
|
|
531
|
+
void shadowBoundaryDecision(request, verdict, config, options.boundaryShadowDeps).catch(observeFailure);
|
|
532
|
+
} catch (error) { observeFailure(error); }
|
|
522
533
|
});
|
|
523
534
|
}
|
|
524
535
|
}
|
|
@@ -948,6 +959,8 @@ export interface HeadlessGoalLoopPtyOptions {
|
|
|
948
959
|
onSurfaceProgress?: (line: string) => void;
|
|
949
960
|
/** Current worktree's PWA resolver seam; it is resolved once after the child is spawned. */
|
|
950
961
|
resolveNexusPwa?: (opts: { cwd: string }) => NexusPwaResolution;
|
|
962
|
+
/** Outbound seam; the default retains quiet hours and origin routing. */
|
|
963
|
+
sendOutbound?: typeof sendOutbound;
|
|
951
964
|
/** Queues an argv child supervisor input for the orchestrator's next-round prompt; never writes stdin. */
|
|
952
965
|
onSupervisorInput?: (text: string, updateDelivery: (delivery: SupervisorDeliveryState, reason?: string) => void) => void;
|
|
953
966
|
/** ★ 턴 abort 신호(#21) — /cancel 이 이 신호를 abort 하면 호스팅 PTY 를 즉시 kill + 폴 루프 조기 종료
|
|
@@ -1377,6 +1390,15 @@ export async function runHeadlessGoalLoopPty(opts: HeadlessGoalLoopPtyOptions):
|
|
|
1377
1390
|
// ⛔ 사람이 읽는 줄을 «잘라서» 구조화 값을 만들지 않는다 — 줄 형식이 바뀌면 값이 조용히 오염된다
|
|
1378
1391
|
// (실제로 `source=` 를 더하자 그 슬라이스가 URL 에 그것을 붙였다). 같은 순수 함수에서 «둘 다» 뽑는다.
|
|
1379
1392
|
const surfaceLinkUrl = surfaceLinkUrlFor(ptyId, pwa);
|
|
1393
|
+
const reportOrigin = readReportOrigin(process.env);
|
|
1394
|
+
if (surfaceLinkUrl !== null && reportOrigin?.channel === 'telegram') {
|
|
1395
|
+
try {
|
|
1396
|
+
const accepted = (opts.sendOutbound ?? sendOutbound)(formatPtyLinkMessage({ webUrl: surfaceLinkUrl, ptyId }), 'report', reportOrigin);
|
|
1397
|
+
debug.log('self-implement.surface-link', accepted ? 'reported' : 'report-failed', { ptyId, chatId: reportOrigin.chatId });
|
|
1398
|
+
} catch (error) {
|
|
1399
|
+
try { debug.log('self-implement.surface-link', 'report-failed', { ptyId, error: errorMessage(error) }, { level: 'warn' }); } catch { /* fail-soft */ }
|
|
1400
|
+
}
|
|
1401
|
+
}
|
|
1380
1402
|
const surfaceLinkObservation: Record<string, string> = surfaceLinkUrl !== null && 'source' in pwa
|
|
1381
1403
|
? { surfaceLinkUrl, surfaceLinkSource: pwa.source }
|
|
1382
1404
|
: { surfaceLinkUnavailableReason: 'reason' in pwa ? pwa.reason : 'pwa-url-unknown' };
|
|
@@ -1753,7 +1775,9 @@ export async function runHeadlessGoalLoopPty(opts: HeadlessGoalLoopPtyOptions):
|
|
|
1753
1775
|
const deliveryReason = input && !opts.onSupervisorInput ? 'next-round-callback-unwired' : undefined;
|
|
1754
1776
|
emitSurfaceProgress(formatSupervisionProgressLine({
|
|
1755
1777
|
action: decision.action,
|
|
1756
|
-
reason: decision.action === 'input' ? decision.text
|
|
1778
|
+
reason: decision.action === 'input' ? decision.text
|
|
1779
|
+
: 'reason' in decision ? decision.reason
|
|
1780
|
+
: `${decision.action} ${JSON.stringify({ ...decision, action: undefined })}`,
|
|
1757
1781
|
...(delivery ? { delivery } : {}),
|
|
1758
1782
|
...(deliveryReason ? { deliveryReason } : {}),
|
|
1759
1783
|
...(inputInstructionOccurrence ? { inputInstructionOccurrence } : {}),
|