elanous 0.2.34 → 0.2.35
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/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/{L04y73dlwKeTW-GetaTF3 → T1mBQqmkwKDLGtyisDCOd}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{5014f970-22bef0b5210f7d60.js → 0368f25d-ad84af92fefee68f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1165.bad13fc9151a7288.js +1 -0
- package/apps/pwa/out/_next/static/chunks/13.02a07436dec15f89.js +32 -0
- package/apps/pwa/out/_next/static/chunks/{2124.ed5bf480cea7f85b.js → 1530.0e612369b6fd7ea0.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1540.af38731fa7c4a3e0.js +41 -0
- package/apps/pwa/out/_next/static/chunks/1674.2a65fd5668e1cc5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1850.f2b470ba5a471da0.js +24 -0
- package/apps/pwa/out/_next/static/chunks/193.62da94cd0b88323b.js +74 -0
- package/apps/pwa/out/_next/static/chunks/1975.260f6d249fac5f7c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1982-67cd8dfe8682325f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1993-c0007b7ad0c0ef41.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1999-bb415351c8a2846c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1c735de4.f993a30bbd3c57c4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1dc5a567.9b092bfae3d7099b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8368.014caa8de2f5af34.js → 2018.a741297bce759490.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2085.8f950b4bda1cbbc7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2159-6179a961376956b9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/216.b5c2a421aa1d28a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2251.49fbe369f74c372c.js +148 -0
- package/apps/pwa/out/_next/static/chunks/2286-2939577360d3dcc0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2625.5d870aa999f33db1.js +34 -0
- package/apps/pwa/out/_next/static/chunks/2668.34d21539e62bf111.js +77 -0
- package/apps/pwa/out/_next/static/chunks/2833-0fe47af99ed13c29.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2930.d0edb4f108787ef7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2973.77318e7d85f59477.js +62 -0
- package/apps/pwa/out/_next/static/chunks/3103.0df8da390948bb84.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3123.2bee9ba15d320bd2.js +90 -0
- package/apps/pwa/out/_next/static/chunks/3162-6cf652bf7124d8cf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1644.35dd25240ae24e4b.js → 3408.21d1570602f4b6c0.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3577-7340009f7007a795.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3121.779fafe3e44612c5.js → 3589.5444a06bcf6e775c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/359-2250789a2d3499e7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3618.f514792d6c59d7fd.js +36 -0
- package/apps/pwa/out/_next/static/chunks/3669.343f9119aa276001.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9131-fce7256c4180c4a5.js → 3677-4215f826f6aa68e5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3736.c2efad489604cc3b.js +79 -0
- package/apps/pwa/out/_next/static/chunks/3817.f9aeab2bb6675d73.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3f7c4ee5.3dde54f01a816613.js +122 -0
- package/apps/pwa/out/_next/static/chunks/4182-0b9b1251c29cc0cf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4346.8601952e73bf5803.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6053-d893974de92e6198.js → 4441-875b97f5821ed58a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4582.bd68683c076649e3.js +286 -0
- package/apps/pwa/out/_next/static/chunks/4605-6e623f55aec77422.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4607.5cc27468628eb4bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4627.f07508b3936fd6c0.js +24 -0
- package/apps/pwa/out/_next/static/chunks/{1895-60ed0e341c658bd4.js → 4705-194e64e47ca0fbdb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{5576-82d3703636d5c4b9.js → 4718-17d2af636796a330.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/4747-c22262c093e46807.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4775-178215aed0daba61.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4815-6ffb8c3c991cc45d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4834-beca8b47ad29a898.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5023-fb4802b6d2492b02.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7431.3051e9b8a4372d2d.js → 5101.e32282718f99ed6f.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/5154.a118f3957ed14e36.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5210-a2e0015e3d4d5d9c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5356.84ac712cc15928bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5401.22352141b6fd336e.js +23 -0
- package/apps/pwa/out/_next/static/chunks/{2987-30cf9c2eb7b8bdd5.js → 5483-dd5d7697f6bdb106.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5637.281e5dec4ea6ecf1.js +94 -0
- package/apps/pwa/out/_next/static/chunks/5662.02eaa029af05ad46.js +1 -0
- package/apps/pwa/out/_next/static/chunks/56d372f2.681ab4ec4c998fae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5760.22456f433c6f42c0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7386.5d8e7e42e818dfb6.js → 5852.db1f7449f4f74612.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/5891-0f11a7d7362a9072.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5943.264d14a44ca32513.js +1 -0
- package/apps/pwa/out/_next/static/chunks/604-1b3c39df083c02aa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6121-5f97072330738caf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6193.07d8ca5af4b09086.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6203-b3fea3a60d69ff14.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3110.0a7065f25c841818.js → 6236.e18cced2d5ba6afb.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/6286.d638fb5953e2e757.js +8 -0
- package/apps/pwa/out/_next/static/chunks/630.fe5a46428d63b013.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6301.ae0245f507e4395e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6673.fbbe5699f6ea5991.js +27 -0
- package/apps/pwa/out/_next/static/chunks/6777-f6d301efb5de828d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6786.423f24c88de034c7.js +93 -0
- package/apps/pwa/out/_next/static/chunks/6854-cef64a948c5e122d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6866-79aa5b4e47cac6aa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6b89c8bd.24df687a820500b3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7037-fe27f001db30d323.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7080.2d826860534fd88e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7118.8731be28c3ebb14b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7196.44241bc1df3e26fe.js +149 -0
- package/apps/pwa/out/_next/static/chunks/7235.c7c4e6cb5c693c2d.js +104 -0
- package/apps/pwa/out/_next/static/chunks/{7005.1623d2aea78eb85f.js → 7385.50a308a477bdfc21.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{6086.913a69e6fa3e4a8b.js → 7644.17e37ba6f1d4226e.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/7706-58bfb1546637f217.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7839.5b91455338c9fd3f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7857-31f13ee96f4011aa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/81.f74cb60312fe4001.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8219.baa715d1deee80e2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8256.e3ac8421a71f82f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8310-444a6a895c402f12.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8423.f7dda8aca4fcaae5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7193-cf355cca5ba6c5d5.js → 8437-8d5492094b166cfa.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{2554.3b5e200f5f5cfcd6.js → 8444.4c26b379ca2b9596.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/8496.75649af8652c74f4.js +226 -0
- package/apps/pwa/out/_next/static/chunks/8557-e7898769499cd56f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8576.65bb654b524f3614.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8609.558ce2f8f9aea2be.js +64 -0
- package/apps/pwa/out/_next/static/chunks/8614.caec96cfb91f4ae7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2547.dd27303624cb4da8.js → 8637.47f5b35afcae5e6b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8714.ff0b7ce3ec3e3ae2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8732.367f44a916202353.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9141-7fd1f73a5400bdc2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/921.c4267d0d69a65404.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9550.d5f76828f972058c.js → 9214.63a510d39178e997.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/9261.3962c3321b047691.js +115 -0
- package/apps/pwa/out/_next/static/chunks/936-26efd1a0efdd44d3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8548.036c344973968847.js → 938.66ad1ef0e5abae1c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3414.172ad4ca2d9b08e8.js → 9512.5a76207a730e0491.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/9627-4b9efe616b27e2e2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/967-2aa39b2d04b4c690.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9734.40eb1e558c29ccea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9908.3aa54f7a586a73dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6740.43de73fc427c9fe2.js → 9952.5daf5f94063a2b3e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9954-ca8d29752bdbb45a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9974-507fa67cb94066dd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-ce9e00f7fb45506a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-fa59d6d17daa3389.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-53f68bbe7bd4b774.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-1c500fbb9f4a7a04.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-99d72673aa5c307c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-d2d5adc1e9484c88.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-c607c5aae637f1cc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-fa8c23596d555c0f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-bdab8c5e855c8416.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-406b47745b53f269.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-a4276386b7051f50.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-8a26bab9ad375f25.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-775f48aa1dc7a2d5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-1c4dd5f959d0c558.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-c48938a8377c9f70.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-ce9e00f7fb45506a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-c6e7905859425aa9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-c280f4252452e830.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-cf8c57498f20970a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-ca3a17caf409fc83.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/{page-d7bff0f0905a662c.js → page-26e6c18a1a750cf6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-3abc872cc6aeee39.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-f7481b7b2174fe3d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1ae7ef8077680337.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-47c5d4db587266bd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-415f1e243c7ccb13.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-73f380f17b76f95c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-2991073ad66ee2d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-1f5a60f70cb4dd0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fbad60d1e358fb2c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-bac7dee94e5eae4a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-398047d6949e8ca5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-2d33a2231540ca89.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5bf1e6bf70bcb96c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-ba59c19376a0917d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-111f187139add30f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-acaae197d5be5779.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-0df20b0f546a0d7d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-ce9e00f7fb45506a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-27e1202d24b8fe35.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-bda78c50a78363e5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-da592691293d9c9f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f832994317a2e9f0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/{page-df3445b207ceceab.js → page-dc0a532f5b9196ec.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-cfccbbeae0473404.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-527e2073af84c81b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-bac86e9112671357.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-6d59dff410e9d76a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-53a61f8be09f02d2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-db8f559e763c17f9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-c02aa4cc66455093.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9a8cb466.cc9fc9e6e46038aa.js → b2f6ba4d.fb56fdbbf798df33.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/b6705a4f-b9a9047de9eecfd0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4fa33ebd.21c1bd5b294496e6.js → cbe38a15.5a032598e39970c6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{abb4b98b.163e0f56e84ae35d.js → d06f9160.a3d9062f95de8ad7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9b48c871.204d5d13e7809bd0.js → da5176c6.6773b6c5994e1d99.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/framework-50e6acebc630849b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-7a1ae342d5ed75e6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-7ad7d505ba1f92b4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-02edba75232cb235.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-97d6ebae3e8eee4a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-e986adaa429163e8.js +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +22 -22
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +22 -22
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +22 -22
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +21 -21
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +21 -21
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +22 -22
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +21 -21
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +22 -22
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +22 -22
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +21 -21
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +22 -22
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +22 -22
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +22 -22
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +22 -22
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +21 -21
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +21 -21
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +22 -22
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +22 -22
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +22 -22
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +21 -21
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +21 -21
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +21 -21
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +22 -22
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +22 -22
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +21 -21
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +21 -21
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +21 -21
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +21 -21
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +22 -22
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +22 -22
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +21 -21
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +22 -22
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +22 -22
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +22 -22
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +22 -22
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +22 -22
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +21 -21
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +22 -22
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +22 -22
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +22 -22
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +22 -22
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +22 -22
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +22 -22
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +22 -22
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +22 -22
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +22 -22
- package/bin/elanous.mjs +3 -2
- package/catalog/providers/opengateway.yaml +25 -0
- package/docs/goal-context/01-goal-authoring-checks.md +8 -0
- package/docs/goal-context/03-verification-menu.md +24 -0
- package/docs/goal-context/04-mock-scenarios.md +100 -0
- package/docs/goal-context/README.md +4 -0
- package/graphs/catalog/catalog.yaml +1 -1
- package/graphs/default-loop.yaml +57 -3
- package/graphs/document-loop.yaml +51 -3
- package/graphs/implement-loop.yaml +53 -4
- package/graphs/journey/ta-journey.yaml +11 -1
- package/graphs/journey/units/author-dialogue/author-dialogue.yaml +42 -0
- package/graphs/journey/units/author-dialogue/observe.ts +96 -0
- package/graphs/journey/units/author-dialogue/recipes.yaml +10 -0
- package/graphs/operate-loop.yaml +51 -3
- package/graphs/research-loop.yaml +137 -3
- package/graphs/test-diet/test-diet.yaml +3 -0
- package/package.json +1 -1
- package/scripts/coord-role-pack.ts +19 -6
- package/scripts/hq/standby-snapshot.ts +17 -12
- package/scripts/release-loop/docs-land-node.ts +21 -5
- package/scripts/release-loop/gate-baseline-receipt.ts +155 -0
- package/scripts/release-loop/gate-node.ts +181 -22
- package/scripts/release-loop/gate-partial.ts +65 -11
- package/scripts/release-loop/gate-radius-live.ts +177 -0
- package/scripts/release-loop/gate-radius-shadow.ts +1 -1
- package/scripts/release-loop/node-verdict.ts +12 -1
- package/scripts/release-loop/npm-publish-node.ts +66 -12
- package/scripts/release-loop/probe-pod-host-dirs-live.ts +5 -0
- package/scripts/release-loop/pwa-remote.ts +166 -0
- package/scripts/release-loop/pwa-scenarios-node.ts +19 -3
- package/scripts/release-loop/resume-release.ts +41 -4
- package/scripts/release-loop/unattended-release.ts +2 -0
- package/scripts/test-diet/lib.ts +6 -1
- package/scripts/test-diet/node.ts +194 -13
- package/scripts/ux-sim.ts +39 -0
- package/src/agent/self-ambient-cache.ts +8 -0
- package/src/agent-substrate/acp-reviewer.ts +39 -4
- package/src/agent-substrate/pr-reviewer.ts +17 -0
- package/src/agent-substrate/self-review-cli.ts +62 -13
- package/src/autopilot/pr-manager.ts +215 -36
- package/src/budget/run-usage-rollup.ts +1 -0
- package/src/chat/index.ts +0 -2
- package/src/chat/pickers/modal-runtime.ts +10 -27
- package/src/cli/agent-cli.ts +13 -2
- package/src/cli/doctor-cli.ts +4 -1
- package/src/cli/light-entry-route.ts +46 -6
- package/src/cli/pod-cli.ts +77 -3
- package/src/cli/pr-cli.ts +5 -2
- package/src/cli/pr-land-pod-shadow-job.ts +3 -0
- package/src/cli/release-checklist-read-cli.ts +79 -0
- package/src/cli/release-cli.ts +72 -102
- package/src/cli/remote-resolve.ts +1 -1
- package/src/cli/root-tui-entry.ts +48 -0
- package/src/cli/sim-cli.ts +22 -0
- package/src/cli/tasks-cli.ts +540 -31
- package/src/cli/usage-cli.ts +13 -11
- package/src/clipboard/history.ts +179 -13
- package/src/config.ts +8 -1
- package/src/dashboard/chat/acp-chat.ts +8 -0
- package/src/dashboard/index.ts +78 -10
- package/src/dashboard/render/theme-resolver.ts +33 -4
- package/src/domains/schedule-registry.ts +16 -2
- package/src/git-fs/idle-refresh.ts +76 -0
- package/src/git-fs/index.ts +18 -7
- package/src/git-fs/worktree.ts +42 -4
- package/src/graph-kinds/registry.ts +2 -2
- package/src/graph-runner/runner.ts +153 -10
- package/src/grok/credential.ts +10 -3
- package/src/harness/harness-cli-command.ts +112 -28
- package/src/harness/harness-incidents.ts +33 -0
- package/src/harness/launch-utterance-ledger.ts +208 -0
- package/src/impl-discipline/detector.ts +16 -4
- package/src/impl-discipline/system-prompt.ts +11 -0
- package/src/impl-discipline/types.ts +2 -2
- package/src/index.ts +496 -143
- package/src/intake-plane/already-built-hint.ts +4 -2
- package/src/intake-plane/requirement-funnel.ts +29 -1
- package/src/light-cli.ts +27 -11
- package/src/llm/opengateway-models.ts +11 -0
- package/src/llm/provider-credentials.ts +14 -0
- package/src/llm/provider-detect.ts +8 -1
- package/src/llm/runtime-model-family.ts +2 -1
- package/src/llm.ts +213 -56
- package/src/model-tier/llm-tier-map.ts +15 -1
- package/src/native-tool-catalog.ts +15 -1
- package/src/nexus/api/loop-resources.ts +13 -1
- package/src/oauth/codex.ts +7 -0
- package/src/ops/overview-collect.ts +18 -3
- package/src/ops/overview.ts +20 -7
- package/src/pr-tool/census.ts +261 -27
- package/src/pty-shell/pty-manifest.ts +7 -0
- package/src/release-loop/checklist.ts +24 -0
- package/src/release-loop/landed-but-yellow.ts +129 -5
- package/src/release-loop/light-rc.ts +1 -0
- package/src/release-loop/rehearsal.ts +2 -2
- package/src/repl/index.ts +174 -17
- package/src/repl/ops-msg-bridge.ts +32 -0
- package/src/self-dev/ask-launch-flow.ts +44 -5
- package/src/self-dev/cli-help-text.ts +17 -0
- package/src/self-dev/dev-cli.ts +11 -9
- package/src/self-dev/draft-residue.ts +37 -1
- package/src/self-dev/draft-sweep.ts +137 -11
- package/src/self-dev/draft-triage-rules.ts +107 -0
- package/src/self-dev/fleet-reduce.ts +3 -2
- package/src/self-dev/graph-front-nodes.ts +112 -0
- package/src/self-dev/graph-journey-nodes.ts +1 -0
- package/src/self-dev/harness-run-cli.ts +3 -15
- package/src/self-dev/orchestrate-cli-text.ts +10 -0
- package/src/self-dev/review-provider-fallback.ts +35 -1
- package/src/self-dev/self-orchestrate-runtime.ts +1 -11
- package/src/self-dev/shard-aggregate.ts +42 -5
- package/src/self-dev/shard-run.ts +8 -1
- package/src/self-implement/blocked-draft-policy.ts +20 -0
- package/src/self-implement/classify-shadow.ts +3 -7
- package/src/self-implement/doctor-visit.ts +18 -1
- package/src/self-implement/gate-baseline.ts +56 -17
- package/src/self-implement/gate-cli.ts +1 -0
- package/src/self-implement/gate-remote.ts +31 -20
- package/src/self-implement/goal-author-decompose.ts +275 -47
- package/src/self-implement/goal-author.ts +250 -0
- package/src/self-implement/goal-elaborate.ts +295 -0
- package/src/self-implement/goal-refine.ts +270 -0
- package/src/self-implement/graph-overlay-yaml.ts +14 -3
- package/src/self-implement/orchestrator.ts +152 -45
- package/src/self-implement/rework-budget-judgment.ts +5 -8
- package/src/self-implement/run-stop.ts +10 -1
- package/src/self-implement/running-runs.ts +29 -1
- package/src/self-implement/scope-adjacency.ts +113 -0
- package/src/self-implement/seams.ts +127 -24
- package/src/self-implement/stop-autoheal.ts +87 -1
- package/src/session-runtime/index.ts +1 -1
- package/src/setup/llm-env-detect.ts +5 -0
- package/src/skills/tools/agent.ts +140 -14
- package/src/skills/tools/msg-ask.ts +100 -0
- package/src/skills/tools/ops-ledger.ts +2 -1
- package/src/steward/hold-hygiene.ts +24 -6
- package/src/steward/triage-budget.ts +194 -0
- package/src/steward/triage.ts +20 -3
- package/src/task-agent/actions.ts +69 -1
- package/src/task-agent/green-sweep.ts +4 -0
- package/src/task-agent/live-moves.ts +160 -4
- package/src/task-agent/parent-host.ts +123 -3
- package/src/task-agent/shadow.ts +7 -1
- package/src/task-agent/task-hand.ts +54 -41
- package/src/task-agent/tier-split.ts +127 -0
- package/src/task-agent/work-order-build.ts +2 -0
- package/src/task-agent/work-order.ts +3 -2
- package/src/task-orchestrator/generator-prompt.ts +60 -11
- package/src/task-orchestrator/surfaces/pod-account-broker.ts +33 -0
- package/src/task-orchestrator/surfaces/pod-child-providers.ts +1 -1
- package/src/task-orchestrator/surfaces/pod-command-job.ts +45 -7
- package/src/task-orchestrator/surfaces/pod-image-source.ts +89 -1
- package/src/task-orchestrator/surfaces/pod-lease.ts +17 -8
- package/src/task-orchestrator/surfaces/pod-manifest-test-normalize.ts +8 -2
- package/src/task-orchestrator/surfaces/pod-provenance.ts +76 -0
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +18 -0
- package/src/task-orchestrator/surfaces/pod-warm-provenance.ts +81 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +6 -2
- package/src/task-orchestrator/surfaces/pod-warm-worker-protocol.ts +3 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +37 -5
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +368 -36
- package/src/task-orchestrator/surfaces/self-implement.ts +23 -0
- package/src/tool-runtime/ops-ledger-runtimes.ts +10 -2
- package/src/tui/README.md +2 -0
- package/src/tui/chat/background-job-status.ts +54 -0
- package/src/tui/chat/log-view.ts +80 -0
- package/src/tui/entry.ts +406 -0
- package/src/tui/input/composer.ts +144 -0
- package/src/tui/seat-mail-boot.ts +59 -0
- package/src/tui/slash/compact.ts +100 -0
- package/src/tui/slash/new-session.ts +35 -0
- package/src/tui-client/local-chat-turn.ts +239 -0
- package/src/tui-client/local-harness-command.ts +63 -0
- package/src/tui-client/local-provider-command.ts +184 -0
- package/src/user-config.ts +4 -2
- package/src/ux-sim/event-monkey.ts +378 -0
- package/src/ux-sim/fake-bin.ts +42 -7
- package/src/ux-sim/fault-nextmove-dispatch.ts +266 -0
- package/src/ux-sim/fault-pod-codex-503.ts +211 -0
- package/src/ux-sim/fault-scope-escape-lift.ts +189 -0
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/1162.c69abda138c7ce43.js +0 -79
- package/apps/pwa/out/_next/static/chunks/1449-1fede62af84c3e43.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1598-13fc845935e816df.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1639.62c5e16fa20d242f.js +0 -94
- package/apps/pwa/out/_next/static/chunks/1661-adb8b2babc9aaf8c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2147.107c0fc6146fb15a.js +0 -23
- package/apps/pwa/out/_next/static/chunks/2202-ef1c9b000c3074fc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2247.1e326638ee43e672.js +0 -115
- package/apps/pwa/out/_next/static/chunks/2268.56e1e3d58180abae.js +0 -8
- package/apps/pwa/out/_next/static/chunks/2469-606819c812414021.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2593.e53c1620c0bb3599.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2690.e96671114222676a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2898-79ee1a5cc0cd9d13.js +0 -1
- package/apps/pwa/out/_next/static/chunks/298.26099a9f65e5c8ff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2992.51fc2a7295bd8139.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3001-5a52788c813b6113.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3014-291245fba9df7b5b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3068.ee78201f0251a18d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3083.cd399a17e9365f78.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3103.84470c8445962f04.js +0 -34
- package/apps/pwa/out/_next/static/chunks/3117-e1c474683fd1f824.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3251-2c17bd5a91f8de2e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/326.3fb32322bb2ddf6d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3411-f87314c6c66ebc73.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3421-7ff7fbaa156985a7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3498.cf2a15a8a9e5b926.js +0 -226
- package/apps/pwa/out/_next/static/chunks/381.f55dc63ea87735e6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3819.163d4777f0a597f6.js +0 -32
- package/apps/pwa/out/_next/static/chunks/3837.722e053fb9f321ad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4129-ab0a6189f1778633.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4361.93d14ba594b3a035.js +0 -104
- package/apps/pwa/out/_next/static/chunks/4364.7a7eb19cceb67d2f.js +0 -286
- package/apps/pwa/out/_next/static/chunks/4406.d71f506f7c3ee9d3.js +0 -149
- package/apps/pwa/out/_next/static/chunks/4461.2ad1514180ae7e29.js +0 -148
- package/apps/pwa/out/_next/static/chunks/4479.bd309cbe0e3842ee.js +0 -64
- package/apps/pwa/out/_next/static/chunks/4522-05966f777d66d13b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4543-9a3e9812e845de65.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4557.f8f1d84a0d90d590.js +0 -74
- package/apps/pwa/out/_next/static/chunks/4589-79b11542179ef58c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4633-9f8f9f88ffbb8f5c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4831.23af4d10c0697b5e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4983.5951b85724f61f2a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5028-f0722e6114c313e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5249.96a848656b582a93.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5311.16e0ffbfa5468b80.js +0 -62
- package/apps/pwa/out/_next/static/chunks/5446.edf141cff9ef647d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5489.ec2dd1b5272a19dc.js +0 -24
- package/apps/pwa/out/_next/static/chunks/559.df87695df637920c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5618-5c88f2f70178c4ad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5764.05487bf0b73ddb6b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5930.e678826c3f831aab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5dfb57f7.f2e3305326202474.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6200-cefd6f33f59d765e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6314-edeba650ae686ac9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6316-bc9a9b74d7842d79.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6476-13b9779b73528008.js +0 -1
- package/apps/pwa/out/_next/static/chunks/666-04db3ac4c8e3c66f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/670.682e55106ef915a6.js +0 -77
- package/apps/pwa/out/_next/static/chunks/6816.b7ba9d0a1a4a46a7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/690-fbbcc777f189af37.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6989.0d3d4020e5cb3df6.js +0 -90
- package/apps/pwa/out/_next/static/chunks/7217-d17393fe7af78fa6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7232.24edbd938a69c8d0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7295cd1e.b4b557908888eeee.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7323.adb02de21991883c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7448.478958ffbbba0ac0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7537.ba2208c5c656b8a3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7562.948255cbc3e79d33.js +0 -41
- package/apps/pwa/out/_next/static/chunks/7596-962ae6db6cfc9c83.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7671.cff51beac212a2ba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7883.3916734ee16d3e58.js +0 -27
- package/apps/pwa/out/_next/static/chunks/7952.b192c31b6a0e00cc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/801.5b24e81eded22d1b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8176.8c9a8613f5a01ac1.js +0 -36
- package/apps/pwa/out/_next/static/chunks/819e78a6.fa3dd7f7da19bf61.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8220-78978450c3183d8d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8221-eb60b5bc692a3361.js +0 -1
- package/apps/pwa/out/_next/static/chunks/826.e9a26064f474949e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8459-a351487a4480f584.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8482-75823d513a4ce151.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8488.8da515248cda3f3a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8584.388a1779d9b203af.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8637.a55e098e61ffefb8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8817.61bb7ffbba502ecb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9207-8e6a12db30373f32.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9263-00ae932c62696a86.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9318.caafc3a130e8769c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/932.da3fb55951882562.js +0 -93
- package/apps/pwa/out/_next/static/chunks/9433.002f8426ac75b6b7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9464.dd631a5a14b1d660.js +0 -24
- package/apps/pwa/out/_next/static/chunks/9739.8d5f36ac67a3b236.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9743.beeabb9d5f86abe4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9843-a23d3f32dc43f715.js +0 -1
- package/apps/pwa/out/_next/static/chunks/994-28211077c7c587d5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-3b4c947f174e33d8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-369d5ce99483f859.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-63c0ed0eb26e5fce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-62802c6003bc85cc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-ecb41560d4e77be9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-7b65ad8130c93e95.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-8755477c15a9060c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-5725447dd972c471.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-b979de0591a69375.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-6d0796bf4633751a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-59c31dc0394e67b4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-12dfc95f6cc5c718.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-25788244e66aa4dd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-a2555dc705466322.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-4fb31eb476dcbad3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-3b4c947f174e33d8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-578729adbeaa40cb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-a1d20fffbec35205.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-4a558f94516b8004.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-9e3834705b86145e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-cb1c5fe746ea4014.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-9ee320507356582a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-66fd183b74835886.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-3272a064a01a9927.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-f281b7a7f6ef2529.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-d45a65f8b7124fcd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-e9c1fe684dd19a66.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-b8322932fc6e34de.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-82c66d9af2290575.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-63c6752009c97b05.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-bb33d42ebc358aec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-7e4c9379197d7214.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-38bf1e9a7001732b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-2e5b752012389d56.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-398c0faa173203f7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-002f53a965b6445c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-7f75997f61a26269.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-3b4c947f174e33d8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-05631753294f23fb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-edd700fd2cc3d7f8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-105f83ecb4594365.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-5823e87d2017f19c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-b51ca09566c03de7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-8aacd5ded5dbac60.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-bae3365a0b3c6a8e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-9ed52b48ff1aa7fd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-b6f8cad35fe00946.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-6d25ceda500d2457.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-b6401a5f2c962fe8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/ebf6cf5e.0d2f887b040e80fb.js +0 -122
- package/apps/pwa/out/_next/static/chunks/f09ec7d7-d29abe23edcbb193.js +0 -1
- package/apps/pwa/out/_next/static/chunks/ffdc3a04.b9c23c1b28dd4a96.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-9322cb8a56ac081c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-2fbab294e49a1561.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-f36729f56621a8f3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-2a62e450b47c6114.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-5e17f7b445f34d43.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-b4263e2190ea7adf.js +0 -1
- /package/apps/pwa/out/_next/static/{L04y73dlwKeTW-GetaTF3 → T1mBQqmkwKDLGtyisDCOd}/_ssgManifest.js +0 -0
package/src/index.ts
CHANGED
|
@@ -1,22 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// cron/launchd 최소 PATH 에서도 내부 gh/git subprocess 를 찾도록 PATH 를 먼저 보강(무음실패 근본·2026-07-25).
|
|
3
3
|
import './ensure-bin-path.js';
|
|
4
|
+
import './instance/resolve.js';
|
|
4
5
|
import { WORKFLOW_NODE_VARIANT_KEYS } from './workflow-runtime/schema.js';
|
|
5
6
|
import { accessSync, constants as fsConstants, existsSync, lstatSync, readFileSync, readlinkSync, realpathSync, statSync } from 'node:fs';
|
|
6
7
|
import type { SelfDevRunParticipant, SelfDevRunState } from './self-dev/run-store.js';
|
|
7
8
|
import { applyConfigDirFlagFromArgv } from './cli/config-dir-flag.js';
|
|
8
9
|
import { LOGS_SINCE_OPTION, registerLogsCommands } from './cli/logs-cli.js';
|
|
9
|
-
|
|
10
|
-
import { registerBenchCommands } from './cli/bench-cli.js';
|
|
11
|
-
import { registerRetroCommands } from './cli/retro-cli.js';
|
|
12
|
-
import { registerMemoryCommands } from './cli/memory-cli.js';
|
|
13
|
-
import { registerA2ACommands } from './cli/a2a-cli.js';
|
|
14
|
-
import { registerPluginCommands } from './cli/plugin-cli.js';
|
|
15
|
-
import { registerMakeCommand } from './cli/make-cli.js';
|
|
16
|
-
import { registerConnectCommand, registerSkillsCommands } from './cli/skills-cli.js';
|
|
17
|
-
import { registerImportCommand } from './cli/import-cli.js';
|
|
18
|
-
import { registerPersonaCommands } from './cli/persona-cli.js';
|
|
19
|
-
import { registerFleetCommands } from './cli/fleet-cli.js';
|
|
10
|
+
|
|
20
11
|
import { readPipedStdin } from './cli/piped-stdin.js';
|
|
21
12
|
import { writeStdoutJson } from './cli/stdout-json.js';
|
|
22
13
|
import { writeStdoutFully } from './cli/stdout-flush.js';
|
|
@@ -28,77 +19,26 @@ import { ensureRunIdentity, getHarnessSpace, normalizeSpaceId } from './harness/
|
|
|
28
19
|
// ⇒ «정적» import 로 올린다. 이 모듈은 부작용이 없어 부팅 비용이 사실상 0 이다.
|
|
29
20
|
import { installDevCompletionGuard } from './self-dev/dev-completion-guard.js';
|
|
30
21
|
import { formatOrchestrateResultLine } from './self-dev/orchestrate-summary-line.js';
|
|
31
|
-
import {
|
|
22
|
+
import { normalizeOrchestrateRequest, splitOrchestrateGoalTexts } from './self-dev/orchestrate-cli-text.js';
|
|
23
|
+
import { DEV_PLAN_REPLACEMENT, formatDevPlanOptionHelp, HARNESS_RUN_DEPRECATION_HELP } from './self-dev/cli-help-text.js';
|
|
32
24
|
import { CLI_ENTRANCE_BASELINE, evaluateCommandEntranceBaseline } from './self-dev/entrance-baseline.js';
|
|
33
25
|
import { CLI_HARNESS_DOGFOOD_ENTRANCE, CLI_HARNESS_ORCHESTRATE_ENTRANCE, describeEntranceCommand, listEntrancesWithModelExposure, renderLaunchEntrances, summarizeEntrances, type EntranceId } from './self-dev/entrance-registry.js';
|
|
34
26
|
import { isOldDoorInternalCall, refuseOldDoor } from './self-dev/old-door.js';
|
|
35
27
|
import { collectCommandEntrances, renderCommandEntrances } from './self-dev/entrance-inventory.js';
|
|
36
28
|
import { isGoalAuthorFileName } from './self-implement/goal-document.js';
|
|
37
29
|
import { DEV_PIPELINE_SINK_SURFACE } from './self-implement/self-cli-sink-surface.js';
|
|
38
|
-
|
|
39
|
-
import { registerKnowCommand } from './cli/know-cli.js';
|
|
40
|
-
import { registerSeatRequestsCommands } from './cli/seat-requests-cli.js';
|
|
41
|
-
import { registerSeatBootCommands } from './cli/seat-cli.js';
|
|
30
|
+
|
|
42
31
|
import { applyTestStateDirFlagFromArgv } from './cli/test-state-dir-flag.js';
|
|
43
32
|
import { applyTestFlagFromArgv, observeTestFlagOwnership, uncoveredTestFlagPaths, staleTestFlagPaths } from './cli/test-flag.js';
|
|
44
|
-
|
|
45
|
-
import { registerPtyRecordCommand } from './cli/pty-record-cli.js';
|
|
46
|
-
import { registerLeaderCommands } from './cli/leader-cli.js';
|
|
47
|
-
import { registerRepoCommands } from './cli/repo-cli.js';
|
|
48
|
-
import { registerAgentCommands, runChatTurnCli, emitDetachedProgress } from './cli/agent-cli.js';
|
|
49
|
-
export { runChatTurnCli, buildCliAgentTools, setCliAgentDispatchForTesting, emitDetachedProgress, emitHarnessFeedbackProgress } from './cli/agent-cli.js';
|
|
50
|
-
import { registerOpsCommands } from './cli/ops-cli.js';
|
|
51
|
-
import { registerOutputsCommands } from './cli/outputs-cli.js';
|
|
52
|
-
import { registerPublishCommands } from './cli/publish-cli.js';
|
|
53
|
-
import { registerAutopilotCommands } from './cli/autopilot-cli.js';
|
|
54
|
-
import { registerRoleCommands } from './cli/role-cli.js';
|
|
55
|
-
import { registerMachineCommands } from './cli/machine-cli.js';
|
|
33
|
+
|
|
56
34
|
import { recordImagePinFromConfigSet, registerImageCommands } from './cli/image-cli.js';
|
|
57
|
-
|
|
58
|
-
import { registerScheduleCommands } from './cli/schedule-cli.js';
|
|
59
|
-
import { registerGuardianCommands } from './cli/guardian-cli.js';
|
|
35
|
+
|
|
60
36
|
export { runSchedule, scheduleCreatePlan } from './cli/schedule-cli.js';
|
|
61
37
|
export type { ScheduleDispatch } from './cli/schedule-cli.js';
|
|
62
38
|
import { registerReviewLoopOptions, buildReviewLoopOpts } from './agent-mission/review-loop-cli.js';
|
|
63
|
-
|
|
64
|
-
import { registerSupervisorMetricsCommand } from './agent-mission/supervisor-metrics-cli.js';
|
|
65
|
-
import { agentBackendNames } from './agent-mission/driver.js';
|
|
66
|
-
import { registerWhereCommand } from './cli/where-cli.js';
|
|
67
|
-
import { registerShadowCommand } from './cli/shadow-cli.js';
|
|
68
|
-
import { registerLlmDetectCommand } from './cli/llm-detect-cli.js';
|
|
69
|
-
import { registerStorageDetectCommand } from './cli/storage-cli.js';
|
|
70
|
-
import { registerPodCommands } from './cli/pod-cli.js';
|
|
71
|
-
import { registerBrowserAnnotateCommand } from './cli/browser-annotate-cli.js';
|
|
72
|
-
import { registerPendingQuestionsCommand } from './cli/pending-questions-cli.js';
|
|
73
|
-
import { registerUsageCommand } from './cli/usage-cli.js';
|
|
74
|
-
import { registerUsageDailyCommand } from './cli/usage-daily-cli.js';
|
|
75
|
-
import { registerLiveCommands } from './cli/live-cli.js';
|
|
76
|
-
import { registerResearchCommand } from './cli/research-cli.js';
|
|
77
|
-
import { registerReleaseCommands } from './cli/release-cli.js';
|
|
78
|
-
import { registerFreezeCommands } from './cli/freeze-cli.js';
|
|
79
|
-
import { registerFlowCommands } from './cli/flow-cli.js';
|
|
80
|
-
import { registerModelWatchCommand } from './cli/model-watch-cli.js';
|
|
81
|
-
import { registerIntakeCommands } from './cli/intake-cli.js';
|
|
82
|
-
import { registerTasksCommands } from './cli/tasks-cli.js';
|
|
83
|
-
import { registerBriefCommands } from './cli/brief-cli.js';
|
|
84
|
-
import { registerNotifyCommand } from './cli/notify-cli.js';
|
|
85
|
-
import { registerAwayCommand } from './cli/away-cli.js';
|
|
86
|
-
import { registerLabelsCommands } from './cli/labels-cli.js';
|
|
87
|
-
import { registerMsgCommands } from './cli/msg-cli.js';
|
|
88
|
-
import { registerDoctorCommand } from './cli/doctor-cli.js';
|
|
89
|
-
import { registerProviderCommands } from './cli/provider-cli.js';
|
|
39
|
+
|
|
90
40
|
export { buildCodexAccountImportGuidance, setCodexAccountLogSinkModuleForTesting } from './cli/provider-cli.js';
|
|
91
|
-
|
|
92
|
-
import { registerHooksCommands } from './cli/hooks-cli.js';
|
|
93
|
-
import { registerSetupCommand } from './cli/setup-cli.js';
|
|
94
|
-
import { registerStartCommand } from './cli/start-cli.js';
|
|
95
|
-
import { registerGroundingSourcesCli } from './grounding/sources-cli.js';
|
|
96
|
-
import { registerGraphCommands } from './graph-runner/graph-cli.js';
|
|
97
|
-
import { registerLoopCommands } from './loops/loop-cli.js';
|
|
98
|
-
import { registerResourceCommands } from './cli/resource-cli.js';
|
|
99
|
-
import { registerHqMovePlanCommand } from './hq/hq.js';
|
|
100
|
-
import { registerCardCommand } from './task-cards/card-cli.js';
|
|
101
|
-
import { registerLaunchHeadCommands } from './launch-head/launch-head-cli.js';
|
|
41
|
+
|
|
102
42
|
import { acpServerHelpText } from './boot/acp-server-help.js';
|
|
103
43
|
// IMPORTANT: parse `--config-dir <dir>` + `--test-state-dir <dir>`
|
|
104
44
|
// BEFORE Commander loads — the resolvers are read at module-init
|
|
@@ -116,54 +56,310 @@ applyTestFlagFromArgv();
|
|
|
116
56
|
// test-instance default so scoped storage commands stay inside that directory.
|
|
117
57
|
applyConfigDirFlagFromArgv();
|
|
118
58
|
|
|
59
|
+
// Only unambiguous root commands take the small registrar path. Root help,
|
|
60
|
+
// unknown commands and unrecognized global flags keep the complete tree.
|
|
61
|
+
const INDEX_FAST_ROOTS = new Set(['a2a', 'agent-env', 'away', 'bench', 'brief', 'card', 'connect', 'control', 'docs', 'doctor', 'fleet', 'flow', 'freeze', 'graph', 'guardian', 'import', 'intake', 'know', 'labels', 'launch-head', 'leader', 'live', 'llm', 'loop', 'machine', 'make', 'memory', 'msg', 'notify', 'ops', 'outputs', 'plugin', 'pod', 'provider', 'pty', 'publish', 'questions', 'relay', 'release', 'repo', 'research', 'resource', 'retro', 'role', 'schedule', 'seat', 'shadow', 'skills', 'start', 'storage', 'tasks', 'where']);
|
|
62
|
+
function selectedIndexFastRoot(args: readonly string[]): string | undefined {
|
|
63
|
+
if (process.env.ELANOUS_TEST_FLAG_AUDIT === '1') return undefined;
|
|
64
|
+
let index = 0;
|
|
65
|
+
while (index < args.length && args[index]?.startsWith('-')) {
|
|
66
|
+
const flag = args[index]!;
|
|
67
|
+
index++;
|
|
68
|
+
if (flag === '--test' || flag.startsWith('--test=')) continue;
|
|
69
|
+
if (flag === '--config-dir' || flag === '--test-state-dir') {
|
|
70
|
+
if (!args[index] || args[index]!.startsWith('-')) return undefined;
|
|
71
|
+
index++;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (flag.startsWith('--config-dir=') || flag.startsWith('--test-state-dir=')) continue;
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
const root = args[index];
|
|
78
|
+
// We cannot know every registrar's local options before it is loaded. Keep
|
|
79
|
+
// only universally recognized help (and where's measured JSON action) on
|
|
80
|
+
// the small path; all other options take the complete parser.
|
|
81
|
+
const fastOptions = new Set(root === 'where' ? ['--help', '-h', '--json'] : ['--help', '-h']);
|
|
82
|
+
if (args.slice(index + 1).some((arg) => arg.startsWith('-') && !fastOptions.has(arg))) return undefined;
|
|
83
|
+
return root && INDEX_FAST_ROOTS.has(root) ? root : undefined;
|
|
84
|
+
}
|
|
85
|
+
// An explicit `--tui next` launch does not dispatch a CLI subcommand. Keep command
|
|
86
|
+
// registrars out of the first-frame path while retaining the full tree for
|
|
87
|
+
// help, unknown commands and unrecognized global flags.
|
|
88
|
+
function selectedIndexNextTuiRoot(args: readonly string[]): '__tui_next__' | undefined {
|
|
89
|
+
const rootTui = extractRootTuiEntry(args);
|
|
90
|
+
if (rootTui.error || rootTui.entry !== 'next') return undefined;
|
|
91
|
+
const remaining = rootTui.args.filter((arg) => arg !== '--test' && !arg.startsWith('--test='));
|
|
92
|
+
return remaining.length === 0 ? '__tui_next__' : undefined;
|
|
93
|
+
}
|
|
94
|
+
// Test files import this module to inspect the complete Commander tree. An
|
|
95
|
+
// empty test-runner argv also looks like a bare next launch, so only the real
|
|
96
|
+
// CLI entry may take the next-only registrar path.
|
|
97
|
+
const isCliEntry = import.meta.main || /[\\/]bin[\\/]elanous\.mjs$/.test(process.argv[1] ?? '');
|
|
98
|
+
const INDEX_FAST_ROOT = selectedIndexFastRoot(process.argv.slice(2))
|
|
99
|
+
?? (isCliEntry ? selectedIndexNextTuiRoot(process.argv.slice(2)) : undefined);
|
|
100
|
+
// Keep the historical index exports without forcing the agent engine into
|
|
101
|
+
// unrelated CLI commands at module load time.
|
|
102
|
+
export const runChatTurnCli: typeof import('./cli/agent-cli.js').runChatTurnCli =
|
|
103
|
+
async (...args) => (await import('./cli/agent-cli.js')).runChatTurnCli(...args);
|
|
104
|
+
export const buildCliAgentTools: typeof import('./cli/agent-cli.js').buildCliAgentTools =
|
|
105
|
+
(...args) => (require('./cli/agent-cli.js') as typeof import('./cli/agent-cli.js')).buildCliAgentTools(...args);
|
|
106
|
+
export const setCliAgentDispatchForTesting: typeof import('./cli/agent-cli.js').setCliAgentDispatchForTesting =
|
|
107
|
+
(...args) => (require('./cli/agent-cli.js') as typeof import('./cli/agent-cli.js')).setCliAgentDispatchForTesting(...args);
|
|
108
|
+
export const emitDetachedProgress: typeof import('./cli/agent-cli.js').emitDetachedProgress =
|
|
109
|
+
(...args) => (require('./cli/agent-cli.js') as typeof import('./cli/agent-cli.js')).emitDetachedProgress(...args);
|
|
110
|
+
export const emitHarnessFeedbackProgress: typeof import('./cli/agent-cli.js').emitHarnessFeedbackProgress =
|
|
111
|
+
(...args) => (require('./cli/agent-cli.js') as typeof import('./cli/agent-cli.js')).emitHarnessFeedbackProgress(...args);
|
|
112
|
+
|
|
113
|
+
// Selected root imports only its registrar; complete help and unknown routes load all.
|
|
114
|
+
const registerDocsCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'docs'
|
|
115
|
+
? (() => undefined)
|
|
116
|
+
: (require('./cli/docs-cli.js') as typeof import('./cli/docs-cli.js')).registerDocsCommands) as typeof import('./cli/docs-cli.js').registerDocsCommands;
|
|
117
|
+
const registerBenchCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'bench'
|
|
118
|
+
? (() => undefined)
|
|
119
|
+
: (require('./cli/bench-cli.js') as typeof import('./cli/bench-cli.js')).registerBenchCommands) as typeof import('./cli/bench-cli.js').registerBenchCommands;
|
|
120
|
+
const registerRetroCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'retro'
|
|
121
|
+
? (() => undefined)
|
|
122
|
+
: (require('./cli/retro-cli.js') as typeof import('./cli/retro-cli.js')).registerRetroCommands) as typeof import('./cli/retro-cli.js').registerRetroCommands;
|
|
123
|
+
const registerMemoryCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'memory'
|
|
124
|
+
? (() => undefined)
|
|
125
|
+
: (require('./cli/memory-cli.js') as typeof import('./cli/memory-cli.js')).registerMemoryCommands) as typeof import('./cli/memory-cli.js').registerMemoryCommands;
|
|
126
|
+
const registerA2ACommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'a2a'
|
|
127
|
+
? (() => undefined)
|
|
128
|
+
: (require('./cli/a2a-cli.js') as typeof import('./cli/a2a-cli.js')).registerA2ACommands) as typeof import('./cli/a2a-cli.js').registerA2ACommands;
|
|
129
|
+
const registerPluginCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'plugin'
|
|
130
|
+
? (() => undefined)
|
|
131
|
+
: (await import('./cli/plugin-cli.js')).registerPluginCommands) as typeof import('./cli/plugin-cli.js').registerPluginCommands;
|
|
132
|
+
const registerMakeCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'make'
|
|
133
|
+
? (() => undefined)
|
|
134
|
+
: (require('./cli/make-cli.js') as typeof import('./cli/make-cli.js')).registerMakeCommand) as typeof import('./cli/make-cli.js').registerMakeCommand;
|
|
135
|
+
const registerConnectCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'connect'
|
|
136
|
+
? (() => undefined)
|
|
137
|
+
: (require('./cli/skills-cli.js') as typeof import('./cli/skills-cli.js')).registerConnectCommand) as typeof import('./cli/skills-cli.js').registerConnectCommand;
|
|
138
|
+
const registerSkillsCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'skills'
|
|
139
|
+
? (() => undefined)
|
|
140
|
+
: (require('./cli/skills-cli.js') as typeof import('./cli/skills-cli.js')).registerSkillsCommands) as typeof import('./cli/skills-cli.js').registerSkillsCommands;
|
|
141
|
+
const registerImportCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'import'
|
|
142
|
+
? (() => undefined)
|
|
143
|
+
: (require('./cli/import-cli.js') as typeof import('./cli/import-cli.js')).registerImportCommand) as typeof import('./cli/import-cli.js').registerImportCommand;
|
|
144
|
+
const registerPersonaCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
145
|
+
? (() => undefined)
|
|
146
|
+
: (await import('./cli/persona-cli.js')).registerPersonaCommands) as typeof import('./cli/persona-cli.js').registerPersonaCommands;
|
|
147
|
+
const registerFleetCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'fleet'
|
|
148
|
+
? (() => undefined)
|
|
149
|
+
: (require('./cli/fleet-cli.js') as typeof import('./cli/fleet-cli.js')).registerFleetCommands) as typeof import('./cli/fleet-cli.js').registerFleetCommands;
|
|
150
|
+
const registerPrivateLedgerCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
151
|
+
? (() => undefined)
|
|
152
|
+
: (require('./cli/private-ledger-commands.js') as typeof import('./cli/private-ledger-commands.js')).registerPrivateLedgerCommands) as typeof import('./cli/private-ledger-commands.js').registerPrivateLedgerCommands;
|
|
153
|
+
const registerKnowCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'know'
|
|
154
|
+
? (() => undefined)
|
|
155
|
+
: (require('./cli/know-cli.js') as typeof import('./cli/know-cli.js')).registerKnowCommand) as typeof import('./cli/know-cli.js').registerKnowCommand;
|
|
156
|
+
const registerSeatRequestsCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'seat'
|
|
157
|
+
? (() => undefined)
|
|
158
|
+
: (require('./cli/seat-requests-cli.js') as typeof import('./cli/seat-requests-cli.js')).registerSeatRequestsCommands) as typeof import('./cli/seat-requests-cli.js').registerSeatRequestsCommands;
|
|
159
|
+
const registerSeatBootCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'seat'
|
|
160
|
+
? (() => undefined)
|
|
161
|
+
: (require('./cli/seat-cli.js') as typeof import('./cli/seat-cli.js')).registerSeatBootCommands) as typeof import('./cli/seat-cli.js').registerSeatBootCommands;
|
|
162
|
+
const registerPtyTakeoverCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'pty'
|
|
163
|
+
? (() => undefined)
|
|
164
|
+
: (require('./cli/pty-takeover-cli.js') as typeof import('./cli/pty-takeover-cli.js')).registerPtyTakeoverCommands) as typeof import('./cli/pty-takeover-cli.js').registerPtyTakeoverCommands;
|
|
165
|
+
const registerPtyRecordCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'pty'
|
|
166
|
+
? (() => undefined)
|
|
167
|
+
: (require('./cli/pty-record-cli.js') as typeof import('./cli/pty-record-cli.js')).registerPtyRecordCommand) as typeof import('./cli/pty-record-cli.js').registerPtyRecordCommand;
|
|
168
|
+
const registerLeaderCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'leader'
|
|
169
|
+
? (() => undefined)
|
|
170
|
+
: (require('./cli/leader-cli.js') as typeof import('./cli/leader-cli.js')).registerLeaderCommands) as typeof import('./cli/leader-cli.js').registerLeaderCommands;
|
|
171
|
+
const registerRepoCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'repo'
|
|
172
|
+
? (() => undefined)
|
|
173
|
+
: (require('./cli/repo-cli.js') as typeof import('./cli/repo-cli.js')).registerRepoCommands) as typeof import('./cli/repo-cli.js').registerRepoCommands;
|
|
174
|
+
const registerOpsCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'ops'
|
|
175
|
+
? (() => undefined)
|
|
176
|
+
: (require('./cli/ops-cli.js') as typeof import('./cli/ops-cli.js')).registerOpsCommands) as typeof import('./cli/ops-cli.js').registerOpsCommands;
|
|
177
|
+
const registerOutputsCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'outputs'
|
|
178
|
+
? (() => undefined)
|
|
179
|
+
: (require('./cli/outputs-cli.js') as typeof import('./cli/outputs-cli.js')).registerOutputsCommands) as typeof import('./cli/outputs-cli.js').registerOutputsCommands;
|
|
180
|
+
const registerPublishCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'publish'
|
|
181
|
+
? (() => undefined)
|
|
182
|
+
: (require('./cli/publish-cli.js') as typeof import('./cli/publish-cli.js')).registerPublishCommands) as typeof import('./cli/publish-cli.js').registerPublishCommands;
|
|
183
|
+
const registerAutopilotCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
184
|
+
? (() => undefined)
|
|
185
|
+
: (require('./cli/autopilot-cli.js') as typeof import('./cli/autopilot-cli.js')).registerAutopilotCommands) as typeof import('./cli/autopilot-cli.js').registerAutopilotCommands;
|
|
186
|
+
const registerRoleCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'role'
|
|
187
|
+
? (() => undefined)
|
|
188
|
+
: (require('./cli/role-cli.js') as typeof import('./cli/role-cli.js')).registerRoleCommands) as typeof import('./cli/role-cli.js').registerRoleCommands;
|
|
189
|
+
const registerMachineCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'machine'
|
|
190
|
+
? (() => undefined)
|
|
191
|
+
: (require('./cli/machine-cli.js') as typeof import('./cli/machine-cli.js')).registerMachineCommands) as typeof import('./cli/machine-cli.js').registerMachineCommands;
|
|
192
|
+
const registerAgentEnvCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'agent-env'
|
|
193
|
+
? (() => undefined)
|
|
194
|
+
: (require('./cli/agent-env-cli.js') as typeof import('./cli/agent-env-cli.js')).registerAgentEnvCommands) as typeof import('./cli/agent-env-cli.js').registerAgentEnvCommands;
|
|
195
|
+
const registerScheduleCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'schedule'
|
|
196
|
+
? (() => undefined)
|
|
197
|
+
: (require('./cli/schedule-cli.js') as typeof import('./cli/schedule-cli.js')).registerScheduleCommands) as typeof import('./cli/schedule-cli.js').registerScheduleCommands;
|
|
198
|
+
const registerGuardianCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'guardian'
|
|
199
|
+
? (() => undefined)
|
|
200
|
+
: (require('./cli/guardian-cli.js') as typeof import('./cli/guardian-cli.js')).registerGuardianCommands) as typeof import('./cli/guardian-cli.js').registerGuardianCommands;
|
|
201
|
+
const registerCapabilitiesCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
202
|
+
? (() => undefined)
|
|
203
|
+
: (require('./agent-mission/capabilities-cli.js') as typeof import('./agent-mission/capabilities-cli.js')).registerCapabilitiesCommand) as typeof import('./agent-mission/capabilities-cli.js').registerCapabilitiesCommand;
|
|
204
|
+
const registerSupervisorMetricsCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
205
|
+
? (() => undefined)
|
|
206
|
+
: (require('./agent-mission/supervisor-metrics-cli.js') as typeof import('./agent-mission/supervisor-metrics-cli.js')).registerSupervisorMetricsCommand) as typeof import('./agent-mission/supervisor-metrics-cli.js').registerSupervisorMetricsCommand;
|
|
207
|
+
const registerWhereCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'where'
|
|
208
|
+
? (() => undefined)
|
|
209
|
+
: (require('./cli/where-cli.js') as typeof import('./cli/where-cli.js')).registerWhereCommand) as typeof import('./cli/where-cli.js').registerWhereCommand;
|
|
210
|
+
const registerShadowCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'shadow'
|
|
211
|
+
? (() => undefined)
|
|
212
|
+
: (require('./cli/shadow-cli.js') as typeof import('./cli/shadow-cli.js')).registerShadowCommand) as typeof import('./cli/shadow-cli.js').registerShadowCommand;
|
|
213
|
+
const registerLlmDetectCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'llm'
|
|
214
|
+
? (() => undefined)
|
|
215
|
+
: (require('./cli/llm-detect-cli.js') as typeof import('./cli/llm-detect-cli.js')).registerLlmDetectCommand) as typeof import('./cli/llm-detect-cli.js').registerLlmDetectCommand;
|
|
216
|
+
const registerStorageDetectCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'storage'
|
|
217
|
+
? (() => undefined)
|
|
218
|
+
: (require('./cli/storage-cli.js') as typeof import('./cli/storage-cli.js')).registerStorageDetectCommand) as typeof import('./cli/storage-cli.js').registerStorageDetectCommand;
|
|
219
|
+
const registerPodCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'pod'
|
|
220
|
+
? (() => undefined)
|
|
221
|
+
: (require('./cli/pod-cli.js') as typeof import('./cli/pod-cli.js')).registerPodCommands) as typeof import('./cli/pod-cli.js').registerPodCommands;
|
|
222
|
+
const registerBrowserAnnotateCommand = (require('./cli/browser-annotate-cli.js') as typeof import('./cli/browser-annotate-cli.js')).registerBrowserAnnotateCommand;
|
|
223
|
+
const registerPendingQuestionsCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'questions'
|
|
224
|
+
? (() => undefined)
|
|
225
|
+
: (require('./cli/pending-questions-cli.js') as typeof import('./cli/pending-questions-cli.js')).registerPendingQuestionsCommand) as typeof import('./cli/pending-questions-cli.js').registerPendingQuestionsCommand;
|
|
226
|
+
const registerUsageCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
227
|
+
? (() => undefined)
|
|
228
|
+
: (require('./cli/usage-cli.js') as typeof import('./cli/usage-cli.js')).registerUsageCommand) as typeof import('./cli/usage-cli.js').registerUsageCommand;
|
|
229
|
+
const registerUsageDailyCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
230
|
+
? (() => undefined)
|
|
231
|
+
: (require('./cli/usage-daily-cli.js') as typeof import('./cli/usage-daily-cli.js')).registerUsageDailyCommand) as typeof import('./cli/usage-daily-cli.js').registerUsageDailyCommand;
|
|
232
|
+
const registerLiveCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'live'
|
|
233
|
+
? (() => undefined)
|
|
234
|
+
: (require('./cli/live-cli.js') as typeof import('./cli/live-cli.js')).registerLiveCommands) as typeof import('./cli/live-cli.js').registerLiveCommands;
|
|
235
|
+
const registerResearchCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'research'
|
|
236
|
+
? (() => undefined)
|
|
237
|
+
: (require('./cli/research-cli.js') as typeof import('./cli/research-cli.js')).registerResearchCommand) as typeof import('./cli/research-cli.js').registerResearchCommand;
|
|
238
|
+
const registerReleaseCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'release'
|
|
239
|
+
? (() => undefined)
|
|
240
|
+
: (require('./cli/release-cli.js') as typeof import('./cli/release-cli.js')).registerReleaseCommands) as typeof import('./cli/release-cli.js').registerReleaseCommands;
|
|
241
|
+
const registerFreezeCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'freeze'
|
|
242
|
+
? (() => undefined)
|
|
243
|
+
: (require('./cli/freeze-cli.js') as typeof import('./cli/freeze-cli.js')).registerFreezeCommands) as typeof import('./cli/freeze-cli.js').registerFreezeCommands;
|
|
244
|
+
const registerFlowCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'flow'
|
|
245
|
+
? (() => undefined)
|
|
246
|
+
: (require('./cli/flow-cli.js') as typeof import('./cli/flow-cli.js')).registerFlowCommands) as typeof import('./cli/flow-cli.js').registerFlowCommands;
|
|
247
|
+
const registerModelWatchCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
248
|
+
? (() => undefined)
|
|
249
|
+
: (require('./cli/model-watch-cli.js') as typeof import('./cli/model-watch-cli.js')).registerModelWatchCommand) as typeof import('./cli/model-watch-cli.js').registerModelWatchCommand;
|
|
250
|
+
const registerIntakeCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'intake'
|
|
251
|
+
? (() => undefined)
|
|
252
|
+
: (require('./cli/intake-cli.js') as typeof import('./cli/intake-cli.js')).registerIntakeCommands) as typeof import('./cli/intake-cli.js').registerIntakeCommands;
|
|
253
|
+
const registerTasksCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'tasks'
|
|
254
|
+
? (() => undefined)
|
|
255
|
+
: (require('./cli/tasks-cli.js') as typeof import('./cli/tasks-cli.js')).registerTasksCommands) as typeof import('./cli/tasks-cli.js').registerTasksCommands;
|
|
256
|
+
const registerBriefCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'brief'
|
|
257
|
+
? (() => undefined)
|
|
258
|
+
: (await import('./cli/brief-cli.js')).registerBriefCommands) as typeof import('./cli/brief-cli.js').registerBriefCommands;
|
|
259
|
+
const registerNotifyCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'notify'
|
|
260
|
+
? (() => undefined)
|
|
261
|
+
: (require('./cli/notify-cli.js') as typeof import('./cli/notify-cli.js')).registerNotifyCommand) as typeof import('./cli/notify-cli.js').registerNotifyCommand;
|
|
262
|
+
const registerAwayCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'away'
|
|
263
|
+
? (() => undefined)
|
|
264
|
+
: (await import('./cli/away-cli.js')).registerAwayCommand) as typeof import('./cli/away-cli.js').registerAwayCommand;
|
|
265
|
+
const registerLabelsCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'labels'
|
|
266
|
+
? (() => undefined)
|
|
267
|
+
: (require('./cli/labels-cli.js') as typeof import('./cli/labels-cli.js')).registerLabelsCommands) as typeof import('./cli/labels-cli.js').registerLabelsCommands;
|
|
268
|
+
const registerMsgCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'msg'
|
|
269
|
+
? (() => undefined)
|
|
270
|
+
: (require('./cli/msg-cli.js') as typeof import('./cli/msg-cli.js')).registerMsgCommands) as typeof import('./cli/msg-cli.js').registerMsgCommands;
|
|
271
|
+
const registerDoctorCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'doctor'
|
|
272
|
+
? (() => undefined)
|
|
273
|
+
: (require('./cli/doctor-cli.js') as typeof import('./cli/doctor-cli.js')).registerDoctorCommand) as typeof import('./cli/doctor-cli.js').registerDoctorCommand;
|
|
274
|
+
const registerProviderCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'provider'
|
|
275
|
+
? (() => undefined)
|
|
276
|
+
: (require('./cli/provider-cli.js') as typeof import('./cli/provider-cli.js')).registerProviderCommands) as typeof import('./cli/provider-cli.js').registerProviderCommands;
|
|
277
|
+
const registerAgentCommands = (INDEX_FAST_ROOT
|
|
278
|
+
? (() => undefined)
|
|
279
|
+
: (require('./cli/agent-cli.js') as typeof import('./cli/agent-cli.js')).registerAgentCommands) as typeof import('./cli/agent-cli.js').registerAgentCommands;
|
|
280
|
+
const registerControlCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'control'
|
|
281
|
+
? (() => undefined)
|
|
282
|
+
: (require('./cli/control-cli.js') as typeof import('./cli/control-cli.js')).registerControlCommands) as typeof import('./cli/control-cli.js').registerControlCommands;
|
|
283
|
+
const registerHooksCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
284
|
+
? (() => undefined)
|
|
285
|
+
: (require('./cli/hooks-cli.js') as typeof import('./cli/hooks-cli.js')).registerHooksCommands) as typeof import('./cli/hooks-cli.js').registerHooksCommands;
|
|
286
|
+
const registerSetupCommand = (INDEX_FAST_ROOT === '__tui_next__'
|
|
287
|
+
? (() => undefined)
|
|
288
|
+
: (require('./cli/setup-cli.js') as typeof import('./cli/setup-cli.js')).registerSetupCommand) as typeof import('./cli/setup-cli.js').registerSetupCommand;
|
|
289
|
+
const registerStartCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'start'
|
|
290
|
+
? (() => undefined)
|
|
291
|
+
: (require('./cli/start-cli.js') as typeof import('./cli/start-cli.js')).registerStartCommand) as typeof import('./cli/start-cli.js').registerStartCommand;
|
|
292
|
+
const registerGroundingSourcesCli = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
293
|
+
? (() => undefined)
|
|
294
|
+
: (require('./grounding/sources-cli.js') as typeof import('./grounding/sources-cli.js')).registerGroundingSourcesCli) as typeof import('./grounding/sources-cli.js').registerGroundingSourcesCli;
|
|
295
|
+
const registerGraphCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'graph'
|
|
296
|
+
? (() => undefined)
|
|
297
|
+
: (require('./graph-runner/graph-cli.js') as typeof import('./graph-runner/graph-cli.js')).registerGraphCommands) as typeof import('./graph-runner/graph-cli.js').registerGraphCommands;
|
|
298
|
+
const registerLoopCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'loop'
|
|
299
|
+
? (() => undefined)
|
|
300
|
+
: (require('./loops/loop-cli.js') as typeof import('./loops/loop-cli.js')).registerLoopCommands) as typeof import('./loops/loop-cli.js').registerLoopCommands;
|
|
301
|
+
const registerResourceCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'resource'
|
|
302
|
+
? (() => undefined)
|
|
303
|
+
: (require('./cli/resource-cli.js') as typeof import('./cli/resource-cli.js')).registerResourceCommands) as typeof import('./cli/resource-cli.js').registerResourceCommands;
|
|
304
|
+
const registerHqMovePlanCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
305
|
+
? (() => undefined)
|
|
306
|
+
: (require('./hq/hq.js') as typeof import('./hq/hq.js')).registerHqMovePlanCommand) as typeof import('./hq/hq.js').registerHqMovePlanCommand;
|
|
307
|
+
const registerCardCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'card'
|
|
308
|
+
? (() => undefined)
|
|
309
|
+
: (require('./task-cards/card-cli.js') as typeof import('./task-cards/card-cli.js')).registerCardCommand) as typeof import('./task-cards/card-cli.js').registerCardCommand;
|
|
310
|
+
const registerLaunchHeadCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'launch-head'
|
|
311
|
+
? (() => undefined)
|
|
312
|
+
: (require('./launch-head/launch-head-cli.js') as typeof import('./launch-head/launch-head-cli.js')).registerLaunchHeadCommands) as typeof import('./launch-head/launch-head-cli.js').registerLaunchHeadCommands;
|
|
313
|
+
const registerIngestTokenCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
314
|
+
? (() => undefined)
|
|
315
|
+
: (require('./cli/ingest-token-cli.js') as typeof import('./cli/ingest-token-cli.js')).registerIngestTokenCommands) as typeof import('./cli/ingest-token-cli.js').registerIngestTokenCommands;
|
|
316
|
+
const registerMcpGatewayCommands = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== '__full__'
|
|
317
|
+
? (() => undefined)
|
|
318
|
+
: (require('./cli/mcp-gateway-cli.js') as typeof import('./cli/mcp-gateway-cli.js')).registerMcpGatewayCommands) as typeof import('./cli/mcp-gateway-cli.js').registerMcpGatewayCommands;
|
|
319
|
+
const registerRelayCommand = (INDEX_FAST_ROOT && INDEX_FAST_ROOT !== 'relay'
|
|
320
|
+
? (() => undefined)
|
|
321
|
+
: (require('./relay/relay-cli.js') as typeof import('./relay/relay-cli.js')).registerRelayCommand) as typeof import('./relay/relay-cli.js').registerRelayCommand;
|
|
322
|
+
|
|
323
|
+
|
|
119
324
|
import { Command, Option } from 'commander';
|
|
120
325
|
import { filterCliRootHelp } from './maturity/cli-maturity.js';
|
|
121
326
|
import type { AdPipelinePlan, AdPipelineResult } from './ad-pipeline/run.js';
|
|
122
327
|
import type { AcpPermissionApprover } from './acp/client.js';
|
|
123
328
|
import { runGitCommand } from './git-fs/runner.js';
|
|
124
329
|
import { debug, redactSecretText, redactSecrets } from './debug/log.js';
|
|
125
|
-
import {
|
|
330
|
+
import type { HarnessAskSayChildLlmOptions, HarnessAskSayOptions, HarnessPlanOptions } from './harness/harness-cli-command.js';
|
|
126
331
|
import { CliUserError, formatCliUserError, isCliUserError } from './cli/cli-user-error.js';
|
|
127
332
|
import { classifyFriendlyError, formatFriendlyError } from './cli/friendly-errors.js';
|
|
128
333
|
import { detectLocale } from './expression/locale.js';
|
|
129
|
-
import { dispatchSolveMission } from './skills/tools/solve-mission.js';
|
|
130
334
|
import { performBrowserAction, type BrowserActionDeps, type BrowserActionResult } from './harness/browser-act.js';
|
|
131
335
|
import { decideTypeAction, type TypeActionDecision, type TypeTarget } from './harness/browser-act-type.js';
|
|
132
|
-
import { resolveSelfSendTarget } from './harness/self-send-target.js';
|
|
133
336
|
import { awaitGlobalPersonaLoad, describeMissingPersona, getGlobalPersonaRegistry } from './persona/global-registry.js';
|
|
134
|
-
import { HARNESS_RUN_DEPRECATION_HELP } from './self-dev/harness-run-cli.js';
|
|
135
|
-
import { DEV_PLAN_REPLACEMENT, formatDevPlanOptionHelp } from './self-dev/dev-cli.js';
|
|
136
337
|
import type { InventoryMeta, SortKey } from './llm/local-manager/benchmark/scores.js';
|
|
137
338
|
import { syncServers, SERVICE_NAMES } from './config.js';
|
|
138
339
|
import { getLocalSkills, executeSync } from './sync.js';
|
|
139
|
-
import { showSyncSelector, showSyncProgress } from './selector.js'; // kept for CLI sync subcommand
|
|
140
340
|
import { inspectRemote } from './inspect.js';
|
|
141
341
|
import { showRecentHistory, showSessionDetail, showSkillDetail, showTargetDetail, showStatus } from './history.js';
|
|
142
|
-
import { showDashboard } from './dashboard/index.js';
|
|
143
342
|
import { initTui, closeTui } from './tui.js';
|
|
343
|
+
import { effectiveRootTuiEntry, extractRootTuiEntry } from './cli/root-tui-entry.js';
|
|
144
344
|
import * as ui from './ui.js';
|
|
145
|
-
import { DEFAULT_REVIEW_BACKEND } from './agent-substrate/acp-reviewer.js';
|
|
146
345
|
import type { ReviewResult } from './agent-substrate/pr-reviewer.js';
|
|
147
346
|
import type { ReviewVerdict } from './agent-mission/review-loop.js';
|
|
148
347
|
import type { SyncMode } from './types.js';
|
|
149
|
-
import {
|
|
150
|
-
import { firstChatGate } from './onboarding/first-chat-gate.js';
|
|
348
|
+
import type { OnboardingStepId } from './onboarding.js';
|
|
151
349
|
import {
|
|
152
350
|
getUserConfig, reloadUserConfig, userConfigPath, saveUserConfig,
|
|
153
351
|
backupUserConfig, backupConfigPath, addRotationEntry, type RotationEntry,
|
|
154
352
|
resolveRoleLlm,
|
|
155
353
|
} from './user-config.js';
|
|
156
354
|
import { reviewReasoningEffort } from './model-tier/review-effort.js';
|
|
157
|
-
import { isKeylessProvider, resolveProviderCredential } from './llm/provider-credentials.js';
|
|
355
|
+
import { configuredOpenGatewayKeys, isKeylessProvider, resolveProviderCredential } from './llm/provider-credentials.js';
|
|
158
356
|
import {
|
|
159
357
|
listSessions, loadSession, deleteSession, resolveSessionId,
|
|
160
358
|
setActiveSessionId, getActiveSessionId,
|
|
161
359
|
lastConversationMessage, isSessionSource,
|
|
162
360
|
} from './session/index.js';
|
|
163
361
|
import { requestSessionTurnControl } from './session/session-turn-control.js';
|
|
164
|
-
import { ensureCliSession, sessionBudget } from './session/chat.js';
|
|
165
362
|
import { suggestProjectForFolder } from './project/project-store.js';
|
|
166
|
-
import { botFromConfig, TelegramBot } from './telegram.js';
|
|
167
363
|
import { acquireTelegramLock, TelegramLockError, defaultLockPath, safeReadLock } from './telegram-lock.js';
|
|
168
364
|
import { basename, join as _joinPath, resolve } from 'node:path';
|
|
169
365
|
import * as nodeReadline from 'node:readline/promises';
|
|
@@ -189,14 +385,13 @@ import { renderKeyHelp, CONTEXT_LABELS, type KeyContext } from './keybindings.js
|
|
|
189
385
|
import { auditKeybindings, renderKeymapAudit } from './keymap-audit.js';
|
|
190
386
|
import { runCodexSetup } from './codex/setup.js';
|
|
191
387
|
import { renderAllModels } from './codex/models.js';
|
|
192
|
-
import { realIO } from './onboarding.js';
|
|
193
388
|
import { inspectActiveProvider, oneLineProvider } from './provider-summary.js';
|
|
194
389
|
import { renderStatusLines, renderPrimaryStatus, renderSecondaryStatus } from './status/bar.js';
|
|
195
390
|
import { initSessionWorkingDir } from './session/working-dir.js';
|
|
196
391
|
import { rewriteBareNexusToStatus } from './cli/nexus-entry.js';
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
|
|
200
395
|
import type { ReviewImage } from './agent-substrate/pr-reviewer.js';
|
|
201
396
|
import {
|
|
202
397
|
describeMissionRouting,
|
|
@@ -218,6 +413,8 @@ function resolveCliDirOption(dir: string): string {
|
|
|
218
413
|
import { cliVersion, setInstallMetadataRootForTesting } from './version/code-revision.js';
|
|
219
414
|
export { cliVersion, setInstallMetadataRootForTesting };
|
|
220
415
|
|
|
416
|
+
|
|
417
|
+
|
|
221
418
|
export const program = new Command();
|
|
222
419
|
program.enablePositionalOptions();
|
|
223
420
|
|
|
@@ -379,8 +576,12 @@ async function runDefaultAskFileLaunchFlow(
|
|
|
379
576
|
import('node:path'),
|
|
380
577
|
import('./self-dev/entrance-registry.js'),
|
|
381
578
|
]);
|
|
382
|
-
|
|
579
|
+
// Read the source bytes ONCE: the same bytes feed the ledger and the launch flow (a read failure → launch 0).
|
|
580
|
+
const askBytes = readFileSync(askPath);
|
|
581
|
+
const askText = askBytes.toString('utf8');
|
|
383
582
|
if (!askText.trim()) throw new Error('--ask 파일 입력이 비었다');
|
|
583
|
+
const { newLaunchUtteranceId, recordLaunchUtterance } = await import('./harness/launch-utterance-ledger.js');
|
|
584
|
+
recordLaunchUtterance({ source: 'ask-file', utterance: askText, rawBytes: askBytes, launchId: newLaunchUtteranceId() });
|
|
384
585
|
const askIo = await import('./self-dev/ask-launch-io.js');
|
|
385
586
|
const askLogRows = await askIo.readAskPreflightLogRows();
|
|
386
587
|
const askLaunchPrep = (await import('./self-dev/launch-preflight.js')).prepareAskLaunch(
|
|
@@ -401,7 +602,7 @@ async function runDefaultAskFileLaunchFlow(
|
|
|
401
602
|
print: (line) => console.error(line),
|
|
402
603
|
log: (event, data, level) => debug.log('dev-pipeline', event, data, { level }),
|
|
403
604
|
readLine: (prompt) => readStdinLine(prompt),
|
|
404
|
-
readFile: (file) => readFileSync(file, 'utf8'),
|
|
605
|
+
readFile: (file) => file === askPath ? askText : readFileSync(file, 'utf8'),
|
|
405
606
|
writeFile: (file, data) => writeFileSync(file, data, 'utf8'),
|
|
406
607
|
cwd: () => process.cwd(),
|
|
407
608
|
now: () => Date.now(),
|
|
@@ -1383,14 +1584,16 @@ registerDoctorCommand(program);
|
|
|
1383
1584
|
registerControlCommands(program);
|
|
1384
1585
|
registerHooksCommands(program);
|
|
1385
1586
|
registerSetupCommand(program);
|
|
1386
|
-
|
|
1387
|
-
.
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1587
|
+
if (INDEX_FAST_ROOT !== '__tui_next__') {
|
|
1588
|
+
program.commands.find(command => command.name() === 'setup')!
|
|
1589
|
+
.option('--terminal', 'Run the terminal onboarding wizard')
|
|
1590
|
+
.hook('preAction', async (_command, action) => {
|
|
1591
|
+
if (action.name() === 'setup' && action.opts().terminal) {
|
|
1592
|
+
const completed = await runOnboardingForCli();
|
|
1593
|
+
process.exit(completed ? 0 : (process.exitCode || 2));
|
|
1594
|
+
}
|
|
1595
|
+
});
|
|
1596
|
+
}
|
|
1394
1597
|
registerStartCommand(program);
|
|
1395
1598
|
registerGroundingSourcesCli(program);
|
|
1396
1599
|
registerGraphCommands(program);
|
|
@@ -1601,6 +1804,8 @@ program
|
|
|
1601
1804
|
)
|
|
1602
1805
|
// Documentation-only — `readDashboardNameFlag` 가 Commander «전»에 argv 에서 걷어낸다.
|
|
1603
1806
|
.option('--name <name>', '대시보드 TUI 의 PTY 행(tui:<pid>)에 별명을 달고 뜬다 — `elanous pty list` 에 보이고 `pty snapshot <name>` 으로 부른다. 뜬 뒤 바꾸려면 `elanous pty rename <ref> <name>`.')
|
|
1807
|
+
.option('--legacy', '기존 대시보드 TUI로 시작한다(--tui classic 의 짧은 표기). 기본 진입도 기존 대시보드이며 새 TUI는 --tui next 로만 연다.')
|
|
1808
|
+
.option('--tui <mode>', '루트 TUI를 명시한다(classic|next). 기본은 classic이고 새 TUI는 --tui next 로 연다. --legacy는 classic의 짧은 표기다.')
|
|
1604
1809
|
.option('--help-all', '시스템 명령을 제외한 모든 최상위 명령 표시');
|
|
1605
1810
|
program.addHelpText('after', acpServerHelpText());
|
|
1606
1811
|
|
|
@@ -2430,7 +2635,8 @@ async function runHarnessMissionLoop(
|
|
|
2430
2635
|
}
|
|
2431
2636
|
}
|
|
2432
2637
|
|
|
2433
|
-
const harnessCmd =
|
|
2638
|
+
const harnessCmd = (INDEX_FAST_ROOT ? new Command('harness')
|
|
2639
|
+
: (require('./harness/harness-cli-command.js') as typeof import('./harness/harness-cli-command.js')).installHarnessCliCommand(program, {
|
|
2434
2640
|
registerSink: async (surface) => { await (await import('./domains/standalone-log-sink.js')).registerStandaloneLogSink(surface); },
|
|
2435
2641
|
resolveSurface: async () => {
|
|
2436
2642
|
const { getHarnessSpace, harnessSpaceSurface } = await import('./harness/harness-space.js');
|
|
@@ -2444,9 +2650,65 @@ const harnessCmd = installHarnessCliCommand(program, {
|
|
|
2444
2650
|
// (그 함수는 planStaged dispatch → 대표 2026-09-04 은퇴한 staged 하니스로 간다).
|
|
2445
2651
|
// ⇒ 즉 이 «한 줄»이 은퇴를 되돌린다. 주입 자리는 시험용으로 남는다.
|
|
2446
2652
|
mission: async (missionId, opts) => {
|
|
2447
|
-
await dispatchSolveMission({ mission_id: missionId, ...opts });
|
|
2653
|
+
await (await import('./skills/tools/solve-mission.js')).dispatchSolveMission({ mission_id: missionId, ...opts });
|
|
2448
2654
|
},
|
|
2449
2655
|
missionLoop: runHarnessMissionLoop,
|
|
2656
|
+
}));
|
|
2657
|
+
|
|
2658
|
+
let podAskSnapshot: string | undefined;
|
|
2659
|
+
let podAskSnapshotCleanup: (() => void) | undefined;
|
|
2660
|
+
harnessCmd.hook('preAction', async (_parent, action) => {
|
|
2661
|
+
if (action.name() === 'ask' && action.opts().substrate === 'pod' && typeof action.args[0] === 'string' && !isGoalAuthorFileName(basename(action.args[0]))) {
|
|
2662
|
+
// Read the source once; onPod and its orchestrator consume the same private snapshot.
|
|
2663
|
+
const askBytes = readFileSync(action.args[0]!);
|
|
2664
|
+
const askText = askBytes.toString('utf8');
|
|
2665
|
+
if (!askText.trim()) throw new Error('--ask 파일 입력이 비었다');
|
|
2666
|
+
const { mkdtempSync, writeFileSync, rmSync } = await import('node:fs');
|
|
2667
|
+
const { tmpdir } = await import('node:os');
|
|
2668
|
+
const { join } = await import('node:path');
|
|
2669
|
+
const snapshotDir = mkdtempSync(join(tmpdir(), 'elanous-ask-snapshot-'));
|
|
2670
|
+
try {
|
|
2671
|
+
const snapshot = join(snapshotDir, basename(action.args[0]!));
|
|
2672
|
+
writeFileSync(snapshot, askBytes, { mode: 0o600 });
|
|
2673
|
+
podAskSnapshot = snapshotDir;
|
|
2674
|
+
podAskSnapshotCleanup = () => {
|
|
2675
|
+
try { rmSync(snapshotDir, { recursive: true, force: true }); }
|
|
2676
|
+
catch (error) { console.error(`[launch-utterance] snapshot cleanup failed: ${String(error)}`); }
|
|
2677
|
+
};
|
|
2678
|
+
process.once('exit', podAskSnapshotCleanup);
|
|
2679
|
+
action.processedArgs[0] = snapshot;
|
|
2680
|
+
} catch (error) {
|
|
2681
|
+
rmSync(snapshotDir, { recursive: true, force: true });
|
|
2682
|
+
throw error;
|
|
2683
|
+
}
|
|
2684
|
+
const { newLaunchUtteranceId, recordLaunchUtterance } = await import('./harness/launch-utterance-ledger.js');
|
|
2685
|
+
recordLaunchUtterance({ source: 'ask-file', utterance: askText, rawBytes: askBytes, launchId: newLaunchUtteranceId() });
|
|
2686
|
+
return;
|
|
2687
|
+
}
|
|
2688
|
+
if (action.name() !== 'say') return;
|
|
2689
|
+
try {
|
|
2690
|
+
const { consumeHandLaunchId, recordLaunchUtterance } = await import('./harness/launch-utterance-ledger.js');
|
|
2691
|
+
const argv = (action.args as string[]).map(String);
|
|
2692
|
+
if (argv.length === 0) return; // nothing was received — no empty start row
|
|
2693
|
+
// New ID per process; only the explicit hand→say pair (same sentence sha ⊕ same run) inherits, once —
|
|
2694
|
+
// and then records the hand's exact original text (recovers a failed hand-parent append in this instance).
|
|
2695
|
+
const { launchId, utterance } = consumeHandLaunchId(argv.join(' '), process.env);
|
|
2696
|
+
recordLaunchUtterance({ source: 'say', utterance, argv, launchId, dryRun: action.opts().dryRun === true });
|
|
2697
|
+
} catch (error) {
|
|
2698
|
+
try { debug.log('harness.launch-utterance', 'prepare-failed', { operation: 'say-hook', reason: String(error) }, { level: 'warn' }); } catch { /* fail-soft */ }
|
|
2699
|
+
}
|
|
2700
|
+
});
|
|
2701
|
+
harnessCmd.hook('postAction', async (_parent, action) => {
|
|
2702
|
+
if (action.name() !== 'ask' || !podAskSnapshot) return;
|
|
2703
|
+
try {
|
|
2704
|
+
const { rmSync } = await import('node:fs');
|
|
2705
|
+
rmSync(podAskSnapshot, { recursive: true, force: true });
|
|
2706
|
+
if (podAskSnapshotCleanup) process.removeListener('exit', podAskSnapshotCleanup);
|
|
2707
|
+
podAskSnapshot = undefined;
|
|
2708
|
+
podAskSnapshotCleanup = undefined;
|
|
2709
|
+
} catch (error) {
|
|
2710
|
+
console.error(`[launch-utterance] snapshot cleanup failed: ${String(error)}`);
|
|
2711
|
+
}
|
|
2450
2712
|
});
|
|
2451
2713
|
|
|
2452
2714
|
// (internal) 데몬이 dev-harness 를 subprocess 로 위임(#24 A) — 하니스 동기 op 가 데몬 이벤트루프를
|
|
@@ -2484,6 +2746,7 @@ harnessCmd
|
|
|
2484
2746
|
try { process.stdout.write(line, () => process.exit(code)); }
|
|
2485
2747
|
catch { process.exit(code); }
|
|
2486
2748
|
};
|
|
2749
|
+
const { emitDetachedProgress } = await import('./cli/agent-cli.js');
|
|
2487
2750
|
const detachedCtx = {
|
|
2488
2751
|
cwd: process.cwd(),
|
|
2489
2752
|
signal: new AbortController().signal,
|
|
@@ -3216,6 +3479,7 @@ export async function runHarnessOrchestrateExecution(
|
|
|
3216
3479
|
const { prepareOrchestrateDecomposeGoals } = await import('./self-dev/self-orchestrate-runtime.js');
|
|
3217
3480
|
return prepareOrchestrateDecomposeGoals(input as never) as Promise<HarnessOrchestratePreparedGoals>;
|
|
3218
3481
|
});
|
|
3482
|
+
const { buildOrchestrateDecomposePrepareArgs } = await import('./self-dev/self-orchestrate-runtime.js');
|
|
3219
3483
|
const prepared = await prepareGoals(buildOrchestrateDecomposePrepareArgs({
|
|
3220
3484
|
request,
|
|
3221
3485
|
goals,
|
|
@@ -4446,7 +4710,7 @@ selfCmd
|
|
|
4446
4710
|
.option('--fixed-shard-distribution', '--shards N 과 함께만: RSS 사전 측정 없이 정렬된 파일을 N 조각에 라운드로빈 고정 배정한다(opt-in · 메모리 보증 아님 · 조각 타임아웃/OOM = unmeasured)')
|
|
4447
4711
|
.option('--include-importers', '변경 모듈을 가져오는 importer 시험도 실행한다 (기본 caller 한도 밖까지)')
|
|
4448
4712
|
.option('--remote [host]', 'GATE-REMOTE — 같은 커밋을 원격 호스트(기본 config gateRemote.host=node-b)에서 돌리고 결과만 가져온다(깨끗한 트리 · --pr 은 로컬)')
|
|
4449
|
-
.option('--local', '원격
|
|
4713
|
+
.option('--local', '원격 실행을 끄고 명시적으로 로컬에서 돌린다')
|
|
4450
4714
|
.option('--artifact-dir <dir>', '조각별 지금/기준 JUnit ⊕ summary.json 을 이 디렉토리에 남긴다(판정 불변 · JUnit 은 --shards 경로만 · 원격 실행이면 그 호스트에서 가져온다)')
|
|
4451
4715
|
.action(async (opts: { changed?: boolean; base?: string; pr?: string; shards?: string | boolean; fixedShardDistribution?: boolean; includeImporters?: boolean; remote?: string | boolean; local?: boolean; artifactDir?: string }) => {
|
|
4452
4716
|
if (!opts.changed && opts.shards === undefined) { ui.error('self gate requires --changed or --shards'); process.exitCode = 2; return; }
|
|
@@ -4482,8 +4746,8 @@ selfCmd
|
|
|
4482
4746
|
if (topLevel.status !== 0) throw new Error(`git rev-parse --show-toplevel failed: ${topLevel.stderr.trim() || `rc=${topLevel.status}`}`);
|
|
4483
4747
|
const repo = topLevel.stdout.trim();
|
|
4484
4748
|
// Only a committed --base range is reproducible on another host: the default mode measures uncommitted files, --pr
|
|
4485
|
-
// reads files through gh on this host, and the remote checkout runs from the repository root —
|
|
4486
|
-
//
|
|
4749
|
+
// reads files through gh on this host, and the remote checkout runs from the repository root — these cases
|
|
4750
|
+
// fall back locally for automatic placement; an explicitly requested remote run is unmeasured.
|
|
4487
4751
|
const { realpathSync } = await import('node:fs');
|
|
4488
4752
|
const localOnlyReason = opts.pr ? 'self gate --pr reads PR files through gh on this host'
|
|
4489
4753
|
: !opts.base ? 'self gate without --base measures uncommitted files on this host'
|
|
@@ -4516,7 +4780,7 @@ selfCmd
|
|
|
4516
4780
|
if (outcome.kind === 'ran') {
|
|
4517
4781
|
target.fetch = fetchRemoteGateArtifacts({ host, remoteDir: target.dir, localDir: resolveArtifactDir(opts.artifactDir!, process.cwd()), ssh: runner.ssh });
|
|
4518
4782
|
} else if (outcome.kind === 'infra') {
|
|
4519
|
-
// The run may have started before it broke — remove the host-side dir;
|
|
4783
|
+
// The run may have started before it broke — remove the host-side dir; remote failure stays unmeasured.
|
|
4520
4784
|
try { runner.ssh(host, remoteArtifactCleanupScript(target.dir), 30_000); } catch { /* best effort */ }
|
|
4521
4785
|
}
|
|
4522
4786
|
}) satisfies NonNullable<import('./self-implement/gate-remote.js').DispatchOptions['onRemoteOutcome']>,
|
|
@@ -4524,12 +4788,14 @@ selfCmd
|
|
|
4524
4788
|
});
|
|
4525
4789
|
} catch (error) {
|
|
4526
4790
|
const reason = error instanceof Error ? error.message : String(error);
|
|
4527
|
-
if (opts.
|
|
4528
|
-
ui.error(`self gate remote unmeasured — ${reason.replace(/\s+/g, ' ').trim()}`);
|
|
4529
|
-
process.exitCode = 1;
|
|
4530
|
-
} else {
|
|
4791
|
+
if (opts.local) {
|
|
4531
4792
|
ui.error(`self gate dispatch failed: ${reason}`);
|
|
4532
4793
|
process.exitCode = runLocal();
|
|
4794
|
+
} else {
|
|
4795
|
+
ui.error(opts.remote !== undefined
|
|
4796
|
+
? `self gate remote unmeasured — ${reason.replace(/\s+/g, ' ').trim()}`
|
|
4797
|
+
: `self gate dispatch failed: ${reason}`);
|
|
4798
|
+
process.exitCode = 1;
|
|
4533
4799
|
}
|
|
4534
4800
|
}
|
|
4535
4801
|
// 원격에서 돌았으면 그 호스트의 산출을 가져와 같은 꼴로 썼다 — 못 가져왔으면 «조용히» 비우지 않고 summary 에 이유를 적는다(판정 불변).
|
|
@@ -4756,7 +5022,7 @@ const selfOrchestrateCmd = selfCmd
|
|
|
4756
5022
|
.option('--no-pod-rebuild', 'pod: 이미지 판(elanous.commit)이 HEAD 와 달라도 다시 굽지 않는다 — 측정은 «이미지 판»을 잰다')
|
|
4757
5023
|
.option('--pod-pass-env <keys>', 'pod: 호스트 env 에서 Pod 로 넘길 키(쉼표) — 예 OPENROUTER_API_KEY,ANTHROPIC_API_KEY(벤치마크 과금 경로)')
|
|
4758
5024
|
.option('--bench-arms <spec>', 'pod 벤치마크: 골 1개를 팔마다 «라벨 한 줄만 다르게» 복제해 동시에 — "id=provider[:model][@KEY+KEY];…" (예 codex=openai-codex;or-kimi=openrouter:openrouter/moonshotai/kimi-k3@OPENROUTER_API_KEY) · --auto-merge 거부 · RFC fleet 슈퍼바이저 §A3')
|
|
4759
|
-
.addOption(new Option('--child-llm-provider <id>', 'pod: 구현 자식 LLM provider(openai-codex|grok|openrouter|anthropic|bedrock|glm) — 하니스 --child-llm-provider 가 이 자리로 온다(10-05)').hideHelp())
|
|
5025
|
+
.addOption(new Option('--child-llm-provider <id>', 'pod: 구현 자식 LLM provider(openai-codex|grok|openrouter|opengateway|anthropic|bedrock|glm) — 하니스 --child-llm-provider 가 이 자리로 온다(10-05)').hideHelp())
|
|
4760
5026
|
.addOption(new Option('--child-llm-model <id>', 'pod: 구현 자식 LLM model(--child-llm-provider 와 함께)').hideHelp())
|
|
4761
5027
|
.addOption(new Option('--child-llm-effort <level>', 'pod: 구현 자식 추론 노력(--child-llm-provider 와 함께)').hideHelp())
|
|
4762
5028
|
.option('--help-all', '모든 orchestrate 옵션 표시')
|
|
@@ -4834,7 +5100,7 @@ const selfOrchestrateCmd = selfCmd
|
|
|
4834
5100
|
let parentRequest: string | undefined;
|
|
4835
5101
|
const request = normalizeOrchestrateRequest(joined);
|
|
4836
5102
|
if (opts.decompose) parentRequest = request;
|
|
4837
|
-
const { prepareOrchestrateDecomposeGoals } = await import('./self-dev/self-orchestrate-runtime.js');
|
|
5103
|
+
const { prepareOrchestrateDecomposeGoals, buildOrchestrateDecomposePrepareArgs } = await import('./self-dev/self-orchestrate-runtime.js');
|
|
4838
5104
|
const prepared = await prepareOrchestrateDecomposeGoals(buildOrchestrateDecomposePrepareArgs({
|
|
4839
5105
|
request,
|
|
4840
5106
|
goals: goalTexts.map((feature) => ({ feature, ...promoteDefaults })),
|
|
@@ -5046,11 +5312,24 @@ const selfOrchestrateCmd = selfCmd
|
|
|
5046
5312
|
const grokKeyNames = ['XAI_API_KEY', 'GROK_API_KEY', 'GROK_CODE_XAI_API_KEY'];
|
|
5047
5313
|
// 명시 계정은 사람의 선택 — 공급자 폴백과 계정 브로커를 우회한다.
|
|
5048
5314
|
const explicitPodAccount = (opts as { podAccount?: string }).podAccount;
|
|
5049
|
-
const
|
|
5315
|
+
const ownerMirrorRaw = process.env.ELANOUS_REMOTE_CODEX_ACCOUNTS;
|
|
5316
|
+
let ownerMirrorAccounts: import('./task-orchestrator/surfaces/pod-account-broker.js').OwnerCodexMirrorAccount[] | undefined;
|
|
5317
|
+
if (ownerMirrorRaw !== undefined) {
|
|
5318
|
+
try { ownerMirrorAccounts = (await import('./task-orchestrator/surfaces/pod-account-broker.js')).parseOwnerCodexMirrorAccounts(ownerMirrorRaw); }
|
|
5319
|
+
catch { ui.error('pod: HQ Codex 미러 계정 목록이 유효하지 않다'); process.exit(2); }
|
|
5320
|
+
const { freshOwnerCodexMirrorAccounts } = await import('./task-orchestrator/surfaces/pod-account-broker.js');
|
|
5321
|
+
const fresh = freshOwnerCodexMirrorAccounts(ownerMirrorAccounts);
|
|
5322
|
+
for (const { account } of ownerMirrorAccounts.filter(({ account }) => !fresh.some((item) => item.account === account))) {
|
|
5323
|
+
debug.log('self-implement.pod', 'owner-access-mirror-excluded', { account, reason: 'access-expiring' });
|
|
5324
|
+
}
|
|
5325
|
+
ownerMirrorAccounts = fresh;
|
|
5326
|
+
if (fresh.length === 0) { ui.error('pod: HQ Codex 미러 access token 이 모두 3시간 안에 만료된다'); process.exit(2); }
|
|
5327
|
+
}
|
|
5328
|
+
const ownerMirrorAccount = ownerMirrorAccounts?.[0]?.account ?? process.env.ELANOUS_REMOTE_CODEX_ACCOUNT?.trim();
|
|
5050
5329
|
const childProvider = opts as { childLlmProvider?: string };
|
|
5051
5330
|
const requestedChildProvider = childProvider.childLlmProvider?.trim();
|
|
5052
|
-
if (ownerMirrorAccount && explicitPodAccount && explicitPodAccount
|
|
5053
|
-
ui.error(`pod: HQ 미러
|
|
5331
|
+
if (ownerMirrorAccount && explicitPodAccount && !(ownerMirrorAccounts?.some(({ account }) => account === explicitPodAccount) ?? explicitPodAccount === ownerMirrorAccount)) {
|
|
5332
|
+
ui.error(`pod: HQ 미러 계정 목록에 --pod-account ${explicitPodAccount} 이 없다`);
|
|
5054
5333
|
process.exit(2);
|
|
5055
5334
|
}
|
|
5056
5335
|
if (ownerMirrorAccount && requestedChildProvider && requestedChildProvider !== 'openai-codex') {
|
|
@@ -5101,7 +5380,7 @@ const selfOrchestrateCmd = selfCmd
|
|
|
5101
5380
|
? 'pod: --child-llm-model/--child-llm-effort 는 --child-llm-provider 와 함께'
|
|
5102
5381
|
: named && benchArms
|
|
5103
5382
|
? 'pod: --child-llm-provider 는 --bench-arms 와 함께 못 쓴다(팔마다 모델이 하나다)'
|
|
5104
|
-
: (named === 'grok' || named === 'openrouter' || named === 'anthropic' || named === 'bedrock' || named === 'glm') && explicitPodAccount
|
|
5383
|
+
: (named === 'grok' || named === 'openrouter' || named === 'opengateway' || named === 'anthropic' || named === 'bedrock' || named === 'glm') && explicitPodAccount
|
|
5105
5384
|
? `pod: --child-llm-provider ${named} 은 --pod-account 와 함께 못 쓴다(그것은 codex 계정을 고정한다)`
|
|
5106
5385
|
: undefined;
|
|
5107
5386
|
if (refuse) { ui.error(refuse); debug.log('self-implement.pod', 'child-provider-refused', { provider: named ?? null, reason: refuse }); process.exit(2); }
|
|
@@ -5163,19 +5442,27 @@ const selfOrchestrateCmd = selfCmd
|
|
|
5163
5442
|
if (namedChild === 'openrouter' && !openrouterKeyPresent) {
|
|
5164
5443
|
try { openrouterKeyPresent = Boolean(readPodKeyFile(podJoin(podHome(), '.cache', 'openrouter_api_key'), 'utf8').trim()); } catch { /* missing host cache */ }
|
|
5165
5444
|
}
|
|
5445
|
+
const openGatewayKeyPresent = namedChild === 'opengateway' && Boolean(
|
|
5446
|
+
(await import('./config.js')).getOpenGatewayApiKey()?.trim()
|
|
5447
|
+
|| configuredOpenGatewayKeys(getUserConfig().llm).length);
|
|
5166
5448
|
// POD-ANTHROPIC-PROVIDER — 제품 자격 해석(`getAnthropicApiKey` · 키 캐시 → env)으로 «있나»만 본다(값은 안 싣는다).
|
|
5167
5449
|
const anthropicKeyPresent = namedChild === 'anthropic' && Boolean((await import('./config.js')).getAnthropicApiKey()?.trim());
|
|
5168
5450
|
const namedChildDecision = podNamedChildProvider(namedChild, {
|
|
5169
5451
|
grokSubscription: namedChild === 'grok' && credential?.kind === 'subscription' && (grokSubscriptionUsable || namedGrokUsable().usable),
|
|
5170
5452
|
grokApiKey: credential?.kind === 'api_key' && grokApiKeyOptIn,
|
|
5171
5453
|
openrouterKey: openrouterKeyPresent,
|
|
5454
|
+
openGatewayKey: openGatewayKeyPresent,
|
|
5172
5455
|
anthropicKey: anthropicKeyPresent,
|
|
5173
5456
|
}, (opts as { childLlmModel?: string }).childLlmModel);
|
|
5174
5457
|
if (namedChildDecision.refuse) { ui.error(namedChildDecision.refuse); debug.log('self-implement.pod', 'child-provider-refused', { provider: namedChild, reason: namedChildDecision.refuse }); process.exit(2); }
|
|
5175
5458
|
// A named codex child must stay codex — the plan may not fall back to grok (post-review must-fix).
|
|
5176
5459
|
const namedCodex = namedChildDecision.provider === 'openai-codex';
|
|
5177
5460
|
let planCandidates = inspectCodexRotation().candidates;
|
|
5178
|
-
if (
|
|
5461
|
+
if (ownerMirrorAccounts) {
|
|
5462
|
+
const { selectOwnerCodexMirrorCandidates } = await import('./task-orchestrator/surfaces/pod-account-broker.js');
|
|
5463
|
+
try { planCandidates = selectOwnerCodexMirrorCandidates(planCandidates, ownerMirrorAccounts); }
|
|
5464
|
+
catch { ui.error('pod: HQ Codex 미러 계정 일부가 원격 auth-store 후보에 없다'); process.exit(2); }
|
|
5465
|
+
} else if (ownerMirrorAccount) {
|
|
5179
5466
|
const used = process.env.ELANOUS_REMOTE_CODEX_USED_PERCENT;
|
|
5180
5467
|
const parsedUsed = used && used !== 'unknown' ? Number(used) : undefined;
|
|
5181
5468
|
const threshold = Number(process.env.ELANOUS_REMOTE_CODEX_THRESHOLD_PERCENT);
|
|
@@ -5187,12 +5474,14 @@ const selfOrchestrateCmd = selfCmd
|
|
|
5187
5474
|
planCandidates = ownerCodexMirrorCandidate(planCandidates, ownerMirrorAccount, parsedUsed !== undefined && Number.isFinite(parsedUsed) ? parsedUsed : undefined);
|
|
5188
5475
|
if (planCandidates.length === 0) { ui.error(`pod: HQ Codex 미러 계정 ${ownerMirrorAccount} 이 원격 auth-store 후보에 없다`); process.exit(2); }
|
|
5189
5476
|
}
|
|
5190
|
-
const plan: import('./task-orchestrator/surfaces/pod-account-broker.js').PodProviderPlan | null = namedChildDecision.provider === 'openrouter' || namedChildDecision.provider === 'anthropic' || namedChildDecision.provider === 'bedrock' || namedChildDecision.provider === 'glm' ? null : namedChildDecision.provider === 'grok'
|
|
5477
|
+
const plan: import('./task-orchestrator/surfaces/pod-account-broker.js').PodProviderPlan | null = namedChildDecision.provider === 'openrouter' || namedChildDecision.provider === 'opengateway' || namedChildDecision.provider === 'anthropic' || namedChildDecision.provider === 'bedrock' || namedChildDecision.provider === 'glm' ? null : namedChildDecision.provider === 'grok'
|
|
5191
5478
|
? { provider: 'grok', excluded: [], grokSubscriptionEligible: credential?.kind === 'subscription' }
|
|
5192
5479
|
: planPodProvider({
|
|
5193
5480
|
codexCandidates: planCandidates,
|
|
5194
5481
|
// Per-account caps (대표 default:97) override the Pod default cap — without them default was dropped at 60%.
|
|
5195
|
-
thresholdPercentByAccount:
|
|
5482
|
+
thresholdPercentByAccount: ownerMirrorAccounts
|
|
5483
|
+
? Object.fromEntries(ownerMirrorAccounts.map(({ account, thresholdPercent }) => [account, thresholdPercent]))
|
|
5484
|
+
: ownerMirrorAccount
|
|
5196
5485
|
? { [ownerMirrorAccount]: Number(process.env.ELANOUS_REMOTE_CODEX_THRESHOLD_PERCENT) }
|
|
5197
5486
|
: launchPolicy.llm?.codexAccountRotationThresholdPercentByAccount,
|
|
5198
5487
|
// 대표 한도 정책 한 값(`llm.codexQuotaPolicy`) — 크레딧·폴백을 같이 정한다.
|
|
@@ -5213,7 +5502,7 @@ const selfOrchestrateCmd = selfCmd
|
|
|
5213
5502
|
})() } : {}),
|
|
5214
5503
|
});
|
|
5215
5504
|
if (plan?.provider === null) { ui.error(`pod: 쓸 codex 계정이 없다 — ${plan.reasons.join(' · ')}${namedCodex ? ' · child provider 를 openai-codex 로 지정해 grok 으로 넘기지 않는다' : ''} · 계정을 명시하려면 --pod-account <이름>`); process.exit(2); }
|
|
5216
|
-
podProvider = namedChildDecision.provider === 'openrouter' || namedChildDecision.provider === 'anthropic' || namedChildDecision.provider === 'bedrock' || namedChildDecision.provider === 'glm' ? namedChildDecision.provider : plan!.provider!;
|
|
5505
|
+
podProvider = namedChildDecision.provider === 'openrouter' || namedChildDecision.provider === 'opengateway' || namedChildDecision.provider === 'anthropic' || namedChildDecision.provider === 'bedrock' || namedChildDecision.provider === 'glm' ? namedChildDecision.provider : plan!.provider!;
|
|
5217
5506
|
if (plan?.provider === 'openai-codex') {
|
|
5218
5507
|
accountBroker = makePodAccountBroker({ usable: plan.accounts, excluded: plan.excluded });
|
|
5219
5508
|
rotationAccounts = plan.accounts;
|
|
@@ -5226,6 +5515,10 @@ const selfOrchestrateCmd = selfCmd
|
|
|
5226
5515
|
const model = (opts as { childLlmModel?: string }).childLlmModel!.trim();
|
|
5227
5516
|
debug.log('self-implement.pod', 'provider-named', { provider: 'openrouter', model, openrouterKeyPresent: true });
|
|
5228
5517
|
if (!opts.json) ui.info(`[pod] child provider = openrouter(모델 ${model}) — 발사 인자로 지정됨`);
|
|
5518
|
+
} else if (namedChildDecision.provider === 'opengateway') {
|
|
5519
|
+
const model = (opts as { childLlmModel?: string }).childLlmModel!.trim();
|
|
5520
|
+
debug.log('self-implement.pod', 'provider-named', { provider: 'opengateway', model, openGatewayKeyPresent: true, billing: 'api-key' });
|
|
5521
|
+
if (!opts.json) ui.info(`[pod] child provider = opengateway(모델 ${model}) — 발사 인자로 지정됨 · API 키 과금`);
|
|
5229
5522
|
} else if (namedChildDecision.provider === 'anthropic') {
|
|
5230
5523
|
const model = (opts as { childLlmModel?: string }).childLlmModel?.trim() || null;
|
|
5231
5524
|
// ⓔ 과금 관측 — anthropic 은 API 키 과금(구독 아님). 새 예산 체계는 없다 · 관측 한 줄만.
|
|
@@ -5254,7 +5547,7 @@ const selfOrchestrateCmd = selfCmd
|
|
|
5254
5547
|
if (!opts.json) ui.info(`[pod] 쓸 codex 계정 없음(${plan.excluded.map((x) => `${x.name}: ${x.why}`).join(' · ')}) → grok 으로(모델 ${model})`);
|
|
5255
5548
|
}
|
|
5256
5549
|
}
|
|
5257
|
-
const passEnv = podProvider === 'grok' ? requestedPassEnv.filter((key) => !grokKeyNames.includes(key)) : podProvider === 'openrouter' ? [...new Set([...requestedPassEnv, 'OPENROUTER_API_KEY'])] : podProvider === 'anthropic' ? [...new Set([...requestedPassEnv, 'ANTHROPIC_API_KEY'])] : requestedPassEnv;
|
|
5550
|
+
const passEnv = podProvider === 'grok' ? requestedPassEnv.filter((key) => !grokKeyNames.includes(key)) : podProvider === 'openrouter' ? [...new Set([...requestedPassEnv, 'OPENROUTER_API_KEY'])] : podProvider === 'opengateway' ? [...new Set([...requestedPassEnv, 'OPENGATEWAY_API_KEY'])] : podProvider === 'anthropic' ? [...new Set([...requestedPassEnv, 'ANTHROPIC_API_KEY'])] : requestedPassEnv;
|
|
5258
5551
|
const podSourceSpec = (opts as { podSource?: string }).podSource;
|
|
5259
5552
|
const repairBaseHead = (opts as { repairCommitOnly?: string }).repairCommitOnly;
|
|
5260
5553
|
if (repairBaseHead && (!/^pr:[1-9]\d*$/.test(podSourceSpec ?? '') || !/^[0-9a-f]{40}$/.test(repairBaseHead) || opts.autoMerge || opts.openPr || goalTexts.length !== 1)) {
|
|
@@ -5563,7 +5856,7 @@ selfCmd
|
|
|
5563
5856
|
.action(async (space: string | undefined, opts: { stop?: boolean; memo?: string; run?: string; includeStale?: boolean; readWait?: string }) => {
|
|
5564
5857
|
const { classifyRunScreenMissing, queryRunScreenKey, listRunLedgers } = await import('./self-implement/run-ledger.js');
|
|
5565
5858
|
const { getPtyManifest, listPtyManifestRows } = await import('./pty-shell/pty-manifest.js');
|
|
5566
|
-
const { readPodFragment, podFragmentFinished, listPodFragmentsForRun, dispatchPodSelfSend } = await import('./harness/self-send-target.js');
|
|
5859
|
+
const { readPodFragment, podFragmentFinished, listPodFragmentsForRun, dispatchPodSelfSend, resolveSelfSendTarget } = await import('./harness/self-send-target.js');
|
|
5567
5860
|
const { listHarnessScreens, readHarnessHeartbeat } = await import('./harness/harness-screen.js');
|
|
5568
5861
|
const decision = decideSelfSend({ space, opts, now: Date.now() }, {
|
|
5569
5862
|
resolveRunScreen: (runId) => {
|
|
@@ -5892,7 +6185,7 @@ selfCmd
|
|
|
5892
6185
|
.option('--acp', '⭐ ACP(독립 프로세스)로 리뷰 — API 대신 선택한 ACP 백엔드로 독립 리뷰')
|
|
5893
6186
|
.option('--acp-model <alias>', 'ACP 모델 tier (지정 시 고정, 생략 시 선택한 백엔드 기본값)')
|
|
5894
6187
|
.option('--acp-backend <id>', 'ACP 백엔드 id (기본: 설정 acp.reviewBackend, 없으면 공유 기본값)')
|
|
5895
|
-
.option('--acp-timeout <sec>', 'ACP 리뷰 1턴 최대 대기 초(초과 시 cancel·기본 300)'
|
|
6188
|
+
.option('--acp-timeout <sec>', 'ACP 리뷰 1턴 최대 대기 초(초과 시 cancel·기본 claude 600 · 그 외 300)')
|
|
5896
6189
|
.option('--context <path>', '리뷰어가 함께 판단할 레포 상대 파일 경로(반복 가능)', (value: string, previous: string[] = []) => [...previous, value])
|
|
5897
6190
|
.option('--context-text <text>', '리뷰어가 함께 판단할 텍스트(반복 가능)', (value: string, previous: string[] = []) => [...previous, value])
|
|
5898
6191
|
.option('--json', '구조화 출력 {pr, verdict, mustFix, shouldFix, reviewed}')
|
|
@@ -5908,10 +6201,10 @@ selfCmd
|
|
|
5908
6201
|
const { spawnSync } = await import('node:child_process');
|
|
5909
6202
|
const { reviewPullRequest, renderReview } = await import('./agent-substrate/pr-reviewer.js');
|
|
5910
6203
|
const { createRepositoryReferencedFileReader } = await import('./self-implement/goal-file-reader.js');
|
|
5911
|
-
const { streamLLM, getProvider } = await import('./llm.js');
|
|
6204
|
+
const { streamLLM, getProvider, getProviderForConfig } = await import('./llm.js');
|
|
5912
6205
|
const { registerStandaloneLogSink } = await import('./domains/standalone-log-sink.js');
|
|
5913
6206
|
const { debug } = await import('./debug/log.js');
|
|
5914
|
-
const { runSelfReviewCliCommand, reviewerContextArgs, selfReviewJsonLine } = await import('./agent-substrate/self-review-cli.js');
|
|
6207
|
+
const { apiReviewModelFromRoleSpec, runSelfReviewCliCommand, reviewerContextArgs, selfReviewJsonLine } = await import('./agent-substrate/self-review-cli.js');
|
|
5915
6208
|
const { subscriptionReviewerAvailability } = await import('./self-dev/review-provider-fallback.js');
|
|
5916
6209
|
const { makeLazyAcpReviewLLM: makeRoleAcpReviewLLM } = await import('./agent-substrate/acp-reviewer.js');
|
|
5917
6210
|
const { getOpenRouterApiKey: getOpenRouterApiKeyForReview } = await import('./config.js');
|
|
@@ -5922,8 +6215,12 @@ selfCmd
|
|
|
5922
6215
|
// The seam decides whether it applies (only without an explicit reviewer flag).
|
|
5923
6216
|
const { loadLlmPolicy, resolveSubscriptionReviewer } = await import('./policy/llm-policy.js');
|
|
5924
6217
|
const roleReviewerSelection = resolveSubscriptionReviewer(loadLlmPolicy(), getUserConfig().roleLlm);
|
|
6218
|
+
const reviewRoleSpec = getUserConfig().roleLlm?.review;
|
|
6219
|
+
const configuredReviewModel = apiReviewModelFromRoleSpec(reviewRoleSpec);
|
|
5925
6220
|
const { results, failed } = await runSelfReviewCliCommand(prArgs, {
|
|
5926
6221
|
...opts,
|
|
6222
|
+
...(configuredReviewModel ? { configuredReviewModel } : {}),
|
|
6223
|
+
...(configuredReviewModel && reviewRoleSpec?.provider ? { configuredReviewProvider: reviewRoleSpec.provider } : {}),
|
|
5927
6224
|
...(configuredAcpBackend ? { configuredAcpBackend } : {}),
|
|
5928
6225
|
...(roleReviewerSelection ? { roleReviewer: roleReviewerSelection.spec } : {}),
|
|
5929
6226
|
...(contextOrder.length > 0 ? { contextOrder } : {}),
|
|
@@ -5947,15 +6244,29 @@ selfCmd
|
|
|
5947
6244
|
// 명시 `--model` 이면 provider 를 그 모델의 것으로 «고정»한다 — 라우터 폴백(grok 등)으로 조용히 넘어가지 않고 오류로 낸다.
|
|
5948
6245
|
makeApiLlm: (model, o) => {
|
|
5949
6246
|
const effort = reviewReasoningEffort(resolveRoleLlm('review'));
|
|
5950
|
-
return (prompt: string) =>
|
|
5951
|
-
|
|
6247
|
+
return (prompt: string) => {
|
|
6248
|
+
let configuredProvider;
|
|
6249
|
+
if (o?.providerName) {
|
|
6250
|
+
try {
|
|
6251
|
+
const config = getUserConfig();
|
|
6252
|
+
configuredProvider = getProviderForConfig({ ...config, llm: { ...config.llm, provider: o.providerName } }, model);
|
|
6253
|
+
} catch (error) {
|
|
6254
|
+
debug.log('self-review', 'role-review-config-provider-error', {
|
|
6255
|
+
provider: o.providerName, model, source: 'roleLlm.review',
|
|
6256
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
6257
|
+
}, { level: 'error' });
|
|
6258
|
+
throw error;
|
|
6259
|
+
}
|
|
6260
|
+
}
|
|
6261
|
+
return streamLLM([{ role: 'user', content: prompt }], () => {}, {
|
|
5952
6262
|
model,
|
|
5953
6263
|
// ⛔ 어댑터 기본 2048 은 리뷰 응답을 자른다(VERDICT/MUST-FIX 줄이 잘리면 reviewed=false 로 접힌다).
|
|
5954
6264
|
maxTokens: 16_000,
|
|
5955
|
-
...(o?.pinProvider ? { provider: getProvider(model) } : {}),
|
|
6265
|
+
...(configuredProvider ? { provider: configuredProvider } : o?.pinProvider ? { provider: getProvider(model) } : {}),
|
|
5956
6266
|
...(o?.onResolved ? { onResolvedProvider: o.onResolved } : {}),
|
|
5957
6267
|
...(effort ? { reasoningEffort: effort } : {}),
|
|
5958
6268
|
});
|
|
6269
|
+
};
|
|
5959
6270
|
},
|
|
5960
6271
|
makeAcpLlm: (o) => {
|
|
5961
6272
|
// ⚠️ 동기 팩토리라 여기서 동적 import 를 쓸 수 없다 — 지연 로드해 첫 호출에 붙인다.
|
|
@@ -6508,7 +6819,8 @@ program.command('env').description('환경 감지')
|
|
|
6508
6819
|
// src/agent-mission/·관측 카테고리 agent-mission·U1 핸드오프 용어와 정합) — 최상위 `agent`(single-turn
|
|
6509
6820
|
// chat-with-tools)가 이미 점유해 충돌하므로 그 이름은 못 쓴다. 기존 cron/스크립트(`elanous codex review-watch`
|
|
6510
6821
|
// 등)는 commander alias 로 그대로 resolvable(하위호환 불변). 상태경로 codex-mission 은 별도로 보존(아래 락/DB).
|
|
6511
|
-
const agentBackendHelpNames =
|
|
6822
|
+
const agentBackendHelpNames = INDEX_FAST_ROOT ? []
|
|
6823
|
+
: (require('./agent-mission/driver.js') as typeof import('./agent-mission/driver.js')).agentBackendNames();
|
|
6512
6824
|
const agentBackendHelpList = agentBackendHelpNames.map((name, index) => index === 0 ? `${name}[디폴트]` : name).join('·');
|
|
6513
6825
|
const agentCmd = program
|
|
6514
6826
|
.command('agent-mission')
|
|
@@ -6896,7 +7208,7 @@ agentCmd
|
|
|
6896
7208
|
let initialReviewer: ((pr: string) => Promise<{ verdict: import('./agent-mission/review-loop.js').ReviewVerdict; asks: string[] } | null>) | undefined;
|
|
6897
7209
|
if (opts.autoInitialReview === true && opts.dryRun !== true) {
|
|
6898
7210
|
const { reviewDiffBudgetObservation, reviewPullRequest } = await import('./agent-substrate/pr-reviewer.js');
|
|
6899
|
-
const { makeAcpReviewLLM } = await import('./agent-substrate/acp-reviewer.js');
|
|
7211
|
+
const { makeAcpReviewLLM, DEFAULT_REVIEW_BACKEND } = await import('./agent-substrate/acp-reviewer.js');
|
|
6900
7212
|
const { mapReviewToInjected } = await import('./agent-mission/pr-review-watch.js');
|
|
6901
7213
|
const { execFileSync } = await import('node:child_process');
|
|
6902
7214
|
const { lookupPrGoalAcceptance } = await import('./self-implement/run-ledger.js');
|
|
@@ -6958,6 +7270,7 @@ agentCmd
|
|
|
6958
7270
|
.command('setup')
|
|
6959
7271
|
.description('One command: OAuth / API-key auth + model picker + save config')
|
|
6960
7272
|
.action(async () => {
|
|
7273
|
+
const { realIO } = await import('./onboarding.js');
|
|
6961
7274
|
const io = realIO();
|
|
6962
7275
|
try {
|
|
6963
7276
|
await runCodexSetup({ io });
|
|
@@ -7758,7 +8071,7 @@ const selfDevCmd = program
|
|
|
7758
8071
|
humanReadableOutput: !opts.json,
|
|
7759
8072
|
gitResidueSnapshot: { path: gitResiduePath, observation: gitResidue },
|
|
7760
8073
|
}, {
|
|
7761
|
-
runChatTurn: (text, chat) => runChatTurnCli({
|
|
8074
|
+
runChatTurn: async (text, chat) => (await import('./cli/agent-cli.js')).runChatTurnCli({
|
|
7762
8075
|
cfg: reloadUserConfig(),
|
|
7763
8076
|
userText: text,
|
|
7764
8077
|
explicitSessionId: chat.session,
|
|
@@ -8306,7 +8619,7 @@ program
|
|
|
8306
8619
|
return;
|
|
8307
8620
|
}
|
|
8308
8621
|
const cfg = reloadUserConfig();
|
|
8309
|
-
await runChatTurnCli({
|
|
8622
|
+
await (await import('./cli/agent-cli.js')).runChatTurnCli({
|
|
8310
8623
|
cfg,
|
|
8311
8624
|
userText: parts.join(' '),
|
|
8312
8625
|
explicitSessionId: opts.session,
|
|
@@ -8426,6 +8739,7 @@ program
|
|
|
8426
8739
|
.option('--config <path>', 'Load answers from a JSON answer file (overrides interactive prompts)')
|
|
8427
8740
|
.option('--non-interactive', 'Run without prompts — resolve all answers from --config + env vars')
|
|
8428
8741
|
.action(async (step: string | undefined, opts: { config?: string; nonInteractive?: boolean }) => {
|
|
8742
|
+
const { runOnboarding, runOnboardingStep, runOnboardingNonInteractive } = await import('./onboarding.js');
|
|
8429
8743
|
// C-4e (cleanup ROADMAP 2026-05-08) restricted `elanous setup <step>`
|
|
8430
8744
|
// to llm/skills/obsidian. Telegram/Discord setup migrated to NEXUS
|
|
8431
8745
|
// — `elanous channel-setup --platform telegram|discord` (Track Q).
|
|
@@ -8699,7 +9013,8 @@ sessionCmd
|
|
|
8699
9013
|
sessionCmd
|
|
8700
9014
|
.command('new')
|
|
8701
9015
|
.description('Create a fresh session and mark it active')
|
|
8702
|
-
.action(() => {
|
|
9016
|
+
.action(async () => {
|
|
9017
|
+
const { ensureCliSession } = await import('./session/chat.js');
|
|
8703
9018
|
const cfg = getUserConfig();
|
|
8704
9019
|
const s = ensureCliSession(cfg);
|
|
8705
9020
|
setActiveSessionId(s.id);
|
|
@@ -8728,7 +9043,8 @@ sessionCmd
|
|
|
8728
9043
|
.command('show [prefix]')
|
|
8729
9044
|
.description('Print the messages of a session (default: active)')
|
|
8730
9045
|
.option('--include-tools', 'Include tool-call telemetry (role:tool · 실제 호출 도구·args·result 추적)')
|
|
8731
|
-
.action((prefix: string | undefined, opts: { includeTools?: boolean }) => {
|
|
9046
|
+
.action(async (prefix: string | undefined, opts: { includeTools?: boolean }) => {
|
|
9047
|
+
const { sessionBudget } = await import('./session/chat.js');
|
|
8732
9048
|
const id = prefix ? resolveSessionId(prefix) : getActiveSessionId();
|
|
8733
9049
|
if (!id) { ui.error('no session'); process.exit(1); }
|
|
8734
9050
|
const loaded = loadSession(id);
|
|
@@ -9147,6 +9463,7 @@ async function runFirstSetupForCli(cfg: ReturnType<typeof getUserConfig>, announ
|
|
|
9147
9463
|
}
|
|
9148
9464
|
|
|
9149
9465
|
async function runOnboardingForCli(): Promise<boolean> {
|
|
9466
|
+
const { runOnboarding, handleOnboardingRefusal } = await import('./onboarding.js');
|
|
9150
9467
|
try {
|
|
9151
9468
|
await runOnboarding();
|
|
9152
9469
|
return true;
|
|
@@ -9191,7 +9508,7 @@ program
|
|
|
9191
9508
|
}
|
|
9192
9509
|
if (opts.tools) announceChatToolsCompatibility();
|
|
9193
9510
|
const cfg = getUserConfig();
|
|
9194
|
-
if (await firstChatGate(cfg, {
|
|
9511
|
+
if (await (await import('./onboarding/first-chat-gate.js')).firstChatGate(cfg, {
|
|
9195
9512
|
isTTY: process.stdin.isTTY === true,
|
|
9196
9513
|
runFirstRun: async (deps) => (await import('./onboarding/first-run.js')).runFirstRun(deps),
|
|
9197
9514
|
runInteractive: () => {
|
|
@@ -9222,7 +9539,7 @@ program
|
|
|
9222
9539
|
// 단일 턴 엔진(runChatTurnCli)은 cfg-바인딩 클로저로 주입(순환 회피). opts→DevChatOpts 매핑은 seam.
|
|
9223
9540
|
const { runChatCliCommand } = await import('./chat/chat-cli.js');
|
|
9224
9541
|
await runChatCliCommand(parts.join(' '), opts, {
|
|
9225
|
-
runChatTurn: (text, chat) => runChatTurnCli({
|
|
9542
|
+
runChatTurn: async (text, chat) => (await import('./cli/agent-cli.js')).runChatTurnCli({
|
|
9226
9543
|
cfg: refreshed,
|
|
9227
9544
|
userText: text,
|
|
9228
9545
|
explicitSessionId: chat.session,
|
|
@@ -9267,7 +9584,7 @@ program
|
|
|
9267
9584
|
process.exit(2);
|
|
9268
9585
|
}
|
|
9269
9586
|
const cfg = getUserConfig();
|
|
9270
|
-
if (needsOnboarding(cfg)) {
|
|
9587
|
+
if ((await import('./onboarding.js')).needsOnboarding(cfg)) {
|
|
9271
9588
|
if (cfg.onboarding.webFirst === false) ui.info('No config yet — launching setup wizard first.');
|
|
9272
9589
|
if (!await runFirstSetupForCli(cfg, true)) return;
|
|
9273
9590
|
}
|
|
@@ -11613,6 +11930,7 @@ function writeSyncFailure(message: string): void {
|
|
|
11613
11930
|
}
|
|
11614
11931
|
|
|
11615
11932
|
async function runSyncFlow(fromDashboard: boolean): Promise<void> {
|
|
11933
|
+
const { showSyncSelector, showSyncProgress } = await import('./selector.js');
|
|
11616
11934
|
let result: Awaited<ReturnType<typeof showSyncSelector>>;
|
|
11617
11935
|
try {
|
|
11618
11936
|
result = await showSyncSelector(fromDashboard);
|
|
@@ -11778,6 +12096,15 @@ async function main(): Promise<void> {
|
|
|
11778
12096
|
|
|
11779
12097
|
let rawArgs = process.argv.slice(2);
|
|
11780
12098
|
|
|
12099
|
+
// The root flag can follow other launch options, but never a subcommand.
|
|
12100
|
+
const rootTui = extractRootTuiEntry(rawArgs);
|
|
12101
|
+
if (rootTui.error) {
|
|
12102
|
+
console.error(rootTui.error);
|
|
12103
|
+
process.exitCode = 1;
|
|
12104
|
+
return;
|
|
12105
|
+
}
|
|
12106
|
+
rawArgs = rootTui.args;
|
|
12107
|
+
|
|
11781
12108
|
rawArgs = rewriteBareNexusToStatus({ rawArgs });
|
|
11782
12109
|
|
|
11783
12110
|
// A leading --rich was a dashboard launch flag. The dashboard no longer
|
|
@@ -11921,6 +12248,9 @@ async function main(): Promise<void> {
|
|
|
11921
12248
|
const resolved = await resolveRemoteTarget({});
|
|
11922
12249
|
if (resolved) remote = resolved;
|
|
11923
12250
|
}
|
|
12251
|
+
// Bare entry is classic. The next TUI has no remote transport yet;
|
|
12252
|
+
// an explicit --tui next still reports the unsupported combination below.
|
|
12253
|
+
const tuiEntry = effectiveRootTuiEntry(rootTui, Boolean(remote));
|
|
11924
12254
|
|
|
11925
12255
|
// Root dashboard resume accepts `--resume`. Only a
|
|
11926
12256
|
// leading launch flag is owned here: a subcommand's `-r` stays
|
|
@@ -11985,8 +12315,13 @@ async function main(): Promise<void> {
|
|
|
11985
12315
|
// (e.g. `session watch --debug`), stripping them here would silently
|
|
11986
12316
|
// eat that subcommand's own option before commander ever sees it.
|
|
11987
12317
|
const args = filterDashboardArgs(rawArgs, resumeFlagIdx);
|
|
12318
|
+
if (tuiEntry === 'next' && rootTui.explicit && args.length > 0) {
|
|
12319
|
+
console.error('elanous: --tui next is a standalone TUI entry, not a subcommand option');
|
|
12320
|
+
process.exitCode = 1;
|
|
12321
|
+
return;
|
|
12322
|
+
}
|
|
11988
12323
|
|
|
11989
|
-
// Bare `elanous` (no subcommand) →
|
|
12324
|
+
// Bare `elanous` (no subcommand) → classic dashboard; next TUI only via `--tui next`. The former
|
|
11990
12325
|
// `global.entry.defaultMode` switch (which could route here to the
|
|
11991
12326
|
// headless NEXUS daemon) was removed 2026-07-24: T3/T4 deleted the
|
|
11992
12327
|
// NEXUS interactive TUI, so every non-dashboard route was a dead-end
|
|
@@ -12048,7 +12383,7 @@ async function main(): Promise<void> {
|
|
|
12048
12383
|
// Bare entry only requires an LLM; detailed setup stays behind `eln setup`.
|
|
12049
12384
|
const firstRunStartedAt = Date.now();
|
|
12050
12385
|
const cfg = getUserConfig();
|
|
12051
|
-
if (needsFirstRun(cfg)) {
|
|
12386
|
+
if ((await import('./onboarding.js')).needsFirstRun(cfg)) {
|
|
12052
12387
|
if (cfg.onboarding.webFirst !== false) {
|
|
12053
12388
|
const { runWebFirstSetup } = await import('./onboarding/web-first.js');
|
|
12054
12389
|
if (await runWebFirstSetup({ config: cfg, startedAt: firstRunStartedAt, startIfMissing: false }) === 'link-shown') return;
|
|
@@ -12125,14 +12460,32 @@ async function main(): Promise<void> {
|
|
|
12125
12460
|
}
|
|
12126
12461
|
}
|
|
12127
12462
|
bootTimer.begin();
|
|
12128
|
-
|
|
12129
|
-
|
|
12130
|
-
|
|
12131
|
-
|
|
12132
|
-
|
|
12133
|
-
}
|
|
12134
|
-
|
|
12135
|
-
|
|
12463
|
+
if (tuiEntry === 'next') {
|
|
12464
|
+
if (remote) {
|
|
12465
|
+
console.error('elanous: --tui next currently reads local sessions only; drop it (classic is the default) for remote attach');
|
|
12466
|
+
process.exitCode = 1;
|
|
12467
|
+
return;
|
|
12468
|
+
}
|
|
12469
|
+
if ((process.stdout.columns || 0) < 20 || (process.stdout.rows || 0) < 6) {
|
|
12470
|
+
console.error('elanous: --tui next requires at least 20 columns and 6 rows');
|
|
12471
|
+
process.exitCode = 1;
|
|
12472
|
+
return;
|
|
12473
|
+
}
|
|
12474
|
+
const { showNextTui } = await import('./tui/entry.js');
|
|
12475
|
+
await showNextTui({ resumeSessionId });
|
|
12476
|
+
bootTimer.phase('show-next');
|
|
12477
|
+
bootTimer.done();
|
|
12478
|
+
} else {
|
|
12479
|
+
const { showDashboard } = await import('./dashboard/index.js');
|
|
12480
|
+
await showDashboard({
|
|
12481
|
+
...dashboardOpts,
|
|
12482
|
+
onFirstFrameRendered: () => {
|
|
12483
|
+
bootTimer.phase('show-dashboard');
|
|
12484
|
+
bootTimer.done();
|
|
12485
|
+
},
|
|
12486
|
+
});
|
|
12487
|
+
closeTui();
|
|
12488
|
+
}
|
|
12136
12489
|
// Force exit: the dashboard starts background timers (clipboard
|
|
12137
12490
|
// poller, shimmer/blink animations) that keep the Bun event loop
|
|
12138
12491
|
// alive even after the TUI tears down. Without this hard exit,
|