elanous 0.2.32 → 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/{IVKr3AlRUVLKsw2fh7eXF → T1mBQqmkwKDLGtyisDCOd}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{997ce8a5-2ad501927003b41b.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/{5525.86debf231e181813.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/{7391.ebae168025c91b6a.js → 1674.2a65fd5668e1cc5f.js} +1 -1
- 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/{7947-d0759430f8042240.js → 1993-c0007b7ad0c0ef41.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1999-bb415351c8a2846c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{60fb96c9.360b01d8d4927b7b.js → 1c735de4.f993a30bbd3c57c4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1dc5a567.9b092bfae3d7099b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5307.60f2209e809bd627.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/{3902.e1e71aaac850a045.js → 2625.5d870aa999f33db1.js} +1 -1
- 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/{4174.92ed04922709ac9e.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/3589.5444a06bcf6e775c.js +1 -0
- 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/{9398-6aed28f0a96d0d6f.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/{7371.80c05c653b08e907.js → 4346.8601952e73bf5803.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4441-875b97f5821ed58a.js +1 -0
- 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/{2940-619bfd8ef337c611.js → 4705-194e64e47ca0fbdb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1335-6731f392c35216eb.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/{7502.ccd5b8065545edd0.js → 5101.e32282718f99ed6f.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{2001.6c7e0fd02190886c.js → 5154.a118f3957ed14e36.js} +1 -1
- 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/{5173-233188df2f42c626.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/{3267c0e6.d34854e7b3984a6e.js → 56d372f2.681ab4ec4c998fae.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5760.22456f433c6f42c0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5852.db1f7449f4f74612.js +287 -0
- 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/{6433.fc573af22bbc9ab7.js → 6236.e18cced2d5ba6afb.js} +17 -17
- 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/{6544cb48.a87fe20ddf137be2.js → 6b89c8bd.24df687a820500b3.js} +1 -1
- 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/{2871.0bca6137343b3f76.js → 7385.50a308a477bdfc21.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{2985.39ccdecd36848b12.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/{8018.a32663f04a6fc5f9.js → 8219.baa715d1deee80e2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{4111.2bfedbb233ad206b.js → 8256.e3ac8421a71f82f4.js} +1 -1
- 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/8437-8d5492094b166cfa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2213.2ccbada92c33ea0f.js → 8444.4c26b379ca2b9596.js} +17 -17
- 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/{6092.a7f99e68b188ca66.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/{3278.2e5d15b53a4091c8.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/{9221.7d22eaf353a2d4e7.js → 938.66ad1ef0e5abae1c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{6157.0c9af021de4fb31b.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/{69-0a2c8209c6d4a158.js → 967-2aa39b2d04b4c690.js} +1 -1
- 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/{7862.30a8d6482bb238eb.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-a27b1e5a0d1b308f.js → page-406b47745b53f269.js} +1 -1
- 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-26e6c18a1a750cf6.js +1 -0
- 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-32866485913d6a04.js → page-47c5d4db587266bd.js} +1 -1
- 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-04d00ae9b0890349.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/{7a1887c4.f36b88fba31da8fd.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/{b313b242.cb1265eea908db61.js → cbe38a15.5a032598e39970c6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{409f1e57.d0649fc47691ebfe.js → d06f9160.a3d9062f95de8ad7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{0bb0ff36.b8d418980951e5ba.js → da5176c6.6773b6c5994e1d99.js} +7 -7
- 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 +10 -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 +5 -0
- package/graphs/catalog/catalog.yaml +1 -1
- package/graphs/default-loop.yaml +76 -5
- package/graphs/document-loop.yaml +71 -4
- package/graphs/implement-loop.yaml +59 -4
- package/graphs/journey/SCENARIOS.md +33 -0
- package/graphs/journey/recipes.yaml +1 -0
- package/graphs/journey/ta-journey.yaml +94 -0
- package/graphs/journey/units/author/author.yaml +20 -0
- package/graphs/journey/units/author/recipes.yaml +2 -0
- 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/journey/units/green/green.yaml +20 -0
- package/graphs/journey/units/green/recipes.yaml +2 -0
- package/graphs/journey/units/pr/pr.yaml +20 -0
- package/graphs/journey/units/pr/recipes.yaml +2 -0
- package/graphs/journey/units/remember/recipes.yaml +2 -0
- package/graphs/journey/units/remember/remember.yaml +20 -0
- package/graphs/operate-loop.yaml +71 -4
- package/graphs/overlays/stop-heal-ladder.yaml +1 -1
- package/graphs/release-rehearsal/recipes.yaml +1 -1
- package/graphs/release-rehearsal/release-rehearsal.yaml +2 -2
- package/graphs/research-loop.yaml +159 -4
- package/graphs/test-diet/test-diet.yaml +3 -0
- package/graphs/units/dispatch-pod/dispatch-pod.yaml +50 -0
- package/graphs/units/dispatch-pod/recipes.yaml +14 -0
- package/graphs/units/entry/entry.yaml +50 -0
- package/graphs/units/entry/recipes.yaml +14 -0
- package/graphs/units/harvest/harvest.yaml +25 -0
- package/graphs/units/harvest/recipes.yaml +4 -0
- package/graphs/units/land/land.yaml +45 -0
- package/graphs/units/land/recipes.yaml +3 -0
- package/graphs/units/recipes.yaml +7 -0
- package/graphs/units/recover.yaml +39 -0
- package/graphs/units/reflect/recipes.yaml +3 -0
- package/graphs/units/reflect/reflect.yaml +15 -0
- package/graphs/units/task-agent-recover-review.yaml +17 -0
- package/graphs/units/task-agent-recover-wait.yaml +17 -0
- package/graphs/units/verbs/make-doc.yaml +34 -0
- package/graphs/units/verbs/recipes.yaml +33 -0
- package/graphs/units/verbs/verify.yaml +55 -0
- package/graphs/work/recipes.yaml +2 -0
- package/graphs/work/research-report.yaml +28 -0
- package/package.json +1 -1
- package/scripts/ci-typecheck-changed.ts +69 -16
- package/scripts/coord-role-pack.ts +19 -6
- package/scripts/docs/generate-graph-anatomy.ts +19 -2
- package/scripts/graph-harvest-unit.ts +22 -0
- package/scripts/graph-units/journey-stub.ts +6 -0
- package/scripts/graph-units/land-enqueue.ts +78 -0
- package/scripts/graph-units/recover-plan.ts +15 -0
- package/scripts/graph-units/reflect-node.ts +88 -0
- package/scripts/graph-units/ta-journey-observe.ts +109 -0
- package/scripts/graph-units/verbs/headless-goal-loop.ts +152 -0
- package/scripts/graph-units/verbs/verify-stage.ts +75 -0
- package/scripts/graph-units/verbs-envelope.ts +139 -0
- package/scripts/hq/standby-snapshot.ts +30 -0
- package/scripts/public-export.ts +43 -1
- package/scripts/ratchets/train-side-invariants.sh +45 -0
- package/scripts/release-loop/auto-approve-node.ts +30 -16
- 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-closure.ts +5 -1
- package/scripts/release-loop/gate-diff.ts +1 -1
- package/scripts/release-loop/gate-node.ts +675 -49
- package/scripts/release-loop/gate-partial.ts +68 -14
- package/scripts/release-loop/gate-radius-live.ts +177 -0
- package/scripts/release-loop/gate-radius-shadow.ts +138 -0
- package/scripts/release-loop/gate-traffic-mode.ts +128 -0
- package/scripts/release-loop/gate-triage-node.ts +5 -2
- package/scripts/release-loop/known-issues-0.2.33-approved.json +194 -0
- package/scripts/release-loop/known-issues-node.ts +77 -8
- package/scripts/release-loop/node-verdict.ts +12 -1
- package/scripts/release-loop/npm-publish-node.ts +66 -12
- package/scripts/release-loop/preflight.ts +93 -7
- package/scripts/release-loop/probe-pod-host-dirs-live.ts +5 -0
- package/scripts/release-loop/publish-node.ts +60 -9
- package/scripts/release-loop/pwa-remote.ts +166 -0
- package/scripts/release-loop/pwa-scenarios-node.ts +19 -3
- package/scripts/release-loop/resume-cap.ts +56 -0
- package/scripts/release-loop/resume-release.ts +155 -19
- package/scripts/release-loop/resume.ts +24 -1
- package/scripts/release-loop/tui-sim-node.ts +8 -2
- package/scripts/release-loop/unattended-release.ts +10 -2
- 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/acp/core-turn-bridge.ts +20 -5
- package/src/acp/reasoning-thought-buffer.ts +45 -0
- package/src/agent/self-ambient-cache.ts +8 -0
- package/src/agent-substrate/acp-reviewer.ts +90 -15
- package/src/agent-substrate/pr-reviewer.ts +17 -0
- package/src/agent-substrate/review-finding-key.ts +53 -0
- package/src/agent-substrate/self-review-cli.ts +188 -18
- package/src/ask-user-question/pending-questions.ts +1 -1
- package/src/autopilot/pr-manager.ts +393 -65
- 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/chat/tool-render/dispatch.ts +62 -10
- package/src/cli/agent-cli.ts +13 -2
- package/src/cli/control-cli.ts +24 -7
- package/src/cli/doctor-cli.ts +4 -1
- package/src/cli/guardian-cli.ts +10 -0
- package/src/cli/light-entry-route.ts +75 -0
- package/src/cli/llm-detect-cli.ts +23 -1
- package/src/cli/pod-cli.ts +77 -3
- package/src/cli/pr-cli.ts +81 -14
- package/src/cli/pr-land-base-read.ts +2 -0
- package/src/cli/pr-land-overlap-evidence.ts +154 -16
- package/src/cli/pr-land-pod-shadow-job.ts +3 -0
- package/src/cli/pr-land-recovery.ts +64 -0
- package/src/cli/pty-takeover-cli.ts +6 -5
- package/src/cli/release-checklist-read-cli.ts +79 -0
- package/src/cli/release-cli.ts +189 -132
- package/src/cli/release-run-if-ready.ts +29 -28
- package/src/cli/release-single-flight.ts +178 -0
- package/src/cli/remote-resolve.ts +1 -1
- package/src/cli/root-tui-entry.ts +48 -0
- package/src/cli/seat-cli.ts +37 -0
- package/src/cli/setup-cli.ts +40 -1
- package/src/cli/sim-cli.ts +22 -0
- package/src/cli/tasks-cli.ts +667 -14
- package/src/cli/usage-cli.ts +13 -11
- package/src/clipboard/history.ts +179 -13
- package/src/config.ts +8 -1
- package/src/control/control-status.ts +8 -3
- package/src/control-plane/ledger.ts +5 -3
- package/src/control-plane/server.ts +5 -3
- package/src/core-turn/short-question.ts +5 -1
- package/src/dashboard/chat/acp-chat.ts +8 -0
- package/src/dashboard/index.ts +114 -77
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +3 -0
- package/src/dashboard/input/dashboard-plain-turn-stream.ts +4 -0
- package/src/dashboard/input/seat-autowake.ts +56 -3
- package/src/dashboard/render/theme-resolver.ts +33 -4
- package/src/dashboard/seat-boot-preamble.ts +1 -1
- package/src/dashboard/slash-runtime/ask-clarification.ts +48 -0
- package/src/dashboard/slash-runtime/dashboard-delegated-slashes.ts +68 -0
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +62 -322
- package/src/dashboard/slash-runtime/dashboard-log-slash.ts +208 -0
- package/src/dashboard/turn-preamble.ts +47 -1
- package/src/dashboard/turn-stream-formatter.ts +34 -1
- package/src/dashboard/turn-stream-runtime.ts +2 -0
- package/src/dashboard/turn-typeahead-prompt-zone.ts +67 -0
- package/src/domains/guardian-tick.ts +54 -2
- package/src/domains/outbound-alert.ts +3 -2
- package/src/domains/schedule-registry.ts +16 -2
- package/src/extractors.ts +3 -1
- package/src/git-fs/idle-refresh.ts +76 -0
- package/src/git-fs/index.ts +18 -7
- package/src/git-fs/retry.ts +4 -0
- package/src/git-fs/runner.ts +2 -0
- package/src/git-fs/worktree.ts +42 -4
- package/src/graph-kinds/registry.ts +2 -2
- package/src/graph-runner/runner.ts +267 -54
- package/src/grok/credential.ts +15 -3
- package/src/harness/harness-cli-command.ts +151 -38
- package/src/harness/harness-incidents.ts +37 -0
- package/src/harness/harness-pod-dispatch.ts +38 -1
- package/src/harness/harness-salvage-cli.ts +14 -2
- 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 +683 -146
- package/src/intake-plane/already-built-hint.ts +91 -0
- package/src/intake-plane/requirement-funnel.ts +29 -1
- package/src/knowhow/pack.ts +199 -0
- package/src/light-cli.ts +111 -0
- 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 +268 -65
- package/src/loops/budget.ts +95 -0
- package/src/loops/msg-wake.ts +8 -2
- package/src/loops/orchestrator/traffic.ts +132 -1
- package/src/model-tier/llm-tier-map.ts +15 -1
- package/src/mss/logging/log-store.ts +4 -5
- package/src/native-tool-catalog.ts +15 -1
- package/src/nexus/api/graphs-api.ts +22 -3
- package/src/nexus/api/http-server.ts +1 -1
- package/src/nexus/api/loop-resources.ts +13 -1
- package/src/nexus/api/ops-api.ts +12 -0
- package/src/oauth/claude-pty-maturity.ts +66 -0
- package/src/oauth/codex-access-mirror.ts +55 -0
- package/src/oauth/codex.ts +7 -0
- package/src/oauth/fallback-chain.ts +1 -1
- package/src/onboarding/first-run.ts +5 -3
- package/src/onboarding/non-interactive.ts +64 -13
- package/src/onboarding.ts +10 -2
- package/src/ops/overview-collect.ts +54 -4
- package/src/ops/overview.ts +31 -7
- package/src/pr-tool/census.ts +282 -30
- package/src/pr-tool/inflight-registry.ts +160 -7
- package/src/prompt-library/gpt6-family-addendum.ts +14 -1
- package/src/pty-shell/herdr-agent-report.ts +442 -0
- package/src/pty-shell/pty-control-ipc.ts +5 -5
- package/src/pty-shell/pty-manifest.ts +7 -0
- package/src/pty-shell/pty-write-outcome.ts +24 -6
- package/src/pty-shell/tui-run-state.ts +117 -3
- package/src/release-loop/checklist.ts +103 -5
- package/src/release-loop/feature-store.ts +19 -2
- package/src/release-loop/landed-but-yellow.ts +129 -5
- package/src/release-loop/light-rc.ts +1 -0
- package/src/release-loop/placement.ts +10 -3
- package/src/release-loop/rehearsal.ts +205 -25
- package/src/release-loop/rubric.ts +16 -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 +188 -13
- 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 +11 -6
- package/src/self-dev/graph-journey-route.ts +60 -6
- package/src/self-dev/harness-run-cli.ts +3 -15
- package/src/self-dev/orchestrate-cli-text.ts +10 -0
- package/src/self-dev/orchestrate.ts +79 -3
- package/src/self-dev/review-provider-fallback.ts +35 -1
- package/src/self-dev/run-supervisor.ts +107 -12
- package/src/self-dev/run-types.ts +5 -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 +95 -12
- package/src/self-implement/gate-cli.ts +1 -0
- package/src/self-implement/gate-remote.ts +40 -25
- package/src/self-implement/goal-author-decompose.ts +275 -47
- package/src/self-implement/goal-author-identity.ts +66 -0
- package/src/self-implement/goal-author-preservation-obligation.ts +35 -0
- package/src/self-implement/goal-author.ts +254 -120
- 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 +28 -2
- package/src/self-implement/graph-unit-flatten.ts +103 -0
- package/src/self-implement/graph-unit-resolver.ts +107 -0
- package/src/self-implement/graph-yaml.ts +151 -1
- package/src/self-implement/headless-elanous-driver.ts +1 -0
- package/src/self-implement/knowhow-pack.ts +103 -0
- package/src/self-implement/orchestrator.ts +160 -45
- package/src/self-implement/pod-warm-pool-profile.ts +45 -0
- package/src/self-implement/review-mustfix-class.ts +203 -0
- package/src/self-implement/rework-budget-judgment.ts +5 -8
- package/src/self-implement/run-stop.ts +17 -2
- package/src/self-implement/running-runs.ts +29 -1
- package/src/self-implement/scope-adjacency.ts +113 -0
- package/src/self-implement/seams.ts +138 -4
- package/src/self-implement/stop-autoheal.ts +112 -2
- package/src/session/chat.ts +27 -0
- package/src/session-runtime/index.ts +1 -1
- package/src/session-runtime/retry-policy.ts +2 -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/skills/tools/schedule-wakeup.ts +66 -17
- package/src/steward/hold-hygiene.ts +24 -6
- package/src/steward/release-day.ts +7 -3
- package/src/steward/triage-budget.ts +194 -0
- package/src/steward/triage.ts +57 -7
- package/src/task-agent/actions.ts +69 -1
- package/src/task-agent/green-sweep.ts +4 -0
- package/src/task-agent/harvest-unit.ts +141 -0
- package/src/task-agent/live-moves.ts +257 -15
- package/src/task-agent/parent-host.ts +216 -6
- package/src/task-agent/postland-card.ts +80 -1
- package/src/task-agent/rejudge-on-head.ts +112 -26
- package/src/task-agent/repair-branch-cas.ts +4 -1
- package/src/task-agent/repair-cycle.ts +16 -3
- package/src/task-agent/run-identity.ts +4 -3
- package/src/task-agent/shadow.ts +19 -3
- package/src/task-agent/task-hand.ts +96 -36
- package/src/task-agent/tier-split.ts +127 -0
- package/src/task-agent/work-order-build.ts +24 -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 +72 -3
- package/src/task-orchestrator/surfaces/pod-child-providers.ts +1 -1
- package/src/task-orchestrator/surfaces/pod-command-job.ts +47 -8
- 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-lifecycle-stages.ts +86 -8
- package/src/task-orchestrator/surfaces/pod-manifest-test-normalize.ts +8 -2
- package/src/task-orchestrator/surfaces/pod-pool.ts +73 -17
- package/src/task-orchestrator/surfaces/pod-provenance.ts +76 -0
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +72 -4
- package/src/task-orchestrator/surfaces/pod-warm-provenance.ts +81 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +32 -5
- package/src/task-orchestrator/surfaces/pod-warm-worker-protocol.ts +3 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +421 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +2 -1
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +588 -71
- package/src/task-orchestrator/surfaces/self-implement.ts +106 -2
- package/src/tool-runtime/ops-ledger-runtimes.ts +10 -2
- package/src/tool-runtime/truncation-store.ts +4 -0
- 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/dashboard-session.ts +10 -1
- 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/coercion.ts +36 -0
- package/src/user-config.ts +22 -43
- 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/ux-sim/scenario.ts +72 -13
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/1034-8b639cee57b8e4a8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1085-6c2d35526f11f840.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1220.1ff7d5cdc34b1ae5.js +0 -27
- package/apps/pwa/out/_next/static/chunks/1247.5884ec81b39fe2e7.js +0 -287
- package/apps/pwa/out/_next/static/chunks/1302.87681521a7a4661e.js +0 -62
- package/apps/pwa/out/_next/static/chunks/1324-59dae3002413623b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1343-f40b5870ac1eda5a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/146-b6cd56be11dda017.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1654.32de4b324981a188.js +0 -23
- package/apps/pwa/out/_next/static/chunks/1834-98b64172bc1efe77.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1849.1ce38efa6c527d9a.js +0 -149
- package/apps/pwa/out/_next/static/chunks/1913.7cc6fb6055b1ed3f.js +0 -41
- package/apps/pwa/out/_next/static/chunks/2030.41fae98c7e907304.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2099-08b2f2dfba742c9b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2112-e4efc21a6505d5bc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2134.ecee03a550ee7250.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2236.66061832181cb745.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2422.b0bd272e7020d7e6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2534.e85ae21ad0dac829.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2898.fd781bc7cf01a7b7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3040.92ff9ffc9f971cb9.js +0 -115
- package/apps/pwa/out/_next/static/chunks/3144.6861096c7b4edef7.js +0 -64
- package/apps/pwa/out/_next/static/chunks/3541-ce3a5424ed5ad7f1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3583.a05e88cc8d594628.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3771.e928edf2867d28c0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4063-03284b5de59965f3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4300-c7ec4eeabbb5f3f7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4483.646d5065199e1b55.js +0 -36
- package/apps/pwa/out/_next/static/chunks/4519.28199ff26b2fd80d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4581.ef2443578054544f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4608-8d894e9cbe4f08bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4639.ae48a01d1bb50a93.js +0 -286
- package/apps/pwa/out/_next/static/chunks/4739.08742ac668aada67.js +0 -77
- package/apps/pwa/out/_next/static/chunks/4745.67d6f99c245af3f7.js +0 -226
- package/apps/pwa/out/_next/static/chunks/4882-16cef71d6a1a32be.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4999.c064a4000c2a9e94.js +0 -79
- package/apps/pwa/out/_next/static/chunks/5260-69f35419bca263e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5272.b92d1b72a15c25fe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5304.04d24756f242a094.js +0 -148
- package/apps/pwa/out/_next/static/chunks/5415-997980f828667736.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5458-16cd7a2b51b74c8c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5543.a438b8ab5a13ea47.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5572-42c9084f27ca761e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5661-80470aac963d9f36.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5723.421338408b5c30c4.js +0 -74
- package/apps/pwa/out/_next/static/chunks/5809.64c3664267c50bce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6000.64bc21ac8627f2f5.js +0 -94
- package/apps/pwa/out/_next/static/chunks/6013.39459b9c68eabf5f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/607-06466dff012b03ef.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6192.a190b989b81e9743.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6323.8672b4817a306928.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6444.7d1fdcb9b09ae71c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6517.4147878ac06d584d.js +0 -90
- package/apps/pwa/out/_next/static/chunks/6532.e34302010b2f0b68.js +0 -32
- package/apps/pwa/out/_next/static/chunks/6546.74bc4ed82f19016d.js +0 -104
- package/apps/pwa/out/_next/static/chunks/6684-e7523ce7c2fad075.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6726.ebdc82feb161431e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6739.00fb6f892e5e392b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6745.934c4921bf15513a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6767.ea607cf0c20a25af.js +0 -24
- package/apps/pwa/out/_next/static/chunks/6843.67bfd020da0926c5.js +0 -93
- package/apps/pwa/out/_next/static/chunks/6948.1062d4594652b5bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7138-eaf841fc1dc03463.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7174-cda29ee13d7790e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7304-3c07583f4e405f4f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7557.e325503a090a4310.js +0 -8
- package/apps/pwa/out/_next/static/chunks/7569-9ce9432c7f10989f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7886-55854585fadeded1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8097-9530c03bcc550f02.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8215-1661812b6e9ad71f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8260-19c921a51ca8ec3e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8440.3a5cf5c85aa76db8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8519-4599be2249161e68.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8547.b028b90c5c01ace6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8587-cbe02a953a7f4990.js +0 -1
- package/apps/pwa/out/_next/static/chunks/877-2b977259c4b15655.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9002.e5658224e3dc1b6f.js +0 -24
- package/apps/pwa/out/_next/static/chunks/9019-0a4b40c50c7314fb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9138.b6e80031afb1d973.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9188-d36e4fc869ddc166.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9230.44f5039e796e4ab4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9279-d28c5b7754d010ae.js +0 -1
- package/apps/pwa/out/_next/static/chunks/939.336acce73e98482c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9407.e49124dedf0f5e72.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9610.c07cce4bfcc14ed7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9667-ce78c2ce91050ff9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9989.3694300e5f000b14.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-339fabb3499da0e1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-504204b58c82c253.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-a9717a67c2eecbaf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-5c9ec30aee62dfbf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-584191533721fa16.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-73c4b4bb3ac7ab5f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-c0f1ca371f710b06.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-46430d45a9e04eac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-3b2ebf1dc64ff0be.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-25654b82094f7d22.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-8ea49a4c6dd2c6e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-ce5113aefea0a8d1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-0e5a41fac1c75396.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-31aaf1ed37c6df9a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-339fabb3499da0e1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-3dcc1fa411e1f4e0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-c69247e7134d329d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-66dc5cd3a0999abe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-26ff7ff651a7217d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-617b3976981efa96.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-d256f5d5d9552823.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-ce8f1907b8a6101c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-33e182a316263116.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-7607cca9b84950c6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-eeab86176b03dc3b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-5b93dbae3432b996.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-77a6cb90a9cf2b10.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-f47e768b5b242b5a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-eb41aa3367fc2505.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-4d13ab0b8a267e3f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-84dad32ff0fc0831.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-95306f892aa2d0ee.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-940fb6c217f6b470.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-8c66a3b24a745630.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-7b675dfd35c36fc9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-8bd0d3cf7665bcfc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-339fabb3499da0e1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-c219f2ed171131be.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-40f8fa21bdae955b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-468f8313e4f1fbd9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-7bbb8fa353a246c4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-4214b855d9233ea8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-936752c7aa58762e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-ec052ad359df1797.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-8305570551091338.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-fad650e4793adb65.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-d90e64743826e1d8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-a16bcfd49af86a32.js +0 -1
- package/apps/pwa/out/_next/static/chunks/e5012ffe.f727e23c231f4342.js +0 -122
- package/apps/pwa/out/_next/static/chunks/ea695e3c-1f1d70d740cf3031.js +0 -1
- package/apps/pwa/out/_next/static/chunks/ebc7d829.264a0bcb6c750b50.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-906af9bd029e166c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-a24847f9f684d469.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-7bdcd8aa7c8397d3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-6ba46a5066fc226d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-a8dc6d07591f2a25.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-f13df28c15c55eee.js +0 -1
- package/src/cli/g6a-registration-probe.ts +0 -16
- /package/apps/pwa/out/_next/static/{IVKr3AlRUVLKsw2fh7eXF → T1mBQqmkwKDLGtyisDCOd}/_ssgManifest.js +0 -0
package/src/chat/index.ts
CHANGED
|
@@ -1022,7 +1022,6 @@ export async function textInput(opts: {
|
|
|
1022
1022
|
modalSink: opts.modalSink,
|
|
1023
1023
|
picker,
|
|
1024
1024
|
getBufferView: bufView,
|
|
1025
|
-
writeTerminal,
|
|
1026
1025
|
getBounds: () => ({ row: getRow(), col, width: getWidth(), height: 1 }),
|
|
1027
1026
|
getInputZoneHeight: () => Math.min(lines.length, maxLines),
|
|
1028
1027
|
onDispatchResult: async (dispatched) => processPickerDispatch(dispatched),
|
|
@@ -1336,7 +1335,6 @@ export async function textInput(opts: {
|
|
|
1336
1335
|
}
|
|
1337
1336
|
pickerModalRuntime.syncFamily({
|
|
1338
1337
|
activeKind: activePickerKind(),
|
|
1339
|
-
clearRows: MAX_PICKER + 3,
|
|
1340
1338
|
debugLayout: { row: getRow(), col, width: getWidth() },
|
|
1341
1339
|
family: pickerModalFamily,
|
|
1342
1340
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { debug } from '../../debug/log.js';
|
|
2
|
-
import {
|
|
2
|
+
import type { Key } from '../../tui.js';
|
|
3
3
|
import { createChatPickerModalFamily, type ChatPickerFamilySources, type ChatPickerModalBindings, type ChatPickerModalFamily, type PickerOnKey, type PickerOnRowClick } from './modals.js';
|
|
4
4
|
import { CHAT_PICKER_KINDS, type ChatPickerKind } from './kinds.js';
|
|
5
5
|
import type { ModalSink } from '../index.js';
|
|
@@ -10,7 +10,6 @@ export interface ChatPickerModalRuntimeDeps {
|
|
|
10
10
|
modalSink?: ModalSink;
|
|
11
11
|
picker: PickerState;
|
|
12
12
|
getBufferView: () => PickerBufferView;
|
|
13
|
-
writeTerminal: (s: string) => void;
|
|
14
13
|
getBounds: () => { row: number; col: number; width: number; height: number };
|
|
15
14
|
getInputZoneHeight: () => number;
|
|
16
15
|
onDispatchResult: (
|
|
@@ -26,30 +25,15 @@ interface PickerHandle {
|
|
|
26
25
|
interface SyncPickerModalSpec {
|
|
27
26
|
kind: ChatPickerKind;
|
|
28
27
|
active: boolean;
|
|
29
|
-
clearRows: number;
|
|
30
28
|
createSurface: () => ModalSurface;
|
|
31
29
|
}
|
|
32
30
|
|
|
33
31
|
interface SyncPickerFamilySpec {
|
|
34
32
|
activeKind: ChatPickerKind | null;
|
|
35
|
-
clearRows: number;
|
|
36
33
|
debugLayout?: { row: number; col: number; width: number };
|
|
37
34
|
family: ChatPickerModalFamily;
|
|
38
35
|
}
|
|
39
36
|
|
|
40
|
-
export function paintChatPickerClear(spec: {
|
|
41
|
-
bounds: { row: number; col: number };
|
|
42
|
-
rows: number;
|
|
43
|
-
inputZoneHeight: number;
|
|
44
|
-
}): string {
|
|
45
|
-
const out: string[] = [];
|
|
46
|
-
for (let i = 0; i < spec.rows; i++) {
|
|
47
|
-
const r = spec.bounds.row - spec.inputZoneHeight - 1 - i;
|
|
48
|
-
if (r >= 1) out.push(ansi.moveTo(r, spec.bounds.col) + '\x1b[2K');
|
|
49
|
-
}
|
|
50
|
-
return out.join('');
|
|
51
|
-
}
|
|
52
|
-
|
|
53
37
|
export function createChatPickerModalRuntime(deps: ChatPickerModalRuntimeDeps): {
|
|
54
38
|
dispatchKey: (input: { key: Key; source: 'onKey' | 'input-loop'; label: string }) => Promise<boolean>;
|
|
55
39
|
makePickerOnKey: (label: string) => PickerOnKey;
|
|
@@ -112,15 +96,15 @@ export function createChatPickerModalRuntime(deps: ChatPickerModalRuntimeDeps):
|
|
|
112
96
|
});
|
|
113
97
|
};
|
|
114
98
|
|
|
115
|
-
|
|
99
|
+
// TUI-DIRECT-WRITE-ROWS — no direct terminal clear here. The sink is the
|
|
100
|
+
// display coordinator, whose popModal marks every row dirty and forces the
|
|
101
|
+
// next frame (Q7 / F9), so the picker rows repaint through the frame cache.
|
|
102
|
+
// The old CUP+EL clear bypassed that cache and was off by one row: it
|
|
103
|
+
// erased the row above the picker band (ChatLog header) and left it blank
|
|
104
|
+
// until the forced repaint arrived.
|
|
105
|
+
const clearHandle = (kind: ChatPickerKind): void => {
|
|
116
106
|
const handle = handles.get(kind);
|
|
117
107
|
if (!handle) return;
|
|
118
|
-
const bounds = deps.getBounds();
|
|
119
|
-
deps.writeTerminal(paintChatPickerClear({
|
|
120
|
-
bounds,
|
|
121
|
-
rows: clearRows,
|
|
122
|
-
inputZoneHeight: deps.getInputZoneHeight(),
|
|
123
|
-
}));
|
|
124
108
|
handle.dispose();
|
|
125
109
|
handles.delete(kind);
|
|
126
110
|
};
|
|
@@ -133,7 +117,7 @@ export function createChatPickerModalRuntime(deps: ChatPickerModalRuntimeDeps):
|
|
|
133
117
|
return;
|
|
134
118
|
}
|
|
135
119
|
if (!spec.active && handle) {
|
|
136
|
-
clearHandle(spec.kind
|
|
120
|
+
clearHandle(spec.kind);
|
|
137
121
|
}
|
|
138
122
|
};
|
|
139
123
|
|
|
@@ -188,7 +172,6 @@ export function createChatPickerModalRuntime(deps: ChatPickerModalRuntimeDeps):
|
|
|
188
172
|
syncModal({
|
|
189
173
|
kind,
|
|
190
174
|
active: kind === input.activeKind && itemCount > 0,
|
|
191
|
-
clearRows: input.clearRows,
|
|
192
175
|
createSurface: () => input.family.createSurface(kind),
|
|
193
176
|
});
|
|
194
177
|
}
|
|
@@ -196,7 +179,7 @@ export function createChatPickerModalRuntime(deps: ChatPickerModalRuntimeDeps):
|
|
|
196
179
|
|
|
197
180
|
const clearAll = (): void => {
|
|
198
181
|
for (const kind of [...handles.keys()]) {
|
|
199
|
-
clearHandle(kind
|
|
182
|
+
clearHandle(kind);
|
|
200
183
|
}
|
|
201
184
|
};
|
|
202
185
|
|
|
@@ -18,7 +18,12 @@ import type {
|
|
|
18
18
|
import { renderToolBlock } from './block.js';
|
|
19
19
|
import { renderToolInline } from './inline.js';
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
/** 접힌 결과 요약 첫 조각은 `MsgPost` 하나뿐이라 이름 확장을 `dispatch.ts` 안에 둔다.
|
|
22
|
+
* `types.ts:ToolRenderName` 은 나머지 도구의 공용 계약 그대로 두고, 이 파일의 내부
|
|
23
|
+
* 시그니처만 넓힌다(블록·인라인 렌더는 `ToolRenderModel.kind` 문자열만 본다). */
|
|
24
|
+
type ToolRenderKind = ToolRenderName | 'MsgPost';
|
|
25
|
+
|
|
26
|
+
const SUPPORTED_TOOLS = new Set<ToolRenderKind>([
|
|
22
27
|
'Bash',
|
|
23
28
|
'Read',
|
|
24
29
|
'Grep',
|
|
@@ -35,9 +40,10 @@ const SUPPORTED_TOOLS = new Set<ToolRenderName>([
|
|
|
35
40
|
'WebSearch',
|
|
36
41
|
'WebFetch',
|
|
37
42
|
'GetDashboardState',
|
|
43
|
+
'MsgPost',
|
|
38
44
|
]);
|
|
39
45
|
|
|
40
|
-
export function isToolRenderSupported(name: string): name is
|
|
46
|
+
export function isToolRenderSupported(name: string): name is ToolRenderKind | 'update_plan' | 'update_goal' {
|
|
41
47
|
return normalizeToolRenderName(name) !== null;
|
|
42
48
|
}
|
|
43
49
|
|
|
@@ -48,6 +54,9 @@ export function renderToolCallEvent(
|
|
|
48
54
|
if (config.displayMode !== 'inline-to-block') return null;
|
|
49
55
|
const kind = normalizeToolRenderName(call.name);
|
|
50
56
|
if (!kind) return null;
|
|
57
|
+
// Keep the generic running block: a MsgPost error must still fall back to
|
|
58
|
+
// the same generic result block that was used before this summary slice.
|
|
59
|
+
if (kind === 'MsgPost') return null;
|
|
51
60
|
const model: ToolRenderModel = {
|
|
52
61
|
kind,
|
|
53
62
|
status: 'running',
|
|
@@ -75,9 +84,18 @@ export function renderToolResultVariants(
|
|
|
75
84
|
if (config.displayMode !== 'inline-to-block') return null;
|
|
76
85
|
const kind = normalizeToolRenderName(call.name);
|
|
77
86
|
if (!kind) return null;
|
|
87
|
+
// Only successful MsgPost results enter the compact renderer. Returning
|
|
88
|
+
// null for errors lets the dashboard formatter use its existing generic
|
|
89
|
+
// result path, including its expanded argument/result view.
|
|
90
|
+
if (kind === 'MsgPost' && extractErrorText(call.result)) return null;
|
|
78
91
|
const model = buildToolRenderModel(kind, call, config);
|
|
79
92
|
const collapsed = renderToolBlock(model, config.blockMaxLines, config.foldMode, config.expandHint);
|
|
80
|
-
|
|
93
|
+
// ⭐ MsgPost 는 접힌 행에서 본문을 빼고 펼친 행에서만 싣는다 ⇒ 같은 model 로는 두 변형을
|
|
94
|
+
// 만들 수 없어, 펼친 쪽만 본문 포함 model 을 따로 세운다(다른 도구는 종전과 동일 model).
|
|
95
|
+
const expandedModel = kind === 'MsgPost'
|
|
96
|
+
? buildToolRenderModel(kind, call, config, { includeMsgPostBody: true })
|
|
97
|
+
: model;
|
|
98
|
+
const expanded = renderToolBlock(expandedModel, Number.POSITIVE_INFINITY);
|
|
81
99
|
const variants: ToolRenderResultVariants = {
|
|
82
100
|
collapsed,
|
|
83
101
|
expanded: arraysEqual(collapsed, expanded) ? null : expanded,
|
|
@@ -88,22 +106,28 @@ export function renderToolResultVariants(
|
|
|
88
106
|
return variants;
|
|
89
107
|
}
|
|
90
108
|
|
|
91
|
-
|
|
109
|
+
interface ToolRenderModelOptions {
|
|
110
|
+
/** 펼친 변형만 `message.body` 를 싣는다 — 접힌 행에는 본문·전체 JSON 이 남지 않는다. */
|
|
111
|
+
includeMsgPostBody?: boolean;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function normalizeToolRenderName(name: string): ToolRenderKind | null {
|
|
92
115
|
if (name === 'update_plan' || name === 'UpdatePlan') return 'UpdatePlan';
|
|
93
116
|
if (name === 'update_goal' || name === 'UpdateGoal') return 'UpdateGoal';
|
|
94
|
-
return SUPPORTED_TOOLS.has(name as
|
|
117
|
+
return SUPPORTED_TOOLS.has(name as ToolRenderKind) ? (name as ToolRenderKind) : null;
|
|
95
118
|
}
|
|
96
119
|
|
|
97
120
|
function buildToolRenderModel(
|
|
98
|
-
kind:
|
|
121
|
+
kind: ToolRenderKind,
|
|
99
122
|
call: ToolRenderResult,
|
|
100
123
|
config?: ToolRenderConfig,
|
|
124
|
+
options?: ToolRenderModelOptions,
|
|
101
125
|
): ToolRenderModel {
|
|
102
126
|
const resultRecord = asRecord(call.result);
|
|
103
127
|
const errorText = extractErrorText(call.result);
|
|
104
128
|
const bodyLines = errorText
|
|
105
129
|
? errorText.split('\n')
|
|
106
|
-
: buildToolBodyLines(kind, call.args, call.result, resultRecord);
|
|
130
|
+
: buildToolBodyLines(kind, call.args, call.result, resultRecord, options);
|
|
107
131
|
const status = errorText ? 'error' : 'success';
|
|
108
132
|
const model: ToolRenderModel = {
|
|
109
133
|
kind,
|
|
@@ -119,7 +143,7 @@ function buildToolRenderModel(
|
|
|
119
143
|
}
|
|
120
144
|
|
|
121
145
|
function summarizeCollapsedToolResult(
|
|
122
|
-
kind:
|
|
146
|
+
kind: ToolRenderKind,
|
|
123
147
|
status: 'success' | 'error',
|
|
124
148
|
resultRecord: Record<string, unknown> | null,
|
|
125
149
|
bodyLines: string[],
|
|
@@ -206,10 +230,12 @@ function summarizeCollapsedToolResult(
|
|
|
206
230
|
}
|
|
207
231
|
|
|
208
232
|
function summarizeToolCallForRender(
|
|
209
|
-
kind:
|
|
233
|
+
kind: ToolRenderKind,
|
|
210
234
|
args: Record<string, unknown>,
|
|
211
235
|
result?: unknown,
|
|
212
236
|
): string {
|
|
237
|
+
// ⭐ MsgPost — 행위(`post`)·수신자·(결과가 있으면) id 셋만. 본문은 부르지도 읽지도 않는다.
|
|
238
|
+
if (kind === 'MsgPost') return summarizeMsgPostCall(args, result);
|
|
213
239
|
if (kind === 'UpdatePlan') {
|
|
214
240
|
const plan = Array.isArray(args.plan) ? args.plan : [];
|
|
215
241
|
const current = plan.find((step) => asRecord(step)?.status === 'in_progress');
|
|
@@ -230,6 +256,29 @@ function summarizeToolCallForRender(
|
|
|
230
256
|
return summarizeToolCall(kind, args);
|
|
231
257
|
}
|
|
232
258
|
|
|
259
|
+
/** MsgPost 머리글 — 행위(`post`)·수신자·id. 펼치기 전에도 세 가지가 한 줄에 다 있다. */
|
|
260
|
+
function summarizeMsgPostCall(args: Record<string, unknown>, result?: unknown): string {
|
|
261
|
+
const to = typeof args.to === 'string' ? args.to.trim() : '';
|
|
262
|
+
const id = msgPostMessage(asRecord(result))?.id;
|
|
263
|
+
const route = to ? `post → ${to}` : 'post';
|
|
264
|
+
return typeof id === 'string' || typeof id === 'number' ? `${route} #${id}` : route;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/** 결과 페이로드의 `message` 레코드. 모양을 못 읽으면 `null` — 없는 필드를 지어내지 않는다. */
|
|
268
|
+
function msgPostMessage(resultRecord: Record<string, unknown> | null): Record<string, unknown> | null {
|
|
269
|
+
return asRecord(resultRecord?.message);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/** MsgPost 결과 본문. 접힌 행은 비우고 펼친 변형에는 원래 결과 전체를 한 번만 싣는다. */
|
|
273
|
+
function buildMsgPostBodyLines(
|
|
274
|
+
resultRecord: Record<string, unknown> | null,
|
|
275
|
+
includeMsgPostBody: boolean,
|
|
276
|
+
): string[] {
|
|
277
|
+
if (!includeMsgPostBody) return [];
|
|
278
|
+
if (!resultRecord) return [];
|
|
279
|
+
return JSON.stringify(resultRecord, null, 2).split('\n');
|
|
280
|
+
}
|
|
281
|
+
|
|
233
282
|
function summarizeSpecialToolCall(kind: ToolRenderName, args: Record<string, unknown>): string | null {
|
|
234
283
|
if (kind === 'AstGrep') {
|
|
235
284
|
const pattern = typeof args.pattern === 'string' ? args.pattern : '';
|
|
@@ -292,14 +341,17 @@ function summarizeStructuralSearchRender(kind: ToolRenderName, bodyText: string
|
|
|
292
341
|
}
|
|
293
342
|
|
|
294
343
|
function buildToolBodyLines(
|
|
295
|
-
kind:
|
|
344
|
+
kind: ToolRenderKind,
|
|
296
345
|
args: Record<string, unknown>,
|
|
297
346
|
result: unknown,
|
|
298
347
|
resultRecord: Record<string, unknown> | null,
|
|
348
|
+
options?: ToolRenderModelOptions,
|
|
299
349
|
): string[] {
|
|
300
350
|
const syntheticGuard = extractSyntheticGuardSummary(result);
|
|
301
351
|
if (syntheticGuard) return [syntheticGuard];
|
|
302
352
|
|
|
353
|
+
if (kind === 'MsgPost') return buildMsgPostBodyLines(resultRecord, options?.includeMsgPostBody === true);
|
|
354
|
+
|
|
303
355
|
if (kind === 'Edit' || kind === 'Write') {
|
|
304
356
|
const edit = resultRecord?.edit && isEditResult(resultRecord.edit) ? resultRecord.edit : null;
|
|
305
357
|
const output = typeof resultRecord?.output === 'string' ? resultRecord.output : null;
|
package/src/cli/agent-cli.ts
CHANGED
|
@@ -57,6 +57,13 @@ export function emitHarnessFeedbackProgress(
|
|
|
57
57
|
type CliAgentDispatch = typeof import('../skills/tools/agent.js').dispatchAgent;
|
|
58
58
|
let cliAgentDispatchForTesting: CliAgentDispatch | undefined;
|
|
59
59
|
|
|
60
|
+
let cliRunTurnForTesting: typeof runTurn | undefined;
|
|
61
|
+
|
|
62
|
+
/** Test seam for exercising the real Commander and pipeline path without an LLM call. */
|
|
63
|
+
export function setCliRunTurnForTesting(runTurnForTesting: typeof runTurn | undefined): void {
|
|
64
|
+
cliRunTurnForTesting = runTurnForTesting;
|
|
65
|
+
}
|
|
66
|
+
|
|
60
67
|
export function setCliAgentDispatchForTesting(dispatch: CliAgentDispatch | undefined): void {
|
|
61
68
|
cliAgentDispatchForTesting = dispatch;
|
|
62
69
|
}
|
|
@@ -524,7 +531,11 @@ export async function runChatTurnCli(opts: {
|
|
|
524
531
|
...(modelFamily !== undefined ? { modelFamily } : {}),
|
|
525
532
|
...(enabledToolNames !== undefined ? { enabledTools: enabledToolNames } : {}),
|
|
526
533
|
});
|
|
527
|
-
const
|
|
534
|
+
const discipline = opts.goalLoop
|
|
535
|
+
? (require('../impl-discipline/index.js') as typeof import('../impl-discipline/index.js'))
|
|
536
|
+
.buildImplDisciplineSystemMessages({ text: opts.userText })
|
|
537
|
+
: [];
|
|
538
|
+
const joined = [...universal, ...discipline]
|
|
528
539
|
.map(m => (typeof m.content === 'string' ? m.content : ''))
|
|
529
540
|
.filter(s => s.length > 0)
|
|
530
541
|
.join('\n\n');
|
|
@@ -559,7 +570,7 @@ export async function runChatTurnCli(opts: {
|
|
|
559
570
|
}
|
|
560
571
|
let result: Awaited<ReturnType<typeof runTurn>>;
|
|
561
572
|
try {
|
|
562
|
-
result = await (opts.runTurn ?? runTurn)({
|
|
573
|
+
result = await (opts.runTurn ?? cliRunTurnForTesting ?? runTurn)({
|
|
563
574
|
userConfig: opts.cfg,
|
|
564
575
|
sessionId: session.id,
|
|
565
576
|
userText: opts.userText,
|
package/src/cli/control-cli.ts
CHANGED
|
@@ -13,7 +13,8 @@ import { RESOURCE_KINDS, type ResourceKind } from '../control-plane/ledger.js';
|
|
|
13
13
|
import { runControlJoin, type ControlJoinOptions } from './control-join-cli.js';
|
|
14
14
|
import type { ResourceView } from '../control-plane/ledger.js';
|
|
15
15
|
import { issueMemberToken, revokeMemberToken, listMemberTokens } from '../control-plane/member-tokens.js';
|
|
16
|
-
import { collectControlStatus } from '../control/control-status.js';
|
|
16
|
+
import { collectControlStatus, readControlHqLease } from '../control/control-status.js';
|
|
17
|
+
import { getUserConfig } from '../user-config.js';
|
|
17
18
|
|
|
18
19
|
function controlPort(flag?: string): number {
|
|
19
20
|
const raw = flag ?? (process.env.ELANOUS_CONTROL_PORT?.trim() || undefined);
|
|
@@ -97,8 +98,9 @@ export async function runResourcesQuery(options: { where?: string; kind?: string
|
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
|
|
100
|
-
export async function runControlServe(options: { port?: string; host?: string; followLease?: boolean; bucket?: string;
|
|
101
|
+
export async function runControlServe(options: { port?: string; host?: string; followLease?: boolean; followHqLease?: boolean; bucket?: string;
|
|
101
102
|
read?: (bucket: string) => RoleLeaseRead | Promise<RoleLeaseRead>; machine?: string;
|
|
103
|
+
readHq?: typeof readControlHqLease; hqHostName?: string;
|
|
102
104
|
/** 시험 seam — 이 신호로 멈춘다. ⛔ 시험이 `process.emit('SIGTERM')` 로 멈추면 같은 프로세스의 다른 SIGTERM 처리기
|
|
103
105
|
* (로그 저장소가 «남은 처리기가 없으면 자기에게 진짜 SIGTERM 을 다시 보낸다»)가 깨어 **시험 러너가 죽었다**
|
|
104
106
|
* (📏 09-27 0.2.3 게이트: 전체 한 프로세스면 이 시험 자리에서 rc 143 · 조각으로 나누면 완주). */
|
|
@@ -108,12 +110,26 @@ export async function runControlServe(options: { port?: string; host?: string; f
|
|
|
108
110
|
let bucket: string | undefined;
|
|
109
111
|
try {
|
|
110
112
|
port = controlPort(options.port);
|
|
113
|
+
if (options.followLease && options.followHqLease) throw new Error('GCS 임대와 HQ 임대는 동시에 따를 수 없음');
|
|
111
114
|
if (options.followLease) bucket = resolveRoleBucket(options.bucket);
|
|
112
115
|
} catch (error) { console.error(reasonFor(error)); process.exitCode = 2; return; }
|
|
113
|
-
const machine = resolveMachineName({ option: options.machine }).machine;
|
|
114
|
-
|
|
116
|
+
const machine = options.followHqLease ? '' : resolveMachineName({ option: options.machine }).machine;
|
|
117
|
+
// HQ's holder identity is hq.hostName. A caller-controlled role machine alias cannot grant primary writes.
|
|
118
|
+
let hqHostName: string | undefined;
|
|
119
|
+
if (options.followHqLease) {
|
|
120
|
+
try { hqHostName = options.hqHostName ?? getUserConfig().hq?.hostName; }
|
|
121
|
+
catch { /* Unknown local identity must remain fail closed at the write boundary. */ }
|
|
122
|
+
}
|
|
123
|
+
const leaseView = bucket !== undefined ? createLeaseHolderView({
|
|
115
124
|
machine, read: () => (options.read ?? readRoleLeaseAsync)(bucket),
|
|
116
|
-
})
|
|
125
|
+
}) : options.followHqLease ? createLeaseHolderView({
|
|
126
|
+
machine: hqHostName ?? '', read: () => {
|
|
127
|
+
const { record, expired } = (options.readHq ?? readControlHqLease)();
|
|
128
|
+
return hqHostName && record && expired === false
|
|
129
|
+
? { kind: 'present' as const, doc: { holder: record.holder, generation: record.generation, state: 'held' as const, renewedAt: record.renewedAt } }
|
|
130
|
+
: { kind: 'unmeasured' as const, why: 'HQ lease missing or expired' };
|
|
131
|
+
},
|
|
132
|
+
}) : undefined;
|
|
117
133
|
let server: ReturnType<typeof startControlServer>;
|
|
118
134
|
try { server = startControlServer({ port, hostname: options.host, ...(leaseView ? { leaseView, requireKnownLeaseForWrites: true } : {}) }); }
|
|
119
135
|
catch (error) { console.error(`관제부 시작 실패: ${reasonFor(error)}`); process.exitCode = 2; return; }
|
|
@@ -130,7 +146,7 @@ export async function runControlServe(options: { port?: string; host?: string; f
|
|
|
130
146
|
if (options.signal.aborted) { stop(); return; }
|
|
131
147
|
options.signal.addEventListener('abort', stop, { once: true });
|
|
132
148
|
}
|
|
133
|
-
console.log(`관제부 ${new URL(server.url).host} · 토큰 ${join(effectiveInstanceRoot(), 'control', 'tokens.json')}${bucket
|
|
149
|
+
console.log(`관제부 ${new URL(server.url).host} · 토큰 ${join(effectiveInstanceRoot(), 'control', 'tokens.json')}${bucket !== undefined ? ` · 임대 따름 · ${bucket} · 나=${machine}` : options.followHqLease ? ` · HQ 임대 따름 · 나=${hqHostName ?? '미확인'}` : ''}`);
|
|
134
150
|
});
|
|
135
151
|
}
|
|
136
152
|
|
|
@@ -199,8 +215,9 @@ export function registerControlCommands(program: Command): void {
|
|
|
199
215
|
.option('--port <n>', '리스닝 포트(0=임시 포트)')
|
|
200
216
|
.option('--host <addr>', '루프백 또는 tailnet 바인드 주소')
|
|
201
217
|
.option('--follow-lease', '임대 보유자일 때만 쓰기')
|
|
218
|
+
.option('--follow-hq-lease', 'HQ 임대 보유자일 때만 쓰기')
|
|
202
219
|
.option('--bucket <bucket>', 'GCS 임대 버킷')
|
|
203
|
-
.action((options: { port?: string; host?: string; followLease?: boolean; bucket?: string }) => runControlServe(options));
|
|
220
|
+
.action((options: { port?: string; host?: string; followLease?: boolean; followHqLease?: boolean; bucket?: string }) => runControlServe(options));
|
|
204
221
|
control.command('member').description('합류 기계의 자원을 포그라운드에서 등록·심박')
|
|
205
222
|
.option('--resource <kind:name=url>', '등록할 자원', (value: string, previous: string[]) => [...previous, value], [] as string[])
|
|
206
223
|
.option('--interval <seconds>', '심박 간격(초)')
|
package/src/cli/doctor-cli.ts
CHANGED
|
@@ -222,6 +222,8 @@ export interface DoctorCliDeps extends DoctorOptions, Pick<DoctorFixDeps, 'home'
|
|
|
222
222
|
hostDoctorMachineResources?: () => Promise<ResourceView[]>;
|
|
223
223
|
/** `doctor visit`/`doctor status` 원장 디렉터리(시험 seam) — 기본 = `runLedgerDir()`. */
|
|
224
224
|
doctorVisitLedgerDir?: string;
|
|
225
|
+
/** `doctor visit` 사고 선례 연결 루트(시험 seam) — 기본 = `doctorVisitIncidentRoot()` · `null` 이면 건너뛴다. */
|
|
226
|
+
doctorVisitIncidentRoot?: string | null;
|
|
225
227
|
}
|
|
226
228
|
|
|
227
229
|
const repositoryRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..');
|
|
@@ -1378,8 +1380,9 @@ export function registerDoctorCommand(program: Command, deps: DoctorCliDeps = {}
|
|
|
1378
1380
|
symptom: opts.symptom,
|
|
1379
1381
|
...(opts.evidence !== undefined ? { evidence: opts.evidence } : {}),
|
|
1380
1382
|
...(deps.doctorVisitLedgerDir !== undefined ? { dir: deps.doctorVisitLedgerDir } : {}),
|
|
1383
|
+
...(deps.doctorVisitIncidentRoot !== undefined ? { incidentRoot: deps.doctorVisitIncidentRoot } : {}),
|
|
1381
1384
|
});
|
|
1382
|
-
out.log(json ? JSON.stringify(visit) : `doctor visit recorded: runId=${runId} from=${opts.from} symptom=${opts.symptom}${visit.evidence !== undefined ? ` evidence=${visit.evidence}` : ''}`);
|
|
1385
|
+
out.log(json ? JSON.stringify(visit) : `doctor visit recorded: runId=${runId} from=${opts.from} symptom=${opts.symptom}${visit.evidence !== undefined ? ` evidence=${visit.evidence}` : ''}${visit.incidentPrecedents !== undefined ? ` incident-precedents=${visit.incidentPrecedents.length}` : ''}`);
|
|
1383
1386
|
} catch (error) {
|
|
1384
1387
|
const reason = error instanceof Error ? error.message : String(error);
|
|
1385
1388
|
if (json) out.log(JSON.stringify({ status: 'rejected', reason }));
|
package/src/cli/guardian-cli.ts
CHANGED
|
@@ -19,6 +19,16 @@ async function guardianPlan(): Promise<{ db: Database; plan: GuardianPlan }> {
|
|
|
19
19
|
|
|
20
20
|
export function registerGuardianCommands(program: Command): void {
|
|
21
21
|
const guardian = program.command('guardian').description('크론 수호자 그림자 관측(기존 크론·알림 무변경)');
|
|
22
|
+
guardian.command('grok-expiry').description('현재 호스트 Grok 구독 만료 시각과 4시간 경보 상태 출력')
|
|
23
|
+
.action(async () => {
|
|
24
|
+
const { readGrokSubscriptionExpiry } = await import('../grok/credential.js');
|
|
25
|
+
const { grokExpiryAlertLine, grokExpiryStatusLine } = await import('../domains/guardian-tick.js');
|
|
26
|
+
const now = new Date();
|
|
27
|
+
const expiresAt = readGrokSubscriptionExpiry();
|
|
28
|
+
console.log(grokExpiryStatusLine({ now, expiresAt }));
|
|
29
|
+
const alert = grokExpiryAlertLine({ now, expiresAt });
|
|
30
|
+
if (alert) console.log(alert);
|
|
31
|
+
});
|
|
22
32
|
guardian.command('tick').description('현재 시각에 발화했을 잡을 관측(잡은 실행하지 않음)')
|
|
23
33
|
.action(async () => {
|
|
24
34
|
const { guardianTick } = await import('../domains/guardian-tick.js');
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export type LightCliRoute = 'msg' | 'release' | 'tasks' | 'pty' | 'logs' | 'config';
|
|
2
|
+
|
|
3
|
+
const VALUE_FLAGS = new Set(['--config-dir', '--test-state-dir']);
|
|
4
|
+
const HOT_ROOTS = new Set(['msg', 'pty', 'logs', 'tasks']);
|
|
5
|
+
const ROOT_GLOBAL_FLAGS = new Set(['--test', '--config-dir', '--test-state-dir', '--state-dir', '--remote', '-r', '--name', '--help-all', '--version', '-V']);
|
|
6
|
+
const LOG_SUBCOMMANDS = new Set([
|
|
7
|
+
'instances', 'level', 'timeline', 'durations', 'model-input', 'degenerate', 'fields', 'unclosed', 'abandoned-draft-prs',
|
|
8
|
+
]);
|
|
9
|
+
const LOG_VALUE_FLAGS = new Set([
|
|
10
|
+
'--level', '--surface', '--space', '--category', '--exact-category', '--axis', '--event', '--grep',
|
|
11
|
+
'--rework-recurrence-disagreement', '--since', '--until', '--before', '--session', '--limit', '--threshold', '--instance',
|
|
12
|
+
]);
|
|
13
|
+
const LOG_BOOLEAN_FLAGS = new Set([
|
|
14
|
+
'-h', '--help', '-f', '--follow', '--list-categories', '--list-events', '--explain', '--top-failures', '--json', '--json-data', '--test', '--all', '--include-test',
|
|
15
|
+
]);
|
|
16
|
+
|
|
17
|
+
function isRootGlobalFlag(arg: string): boolean {
|
|
18
|
+
return [...ROOT_GLOBAL_FLAGS].some(flag => arg === flag || arg.startsWith(`${flag}=`))
|
|
19
|
+
|| (arg.startsWith('-') && !arg.startsWith('--') && (arg.startsWith('-r') && arg.length > 2 || arg.slice(1).includes('V')));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function isSupportedLogsShape(args: readonly string[]): boolean {
|
|
23
|
+
for (let index = 1; index < args.length; index += 1) {
|
|
24
|
+
const token = args[index]!;
|
|
25
|
+
if (token.startsWith('-')) {
|
|
26
|
+
const equals = token.indexOf('=');
|
|
27
|
+
const flag = equals < 0 ? token : token.slice(0, equals);
|
|
28
|
+
if (LOG_BOOLEAN_FLAGS.has(flag)) continue;
|
|
29
|
+
if (!LOG_VALUE_FLAGS.has(flag)) return false;
|
|
30
|
+
if (equals < 0) index += 1;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
return LOG_SUBCOMMANDS.has(token);
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Select lightweight operational paths whose CLI modules can stand alone. */
|
|
39
|
+
export function selectLightCliRoute(args: readonly string[]): LightCliRoute | undefined {
|
|
40
|
+
const command: string[] = [];
|
|
41
|
+
let index = 0;
|
|
42
|
+
while (index < args.length && args[index]!.startsWith('-')) {
|
|
43
|
+
const flag = args[index]!;
|
|
44
|
+
index += 1;
|
|
45
|
+
if ([...VALUE_FLAGS].some(value => flag.startsWith(`${value}=`))) continue;
|
|
46
|
+
if (VALUE_FLAGS.has(flag)) {
|
|
47
|
+
if (index >= args.length || args[index]!.startsWith('-')) return undefined;
|
|
48
|
+
index += 1;
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
// Only flags removed by the pre-import isolation helpers can safely
|
|
52
|
+
// precede a light route. Other root flags keep their original parser.
|
|
53
|
+
if (flag !== '--test' && !flag.startsWith('--test=')) return undefined;
|
|
54
|
+
}
|
|
55
|
+
for (const token of args.slice(index)) {
|
|
56
|
+
if (token.startsWith('-')) break;
|
|
57
|
+
command.push(token);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// These four operational roots are the hot router. Keep all root flags and
|
|
61
|
+
// every leading-option form on the full entry so its isolation/bootstrap
|
|
62
|
+
// parser remains the sole owner of those semantics.
|
|
63
|
+
if (HOT_ROOTS.has(command[0] ?? '') && (args[0] !== command[0] || args.some(isRootGlobalFlag))) return undefined;
|
|
64
|
+
|
|
65
|
+
if (command[0] === 'msg' && ['list', 'post', 'ack', 'watch'].includes(command[1] ?? '')) return 'msg';
|
|
66
|
+
// --reveal has an audit-log contract owned by the full CLI.
|
|
67
|
+
if (command[0] === 'config' && command[1] === 'get' && !args.some(arg => arg === '--reveal' || arg.startsWith('--reveal='))) return 'config';
|
|
68
|
+
if (command[0] === 'release' && command[1] === 'checklist'
|
|
69
|
+
&& (command[2] === 'status' || command[2] === 'list')) return 'release';
|
|
70
|
+
if (command[0] === 'tasks' && (command[1] === 'list' || command[1] === 'show'
|
|
71
|
+
|| (command[1] === 'hand' && args.includes('--help')))) return 'tasks';
|
|
72
|
+
if (command[0] === 'pty' && ['list', 'snapshot', 'text', 'state'].includes(command[1] ?? '')) return 'pty';
|
|
73
|
+
if (command[0] === 'logs' && isSupportedLogsShape(args)) return 'logs';
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
@@ -2,6 +2,7 @@ import type { Command } from 'commander';
|
|
|
2
2
|
import type { LLMProvider } from '../llm.js';
|
|
3
3
|
import { detectProviders, type DetectedProvider } from '../llm/provider-detect.js';
|
|
4
4
|
import { probeProvider, type ProviderProbeResult } from '../llm/provider-probe.js';
|
|
5
|
+
import { openrouterSource } from '../registry/discovery/sources/openrouter.js';
|
|
5
6
|
import {
|
|
6
7
|
getUserConfig, reloadUserConfig, saveUserConfig, userConfigPath,
|
|
7
8
|
type UserConfig,
|
|
@@ -20,6 +21,7 @@ export interface LlmDetectDeps {
|
|
|
20
21
|
config?: () => UserConfig;
|
|
21
22
|
save?: (config: UserConfig) => void;
|
|
22
23
|
output?: (line: string) => void;
|
|
24
|
+
discoverUpstageModels?: () => Promise<string[] | null>;
|
|
23
25
|
}
|
|
24
26
|
|
|
25
27
|
export interface LlmDetectResult {
|
|
@@ -29,6 +31,15 @@ export interface LlmDetectResult {
|
|
|
29
31
|
/** Why a selected provider was not written (an explicit llm.provider is never overwritten). */
|
|
30
32
|
notApplied?: string;
|
|
31
33
|
error?: string;
|
|
34
|
+
/** OpenRouter /models candidates; null means discovery was unavailable, not an empty catalogue. */
|
|
35
|
+
upstageCandidates?: string[] | null;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async function discoverUpstageModels(): Promise<string[] | null> {
|
|
39
|
+
const result = await openrouterSource.run({ timeoutMs: 3_000 });
|
|
40
|
+
if (!result.ok) return null;
|
|
41
|
+
return result.models.map(({ id }) => id).filter((id) => /^upstage\/[^/]+$/.test(id))
|
|
42
|
+
.map((id) => `openrouter/${id}`).sort();
|
|
32
43
|
}
|
|
33
44
|
|
|
34
45
|
/** Discovery alone cannot validate credentials. Only a successful probe can select a provider. */
|
|
@@ -76,6 +87,13 @@ export async function runLlmDetect(
|
|
|
76
87
|
}
|
|
77
88
|
}
|
|
78
89
|
|
|
90
|
+
let upstageCandidates: string[] | null | undefined;
|
|
91
|
+
if (!options.apply && (!options.probe || selected === 'openrouter')
|
|
92
|
+
&& rows.some((row) => row.provider === 'openrouter' && row.available && row.auth === 'apikey')) {
|
|
93
|
+
try { upstageCandidates = await (deps.discoverUpstageModels ?? discoverUpstageModels)(); }
|
|
94
|
+
catch { upstageCandidates = null; }
|
|
95
|
+
}
|
|
96
|
+
|
|
79
97
|
let applied = false;
|
|
80
98
|
let notApplied: string | undefined;
|
|
81
99
|
const previous = config.llm?.provider ?? 'auto';
|
|
@@ -91,7 +109,8 @@ export async function runLlmDetect(
|
|
|
91
109
|
}
|
|
92
110
|
applied = true;
|
|
93
111
|
}
|
|
94
|
-
const result: LlmDetectResult = { candidates: rows, selected, applied,
|
|
112
|
+
const result: LlmDetectResult = { candidates: rows, selected, applied,
|
|
113
|
+
...(upstageCandidates !== undefined ? { upstageCandidates } : {}), ...(notApplied ? { notApplied } : {}) };
|
|
95
114
|
if (options.json) output(JSON.stringify(result));
|
|
96
115
|
else {
|
|
97
116
|
if (rows.length === 0) output('No LLM providers detected.');
|
|
@@ -111,6 +130,9 @@ export async function runLlmDetect(
|
|
|
111
130
|
}
|
|
112
131
|
}
|
|
113
132
|
if (options.probe && !selected) output('No provider passed the probe; configuration unchanged.');
|
|
133
|
+
if (upstageCandidates !== undefined) output(upstageCandidates === null
|
|
134
|
+
? 'Upstage candidates: catalogue unavailable'
|
|
135
|
+
: `Upstage candidates: ${upstageCandidates.join(', ') || '(none in OpenRouter /models)'}`);
|
|
114
136
|
if (applied) output(`Applied llm.provider=${selected} — revert: elanous config set llm.provider auto`);
|
|
115
137
|
if (notApplied) output(notApplied);
|
|
116
138
|
}
|