elanous 0.2.0 → 0.2.5
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 +17 -15
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/chunks/06ef2eba-d1b99ac6d2ea663c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1413-7179a49332db5a80.js +1 -0
- package/apps/pwa/out/_next/static/chunks/150-25c277137a9638ab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1640-bc99ec23bbe29d12.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1751.50b96ea9c37b49b6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2300-de059d0ab2a16630.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2684-05b0a81e75298c16.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3026-2ed7e317d9b02102.js +25 -0
- package/apps/pwa/out/_next/static/chunks/3611-77496ada38cd6358.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3717-68957c4dc9ceec90.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3929-46ba9af6f9d895cc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4015-62c5a3744698a8da.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4217-3c4317a7905f9eeb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4240-3230f230fae2d7d5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4271-e53e075ebd48593b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4377.3b125fef79576dfd.js +5 -0
- package/apps/pwa/out/_next/static/chunks/4440-18bb160d95819f4e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4853-35fdbe6bdbcdc0fc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2a79f15a-2013e4d421d6df88.js → 4daa2798-1363d725c79f3593.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5007-6a3b30e23ff68a6e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5244-12b424c42070f5ff.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5348-bbf838e119661eee.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5391-8793f88b03b30161.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5611-df00af3e4e4a61bb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5890-dca2321773be829a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6123-37c9dc57ddaa7ab0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6588-b7975304a302ab91.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6604-c03961962b6273b6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7109-cf8c87e968e83a65.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7178-30f77877525a2efb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7262-871563fc9663730b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7294-f0eeebb92aa93459.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7429-881af44deed6958f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5927.8378481a12cc8044.js → 7527.943753b6ed829f09.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/764-a01e858525a190c0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7868-e35d5f7985ecd3f1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8320-51484af7b01fdfa5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6804.8ed6ab492bc5fc0a.js → 8617.465ca22a319c95b3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{320-d7013ec072863e5e.js → 8918-482b30ce2a8ebf4c.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/9131-52f5fad51cceca04.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2598.814f64e3268634e7.js → 9238.2cd5f47f4bf7a2c3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9704-3221c102623c8d73.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-70c404c7bb6d7f0f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-3ffd80166b1050aa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f89e9a303515a033.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-4f403cd060442c95.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-0ac5d053f0444d21.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-4bcc63e272ae8205.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-880734bd07d62882.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-72bd384898d88955.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-1018bbc9586ecae5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-de86f8c38076dd7b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-70c404c7bb6d7f0f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-cd6447196d8bafe6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-e733630c47fa102b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-d1c1a8357b161875.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-60c514128e81d787.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-8b637b7e325e13c1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-bccce0babceae30f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-63301d11dbe73836.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-a8cf0dc472060db2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-02fba54881ccfa49.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-d5e8e90f0038f8de.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-b1ef6824f494466a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-d589bb0f233b1009.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-c9bbaebef4cda059.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-3639ce7916b92fed.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-7450ae7478955653.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-70c404c7bb6d7f0f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-b41ca4abfd618452.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-b333dd79ebee3fa9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-8be1227492793655.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-6e03e9371b552e0d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-911411e9fca18d03.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-792170e649b37088.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-c40463466937bc91.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-509c798b80384536.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-1cac2aa21d77c417.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-9626799d9b4a2cd1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-84cd419494e16b0f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/f6f3850d-7f324c6566002113.js +1 -0
- package/apps/pwa/out/_next/static/chunks/framework-361487d2da603917.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-607f5beb94cb2e07.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-d0222d219e29dddf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-a26980a31126decc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-edb2b37decf23e4d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-2bf59c720fe9542c.js +1 -0
- package/apps/pwa/out/_next/static/css/eaa74e8bb2f62269.css +1 -0
- package/apps/pwa/out/_next/static/ktMqfrBbf8BMGac0jqLrb/_buildManifest.js +1 -0
- package/apps/pwa/out/approvals/index.html +1 -0
- package/apps/pwa/out/approvals/index.txt +32 -0
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +29 -26
- package/apps/pwa/out/board/index.html +1 -0
- package/apps/pwa/out/board/index.txt +32 -0
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +26 -23
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +26 -23
- package/apps/pwa/out/chat/index.html +1 -2
- package/apps/pwa/out/chat/index.txt +26 -23
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +29 -26
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +29 -26
- package/apps/pwa/out/editor/index.html +1 -0
- package/apps/pwa/out/editor/index.txt +33 -0
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/icons/elanous-16.png +0 -0
- package/apps/pwa/out/icons/elanous-180.png +0 -0
- package/apps/pwa/out/icons/elanous-192.png +0 -0
- package/apps/pwa/out/icons/elanous-32.png +0 -0
- package/apps/pwa/out/icons/elanous-512.png +0 -0
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +26 -23
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +29 -26
- package/apps/pwa/out/live/index.html +1 -0
- package/apps/pwa/out/live/index.txt +32 -0
- package/apps/pwa/out/manifest.webmanifest +5 -2
- package/apps/pwa/out/market/index.html +1 -0
- package/apps/pwa/out/market/index.txt +29 -0
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +26 -23
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +29 -26
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +29 -26
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +27 -24
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +29 -26
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +26 -23
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +29 -26
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +29 -26
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +29 -26
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +29 -26
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +29 -26
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +26 -23
- package/apps/pwa/out/sw-strategies.js +44 -0
- package/apps/pwa/out/sw.js +6 -44
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +29 -26
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +29 -26
- package/apps/pwa/out/trace/index.html +1 -0
- package/apps/pwa/out/trace/index.txt +32 -0
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +29 -26
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +29 -26
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +29 -27
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +29 -26
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +29 -26
- package/catalog/resources.yaml +14 -17
- 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 +42 -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 +45 -0
- package/graphs/release/release-loop.yaml +45 -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/README.md +1 -0
- package/graphs/video/broll-line.yaml +54 -0
- package/graphs/video/explainer-line.yaml +58 -0
- package/package.json +9 -5
- package/plugins/job-coach/.agents/plugins/marketplace.json +12 -0
- package/plugins/job-coach/.codex-plugin/plugin.json +23 -0
- package/plugins/job-coach/.mcp.json +9 -0
- package/plugins/job-coach/README.md +32 -0
- package/plugins/job-coach/connectors/ncs/server.ts +90 -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/gap-judge.ts +44 -0
- package/plugins/job-coach/graphs/recipes.yaml +45 -0
- package/plugins/job-coach/graphs/report-enterprise.yaml +28 -0
- package/plugins/job-coach/graphs/report.yaml +20 -0
- package/plugins/job-coach/graphs/run-step.ts +302 -0
- package/plugins/job-coach/plugin.json +26 -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/enterprise-ai-fit/SKILL.md +8 -0
- package/plugins/job-coach/skills/enterprise-competency/SKILL.md +8 -0
- package/plugins/job-coach/skills/enterprise-needs/SKILL.md +8 -0
- package/plugins/job-coach/skills/enterprise-roadmap/SKILL.md +8 -0
- package/plugins/job-coach/skills/enterprise-task-analysis/SKILL.md +8 -0
- package/plugins/job-coach/skills/interview-to-profile/SKILL.md +23 -0
- package/plugins/job-coach/skills/run-report/SKILL.md +15 -0
- package/scripts/backup/elanous-backup.sh +143 -14
- package/scripts/backup/elanous-restore.sh +122 -0
- package/scripts/build-docs-site.ts +4 -3
- 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 +28 -9
- package/scripts/coord-post.sh +49 -12
- package/scripts/coord-tracks.json +6 -5
- 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/eval-bot-vs-grok.ts +79 -0
- package/scripts/eval-grok-live-baseline.ts +36 -0
- package/scripts/fixtures/front-route-corpus.sample.json +17 -0
- package/scripts/fleet/node-setup.sh +80 -7
- 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 +63 -0
- package/scripts/landing-heal/run-mission.ts +195 -0
- package/scripts/lib/front-route-measurement.ts +131 -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/lib/tui-sim-keys.ts +42 -0
- package/scripts/market/db-check.ts +212 -0
- package/scripts/market-posture-cycle.ts +63 -4
- package/scripts/measure-front-route-classifier.ts +56 -0
- package/scripts/media/ocr-leak-scan.sh +21 -0
- 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-export.ts +2 -3
- package/scripts/public-import-pr.ts +80 -6
- package/scripts/public-leak-baseline.txt +0 -7
- package/scripts/publish-internal-dist.ts +118 -0
- package/scripts/pwa-scenarios.ts +106 -0
- package/scripts/rebrand-elanous.ts +1 -1
- package/scripts/red-sweep-diff.ts +1 -1
- package/scripts/release-loop/auto-approve-node.ts +72 -0
- 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 +641 -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 +61 -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 +109 -0
- package/scripts/release-loop/test-durations.ts +63 -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 +26 -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-audit-coverage-per-file.sh +16 -0
- package/scripts/test-audit-meaningless.ts +88 -0
- package/scripts/test-audit-overlap-and-weak.ts +73 -0
- package/scripts/test-deterministic.ts +29 -6
- package/scripts/tui-sim.ts +59 -14
- package/scripts/uninstall.sh +10 -3
- package/scripts/ux/bump-installed.sh +20 -0
- package/scripts/ux/lib/cdp.ts +72 -0
- package/scripts/ux/record-page.ts +50 -0
- 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/explainer-video/SKILL.md +99 -0
- package/skills/explainer-video/engine/brand/elanous-mark-on-dark.svg +1 -0
- package/skills/explainer-video/engine/build.mjs +431 -0
- package/skills/explainer-video/engine/vo.ts +37 -0
- package/skills/explainer-video/examples/elanous-0.2.5/script.json +155 -0
- 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/nested-agent-env.ts +1 -0
- 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 +900 -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 +25 -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 +235 -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/acp-token.ts +16 -0
- package/src/auth/github-app-token.ts +112 -0
- 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/gh-rest-fallback.ts +177 -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/pr-manager.ts +51 -4
- 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 +18 -18
- 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/boot/daemon-tools/web-search.ts +2 -1
- package/src/boot/ws-bridge.ts +11 -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 +57 -52
- package/src/chat/input-text-key.ts +2 -2
- package/src/chat/log-scroll-key.ts +12 -0
- 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/submit-trace.ts +30 -0
- 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 +726 -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/decisions-cli.ts +94 -0
- package/src/cli/docs-cli.ts +38 -0
- package/src/cli/doctor-cli.ts +262 -77
- 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 +23 -28
- 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 +52 -13
- package/src/cli/mcp-gateway-cli.ts +94 -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 +201 -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/pr-lineage.ts +2 -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 +102 -27
- package/src/cli/pwa-test.ts +201 -96
- package/src/cli/release-cli.ts +177 -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 +103 -12
- 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 +240 -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 +14 -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 +331 -2562
- 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/input/no-provider-reply.ts +13 -0
- 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/slash-runtime/unknown-slash-reply.ts +78 -0
- package/src/dashboard/stale-install-check.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/decisions/decision-ledger.ts +404 -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 +24 -6
- 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/domains/telegram-kind-route.ts +21 -0
- package/src/element-registry/address.ts +1 -3
- package/src/execution-loop/dispatch-task.ts +139 -0
- package/src/execution-loop/gate-decision-summary.ts +29 -0
- package/src/execution-loop/gates.ts +197 -0
- 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/installed-plugin-nodes.ts +95 -0
- package/src/graph-kinds/plugin-nodes.ts +68 -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 +487 -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 +121 -0
- package/src/harness/harness-cli-command.ts +415 -23
- package/src/harness/harness-pod-dispatch.ts +116 -0
- package/src/harness/harness-stop.ts +260 -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 +233 -0
- package/src/harness/self-send-target.ts +22 -1
- package/src/harness/shell-relay.ts +5 -0
- package/src/harness/worktree-branch-prefix.ts +4 -3
- 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 +712 -3409
- 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 +46 -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 +91 -0
- package/src/intake-plane/digest.ts +111 -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 +180 -0
- package/src/llm/provider-detect.ts +247 -0
- package/src/llm/provider-probe.ts +57 -0
- package/src/llm/usable-llm.ts +32 -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 +196 -0
- package/src/market/official-keys.ts +5 -0
- package/src/market/publish.ts +329 -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 +66 -345
- 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-approvals.ts +125 -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 +328 -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 +42 -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 +31 -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 +307 -0
- package/src/nexus/api/meta-api.ts +18 -0
- package/src/nexus/api/next-fluent-wiring.ts +7 -9
- package/src/nexus/api/plugins-credentials-api.ts +47 -0
- package/src/nexus/api/plugins-market.ts +209 -0
- package/src/nexus/api/pod-credential-api.ts +187 -0
- package/src/nexus/api/public-routes.ts +87 -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 +405 -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 +135 -16
- package/src/nexus/daemon-endpoint.ts +85 -0
- package/src/nexus/default-port.ts +1 -0
- package/src/nexus/index.ts +362 -143
- package/src/nexus/onboarding/pwa-share-prompt.ts +31 -8
- package/src/nexus/onboarding/tailscale-probe.ts +9 -1
- package/src/nexus/outbound/router.ts +1 -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 +27 -4
- 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 +108 -4
- package/src/plugins/core/manifest.ts +104 -7
- package/src/plugins/install/market-fetch.ts +250 -0
- package/src/plugins/install/plugin-credentials.ts +106 -0
- package/src/plugins/install/plugin-install.ts +518 -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/prompt-library/universal-preamble.ts +8 -2
- 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/checklist.ts +191 -0
- package/src/release-loop/manifest.ts +65 -0
- package/src/release-loop/release-note.ts +177 -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 +290 -159
- package/src/self-dev/dev-pipeline.ts +157 -9
- 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 +35 -2
- 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 +41 -3
- 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 +244 -0
- package/src/self-implement/non-git-consent.ts +23 -0
- package/src/self-implement/orchestrator.ts +488 -134
- 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 +207 -40
- 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 +45 -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/steward-cards.ts +45 -0
- package/src/steward/triage.ts +239 -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 +194 -0
- package/src/task-orchestrator/surfaces/pod-command-job.ts +369 -0
- package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +207 -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 +147 -0
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +129 -0
- package/src/task-orchestrator/surfaces/pod-source-spec.ts +77 -0
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +930 -45
- 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 +14 -7
- 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/acp-transport-ws-client.ts +72 -5
- package/src/tui-client/headless-core-guard.ts +0 -1
- package/src/tui.ts +11 -7
- package/src/typecheck-ratchet.ts +15 -0
- package/src/ui/hover-presenter.ts +3 -7
- package/src/user-config.ts +453 -190
- package/src/util/spawn-sync-output.ts +15 -0
- package/src/version/code-revision.ts +34 -9
- 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/free.ts +77 -0
- package/src/web-search/index.ts +7 -5
- package/src/web-terminal/preview-tap-registry.ts +152 -43
- package/src/workflow-runtime/deps-bridge.ts +4 -3
- 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 +166 -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 +76 -5
- 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/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/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 → ktMqfrBbf8BMGac0jqLrb}/_ssgManifest.js +0 -0
- /package/src/dashboard/{companion-slash-runtime.ts → companion-messages-runtime.ts} +0 -0
|
@@ -124,7 +124,8 @@ export function createCodexFetcher(opts: CodexFetcherOpts = {}): ProviderFetcher
|
|
|
124
124
|
const usedPercent = snapshot.windows
|
|
125
125
|
.filter((window) => window.model === undefined)
|
|
126
126
|
.reduce<number | undefined>((max, window) => max === undefined || window.used > max ? window.used : max, undefined);
|
|
127
|
-
writeQuotaSignal(snapshot.rateLimitReached, usedPercent, opts.codexHome, opts.quotaSignalStorage
|
|
127
|
+
writeQuotaSignal(snapshot.rateLimitReached, usedPercent, opts.codexHome, opts.quotaSignalStorage,
|
|
128
|
+
snapshot.credits ? { balance: snapshot.credits.balance, hasCredits: snapshot.credits.hasCredits } : undefined);
|
|
128
129
|
return snapshot;
|
|
129
130
|
},
|
|
130
131
|
};
|
|
@@ -3,6 +3,8 @@ import type { BillingRoute } from './llm-cost.js';
|
|
|
3
3
|
export interface RunUsageInput {
|
|
4
4
|
runId?: string | null;
|
|
5
5
|
hostId?: string | null;
|
|
6
|
+
site?: string | null;
|
|
7
|
+
role?: string | null;
|
|
6
8
|
model?: string | null;
|
|
7
9
|
billingProvider?: string | null;
|
|
8
10
|
billing?: BillingRoute | null;
|
|
@@ -16,6 +18,8 @@ export interface RunUsageInput {
|
|
|
16
18
|
|
|
17
19
|
export interface RunUsageRow {
|
|
18
20
|
runId: string;
|
|
21
|
+
role?: string;
|
|
22
|
+
site?: string;
|
|
19
23
|
model: string;
|
|
20
24
|
billingProvider: string;
|
|
21
25
|
billing: string;
|
|
@@ -33,18 +37,21 @@ export interface RunUsageRow {
|
|
|
33
37
|
}
|
|
34
38
|
|
|
35
39
|
/** Aggregate llm-usage observations without turning unavailable prices into a known zero. */
|
|
36
|
-
export function rollupRunUsage(rows: readonly RunUsageInput[]): RunUsageRow[] {
|
|
40
|
+
export function rollupRunUsage(...[rows, opts]: [rows: readonly RunUsageInput[], opts?: { by?: 'run' | 'role' }]): RunUsageRow[] {
|
|
37
41
|
const groups = new Map<string, RunUsageRow>();
|
|
42
|
+
const byRole = opts?.by === 'role';
|
|
38
43
|
for (const data of rows) {
|
|
39
|
-
const runId = data.runId ?? '(none)';
|
|
44
|
+
const runId = byRole ? '(all)' : data.runId ?? '(none)';
|
|
45
|
+
const role = data.role ?? '(none)';
|
|
46
|
+
const site = data.site ?? '(none)';
|
|
40
47
|
const model = data.model ?? '(none)';
|
|
41
48
|
const billingProvider = data.billingProvider ?? '(none)';
|
|
42
49
|
const billing = data.billing ?? '(none)';
|
|
43
|
-
const key = JSON.stringify([runId, model, billingProvider, billing]);
|
|
50
|
+
const key = JSON.stringify(byRole ? [role, site, model, billingProvider, billing] : [runId, model, billingProvider, billing]);
|
|
44
51
|
let row = groups.get(key);
|
|
45
52
|
if (!row) {
|
|
46
53
|
row = {
|
|
47
|
-
runId, model, billingProvider, billing, hostIds: [], calls: 0,
|
|
54
|
+
runId, ...(byRole ? { role, site } : {}), model, billingProvider, billing, hostIds: [], calls: 0,
|
|
48
55
|
inputTokens: 0, outputTokens: 0, cacheReadInputTokens: 0,
|
|
49
56
|
cacheCreationInputTokens: 0, reasoningOutputTokens: 0,
|
|
50
57
|
usdKnown: 0, unknownCostCalls: 0, includedCalls: 0, apiEquivalentUsd: 0,
|
|
@@ -16,6 +16,7 @@ import { resolveGrokCredential } from '../grok/credential.js';
|
|
|
16
16
|
import { getOpenRouterApiKey } from '../config.js';
|
|
17
17
|
import { listCodexAccountsInStore } from '../oauth/codex-account-store.js';
|
|
18
18
|
import { loadTokens } from '../oauth/store.js';
|
|
19
|
+
import { envLiteral } from '../platform/env-literal.js';
|
|
19
20
|
import { describeResetCreditExpiry } from './codex-reset-credit-state.js';
|
|
20
21
|
import { listCodexResetCredits, type CodexResetCreditsResult } from './codex-reset-credits.js';
|
|
21
22
|
import type {
|
|
@@ -173,7 +174,7 @@ async function collectResetCreditExpiry(
|
|
|
173
174
|
warningWindowMs: number | undefined,
|
|
174
175
|
nowMs: number,
|
|
175
176
|
): Promise<ResetCreditExpiryAxis> {
|
|
176
|
-
const listed = await listResetCredits(home ? { env: { CODEX_HOME: home } } : {});
|
|
177
|
+
const listed = await listResetCredits(home ? { env: envLiteral({ CODEX_HOME: home }) } : {});
|
|
177
178
|
if (!listed.ok) return { status: 'unavailable', detail: listed.kind };
|
|
178
179
|
return describeResetCreditExpiry(listed.value.credits, warningWindowMs, nowMs);
|
|
179
180
|
}
|
|
@@ -97,6 +97,13 @@ export function createTuiFrameObserver(
|
|
|
97
97
|
export interface TuiControlTargetDeps {
|
|
98
98
|
injectKey?: (key: Key) => boolean;
|
|
99
99
|
splitKeys?: (input: string) => Key[];
|
|
100
|
+
/** The foreground terminal's real size; `undefined` when it cannot be known (stdout is not a TTY). */
|
|
101
|
+
dims?: () => { readonly cols: number; readonly rows: number } | undefined;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function stdoutDims(): { cols: number; rows: number } | undefined {
|
|
105
|
+
const out = process.stdout;
|
|
106
|
+
return out.isTTY && out.columns > 0 && out.rows > 0 ? { cols: out.columns, rows: out.rows } : undefined;
|
|
100
107
|
}
|
|
101
108
|
|
|
102
109
|
export interface TuiControlTarget extends PtyControlTarget {
|
|
@@ -108,11 +115,14 @@ export interface TuiControlTarget extends PtyControlTarget {
|
|
|
108
115
|
export function createTuiControlTarget(surfaceId: string, deps: TuiControlTargetDeps = {}): TuiControlTarget {
|
|
109
116
|
const inject = deps.injectKey ?? injectKey;
|
|
110
117
|
const parse = deps.splitKeys ?? splitKeys;
|
|
118
|
+
const dims = deps.dims ?? stdoutDims;
|
|
111
119
|
let alive = true;
|
|
112
120
|
let accessMode: PtyAccessMode = 'write';
|
|
113
121
|
let transitionPolicy: PtyTransitionPolicy = 'open';
|
|
114
122
|
return {
|
|
115
123
|
id: surfaceId,
|
|
124
|
+
get cols() { return dims()?.cols; },
|
|
125
|
+
get rows() { return dims()?.rows; },
|
|
116
126
|
get accessMode() { return accessMode; },
|
|
117
127
|
set accessMode(mode: PtyAccessMode) { accessMode = mode; },
|
|
118
128
|
get transitionPolicy() { return transitionPolicy; },
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { debug } from './debug/log.js';
|
|
4
|
+
import { getSecret, setSecretAsync } from './nexus/config/secrets/index.js';
|
|
5
|
+
import { userConfigPath } from './nexus/config/paths.js';
|
|
6
|
+
import { isSecretRef, makeSecretRef, secretIdFromRef } from './nexus/config/types.js';
|
|
7
|
+
import { acquireLockAsync } from './storage/file-lock.js';
|
|
8
|
+
import type { UserConfig } from './user-config.js';
|
|
9
|
+
|
|
10
|
+
export type ChannelBotPlatform = 'telegram' | 'discord';
|
|
11
|
+
export type ChannelBotTokenSource = 'tokenRef' | 'env' | 'plaintext';
|
|
12
|
+
|
|
13
|
+
/** The tab reference is read from the same persistent config as the NEXUS switch. */
|
|
14
|
+
export function resolveChannelBotToken(
|
|
15
|
+
platform: ChannelBotPlatform,
|
|
16
|
+
cfg: Pick<UserConfig, 'telegram' | 'discord'> & { tabs?: Record<string, { tokenRef?: unknown }> },
|
|
17
|
+
): { token: string; source: ChannelBotTokenSource } | undefined {
|
|
18
|
+
const ref = cfg.tabs?.[`${platform}:1`]?.tokenRef;
|
|
19
|
+
if (isSecretRef(ref)) {
|
|
20
|
+
const id = secretIdFromRef(ref);
|
|
21
|
+
const token = id ? getSecret(id) : undefined;
|
|
22
|
+
if (token) return { token, source: 'tokenRef' };
|
|
23
|
+
}
|
|
24
|
+
const envName = platform === 'telegram' ? 'ELANOUS_TELEGRAM_BOT_TOKEN' : 'ELANOUS_DISCORD_BOT_TOKEN';
|
|
25
|
+
const envToken = process.env[envName];
|
|
26
|
+
if (envToken) return { token: envToken, source: 'env' };
|
|
27
|
+
const token = cfg[platform]?.botToken;
|
|
28
|
+
if (token) {
|
|
29
|
+
debug.log('channel-bot.token', 'plaintext-fallback', { platform });
|
|
30
|
+
return { token, source: 'plaintext' };
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Publish the secret before its reference, under the config lock. Other config keys survive unchanged. */
|
|
36
|
+
type ChannelBotTokenWrite = {
|
|
37
|
+
platform: ChannelBotPlatform; token: string; allowedUsers?: string[];
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export function storeChannelBotToken(platform: ChannelBotPlatform, token: string, allowedUsers?: string[]): Promise<void>;
|
|
41
|
+
/** Migration selects candidates and backs up the exact config under the same lock as the write. */
|
|
42
|
+
export function storeChannelBotToken(entries: (cfg: Record<string, unknown>) => ReadonlyArray<ChannelBotTokenWrite>, requireSameSecret: boolean): Promise<void>;
|
|
43
|
+
export async function storeChannelBotToken(
|
|
44
|
+
platformOrEntries: ChannelBotPlatform | ((cfg: Record<string, unknown>) => ReadonlyArray<ChannelBotTokenWrite>),
|
|
45
|
+
tokenOrRequireSameSecret: string | boolean,
|
|
46
|
+
allowedUsers?: string[],
|
|
47
|
+
): Promise<void> {
|
|
48
|
+
const requireSameSecret = typeof tokenOrRequireSameSecret === 'boolean' ? tokenOrRequireSameSecret : false;
|
|
49
|
+
const path = userConfigPath();
|
|
50
|
+
const lock = await acquireLockAsync(`${path}.lock`);
|
|
51
|
+
try {
|
|
52
|
+
const cfg = existsSync(path) ? JSON.parse(readFileSync(path, 'utf8')) as Record<string, unknown> : {};
|
|
53
|
+
const entries: ReadonlyArray<ChannelBotTokenWrite> = typeof platformOrEntries === 'string'
|
|
54
|
+
? [{ platform: platformOrEntries, token: tokenOrRequireSameSecret as string, allowedUsers }]
|
|
55
|
+
: platformOrEntries(cfg);
|
|
56
|
+
if (entries.length === 0) return;
|
|
57
|
+
if (entries.some(({ platform, allowedUsers }) => platform === 'telegram' && allowedUsers !== undefined
|
|
58
|
+
&& (!Array.isArray(allowedUsers) || !allowedUsers.every(id => typeof id === 'string'
|
|
59
|
+
&& /^\d+$/.test(id) && Number.isSafeInteger(Number(id)) && Number(id) > 0)))) {
|
|
60
|
+
throw new Error('invalid-allowed-users');
|
|
61
|
+
}
|
|
62
|
+
const tabs = cfg.tabs && typeof cfg.tabs === 'object' && !Array.isArray(cfg.tabs)
|
|
63
|
+
? cfg.tabs as Record<string, unknown> : {};
|
|
64
|
+
const updates = entries.map(({ platform, token, allowedUsers }) => {
|
|
65
|
+
const section = cfg[platform] && typeof cfg[platform] === 'object' && !Array.isArray(cfg[platform])
|
|
66
|
+
? cfg[platform] as Record<string, unknown> : {};
|
|
67
|
+
const tabKey = `${platform}:1`;
|
|
68
|
+
const tab = tabs[tabKey] && typeof tabs[tabKey] === 'object' && !Array.isArray(tabs[tabKey])
|
|
69
|
+
? tabs[tabKey] as Record<string, unknown> : {};
|
|
70
|
+
// 기존 참조가 «같은 토큰»을 이미 가리키면 그 참조를 재사용한다(#20744 reuse-ref) — 평문만 지운다.
|
|
71
|
+
// 다른 값을 가리키면 그 비밀은 남(다른 서비스와 공유 가능)이라 덮지 않고 표준 id 로 간다.
|
|
72
|
+
const refId = isSecretRef(tab.tokenRef) ? secretIdFromRef(tab.tokenRef as string) : null;
|
|
73
|
+
const id = refId && token && getSecret(refId) === token ? refId : `${platform}_1__tokenRef`;
|
|
74
|
+
return { platform, token, allowedUsers, section, tabKey, tab, id,
|
|
75
|
+
existing: token ? getSecret(id) : undefined };
|
|
76
|
+
});
|
|
77
|
+
if (requireSameSecret && updates.some(update => update.token && update.existing !== undefined
|
|
78
|
+
&& update.existing !== update.token)) throw new Error('secret conflict');
|
|
79
|
+
for (const update of updates) {
|
|
80
|
+
const { platform, token, allowedUsers, section, tabKey, tab, id, existing } = update;
|
|
81
|
+
if (token) {
|
|
82
|
+
if (existing !== token) await setSecretAsync(id, token);
|
|
83
|
+
tab.tokenRef = makeSecretRef(id);
|
|
84
|
+
tabs[tabKey] = tab;
|
|
85
|
+
cfg.tabs = tabs;
|
|
86
|
+
}
|
|
87
|
+
// 평문은 «새 토큰을 저장할 때»와 «빈 평문»일 때만 지운다 — 허용 사용자만 고치는 저장은 토큰 칸을 안 건드린다.
|
|
88
|
+
if (token || section.botToken === '') delete section.botToken;
|
|
89
|
+
if (allowedUsers !== undefined) section.allowedUsers = platform === 'telegram'
|
|
90
|
+
? allowedUsers.map(Number) : allowedUsers;
|
|
91
|
+
cfg[platform] = section;
|
|
92
|
+
}
|
|
93
|
+
if (!lock.stillHeld()) throw new Error('config lock lost');
|
|
94
|
+
const tmp = `${path}.${randomUUID()}.tmp`;
|
|
95
|
+
try {
|
|
96
|
+
writeFileSync(tmp, JSON.stringify(cfg, null, 2), { mode: 0o600, flag: 'wx' });
|
|
97
|
+
renameSync(tmp, path);
|
|
98
|
+
} finally {
|
|
99
|
+
if (existsSync(tmp)) unlinkSync(tmp);
|
|
100
|
+
}
|
|
101
|
+
} finally {
|
|
102
|
+
lock.release();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** Fetch errors may contain the Telegram token-bearing URL; never propagate them. */
|
|
107
|
+
export async function probeChannelBotToken(
|
|
108
|
+
platform: ChannelBotPlatform,
|
|
109
|
+
token: string,
|
|
110
|
+
fetchImpl: typeof fetch = fetch,
|
|
111
|
+
): Promise<{ ok: boolean; botName?: string }> {
|
|
112
|
+
try {
|
|
113
|
+
const response = await fetchImpl(platform === 'telegram'
|
|
114
|
+
? `https://api.telegram.org/bot${token}/getMe` : 'https://discord.com/api/v10/users/@me',
|
|
115
|
+
platform === 'discord' ? { headers: { Authorization: `Bot ${token}` } } : undefined);
|
|
116
|
+
if (!response.ok) return { ok: false };
|
|
117
|
+
const body: unknown = await response.json();
|
|
118
|
+
if (!body || typeof body !== 'object') return { ok: false };
|
|
119
|
+
const data = body as { ok?: boolean; result?: { username?: unknown }; username?: unknown };
|
|
120
|
+
const name = platform === 'telegram' ? data.result?.username : data.username;
|
|
121
|
+
if (platform === 'telegram' && data.ok !== true) return { ok: false };
|
|
122
|
+
return typeof name === 'string' && name.trim() ? { ok: true, botName: name } : { ok: false };
|
|
123
|
+
} catch {
|
|
124
|
+
return { ok: false };
|
|
125
|
+
}
|
|
126
|
+
}
|
package/src/chat/index.ts
CHANGED
|
@@ -107,9 +107,27 @@ import {
|
|
|
107
107
|
import { resolveTextInputControlAction } from './input-control-key.js';
|
|
108
108
|
import { resolveTextInputEditAction } from './input-edit-key.js';
|
|
109
109
|
import { resolveTextInputTextAction } from './input-text-key.js';
|
|
110
|
+
import { classifyLeftoverInput, summarizeSubmitText } from './submit-trace.js';
|
|
110
111
|
|
|
111
112
|
import { perf } from '../perf-counters.js';
|
|
112
113
|
|
|
114
|
+
let lastSubmitAt: number | null = null;
|
|
115
|
+
|
|
116
|
+
function traceAfterSubmitKey(key: Key): void {
|
|
117
|
+
if (lastSubmitAt === null) return;
|
|
118
|
+
const withinMs = Date.now() - lastSubmitAt;
|
|
119
|
+
if (withinMs > 1000) {
|
|
120
|
+
lastSubmitAt = null;
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (key.ctrl || key.alt) return;
|
|
124
|
+
const input = key.name === 'paste' ? key.paste ?? '' : key.name;
|
|
125
|
+
if (!input || (key.name !== 'paste' && [...input].length !== 1)) return;
|
|
126
|
+
lastSubmitAt = null;
|
|
127
|
+
const kind = classifyLeftoverInput(input, withinMs);
|
|
128
|
+
if (kind) debug.log('chat.input.leftover', 'after-submit', { withinMs, kind });
|
|
129
|
+
}
|
|
130
|
+
|
|
113
131
|
/** Row where the input prompt starts — set by the textInput paint
|
|
114
132
|
* loop so writeTerminal knows which rows to invalidate in the
|
|
115
133
|
* frame cache. Falls back to "invalidate everything" when unknown
|
|
@@ -413,91 +431,62 @@ export interface SlashCommand {
|
|
|
413
431
|
|
|
414
432
|
// Default commands available in the input
|
|
415
433
|
export const SLASH_COMMANDS: SlashCommand[] = [
|
|
434
|
+
{ name: 'directive', aliases: [], description: 'Record a directive as a Linear issue' },
|
|
416
435
|
{ name: 'run-skill', aliases: ['rs', 'run'], description: 'Execute a skill via its SKILL.md prompt' },
|
|
417
436
|
{ name: 'ad', aliases: [], description: 'Create an advertising plan from a URL, brief, or attached image' },
|
|
418
437
|
// B4 — craft rulebook verdict, same resolution as `elanous repo design-check`
|
|
419
438
|
// and the PWA `/design-check` panel. Listed (not baselined as hidden) on
|
|
420
439
|
// purpose: a surface nobody can discover is not a surface.
|
|
421
|
-
{ name: 'design', aliases: ['design-check'], description: '
|
|
440
|
+
{ name: 'design', aliases: ['design-check'], description: 'Design rulebooks this repository declares · /design [--declared] · /design pick [number|id] to choose a design direction', subcommands: ['--declared', 'pick'] },
|
|
422
441
|
{ name: 'provider', aliases: ['p'], description: 'LLM providers — /provider (list) · next (cycle, also Alt+M / pill click) · use <name> · pick (visual picker) · reset', subcommands: ['next', 'use', 'pick', 'picker', 'menu', 'reset', 'list'] },
|
|
423
442
|
{ name: 'reasoning', aliases: ['r', 'think'], description: 'Reasoning level (codex effort + summary, anthropic extended-thinking budget) — /reasoning [off|low|medium|high|xhigh] (cycle when no arg · xhigh 는 모델 상한이 xhigh 이상일 때만 wire 에 실린다, 아니면 high 로 깎인다)', subcommands: ['off', 'low', 'medium', 'high', 'xhigh'] },
|
|
424
443
|
{ name: 'model', aliases: ['m'], description: 'Switch active model — /model <codex|terra|sol|luna|opus|sonnet|grok> (list + current when no arg). OpenAI 는 Codex(Responses API)만. effort 는 /reasoning.', subcommands: ['codex', 'terra', 'sol', 'luna', 'opus', 'sonnet', 'grok'] },
|
|
425
444
|
{ name: 'local', aliases: ['ll'], description: 'Local OpenAI-compatible LLM — ping / models / test / use', subcommands: ['ping', 'models', 'test', 'use', 'status'] },
|
|
426
445
|
{ name: 'session', aliases: ['sess'], description: 'Session resume — list / load / sync / new (handoff from mobile)', subcommands: ['list', 'load', 'sync', 'new'] },
|
|
427
|
-
{ name: 'resume', aliases: [], description: '
|
|
428
|
-
{ name: 'fork', aliases: [], description: '
|
|
446
|
+
{ name: 'resume', aliases: [], description: 'Pick a past session, or load one by id prefix · /resume <id-prefix>' },
|
|
447
|
+
{ name: 'fork', aliases: [], description: 'Copy this session into a new one' },
|
|
429
448
|
{ name: 'rewind', aliases: [], description: 'Rewind — 과거 user 턴 픽커로 되감기 (원본 보존 · 새 세션 분기 · /rewind <n> 숏컷)' },
|
|
430
449
|
// TUI 부활 C-a (2026-07-12): autopilot 미션 TUI 표면 — CLI 동등 단일 창구 소비.
|
|
431
450
|
{ name: 'mission', aliases: [], description: 'Autopilot 미션 — list(+헬스) · trace <id> 계보 · arm <id> 승인 (구체화/종료는 CLI)', subcommands: ['list', 'trace', 'arm'] },
|
|
432
451
|
{ name: 'resume-turn', aliases: [], description: 'Resume a paused turn checkpoint (/pause 짝 · 구 /resume)', subcommands: ['list'] },
|
|
433
452
|
{ name: 'context', aliases: ['ctx'], description: 'Show / clear / drop attached files', subcommands: ['clear', 'drop'] },
|
|
434
|
-
{ name: 'paste', aliases: [
|
|
453
|
+
{ name: 'paste', aliases: [], description: 'Attach clipboard image (macOS)' },
|
|
435
454
|
{ name: 'sync', aliases: ['s'], description: 'Enter sync mode' },
|
|
436
455
|
{ name: 'plugin', aliases: ['plugins'], description: 'Manage plugins', subcommands: ['list', 'activate', 'deactivate', 'reload'] },
|
|
437
456
|
{ name: 'widget', aliases: ['widgets'], description: 'Manage widgets', subcommands: ['list', 'reload', 'instances'] },
|
|
438
457
|
{ name: 'clear', aliases: ['cls'], description: 'Clear chat log' },
|
|
439
458
|
{ name: 'log', aliases: [], description: 'Chat Log controls — size / clear / filter / search / freeze / solo / turn / fold / help', subcommands: ['size', 'clear', 'filter', 'search', 'freeze', 'solo', 'turn', 'fold', 'help'] },
|
|
440
|
-
{ name: 'media', aliases: ['mv'], description: 'Last assistant media preview — status / open / sample / clear', subcommands: ['status', 'open', 'sample', 'clear', 'help'] },
|
|
441
|
-
{ name: 'browser-cdp', aliases: ['bcdp'], description: 'Browser CDP status / smoke / stop', subcommands: ['status', 'smoke', 'stop', 'help'] },
|
|
442
459
|
{ name: 'help', aliases: ['?'], description: 'Show help overlay' },
|
|
443
|
-
{ name: 'codex-setup', aliases: ['codex-init'], description: 'Codex 1-point setup — OAuth login + model pick + save config' },
|
|
444
460
|
{ name: 'setup', aliases: [], description: 'Onboarding wizard guide — /setup (anchor) · /setup reset (re-run wizard on next boot)', subcommands: ['help', 'reset'] },
|
|
445
461
|
{ name: 'memory', aliases: ['mem'], description: 'Memory ops — list / show / search / add / delete (see `elanous memory --help`)', subcommands: ['list', 'show', 'search', 'add', 'delete', 'index'] },
|
|
446
462
|
{ name: 'status', aliases: ['st'], description: 'Print the claude-code-style status pills (working dir + git + model)' },
|
|
447
463
|
{ name: 'export', aliases: [], description: 'Export this conversation transcript to a markdown file — /export [path] (default ~/temp/elanous-transcript-<stamp>.md)' },
|
|
448
|
-
{ name: 'cache', aliases: [], description: 'Prompt-cache metrics — show session totals / reset', subcommands: ['show', 'reset'] },
|
|
449
464
|
{ name: 'delta', aliases: ['diffs'], description: 'Source delta browser — open the latest turn-scoped file diff popup', subcommands: ['open', 'help'] },
|
|
450
465
|
{ name: 'theme', aliases: [], description: 'Theme controls — list / switch / use / reset / preview / export', subcommands: ['list', 'switch', 'use', 'reset', 'preview', 'export'] },
|
|
451
466
|
{ name: 'debug', aliases: [], description: 'Runtime tracer + surfaces — /debug on (mirror+file) · off · file (quiet trail) · diag (loud trail) · render on|off (렌더 무음, 레벨과 직교); surfaces: window / popup / workbench / promote', subcommands: ['on', 'off', 'file', 'diag', 'mirror', 'verbose', 'render', 'level', 'toggle', 'tail', 'clear', 'path', 'view', 'status', 'window', 'popup', 'workbench'] },
|
|
452
|
-
{ name: 'audit', aliases: [], description: 'Tail control-audit log (default: input policy changes; last 20 entries)', subcommands: ['input', 'all'] },
|
|
453
467
|
{ name: 'rebind', aliases: [], description: 'Manage runtime input bindings — list / show / add / reset / export / import', subcommands: ['actions', 'reset', 'export', 'import', 'help'] },
|
|
454
|
-
{ name: 'perf', aliases: [], description: 'Perf counters: draw latency + debug.log calls + stdout writes', subcommands: ['on', 'off', 'report', 'reset', 'status'] },
|
|
455
|
-
{ name: 'substrate-stats', aliases: ['sst'], description: 'Substrate observability — paint cache hits/misses · overlay skip/write · mount churn · F8 generation bumps' },
|
|
456
|
-
{ name: 'playground', aliases: ['pg'], description: 'IUL playground lab — list / run <id> [-v] / parse <path> / edit <id> / save <id> <path>.', subcommands: ['list', 'run', 'parse', 'edit', 'save'] },
|
|
457
|
-
{ name: 'hint', aliases: [], description: 'Tool hints — prefer/avoid/enable/disable/list/reset/show', subcommands: ['prefer', 'avoid', 'enable', 'disable', 'list', 'reset', 'show'] },
|
|
458
468
|
{ name: 'api-allow', aliases: ['api'], description: 'api_call allowlist — add/remove/list hosts the model may call', subcommands: ['add', 'remove', 'list', 'clear'] },
|
|
459
469
|
{ name: 'prompt', aliases: ['prompts'], description: 'Prompt Bank — list / show / search / select / inject / explain / enable / disable / config', subcommands: ['list', 'show', 'search', 'select', 'inject', 'explain', 'enable', 'disable', 'config'] },
|
|
460
470
|
{ name: 'history', aliases: ['hist', 'inputs'], description: 'Input history — list / find / show / clear', subcommands: ['list', 'find', 'show', 'clear'] },
|
|
461
471
|
{ name: 'research', aliases: ['rsh'], description: 'Autonomous research loop — start / status / stop / tail / replan (PFC-S4)', subcommands: ['start', 'status', 'stop', 'tail', 'replan'] },
|
|
462
472
|
// /harness is the dashboard's sole harness-launching entry. Its first
|
|
463
|
-
// positional token selects plan, ask,
|
|
473
|
+
// positional token selects plan, ask, dev, goal, runs, stop, or memo;
|
|
464
474
|
// otherwise the complete sentence follows the former /dev dispatch.
|
|
465
|
-
{ name: 'harness', aliases: [], description: 'Harness — /harness <goal> (self-dev) · plan <goal> · ask <sentence> ·
|
|
475
|
+
{ name: 'harness', aliases: [], description: 'Harness — /harness <goal> (self-dev) · plan <goal> · ask <sentence> · dev <goal> · goal <goal-file> · runs · stop <space-id> · memo <space-id> <note>', subcommands: ['plan', 'ask', 'dev', 'goal', 'runs', 'stop', 'memo'] },
|
|
466
476
|
{ name: 'plan', aliases: [], description: 'Toggle plan mode — read-only planning posture (slash alias for EnterPlanMode tool)', subcommands: ['enter', 'exit', 'status'] },
|
|
467
477
|
{ name: 'chat', aliases: [], description: 'Toggle LLM-only layout (hide 3-pane grid)' },
|
|
468
478
|
{ name: 'dashboard', aliases: ['dash'], description: 'Return to 3-pane dashboard layout' },
|
|
469
|
-
// TUI 부활 T2 (2026-07-12): 단일 UI 모드 축 — essential(chat 전체화면 ·
|
|
470
|
-
// 기본) ↔ rich(full dashboard). config persist 포함.
|
|
471
|
-
{ name: 'ui', aliases: [], description: 'UI mode — essential (chat 전체화면 · 기본) ↔ rich (full dashboard) · config 저장', subcommands: ['essential', 'rich'] },
|
|
472
|
-
// Q2 (substrate Occam, 2026-05-03): the legacy `/workspace`
|
|
473
|
-
// (working-dir | skill view switch) entry was vestigial — declared
|
|
474
|
-
// in the catalog but never wired to a handler. Removed so the new
|
|
475
|
-
// `/workspace` (virtual window management) below can take the name.
|
|
476
|
-
// Use `/view` for view switching instead.
|
|
477
479
|
{ name: 'telegram', aliases: ['tg'], description: 'Telegram bot — status / pair / send / pause / stop / attach / detach / sessions', subcommands: ['status', 'pair', 'setup', 'send', 'pause', 'stop', 'attach', 'detach', 'sessions'] },
|
|
478
|
-
{ name: '
|
|
479
|
-
|
|
480
|
-
// per PLAN §4. `/window` `/win` `/ws` preserved as muscle-memory
|
|
481
|
-
// aliases. Implementation directory rename + symbol rename
|
|
482
|
-
// (`VirtualWindow` → `Workspace`, etc.) deferred to a follow-up PR
|
|
483
|
-
// — slash-command rename is the user-facing first step.
|
|
484
|
-
{ name: 'workspace', aliases: ['ws', 'window', 'win'], description: 'Workspaces (formerly virtual windows) — list / new / browser / preview / browser-preview / iul / acp / sim / switch / close / picker / companion', subcommands: ['list', 'new', 'browser', 'preview', 'browser-preview', 'iul', 'acp', 'sim', 'switch', 'close', 'closeall', 'picker', 'companion'] },
|
|
485
|
-
{ name: 'sim', aliases: ['simulator'], description: 'Simulator shell — open / list / run <scenario>', subcommands: ['open', 'list', 'run'] },
|
|
486
|
-
{ name: 'tablet', aliases: [], description: 'Tablet mode — collapse layout to log + input (Ctrl+M <pane> for others)', subcommands: ['on', 'off', 'toggle', 'auto', 'status', 'browser-preview', 'bp'] },
|
|
487
|
-
{ name: 'surface', aliases: ['surf'], description: 'Surface control — open a pane/catalog launcher (/surface catalog · browser · preview · log · scratch · obsidian · skill) OR set a preferred LLM surface (/surface coding-agent · research-agent · control-agent · ops-agent · … · clear · status)', subcommands: ['catalog', 'browser', 'preview', 'browser-preview', 'log', 'scratch', 'obsidian', 'skill', 'skill-file', 'agents', 'coding-agent', 'coding-chat', 'research-agent', 'research-chat', 'control-agent', 'ops-ui-agent', 'ops-fleet-agent', 'ops-agent', 'clear', 'status'] },
|
|
488
|
-
{ name: 'scratch', aliases: ['sc'], description: 'Scratchpad ops (text body / memo / clear / dump-log / popup)', subcommands: ['memo', 'clear', 'dump', 'popup'] },
|
|
480
|
+
{ name: 'tablet', aliases: [], description: 'Tablet mode — collapse layout to log + input', subcommands: ['on', 'off', 'toggle', 'auto', 'status', 'browser-preview', 'bp'] },
|
|
481
|
+
{ name: 'surface', aliases: [], description: 'Surface control — open a pane/catalog launcher (/surface catalog · browser · preview · log · scratch · obsidian · skill) OR set a preferred LLM surface (/surface coding-agent · research-agent · control-agent · ops-agent · … · clear · status)', subcommands: ['catalog', 'browser', 'preview', 'browser-preview', 'log', 'scratch', 'obsidian', 'skill', 'skill-file', 'agents', 'coding-agent', 'coding-chat', 'research-agent', 'research-chat', 'control-agent', 'ops-ui-agent', 'ops-fleet-agent', 'ops-agent', 'clear', 'status'] },
|
|
489
482
|
{ name: 'term', aliases: ['terminal'], description: 'Interactive terminal modal — spawn / list / attach / detach / switch / kill / snapshot / resume', subcommands: ['spawn', 'list', 'attach', 'detach', 'switch', 'kill', 'snapshot', 'resume'] },
|
|
490
|
-
{ name: 'pty-list', aliases: ['ptys'], description: 'List PTY shell processes started from this dashboard session' },
|
|
491
|
-
{ name: 'pty-pane', aliases: ['pty-view'], description: 'Open a virtual-window pane tailing a PTY shell (auto-picks the only live one, else specify id)' },
|
|
492
483
|
{ name: 'claude', aliases: [], description: 'Spawn claude-code CLI in a terminal modal' },
|
|
493
484
|
{ name: 'codex', aliases: [], description: 'Spawn codex CLI in a terminal modal' },
|
|
494
485
|
{ name: 'gemini', aliases: [], description: 'Spawn gemini CLI in a terminal modal' },
|
|
495
486
|
{ name: 'acp', aliases: [], description: 'ACP chat — stream claude-code / codex / gemini replies into the chat pane (not a VW spawn). /acp codex points at the canonical codex app-server path; /acp cas is a synonym.', subcommands: ['claude', 'codex', 'gemini', 'cas', 'cancel', 'status', 'drop'] },
|
|
496
|
-
{ name: 'acp-vw', aliases: [], description: 'Spawn claude-code/codex/gemini/local-llm inside a new virtual window pane. /acp-vw clc (claude-code) · /acp-vw gem (gemini) · /acp-vw lll <node>:<model> (local-llm via lms chat · local node only) route through the H5 Embodied Agent Bus.', subcommands: ['claude', 'codex', 'clc', 'gem', 'lll'] },
|
|
497
487
|
{ name: 'conv', aliases: [], description: 'Conversation widget/popup host — /conv list · /conv open <session-id> · /conv layout <cascade|tile|stack> · /conv focus <next|prev>.', subcommands: ['list', 'ls', 'open', 'layout', 'focus'] },
|
|
498
488
|
{ name: 'handoff', aliases: [], description: 'H5 P3 cross-agent context handoff: /handoff <from_session_id> <to_brand> [--channels r,p,m] [--prompt "prefix"]. Takes source session snapshot (filtered by channels if observer present) and launches target via adapter registry. Brands: codex · claude · claude-code · gemini · elanous.' },
|
|
499
|
-
{ name: '
|
|
500
|
-
{ name: 'remaining', aliases: [], description: '계정마다 행으로 「지금 쓸 수 있는 것이 얼마나 남았나」를 본다 — 크레딧 축과 구독 축을 갈라 낸다. 화면은 명령 산출을 그대로 읽는다.' },
|
|
489
|
+
{ name: 'remaining', aliases: [], description: 'What each account has left' },
|
|
501
490
|
{ name: 'agent-room', aliases: [], description: 'H6 P4 VW agent-room — /agent-room <N> <brands...> · /agent-room list · /agent-room close <id> · N ∈ {2,3,4} · brands: codex/claude/gemini/elanous/auto/lll:<m>', subcommands: ['list', 'close', 'preset', 'help'] },
|
|
502
491
|
{ name: 'showroom', aliases: ['sr'], description: 'Showroom v2 multi-LLM lane composer — /showroom (default 2-pane) · /showroom <lane1> <lane2> [<lane3> [<lane4>]] · lane = role:provider[:transport] · roles plan/build/exec/review/reflect · pair with /lane and /relay for cross-lane handoffs.', subcommands: ['help'] },
|
|
503
492
|
{ name: 'reply', aliases: [], description: 'H6 P5 AgentReply — /reply <target-session-id> <message...> · send message to a live session, capture the response · flags: --from · --channels r,m · --idle-ms · --timeout-ms', subcommands: ['help'] },
|
|
@@ -505,18 +494,13 @@ export const SLASH_COMMANDS: SlashCommand[] = [
|
|
|
505
494
|
{ name: 'inject', aliases: [], description: 'H6 P7 InjectCaptureToContext — /inject <sourceId> <targetId> · inject capture snapshot into target session · --as user-message|system-note|attached-block · HITL approver gated · non-revocable v1', subcommands: ['help'] },
|
|
506
495
|
{ name: 'relay', aliases: [], description: 'Showroom v2 multi-lane handoff macros — /relay plan-build-review · /relay broadcast [--from <lane>] · /relay <from> -> <toA>,<toB> · HITL approver gates each step · failed steps non-aborting', subcommands: ['plan-build-review', 'broadcast', 'help'] },
|
|
507
496
|
{ name: 'lane', aliases: [], description: 'Showroom v2 cross-lane context inject — /lane <from> <to> · address by pane index | role (plan/build/exec/review/reflect) | brand · --as user-message|system-note|attached-block · HITL approver gated · /lane list · /lane help', subcommands: ['list', 'help'] },
|
|
508
|
-
{ name: '
|
|
509
|
-
{ name: 'claude-vw', aliases: [], description: 'Spawn claude-code CLI in a new virtual window (fullscreen-by-default, single pane).' },
|
|
510
|
-
{ name: 'codex-vw', aliases: [], description: 'Spawn codex CLI in a new virtual window (fullscreen-by-default, single pane).' },
|
|
511
|
-
{ name: 'control', aliases: ['dm'], description: 'Enter control mode — the LLM treats every message as a dashboard command. /control off to exit.' },
|
|
497
|
+
{ name: 'control', aliases: [], description: 'Enter control mode — the LLM treats every message as a dashboard command. /control off to exit.' },
|
|
512
498
|
{ name: 'default', aliases: [], description: 'Exit control mode back to default chat.' },
|
|
513
499
|
// NOTE: the preferred-LLM-surface command (/surface coding-agent · … · clear · status)
|
|
514
500
|
// shares the '/surface' name with the pane/catalog launcher above — both handlers
|
|
515
501
|
// dispatch by argument (immediate slash-executor for panes, registry for LLM surfaces).
|
|
516
502
|
// They are documented in the single merged '/surface' entry to keep names unique.
|
|
517
503
|
{ name: 'qc', aliases: [], description: 'Quick-control — arm one-shot control mode; next message runs as control, then auto-return to chat.' },
|
|
518
|
-
{ name: 'ctoggle', aliases: [], description: 'Toggle persistent control mode (alternative to /control ↔ /default).' },
|
|
519
|
-
{ name: 'fullscreen', aliases: ['fs'], description: 'Toggle fullscreen mode for the current terminal modal' },
|
|
520
504
|
{ name: 'voice-chat', aliases: ['vc'], description: 'Continuous voice chat mode — speak, elanous replies in voice (Phase 4-5). Subcommands: start / stop / cancel / status. Chord: Alt+R toggles enter/exit anywhere.', subcommands: ['start', 'stop', 'cancel', 'status'] },
|
|
521
505
|
{ name: 'auto-tts', aliases: ['tts', 'autotts'], description: 'Auto-TTS for chat responses (Phase 2) — speaks LLM replies sentence-by-sentence. Subcommands: on / off / toggle / status.', subcommands: ['on', 'off', 'toggle', 'status'] },
|
|
522
506
|
{ name: 'quit', aliases: ['q', 'exit'], description: 'Exit application' },
|
|
@@ -735,6 +719,8 @@ export async function textInput(opts: {
|
|
|
735
719
|
* typing. The host is expected to mutate its own state; the input
|
|
736
720
|
* redraws the bar + picker on top afterward. */
|
|
737
721
|
onMouse?: (mouse: { row: number; col: number; type: 'click' | 'double-click' | 'right-click' | 'scroll-up' | 'scroll-down' | 'drag' | 'release'; shift?: boolean }) => void | boolean | Promise<void | boolean>;
|
|
722
|
+
/** Scroll the host's chat log from the input without editing its buffer. */
|
|
723
|
+
onScrollKey?: (name: 'pageup' | 'pagedown') => boolean | void;
|
|
738
724
|
/** MX11b — key interceptor called BEFORE textInput's own key
|
|
739
725
|
* handling. Host returns 'consumed' to short-circuit the event
|
|
740
726
|
* (no further input processing), 'passthrough' to let the default
|
|
@@ -1365,13 +1351,15 @@ export async function textInput(opts: {
|
|
|
1365
1351
|
writeTerminal(endTextInputCursor(opts.cursorSink));
|
|
1366
1352
|
return result;
|
|
1367
1353
|
};
|
|
1368
|
-
const submitBufferResult = (text: string): InputResult =>
|
|
1369
|
-
|
|
1354
|
+
const submitBufferResult = (text: string): InputResult => {
|
|
1355
|
+
debug.log('chat.input.submit', 'summary', summarizeSubmitText(text.trim()));
|
|
1356
|
+
lastSubmitAt = Date.now();
|
|
1357
|
+
return finalizeInput({
|
|
1370
1358
|
text: text.trim(),
|
|
1371
1359
|
submitted: true,
|
|
1372
1360
|
...(pendingExternalSubmitSource ? { externalSubmitSource: pendingExternalSubmitSource } : {}),
|
|
1373
|
-
})
|
|
1374
|
-
|
|
1361
|
+
});
|
|
1362
|
+
};
|
|
1375
1363
|
const currentBufferText = (): string => lines.join('\n').trim();
|
|
1376
1364
|
|
|
1377
1365
|
// Expose drawAll so the host can ping us to re-paint after an
|
|
@@ -1435,6 +1423,7 @@ export async function textInput(opts: {
|
|
|
1435
1423
|
}
|
|
1436
1424
|
|
|
1437
1425
|
const key = await (opts.readKey ?? (() => readKey('input')))();
|
|
1426
|
+
traceAfterSubmitKey(key);
|
|
1438
1427
|
|
|
1439
1428
|
// Raw-key trace — diagnoses "modifier bit dropped before global-action
|
|
1440
1429
|
// matcher saw the chord" cases (e.g. tablet terminal apps that
|
|
@@ -1661,6 +1650,11 @@ export async function textInput(opts: {
|
|
|
1661
1650
|
}
|
|
1662
1651
|
}
|
|
1663
1652
|
|
|
1653
|
+
if (!key.ctrl && (key.name === 'pageup' || key.name === 'pagedown') && opts.onScrollKey) {
|
|
1654
|
+
if (opts.onScrollKey(key.name) !== false) drawAll();
|
|
1655
|
+
continue;
|
|
1656
|
+
}
|
|
1657
|
+
|
|
1664
1658
|
const controlAction = resolveTextInputControlAction(key, {
|
|
1665
1659
|
currentLine: lines[lineIdx] ?? '',
|
|
1666
1660
|
cursor: colIdx,
|
|
@@ -1771,10 +1765,20 @@ export async function textInput(opts: {
|
|
|
1771
1765
|
}
|
|
1772
1766
|
// ── Arrow keys (non-slash mode) ──
|
|
1773
1767
|
else if (editAction.kind === 'move-left') {
|
|
1774
|
-
|
|
1768
|
+
if (key.ctrl) {
|
|
1769
|
+
const action = resolveTextInputTextAction(currentLineEditorState(), key);
|
|
1770
|
+
if (action.kind === 'insert') applyCurrentLineEditorState(action.next);
|
|
1771
|
+
} else {
|
|
1772
|
+
applyMultilineEditorState(multilineEditorMoveLeft(multilineEditorState()));
|
|
1773
|
+
}
|
|
1775
1774
|
}
|
|
1776
1775
|
else if (editAction.kind === 'move-right') {
|
|
1777
|
-
|
|
1776
|
+
if (key.ctrl) {
|
|
1777
|
+
const action = resolveTextInputTextAction(currentLineEditorState(), key);
|
|
1778
|
+
if (action.kind === 'insert') applyCurrentLineEditorState(action.next);
|
|
1779
|
+
} else {
|
|
1780
|
+
applyMultilineEditorState(multilineEditorMoveRight(multilineEditorState()));
|
|
1781
|
+
}
|
|
1778
1782
|
}
|
|
1779
1783
|
else if (editAction.kind === 'history-older') {
|
|
1780
1784
|
applyHistoryState(navigateSingleLineHistory(historyState(), history, 'older'));
|
|
@@ -1921,6 +1925,7 @@ export function attachStreamingKeys(
|
|
|
1921
1925
|
};
|
|
1922
1926
|
function deliver(keys: readonly Key[]): void {
|
|
1923
1927
|
for (const key of keys) {
|
|
1928
|
+
traceAfterSubmitKey(key);
|
|
1924
1929
|
traceKey(key, 'stream');
|
|
1925
1930
|
try {
|
|
1926
1931
|
const r = handler(key);
|
|
@@ -2064,7 +2069,7 @@ export function buildContext(ctx: DashboardContext): string {
|
|
|
2064
2069
|
export function formatResponse(
|
|
2065
2070
|
text: string,
|
|
2066
2071
|
maxWidth: number,
|
|
2067
|
-
wrapOpts: { urlAware?: boolean
|
|
2072
|
+
wrapOpts: { urlAware?: boolean } = {},
|
|
2068
2073
|
): string[] {
|
|
2069
2074
|
// Apply markdown styling first
|
|
2070
2075
|
const rendered = renderMarkdown(text);
|
|
@@ -26,10 +26,10 @@ export function resolveTextInputTextAction(
|
|
|
26
26
|
state: InlineEditorState,
|
|
27
27
|
key: Pick<Key, 'name' | 'ctrl' | 'shift'>,
|
|
28
28
|
): TextInputTextAction {
|
|
29
|
-
if (key.ctrl) {
|
|
29
|
+
if (key.ctrl && key.name !== 'w' && key.name !== 'left' && key.name !== 'right') {
|
|
30
30
|
return { kind: 'none' };
|
|
31
31
|
}
|
|
32
|
-
if (NON_TEXT_NAMED_KEYS.has(key.name)) {
|
|
32
|
+
if (!key.ctrl && NON_TEXT_NAMED_KEYS.has(key.name)) {
|
|
33
33
|
return { kind: 'none' };
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function nextChatScrollOffset(
|
|
2
|
+
current: number,
|
|
3
|
+
key: 'pageup' | 'pagedown',
|
|
4
|
+
pageSize: number,
|
|
5
|
+
maxOffset: number,
|
|
6
|
+
): number {
|
|
7
|
+
if (maxOffset <= 0) return -1;
|
|
8
|
+
const offset = current < 0 ? maxOffset : Math.max(0, Math.min(current, maxOffset));
|
|
9
|
+
if (key === 'pageup') return Math.max(0, offset - pageSize);
|
|
10
|
+
const next = offset + pageSize;
|
|
11
|
+
return next >= maxOffset ? -1 : next;
|
|
12
|
+
}
|
package/src/chat/mode/manual.ts
CHANGED
|
@@ -144,10 +144,8 @@ export function buildDashboardControlManual(opts: BuildControlManualOpts = {}):
|
|
|
144
144
|
'- **Approval**: mutating tools (PaneInject, BroadcastPanes, TerminalModalInject,',
|
|
145
145
|
' DashboardConfigSet) pop a Y/N modal before write. Tell the user what you will do;',
|
|
146
146
|
' they confirm.',
|
|
147
|
-
'- **References**: embed `@term:<id>`
|
|
148
|
-
'
|
|
149
|
-
'- **Virtual windows**: `WindowCreate` spawns a new VW; `PaneSplit` carves it. `^B 0`',
|
|
150
|
-
' is the picker. Use `SpawnCodingAgentInVW` for a one-call claude-code/codex setup.',
|
|
147
|
+
'- **References**: embed `@term:<id>` in your response to have the expander',
|
|
148
|
+
' inline the referenced session output for the LLM.',
|
|
151
149
|
'- **Terminal sessions**: `/term spawn <cmd>` + `TerminalModalInject` + OSC 9/99/777',
|
|
152
150
|
' drive long-running CLI workflows.',
|
|
153
151
|
'- **SSH remote mode**: Ctrl+K host picker; the browser pane then reads/writes over',
|
|
@@ -629,10 +629,12 @@ export function createPickerState(deps: PickerDeps): PickerState {
|
|
|
629
629
|
|
|
630
630
|
if (key.name === 'up' || (key.ctrl && key.name === 'p')) {
|
|
631
631
|
cmdPickerIdx = (cmdPickerIdx - 1 + currentArgItems.length) % currentArgItems.length;
|
|
632
|
+
pickerNavigated = true;
|
|
632
633
|
return { consumed: true, action: null };
|
|
633
634
|
}
|
|
634
635
|
if (key.name === 'down' || (key.ctrl && key.name === 'n')) {
|
|
635
636
|
cmdPickerIdx = (cmdPickerIdx + 1) % currentArgItems.length;
|
|
637
|
+
pickerNavigated = true;
|
|
636
638
|
return { consumed: true, action: null };
|
|
637
639
|
}
|
|
638
640
|
if (key.name === 'tab') {
|
|
@@ -660,7 +662,7 @@ export function createPickerState(deps: PickerDeps): PickerState {
|
|
|
660
662
|
const ctx = parseArgContext(buf, deps.commands);
|
|
661
663
|
const selected = currentArgItems[cmdPickerIdx];
|
|
662
664
|
let submitText = buf.lines[0] ?? '';
|
|
663
|
-
if (ctx && ctx.currentArg === '' && selected) {
|
|
665
|
+
if (ctx && ctx.currentArg === '' && selected && pickerNavigated) {
|
|
664
666
|
submitText = submitText.slice(0, ctx.currentArgStart) + selected.value;
|
|
665
667
|
}
|
|
666
668
|
return {
|
|
@@ -707,32 +709,13 @@ export function createPickerState(deps: PickerDeps): PickerState {
|
|
|
707
709
|
}
|
|
708
710
|
if (key.name === 'enter' && !key.shift) {
|
|
709
711
|
const selected = filtered[cmdPickerIdx];
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
action: { kind: 'submit', text: '/' + selected.name },
|
|
718
|
-
};
|
|
719
|
-
}
|
|
720
|
-
// Autofill-only: rewrite the line to the full name, stay open.
|
|
721
|
-
if (selected) {
|
|
722
|
-
const newLine0 = '/' + selected.name;
|
|
723
|
-
return {
|
|
724
|
-
consumed: true,
|
|
725
|
-
action: {
|
|
726
|
-
kind: 'splice',
|
|
727
|
-
lineIdx: 0,
|
|
728
|
-
start: 0,
|
|
729
|
-
end: (buf.lines[0] ?? '').length,
|
|
730
|
-
text: newLine0,
|
|
731
|
-
newColIdx: newLine0.length,
|
|
732
|
-
},
|
|
733
|
-
};
|
|
734
|
-
}
|
|
735
|
-
return { consumed: true, action: null };
|
|
712
|
+
return {
|
|
713
|
+
consumed: true,
|
|
714
|
+
action: {
|
|
715
|
+
kind: 'submit',
|
|
716
|
+
text: pickerNavigated && selected ? '/' + selected.name : (buf.lines[0] ?? ''),
|
|
717
|
+
},
|
|
718
|
+
};
|
|
736
719
|
}
|
|
737
720
|
return { consumed: false };
|
|
738
721
|
};
|
package/src/chat/search/modal.ts
CHANGED
|
@@ -157,6 +157,7 @@ export function createSearchModal(spec: SearchModalSpec): SearchModalHandle {
|
|
|
157
157
|
const submitCurrent = (): void => {
|
|
158
158
|
const item = items[cursor];
|
|
159
159
|
if (item) spec.onAccept(item, query);
|
|
160
|
+
else spec.onCancel?.();
|
|
160
161
|
};
|
|
161
162
|
|
|
162
163
|
// SelectView as the paint engine. Filtering stays with the caller
|
|
@@ -255,8 +256,19 @@ export function createSearchModal(spec: SearchModalSpec): SearchModalHandle {
|
|
|
255
256
|
|
|
256
257
|
// KX3 — coordinator.routeKey drives this directly. Unknown keys
|
|
257
258
|
// still return 'consumed' so the modal behaves as a keyboard trap
|
|
258
|
-
// (matches legacy router contract).
|
|
259
|
-
|
|
259
|
+
// (matches legacy router contract). Accept alternate terminal key names
|
|
260
|
+
// before delegating the ordinary keys to the shared router.
|
|
261
|
+
const onKey = (ev: KeyEvent): 'consumed' | 'passthrough' => {
|
|
262
|
+
if (ev.name === 'esc' || ev.name === '\x1b' || ev.sequence === '\x1b') {
|
|
263
|
+
handle.cancel();
|
|
264
|
+
return 'consumed';
|
|
265
|
+
}
|
|
266
|
+
if (ev.name === 'return') {
|
|
267
|
+
handle.accept();
|
|
268
|
+
return 'consumed';
|
|
269
|
+
}
|
|
270
|
+
return routeSearchModalKeyInput(ev, handle);
|
|
271
|
+
};
|
|
260
272
|
|
|
261
273
|
const onMouse = (ev: DisplayMouseEvent): Action => {
|
|
262
274
|
const localX = ev.col - spec.bounds.col;
|