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,88 +1,15 @@
|
|
|
1
|
-
// ── Control
|
|
2
|
-
//
|
|
3
|
-
// Fills the gaps that the existing virtual-window/PTY tools don't
|
|
4
|
-
// cover: window + pane resize, preset pane layouts (2x2 / 1x3 / …),
|
|
5
|
-
// LLM self-modification (tool toggle, prompt hint append).
|
|
6
|
-
//
|
|
7
|
-
// Addressing:
|
|
8
|
-
// • window addr → "win:<int>" or bare "<int>"
|
|
9
|
-
// • pane addr → "pane:<hex>" or bare "<hex>"
|
|
10
|
-
// Resolution routes through the global ElementRegistry so PTY /
|
|
11
|
-
// session / widget addrs can be added later without reshaping tools.
|
|
1
|
+
// ── Control tools: tool exposure and prompt hints ──
|
|
12
2
|
|
|
13
3
|
import type { LLMToolSpec } from '../../llm.js';
|
|
14
4
|
import { nativeToolCatalog } from '../../native-tool-catalog.js';
|
|
15
5
|
import { appendPromptHint, clearPromptHints, listPromptHints, type HintScope } from '../../prompt/hint-store.js';
|
|
16
6
|
import { publishElementEvent } from '../../element-registry/index.js';
|
|
17
7
|
import { recordControlAudit } from '../../control-audit-log.js';
|
|
18
|
-
import type { WindowRegistry } from '../../virtual-windows/window-registry.js';
|
|
19
|
-
import type { PaneContentSpec, PaneFactoryDeps } from '../../virtual-windows/pane-content.js';
|
|
20
|
-
|
|
21
|
-
interface ControlDeps {
|
|
22
|
-
getWindowRegistry?: () => WindowRegistry | null;
|
|
23
|
-
/** Pane content used when layout preset fills empty slots. Defaults
|
|
24
|
-
* to blank terminals (kind='terminal'). Caller can override to
|
|
25
|
-
* seed panes with specific cmds. */
|
|
26
|
-
defaultPaneSpec?: (slot: number) => PaneContentSpec;
|
|
27
|
-
paneDeps?: PaneFactoryDeps;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
let deps: ControlDeps = {};
|
|
31
|
-
|
|
32
|
-
export function setControlRuntimeDeps(next: ControlDeps): void {
|
|
33
|
-
deps = { ...next };
|
|
34
|
-
}
|
|
35
8
|
|
|
36
9
|
// ── Tool specs ─────────────────────────────────────────────────────
|
|
37
10
|
|
|
38
11
|
export function buildControlTools(): LLMToolSpec[] {
|
|
39
12
|
return [
|
|
40
|
-
{
|
|
41
|
-
name: 'ControlWindowResize',
|
|
42
|
-
description:
|
|
43
|
-
'Resize a virtual window. Pass width/height cells; row/col default to current position. Addr "win:3" or "3".',
|
|
44
|
-
parameters: {
|
|
45
|
-
type: 'object',
|
|
46
|
-
properties: {
|
|
47
|
-
addr: { type: 'string' },
|
|
48
|
-
width: { type: 'number' },
|
|
49
|
-
height: { type: 'number' },
|
|
50
|
-
row: { type: 'number' },
|
|
51
|
-
col: { type: 'number' },
|
|
52
|
-
},
|
|
53
|
-
required: ['addr'],
|
|
54
|
-
additionalProperties: false,
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
name: 'ControlPaneResize',
|
|
59
|
-
description:
|
|
60
|
-
'Grow or shrink the split enclosing a pane. axis="h" slides the vertical divider, axis="v" slides the horizontal one. delta in cells (positive grows the pane).',
|
|
61
|
-
parameters: {
|
|
62
|
-
type: 'object',
|
|
63
|
-
properties: {
|
|
64
|
-
addr: { type: 'string' },
|
|
65
|
-
axis: { type: 'string', enum: ['h', 'v'] },
|
|
66
|
-
delta: { type: 'number' },
|
|
67
|
-
},
|
|
68
|
-
required: ['addr', 'axis', 'delta'],
|
|
69
|
-
additionalProperties: false,
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
name: 'ControlPaneLayout',
|
|
74
|
-
description:
|
|
75
|
-
'Apply a preset layout to the target window: "2x2" (4 panes), "1x3" (3 side-by-side), "3x1" (3 stacked), "2x1", "1x2". Uses the focused pane as the root and splits outward. NOTE: this is destructive — existing splits below it get rebuilt.',
|
|
76
|
-
parameters: {
|
|
77
|
-
type: 'object',
|
|
78
|
-
properties: {
|
|
79
|
-
windowAddr: { type: 'string' },
|
|
80
|
-
layout: { type: 'string', enum: ['2x2', '1x3', '3x1', '2x1', '1x2'] },
|
|
81
|
-
},
|
|
82
|
-
required: ['windowAddr', 'layout'],
|
|
83
|
-
additionalProperties: false,
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
13
|
{
|
|
87
14
|
name: 'ControlToolToggle',
|
|
88
15
|
description:
|
|
@@ -128,31 +55,20 @@ export function buildControlTools(): LLMToolSpec[] {
|
|
|
128
55
|
|
|
129
56
|
// ── Helpers ────────────────────────────────────────────────────────
|
|
130
57
|
|
|
131
|
-
function parseWinAddr(raw: string): number | null {
|
|
132
|
-
const m = /^(?:win:)?(\d+)$/.exec(String(raw).trim());
|
|
133
|
-
return m ? parseInt(m[1]!, 10) : null;
|
|
134
|
-
}
|
|
135
|
-
function parsePaneAddr(raw: string): string | null {
|
|
136
|
-
const s = String(raw).trim();
|
|
137
|
-
const m = /^(?:pane:)?([A-Za-z0-9_-]+)$/.exec(s);
|
|
138
|
-
return m ? m[1]! : null;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
58
|
/** Emit an update event on the ElementEventBus so ContextEventsTail
|
|
142
59
|
* can replay control actions, AND append to the persistent control
|
|
143
60
|
* audit log (Phase F). Both calls are best-effort: a control action
|
|
144
61
|
* must never fail because observability is broken. */
|
|
145
62
|
function publishControlEvent(
|
|
146
|
-
kind: 'window' | 'pane' | 'tool',
|
|
147
63
|
id: string,
|
|
148
64
|
payload: Record<string, unknown>,
|
|
149
65
|
): void {
|
|
150
|
-
try { publishElementEvent(
|
|
66
|
+
try { publishElementEvent('tool', id, 'update', payload); } catch { /* swallow */ }
|
|
151
67
|
try {
|
|
152
68
|
recordControlAudit({
|
|
153
69
|
ts: new Date().toISOString(),
|
|
154
70
|
action: String(payload.action ?? 'unknown'),
|
|
155
|
-
subject:
|
|
71
|
+
subject: `tool:${id}`,
|
|
156
72
|
ok: payload.ok !== false,
|
|
157
73
|
detail: payload,
|
|
158
74
|
});
|
|
@@ -169,106 +85,6 @@ function auditAction(action: string, ok: boolean, detail?: Record<string, unknow
|
|
|
169
85
|
|
|
170
86
|
// ── Dispatchers ───────────────────────────────────────────────────
|
|
171
87
|
|
|
172
|
-
export async function dispatchControlWindowResize(
|
|
173
|
-
args: Record<string, unknown>,
|
|
174
|
-
): Promise<{ output: string; ok?: boolean; bounds?: unknown }> {
|
|
175
|
-
const addr = String(args.addr ?? '');
|
|
176
|
-
const id = parseWinAddr(addr);
|
|
177
|
-
if (id === null) return { output: `invalid window addr: ${addr}`, ok: false };
|
|
178
|
-
const reg = deps.getWindowRegistry?.();
|
|
179
|
-
if (!reg) return { output: 'window registry unavailable', ok: false };
|
|
180
|
-
const w = reg.list().find(x => x.id === id);
|
|
181
|
-
if (!w) return { output: `unknown window win:${id}`, ok: false };
|
|
182
|
-
const current = w.getBounds();
|
|
183
|
-
const next = {
|
|
184
|
-
row: typeof args.row === 'number' ? args.row : current.row,
|
|
185
|
-
col: typeof args.col === 'number' ? args.col : current.col,
|
|
186
|
-
width: typeof args.width === 'number' ? args.width : current.width,
|
|
187
|
-
height: typeof args.height === 'number' ? args.height : current.height,
|
|
188
|
-
};
|
|
189
|
-
if (next.width < 10 || next.height < 4) {
|
|
190
|
-
return { output: `refused — minimum 10x4 (got ${next.width}x${next.height})`, ok: false };
|
|
191
|
-
}
|
|
192
|
-
w.setBounds(next);
|
|
193
|
-
publishControlEvent('window', String(id), { action: 'resize', bounds: next });
|
|
194
|
-
return { output: `win:${id} resized to ${next.width}x${next.height} @(${next.row},${next.col})`, ok: true, bounds: next };
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
export async function dispatchControlPaneResize(
|
|
198
|
-
args: Record<string, unknown>,
|
|
199
|
-
): Promise<{ output: string; ok?: boolean }> {
|
|
200
|
-
const addr = String(args.addr ?? '');
|
|
201
|
-
const paneId = parsePaneAddr(addr);
|
|
202
|
-
if (!paneId) return { output: `invalid pane addr: ${addr}`, ok: false };
|
|
203
|
-
const axis = args.axis === 'h' || args.axis === 'v' ? args.axis : null;
|
|
204
|
-
if (!axis) return { output: `invalid axis: ${args.axis}`, ok: false };
|
|
205
|
-
const delta = typeof args.delta === 'number' ? Math.trunc(args.delta) : 0;
|
|
206
|
-
if (!Number.isFinite(delta) || delta === 0) return { output: 'delta must be non-zero integer', ok: false };
|
|
207
|
-
const reg = deps.getWindowRegistry?.();
|
|
208
|
-
if (!reg) return { output: 'window registry unavailable', ok: false };
|
|
209
|
-
for (const w of reg.list()) {
|
|
210
|
-
if (!w.listPanes().some(p => p.id === paneId)) continue;
|
|
211
|
-
const changed = w.resizePaneAt(paneId, axis, delta);
|
|
212
|
-
publishControlEvent('pane', paneId, { action: 'resize', axis, delta, changed });
|
|
213
|
-
return {
|
|
214
|
-
output: changed
|
|
215
|
-
? `pane:${paneId} resized axis=${axis} delta=${delta}`
|
|
216
|
-
: `pane:${paneId} no-op (hit min size or no matching-axis split)`,
|
|
217
|
-
ok: changed,
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
return { output: `unknown pane:${paneId}`, ok: false };
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
export async function dispatchControlPaneLayout(
|
|
224
|
-
args: Record<string, unknown>,
|
|
225
|
-
): Promise<{ output: string; ok?: boolean; paneCount?: number }> {
|
|
226
|
-
const wid = parseWinAddr(String(args.windowAddr ?? ''));
|
|
227
|
-
if (wid === null) return { output: `invalid windowAddr: ${args.windowAddr}`, ok: false };
|
|
228
|
-
const layout = String(args.layout ?? '');
|
|
229
|
-
const reg = deps.getWindowRegistry?.();
|
|
230
|
-
if (!reg) return { output: 'window registry unavailable', ok: false };
|
|
231
|
-
const entry = reg.list().find(x => x.id === wid);
|
|
232
|
-
if (!entry) return { output: `unknown window win:${wid}`, ok: false };
|
|
233
|
-
|
|
234
|
-
// Translate layout name → list of axes to split in order. Each
|
|
235
|
-
// split acts on the currently-focused pane (so layout names map
|
|
236
|
-
// directly to tmux-style conventions).
|
|
237
|
-
const plan: Array<{ axis: 'h' | 'v' }> = (() => {
|
|
238
|
-
switch (layout) {
|
|
239
|
-
case '2x1': return [{ axis: 'v' }];
|
|
240
|
-
case '1x2': return [{ axis: 'h' }];
|
|
241
|
-
case '1x3': return [{ axis: 'h' }, { axis: 'h' }];
|
|
242
|
-
case '3x1': return [{ axis: 'v' }, { axis: 'v' }];
|
|
243
|
-
case '2x2': return [{ axis: 'h' }, { axis: 'v' }, { axis: 'v' }];
|
|
244
|
-
default: return [];
|
|
245
|
-
}
|
|
246
|
-
})();
|
|
247
|
-
if (plan.length === 0) return { output: `invalid layout: ${layout}`, ok: false };
|
|
248
|
-
|
|
249
|
-
const spec = deps.defaultPaneSpec ?? ((slot: number): PaneContentSpec => ({
|
|
250
|
-
kind: 'terminal',
|
|
251
|
-
title: `slot-${slot + 2}`,
|
|
252
|
-
} as PaneContentSpec));
|
|
253
|
-
const paneDeps = deps.paneDeps ?? {};
|
|
254
|
-
|
|
255
|
-
// Use the registry's existing createPaneContent so we stay in sync
|
|
256
|
-
// with the PaneFactoryDeps that dashboard wires.
|
|
257
|
-
const { createPaneContent } = await import('../../virtual-windows/pane-content.js');
|
|
258
|
-
let slot = 0;
|
|
259
|
-
for (const step of plan) {
|
|
260
|
-
const content = createPaneContent(spec(slot), paneDeps);
|
|
261
|
-
entry.splitFocused(step.axis, content);
|
|
262
|
-
slot++;
|
|
263
|
-
}
|
|
264
|
-
publishControlEvent('window', String(wid), { action: 'layout', layout, paneCount: entry.listPanes().length });
|
|
265
|
-
return {
|
|
266
|
-
output: `win:${wid} laid out as ${layout} (${entry.listPanes().length} panes)`,
|
|
267
|
-
ok: true,
|
|
268
|
-
paneCount: entry.listPanes().length,
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
|
|
272
88
|
export async function dispatchControlToolToggle(
|
|
273
89
|
args: Record<string, unknown>,
|
|
274
90
|
): Promise<{ output: string; ok: boolean }> {
|
|
@@ -277,7 +93,7 @@ export async function dispatchControlToolToggle(
|
|
|
277
93
|
const entry = nativeToolCatalog.find(t => t.id === toolId || t.aliases.includes(toolId));
|
|
278
94
|
if (!entry) return { output: `unknown tool: ${toolId}`, ok: false };
|
|
279
95
|
entry.defaultEnabled = enabled;
|
|
280
|
-
publishControlEvent(
|
|
96
|
+
publishControlEvent(entry.id, { action: 'toggle', enabled });
|
|
281
97
|
return { output: `tool ${entry.id} ${enabled ? 'enabled' : 'disabled'}`, ok: true };
|
|
282
98
|
}
|
|
283
99
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
//
|
|
3
3
|
// Programmatically fire a slash command. The LLM in dashboard-
|
|
4
4
|
// control mode (T6-K1/K2) uses this to run things like `/term list`
|
|
5
|
-
//
|
|
5
|
+
// without asking the user to type them.
|
|
6
6
|
//
|
|
7
7
|
// Allow-list: only a curated subset of SLASH_COMMANDS is callable
|
|
8
8
|
// by the LLM. Mutating or confusing commands (e.g. /quit, /sync
|
|
@@ -49,9 +49,6 @@ export function _resetDashboardSlashExecutorForTesting(): void {
|
|
|
49
49
|
* additional command proves safe + useful in control mode. */
|
|
50
50
|
export const ALLOWED_SLASHES: readonly string[] = Object.freeze([
|
|
51
51
|
'term', 'terminal',
|
|
52
|
-
'window', 'win',
|
|
53
|
-
'bench',
|
|
54
|
-
'view',
|
|
55
52
|
'provider', 'p',
|
|
56
53
|
'context', 'ctx',
|
|
57
54
|
'plugin', 'plugins',
|
|
@@ -64,15 +61,10 @@ export const ALLOWED_SLASHES: readonly string[] = Object.freeze([
|
|
|
64
61
|
'api-allow', 'api',
|
|
65
62
|
'prompt', 'prompts',
|
|
66
63
|
'history', 'hist',
|
|
67
|
-
'scratch', 'sc',
|
|
68
|
-
'fullscreen', 'fs',
|
|
69
64
|
'log',
|
|
70
65
|
'claude',
|
|
71
66
|
'codex',
|
|
72
|
-
'
|
|
73
|
-
'codex-vw',
|
|
74
|
-
'acp-vw',
|
|
75
|
-
'control', 'dm', 'default',
|
|
67
|
+
'control', 'default',
|
|
76
68
|
'help', '?',
|
|
77
69
|
'run-skill', 'rs',
|
|
78
70
|
]);
|
|
@@ -96,7 +88,7 @@ export function buildDashboardSlashExecuteTool(): LLMToolSpec {
|
|
|
96
88
|
return {
|
|
97
89
|
name: 'DashboardSlashExecute',
|
|
98
90
|
description:
|
|
99
|
-
'Run a slash command programmatically from control mode. Only a curated allow-list is callable (term,
|
|
91
|
+
'Run a slash command programmatically from control mode. Only a curated allow-list is callable (term, provider, context, plugin, widget, memory, status, hint, api-allow, prompt, history, claude, codex, control, help, run-skill). Interactive/destructive commands (quit, clear, debug, perf, codex-setup, telegram) are blocked — ask the user to type those. Returns ok=false + reason when the command is blocked or unrecognized.',
|
|
100
92
|
parameters: {
|
|
101
93
|
type: 'object',
|
|
102
94
|
properties: {
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
// On-demand structured pull of the full dashboard state snapshot.
|
|
4
4
|
// The system-prompt injection (runTurn) already front-loads this
|
|
5
5
|
// compact text, but tools like GetDashboardState let the LLM pull
|
|
6
|
-
// a fresh JSON when it wants to make state-conditioned decisions
|
|
7
|
-
// ("is win:3 still foreground? if yes, split vertically…").
|
|
6
|
+
// a fresh JSON when it wants to make state-conditioned decisions.
|
|
8
7
|
//
|
|
9
8
|
// Output is the DashboardStateSnapshot JSON. The `output` string
|
|
10
9
|
// is the same prompt-rendered summary (short), so when the model
|
|
@@ -23,9 +22,8 @@ export function buildGetDashboardStateTool(): LLMToolSpec {
|
|
|
23
22
|
return {
|
|
24
23
|
name: 'GetDashboardState',
|
|
25
24
|
description:
|
|
26
|
-
'Return the CURRENT monad-agent dashboard state:
|
|
27
|
-
'
|
|
28
|
-
'State is usually stable within a turn; do not call it twice without an intervening action that could change layout, sessions, cwd, or tool exposure. ' +
|
|
25
|
+
'Return the CURRENT monad-agent dashboard state: active PTY shells, terminal-modal sessions, the workspace cwd/remoteHost, and which tools are exposed this turn. ' +
|
|
26
|
+
'State is usually stable within a turn; do not call it twice without an intervening action that could change sessions, cwd, or tool exposure. ' +
|
|
29
27
|
'Read-only; no approval, no audit log.',
|
|
30
28
|
parameters: {
|
|
31
29
|
type: 'object',
|
|
@@ -29,7 +29,8 @@ import { resolveMainRepoRoot } from '../../git-fs/worktree.js';
|
|
|
29
29
|
import { describeEntranceCommand, lookupEntrance } from '../../self-dev/entrance-registry.js';
|
|
30
30
|
|
|
31
31
|
const AUTO_DRIVES = ['off', 'safe', 'on'] as const;
|
|
32
|
-
|
|
32
|
+
// ⛔ 모듈 평가 시점에 조회하지 않는다 — entrance-registry → native-tool-catalog → 이 파일의 순환에서
|
|
33
|
+
// registry 가 아직 초기화 중이면 `byId` TDZ 로 적재가 죽는다(🅞 2026-09-27 · test/intake-plane-draft.test.ts).
|
|
33
34
|
const RUN_DEV_HARNESS_REPLACEMENT = 'SelfImplement 또는 SolveMission';
|
|
34
35
|
const RUN_DEV_HARNESS_DESCRIPTION =
|
|
35
36
|
'Use this tool when the user mentions the harness: forms such as "하니스로 개발", "하니스:", "하니스로 구현해줘", "하니스 구현", English "harness", or "self dev" mean the same even with Korean particles or punctuation. ' +
|
|
@@ -66,7 +67,7 @@ export function buildRunDevHarnessTool(): LLMToolSpec {
|
|
|
66
67
|
return {
|
|
67
68
|
name: 'RunDevHarness',
|
|
68
69
|
description: describeEntranceCommand(
|
|
69
|
-
|
|
70
|
+
lookupEntrance('nl-run-dev-harness'),
|
|
70
71
|
RUN_DEV_HARNESS_REPLACEMENT,
|
|
71
72
|
RUN_DEV_HARNESS_DESCRIPTION,
|
|
72
73
|
),
|
|
@@ -35,6 +35,16 @@ export interface OmniSearchResult {
|
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
export type OmniSearchEngineEvent =
|
|
39
|
+
| { engine: string; phase: 'start' }
|
|
40
|
+
| { engine: string; phase: 'complete'; hits: number; durationMs: number; error?: string };
|
|
41
|
+
|
|
42
|
+
export interface OmniSearchDispatchOpts {
|
|
43
|
+
/** Observational only: callback failures must not interrupt a provider search. */
|
|
44
|
+
onEngine?: (event: OmniSearchEngineEvent) => void;
|
|
45
|
+
onSource?: (source: WebSearchHit & { engine: string }) => void;
|
|
46
|
+
}
|
|
47
|
+
|
|
38
48
|
const DEFAULT_LIMIT = 5;
|
|
39
49
|
const MAX_LIMIT = 20;
|
|
40
50
|
|
|
@@ -63,7 +73,10 @@ export function buildOmniSearchTool(): LLMToolSpec {
|
|
|
63
73
|
};
|
|
64
74
|
}
|
|
65
75
|
|
|
66
|
-
export async function dispatchOmniSearch(
|
|
76
|
+
export async function dispatchOmniSearch(
|
|
77
|
+
rawArgs: Record<string, unknown>,
|
|
78
|
+
opts: OmniSearchDispatchOpts = {},
|
|
79
|
+
): Promise<OmniSearchResult> {
|
|
67
80
|
const args = validate(rawArgs);
|
|
68
81
|
const merge = args.merge ?? 'interleave';
|
|
69
82
|
const limit = Math.max(1, Math.min(args.limit ?? DEFAULT_LIMIT, MAX_LIMIT));
|
|
@@ -82,8 +95,15 @@ export async function dispatchOmniSearch(rawArgs: Record<string, unknown>): Prom
|
|
|
82
95
|
|
|
83
96
|
// Parallel fan-out. Per-provider failures don't fail the whole call.
|
|
84
97
|
const perEngine: Record<string, { hits: WebSearchHit[]; durationMs: number; error?: string }> = {};
|
|
98
|
+
const emit = (event: OmniSearchEngineEvent): void => {
|
|
99
|
+
if (!opts.onEngine) return;
|
|
100
|
+
try {
|
|
101
|
+
void Promise.resolve(opts.onEngine(event)).catch(() => {});
|
|
102
|
+
} catch { /* Observers cannot change search results. */ }
|
|
103
|
+
};
|
|
85
104
|
await Promise.all(providers.map(async (p) => {
|
|
86
105
|
const start = Date.now();
|
|
106
|
+
emit({ engine: p.id, phase: 'start' });
|
|
87
107
|
try {
|
|
88
108
|
const result = await p.search({
|
|
89
109
|
query: args.query,
|
|
@@ -93,6 +113,11 @@ export async function dispatchOmniSearch(rawArgs: Record<string, unknown>): Prom
|
|
|
93
113
|
recencyDays: args.recency_days,
|
|
94
114
|
});
|
|
95
115
|
perEngine[p.id] = { hits: result.hits, durationMs: Date.now() - start };
|
|
116
|
+
for (const hit of result.hits) {
|
|
117
|
+
try {
|
|
118
|
+
if (opts.onSource) void Promise.resolve(opts.onSource({ ...hit, engine: p.id })).catch(() => {});
|
|
119
|
+
} catch { /* Observers cannot change search results. */ }
|
|
120
|
+
}
|
|
96
121
|
} catch (err) {
|
|
97
122
|
perEngine[p.id] = {
|
|
98
123
|
hits: [],
|
|
@@ -100,6 +125,9 @@ export async function dispatchOmniSearch(rawArgs: Record<string, unknown>): Prom
|
|
|
100
125
|
error: err instanceof Error ? err.message : String(err),
|
|
101
126
|
};
|
|
102
127
|
}
|
|
128
|
+
const info = perEngine[p.id]!;
|
|
129
|
+
emit({ engine: p.id, phase: 'complete', hits: info.hits.length, durationMs: info.durationMs,
|
|
130
|
+
...(info.error !== undefined ? { error: info.error } : {}) });
|
|
103
131
|
}));
|
|
104
132
|
|
|
105
133
|
// Merge.
|
|
@@ -31,7 +31,6 @@ import {
|
|
|
31
31
|
runShell as runnerDispatch,
|
|
32
32
|
getShellRunnerDeps,
|
|
33
33
|
} from '../../shell-runner/dispatch.js';
|
|
34
|
-
import type { ShellMode } from '../../shell-runner/types.js';
|
|
35
34
|
import type { ShellResult as RunnerResult } from '../../shell-runner/types.js';
|
|
36
35
|
import { debug } from '../../debug/log.js';
|
|
37
36
|
import { getSessionCwd } from '../../session/working-dir.js';
|
|
@@ -81,23 +80,14 @@ export function buildRunShellTool(): LLMToolSpec {
|
|
|
81
80
|
enum: ['inherit', 'off'],
|
|
82
81
|
description: "Network policy. Only enforced when sandbox != 'off'. Default 'inherit'.",
|
|
83
82
|
},
|
|
84
|
-
// NT-C1b (session nt): shell-runner routing opt-in. When these
|
|
85
|
-
// fields are present the call is dispatched through the unified
|
|
86
|
-
// 4-mode runner; otherwise the legacy shell-primitive argv path
|
|
87
|
-
// is used as before (zero behavior change).
|
|
88
83
|
mode: {
|
|
89
84
|
type: 'string',
|
|
90
|
-
enum: ['
|
|
91
|
-
description:
|
|
92
|
-
"shell-runner mode. Omit for the legacy argv-only path. 'vw' (default when shell-runner deps are wired) hosts the command in a user-visible runner VW pane and returns only the new output slice. 'bg' registers as background for later ShellPoll. 'inline' is a chat-log one-liner. 'modal' is the legacy centered modal surface.",
|
|
85
|
+
enum: ['inline', 'bg'],
|
|
86
|
+
description: "Shell-runner mode. Omit for the legacy argv-only path. 'inline' captures command output; 'bg' registers it for later ShellPoll.",
|
|
93
87
|
},
|
|
94
88
|
description: {
|
|
95
89
|
type: 'string',
|
|
96
|
-
description: 'Free-form label shown in
|
|
97
|
-
},
|
|
98
|
-
vw_window_label: {
|
|
99
|
-
type: 'string',
|
|
100
|
-
description: "Only for mode='vw'. Label of the VW to reuse / create. Default 'runner'.",
|
|
90
|
+
description: 'Free-form label shown in shell logs and status.',
|
|
101
91
|
},
|
|
102
92
|
},
|
|
103
93
|
required: ['command'],
|
|
@@ -113,9 +103,8 @@ export interface RunShellDispatchArgs {
|
|
|
113
103
|
approval?: ShellRequest['approval'];
|
|
114
104
|
sandbox?: ShellRequest['sandbox'];
|
|
115
105
|
network?: ShellRequest['network'];
|
|
116
|
-
mode?:
|
|
106
|
+
mode?: 'inline' | 'bg';
|
|
117
107
|
description?: string;
|
|
118
|
-
vw_window_label?: string;
|
|
119
108
|
}
|
|
120
109
|
|
|
121
110
|
export interface RunShellDispatchResult extends Record<string, unknown> {
|
|
@@ -164,11 +153,9 @@ function asNetwork(raw: unknown): ShellRequest['network'] {
|
|
|
164
153
|
throw new Error(`invalid network value: ${JSON.stringify(raw)}`);
|
|
165
154
|
}
|
|
166
155
|
|
|
167
|
-
function asMode(raw: unknown):
|
|
156
|
+
function asMode(raw: unknown): 'inline' | 'bg' | undefined {
|
|
168
157
|
if (raw === undefined) return undefined;
|
|
169
|
-
if (raw === '
|
|
170
|
-
return raw;
|
|
171
|
-
}
|
|
158
|
+
if (raw === 'inline' || raw === 'bg') return raw;
|
|
172
159
|
throw new Error(`invalid mode value: ${JSON.stringify(raw)}`);
|
|
173
160
|
}
|
|
174
161
|
|
|
@@ -204,7 +191,6 @@ export async function dispatchRunShell(
|
|
|
204
191
|
const network = asNetwork(rawArgs.network);
|
|
205
192
|
const mode = asMode(rawArgs.mode);
|
|
206
193
|
const description = typeof rawArgs.description === 'string' ? rawArgs.description : undefined;
|
|
207
|
-
const vwLabel = typeof rawArgs.vw_window_label === 'string' ? rawArgs.vw_window_label : undefined;
|
|
208
194
|
if (command[0] === 'cd') {
|
|
209
195
|
logShellDispatch('cd.rejected', { reason: 'argv-state-does-not-persist' });
|
|
210
196
|
return rejectedCdResult();
|
|
@@ -214,14 +200,12 @@ export async function dispatchRunShell(
|
|
|
214
200
|
const boundaryReject = harnessCommandWriteReject(command, effectiveCwd, 'run-shell');
|
|
215
201
|
if (boundaryReject) throw new Error(boundaryReject);
|
|
216
202
|
|
|
217
|
-
//
|
|
218
|
-
//
|
|
219
|
-
// keep the legacy argv-only shell-primitive path (zero behavior
|
|
220
|
-
// change for callers not opting in).
|
|
203
|
+
// Explicit inline/bg uses the file-backed runner when its deps are installed;
|
|
204
|
+
// omitted mode and uninitialized hosts keep the legacy argv path.
|
|
221
205
|
const deps = mode ? getShellRunnerDeps() : null;
|
|
222
206
|
if (mode && deps) {
|
|
223
207
|
const result = await dispatchViaRunner({
|
|
224
|
-
command, cwd, timeoutMs, mode, description,
|
|
208
|
+
command, cwd, timeoutMs, mode, description,
|
|
225
209
|
signal: opts.signal,
|
|
226
210
|
deps,
|
|
227
211
|
});
|
|
@@ -255,16 +239,15 @@ export async function dispatchRunShell(
|
|
|
255
239
|
};
|
|
256
240
|
}
|
|
257
241
|
|
|
258
|
-
/** Route a request through the
|
|
242
|
+
/** Route a request through the file-backed shell-runner and project its
|
|
259
243
|
* ShellResult back into the legacy RunShell response shape so
|
|
260
244
|
* callers keep the same output fields (exitCode/stdout/stderr/…). */
|
|
261
245
|
async function dispatchViaRunner(args: {
|
|
262
246
|
command: string[];
|
|
263
247
|
cwd?: string;
|
|
264
248
|
timeoutMs?: number;
|
|
265
|
-
mode:
|
|
249
|
+
mode: 'inline' | 'bg';
|
|
266
250
|
description?: string;
|
|
267
|
-
vwLabel?: string;
|
|
268
251
|
signal?: AbortSignal;
|
|
269
252
|
deps: NonNullable<ReturnType<typeof getShellRunnerDeps>>;
|
|
270
253
|
}): Promise<RunShellDispatchResult> {
|
|
@@ -275,7 +258,6 @@ async function dispatchViaRunner(args: {
|
|
|
275
258
|
...(args.timeoutMs !== undefined ? { timeoutMs: args.timeoutMs } : {}),
|
|
276
259
|
...(args.description !== undefined ? { description: args.description } : {}),
|
|
277
260
|
...(args.signal !== undefined ? { signal: args.signal } : {}),
|
|
278
|
-
...(args.vwLabel !== undefined ? { vw: { windowLabel: args.vwLabel } } : {}),
|
|
279
261
|
};
|
|
280
262
|
const handle = runnerDispatch(req, args.deps);
|
|
281
263
|
const result = await handle.result;
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
// Native tool: SpawnCodingAgentHeadless — I2 (텔레그램 코딩 에이전트).
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
// PtyShell so a HEADLESS surface (telegram / continuation) can spawn a
|
|
7
|
-
// sub coding-agent and drive its live terminal with the PtyShell family:
|
|
3
|
+
// Lands claude-code / codex in a bare PtyShell so a HEADLESS surface
|
|
4
|
+
// (telegram / continuation) can spawn a sub coding-agent and drive its
|
|
5
|
+
// live terminal with the PtyShell family:
|
|
8
6
|
//
|
|
9
7
|
// SpawnCodingAgentHeadless → process_id
|
|
10
8
|
// · PtyShellSnapshot — read the agent's screen (it's a full-screen TUI)
|
|
@@ -17,8 +15,7 @@
|
|
|
17
15
|
// prefer it for fire-and-forget "delegate this coding task, give me the
|
|
18
16
|
// result". This tool is for when you want to DRIVE or SEE the agent's
|
|
19
17
|
// actual terminal (observe its work, steer mid-run, or run a CLI that has
|
|
20
|
-
// no ACP).
|
|
21
|
-
// wrap from the VW path so `claude` can read its credentials.
|
|
18
|
+
// no ACP). The macOS keychain-unlock wrap lets `claude` read its credentials.
|
|
22
19
|
|
|
23
20
|
import { spawnSync } from 'node:child_process';
|
|
24
21
|
import type { LLMToolSpec } from '../../llm.js';
|
|
@@ -26,7 +23,7 @@ import { getSessionCwd } from '../../session/working-dir.js';
|
|
|
26
23
|
import { startPty, unregisterPty, type PtyHandle } from '../../pty-shell/registry.js';
|
|
27
24
|
import { CodingAgentBinaryMissing } from '../../terminal/coding-agent.js';
|
|
28
25
|
import { wrapCommandForKeychainUnlock, shouldWrapForKeychainUnlock } from '../../terminal/keychain-unlock.js';
|
|
29
|
-
|
|
26
|
+
export type CodingAgentBrand = 'claude-code' | 'codex';
|
|
30
27
|
|
|
31
28
|
const sleep = (ms: number): Promise<void> => new Promise(r => setTimeout(r, ms));
|
|
32
29
|
|
|
@@ -100,7 +97,7 @@ function resolveAndSpawn(
|
|
|
100
97
|
throw new CodingAgentBinaryMissing(binary);
|
|
101
98
|
}
|
|
102
99
|
// Only `claude` reads the macOS keychain — wrap it in the SSH unlock
|
|
103
|
-
// preamble
|
|
100
|
+
// preamble so credentials resolve. codex
|
|
104
101
|
// spawns as a plain direct binary.
|
|
105
102
|
const wrap = brand === 'claude-code' && shouldWrapForKeychainUnlock();
|
|
106
103
|
const wrapCommand = deps.wrapCommand ?? wrapCommandForKeychainUnlock;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// SSH host picker modal — T4-E4.
|
|
2
2
|
//
|
|
3
|
-
// Sibling of session-picker-modal
|
|
3
|
+
// Sibling of session-picker-modal. Wraps
|
|
4
4
|
// createSearchModal with the registered SSH hosts so Ctrl+K pops
|
|
5
5
|
// a fuzz-matchable list; Enter switches the browser pane into
|
|
6
6
|
// remote mode against the selected host, Esc cancels.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { getSecretAsync } from '../nexus/config/secrets/index.js';
|
|
3
|
+
import { getUserConfig } from '../user-config.js';
|
|
4
|
+
|
|
5
|
+
export type DirectiveSource = 'telegram' | 'pwa' | 'tui' | 'cli';
|
|
6
|
+
export interface DirectiveIssue { id: string; identifier: string; title: string; description?: string | null }
|
|
7
|
+
export interface DirectiveDeps {
|
|
8
|
+
fetch?: typeof fetch;
|
|
9
|
+
getSecret?: (id: string) => Promise<string | undefined>;
|
|
10
|
+
team?: string;
|
|
11
|
+
now?: () => Date;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function directiveHash(text: string): string {
|
|
15
|
+
return createHash('sha256').update(text.normalize('NFKC').trim().replace(/\s+/g, ' ').toLocaleLowerCase()).digest('hex');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async function graphql<T>(key: string, query: string, variables: Record<string, unknown>, fetchFn: typeof fetch): Promise<T> {
|
|
19
|
+
let response: Response;
|
|
20
|
+
try {
|
|
21
|
+
response = await fetchFn('https://api.linear.app/graphql', {
|
|
22
|
+
method: 'POST', headers: { Authorization: key, 'Content-Type': 'application/json' },
|
|
23
|
+
body: JSON.stringify({ query, variables }),
|
|
24
|
+
});
|
|
25
|
+
} catch { throw new Error('Linear GraphQL request failed'); }
|
|
26
|
+
if (!response.ok) throw new Error(`Linear GraphQL HTTP ${response.status}`);
|
|
27
|
+
let payload: { data?: T; errors?: unknown[] };
|
|
28
|
+
try { payload = await response.json() as typeof payload; }
|
|
29
|
+
catch { throw new Error('Linear GraphQL invalid JSON response'); }
|
|
30
|
+
if (payload.errors?.length || !payload.data) throw new Error('Linear GraphQL returned errors or missing data');
|
|
31
|
+
return payload.data;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** The same entry point is used by the CLI and conversational surfaces. */
|
|
35
|
+
export async function addDirective(text: string, options: { source?: DirectiveSource; dryRun?: boolean } = {}, deps: DirectiveDeps = {}): Promise<{ status: 'created' | 'repeated' | 'dry-run'; issue?: string; hash: string }> {
|
|
36
|
+
const original = text.trim();
|
|
37
|
+
if (!original) throw new Error('directive text is required');
|
|
38
|
+
const source = options.source ?? 'cli';
|
|
39
|
+
if (!['telegram', 'pwa', 'tui', 'cli'].includes(source)) throw new Error('invalid directive source');
|
|
40
|
+
const hash = directiveHash(original);
|
|
41
|
+
if (options.dryRun) return { status: 'dry-run', hash };
|
|
42
|
+
const key = await (deps.getSecret ?? getSecretAsync)('connector.linear.apiKey');
|
|
43
|
+
if (!key) throw new Error('connector.linear.apiKey missing; run elanous connector linear set-key');
|
|
44
|
+
const teamKey = deps.team ?? getUserConfig().loops?.steward?.linearTeam ?? 'ELA';
|
|
45
|
+
const request = <T>(query: string, variables: Record<string, unknown>) => graphql<T>(key, query, variables, deps.fetch ?? fetch);
|
|
46
|
+
const team = await request<{ teams: { nodes: Array<{ id: string }> } }>(
|
|
47
|
+
'query($key:String!){teams(filter:{key:{eq:$key}}){nodes{id}}}', { key: teamKey });
|
|
48
|
+
const teamId = team.teams?.nodes?.[0]?.id;
|
|
49
|
+
if (!teamId) throw new Error('Linear team not found');
|
|
50
|
+
let after: string | null = null;
|
|
51
|
+
const seen = new Set<string>();
|
|
52
|
+
let duplicate: DirectiveIssue | undefined;
|
|
53
|
+
do {
|
|
54
|
+
const data: { issues: { nodes: Array<DirectiveIssue & { state?: { type?: string } }>; pageInfo: { hasNextPage: boolean; endCursor: string | null } } } = await request<{ issues: { nodes: Array<DirectiveIssue & { state?: { type?: string } }>; pageInfo: { hasNextPage: boolean; endCursor: string | null } } }>(
|
|
55
|
+
'query($key:String!,$after:String){issues(filter:{team:{key:{eq:$key}}},first:100,after:$after){nodes{id identifier title description state{type}} pageInfo{hasNextPage endCursor}}}',
|
|
56
|
+
{ key: teamKey, after });
|
|
57
|
+
if (!Array.isArray(data.issues?.nodes)) throw new Error('Linear issues missing');
|
|
58
|
+
duplicate = data.issues.nodes.find(issue => {
|
|
59
|
+
if (['completed', 'canceled', 'duplicate'].includes(issue.state?.type ?? '')) return false;
|
|
60
|
+
if (issue.description?.includes(`[directive-hash:${hash}]`)) return true;
|
|
61
|
+
const firstLine = issue.description?.split('\n')[0]?.trim();
|
|
62
|
+
const candidate = firstLine && firstLine.length > 0 ? firstLine : issue.title;
|
|
63
|
+
return directiveHash(candidate) === hash;
|
|
64
|
+
});
|
|
65
|
+
if (duplicate) break;
|
|
66
|
+
const page = data.issues.pageInfo;
|
|
67
|
+
if (page?.hasNextPage && (!page.endCursor || seen.has(page.endCursor))) throw new Error('Linear pagination cursor missing or repeated');
|
|
68
|
+
after = page?.hasNextPage ? page.endCursor : null;
|
|
69
|
+
if (after) seen.add(after);
|
|
70
|
+
} while (after);
|
|
71
|
+
const at = (deps.now ?? (() => new Date()))().toISOString();
|
|
72
|
+
if (duplicate) {
|
|
73
|
+
const result = await request<{ commentCreate: { success: boolean } }>(
|
|
74
|
+
'mutation($input:CommentCreateInput!){commentCreate(input:$input){success}}',
|
|
75
|
+
{ input: { issueId: duplicate.id, body: `다시 말함 · ${source} · ${at}\n\n${original}` } });
|
|
76
|
+
if (!result.commentCreate?.success) throw new Error('Linear comment creation failed');
|
|
77
|
+
return { status: 'repeated', issue: duplicate.identifier, hash };
|
|
78
|
+
}
|
|
79
|
+
const labels = await request<{ issueLabels: { nodes: Array<{ id: string; name: string }> } }>(
|
|
80
|
+
'query($name:String!){issueLabels(filter:{name:{eq:$name}}){nodes{id name}}}', { name: 'from-directive' });
|
|
81
|
+
let labelId = labels.issueLabels?.nodes?.find(item => item.name === 'from-directive')?.id;
|
|
82
|
+
if (!labelId) {
|
|
83
|
+
const createdLabel = await request<{ issueLabelCreate: { success: boolean; issueLabel?: { id: string } } }>(
|
|
84
|
+
'mutation($input:IssueLabelCreateInput!){issueLabelCreate(input:$input){success issueLabel{id}}}',
|
|
85
|
+
{ input: { teamId, name: 'from-directive' } });
|
|
86
|
+
labelId = createdLabel.issueLabelCreate?.success ? createdLabel.issueLabelCreate.issueLabel?.id : undefined;
|
|
87
|
+
if (!labelId) throw new Error('Linear label from-directive creation failed');
|
|
88
|
+
}
|
|
89
|
+
const created = await request<{ issueCreate: { success: boolean; issue?: DirectiveIssue } }>(
|
|
90
|
+
'mutation($input:IssueCreateInput!){issueCreate(input:$input){success issue{id identifier title}}}',
|
|
91
|
+
{ input: { teamId, title: original.slice(0, 240), description: `${original}\n\n출처: ${source}\n시각: ${at}\n[directive-hash:${hash}]`, labelIds: [labelId], priority: 0 } });
|
|
92
|
+
if (!created.issueCreate?.success || !created.issueCreate.issue?.identifier) throw new Error('Linear issue creation failed');
|
|
93
|
+
return { status: 'created', issue: created.issueCreate.issue.identifier, hash };
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export async function runDirectiveCli(text: string, options: { source?: DirectiveSource; dryRun?: boolean }): Promise<void> {
|
|
97
|
+
const result = await addDirective(text, options);
|
|
98
|
+
console.log(`${result.status}\t${result.issue ?? '-'}\t${result.hash}`);
|
|
99
|
+
}
|