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/dashboard/index.ts
CHANGED
|
@@ -306,13 +306,20 @@ import {
|
|
|
306
306
|
} from './render/renderer.js';
|
|
307
307
|
import { buildPromptFrameDividerRows } from '../display/prompt-frame-paint.js';
|
|
308
308
|
import {
|
|
309
|
-
drawTurnTypeaheadPromptRows,
|
|
310
309
|
paintTurnTypeaheadEchoRow,
|
|
311
310
|
resolveEssentialFrameCursorDecision,
|
|
312
311
|
type EssentialFrameCursorDecision,
|
|
313
|
-
type TurnTypeaheadPromptPaintSink,
|
|
314
|
-
type TurnTypeaheadPromptRowsInput,
|
|
315
312
|
} from './input/turn-typeahead-prompt.js';
|
|
313
|
+
import {
|
|
314
|
+
buildDashboardTurnTypeaheadPromptZone,
|
|
315
|
+
drawDashboardTurnTypeaheadPromptRows,
|
|
316
|
+
observeDashboardTurnTypeaheadPromptZone,
|
|
317
|
+
} from './turn-typeahead-prompt-zone.js';
|
|
318
|
+
export {
|
|
319
|
+
buildDashboardTurnTypeaheadPromptZone,
|
|
320
|
+
drawDashboardTurnTypeaheadPromptRows,
|
|
321
|
+
observeDashboardTurnTypeaheadPromptZone,
|
|
322
|
+
} from './turn-typeahead-prompt-zone.js';
|
|
316
323
|
import { DashboardStateStore } from './runtime/state-store.js';
|
|
317
324
|
import { perf } from '../perf-counters.js';
|
|
318
325
|
import { createSearchModal, type SearchModalHandle, type SearchItem } from '../chat/search/modal.js';
|
|
@@ -882,7 +889,8 @@ import {
|
|
|
882
889
|
refreshDirtyAsync as refreshGitDirtyAsync,
|
|
883
890
|
refreshGitSnapshotAsync,
|
|
884
891
|
} from '../git-fs/index.js';
|
|
885
|
-
import {
|
|
892
|
+
import { createIdleGitPoll, dashboardIdleMs, gitDirtyRefreshIntervalMs } from '../git-fs/idle-refresh.js';
|
|
893
|
+
import { refreshSelfAmbientCache, selfAmbientKeepWarmIntervalMs } from '../agent/self-ambient-cache.js';
|
|
886
894
|
import { getPty, listPty, requestPtyTakeover } from '../pty-shell/registry.js';
|
|
887
895
|
import { listPtyManifestRowsAt } from '../pty-shell/pty-manifest.js';
|
|
888
896
|
import { ptyManifestTargets } from '../domains/fleet.js';
|
|
@@ -1176,7 +1184,7 @@ export function registerDashboardCoreHostTools(host: Pick<PluginHost, 'registerH
|
|
|
1176
1184
|
}
|
|
1177
1185
|
import { registerDashboardPaneHostTools } from './panes/host-tools.js';
|
|
1178
1186
|
import { type ThemeTokens } from '../theme/tokens.js';
|
|
1179
|
-
import { resolveActiveTheme } from './render/theme-resolver.js';
|
|
1187
|
+
import { getActiveThemeName, resolveActiveTheme } from './render/theme-resolver.js';
|
|
1180
1188
|
import { getTheme } from '../themes/index.js';
|
|
1181
1189
|
import type { PaneFocus, PreviewSource, WorkingDirView } from '../workspace-types.js';
|
|
1182
1190
|
import type { DisplayMouseEvent } from '../display/types.js';
|
|
@@ -1467,30 +1475,6 @@ export function resolveDashboardSlashSurfaceUx(
|
|
|
1467
1475
|
: undefined;
|
|
1468
1476
|
}
|
|
1469
1477
|
|
|
1470
|
-
/** Dashboard draw entry for the input-prompt zone. Streaming redraws reach
|
|
1471
|
-
* this production binding through the zone renderer below. */
|
|
1472
|
-
export function drawDashboardTurnTypeaheadPromptRows(
|
|
1473
|
-
input: TurnTypeaheadPromptRowsInput,
|
|
1474
|
-
sink?: TurnTypeaheadPromptPaintSink,
|
|
1475
|
-
): string[] {
|
|
1476
|
-
return drawTurnTypeaheadPromptRows(input, sink);
|
|
1477
|
-
}
|
|
1478
|
-
|
|
1479
|
-
/** Essential frames own the fallback prompt caret; Z-axis state only wins
|
|
1480
|
-
* when a modal has made a visible claim. */
|
|
1481
|
-
export function buildDashboardTurnTypeaheadPromptZone(input: TurnTypeaheadPromptRowsInput & {
|
|
1482
|
-
suppressPromptArea: boolean;
|
|
1483
|
-
}): LayoutZone {
|
|
1484
|
-
return {
|
|
1485
|
-
id: 'input-prompt',
|
|
1486
|
-
height: input.frame.inputHeight,
|
|
1487
|
-
render: (height, width) => {
|
|
1488
|
-
if (input.suppressPromptArea) return Array.from({ length: height }, () => ' '.repeat(width));
|
|
1489
|
-
return drawDashboardTurnTypeaheadPromptRows({ ...input, height, width });
|
|
1490
|
-
},
|
|
1491
|
-
};
|
|
1492
|
-
}
|
|
1493
|
-
|
|
1494
1478
|
/** The chat-main submit branch calls this before any model dispatch. Keeping
|
|
1495
1479
|
* the decision here lets the dashboard test execute the same entry point. */
|
|
1496
1480
|
export function resolveDashboardHarnessSubmitIntent(
|
|
@@ -1501,42 +1485,6 @@ export function resolveDashboardHarnessSubmitIntent(
|
|
|
1501
1485
|
return routeDevHarnessSubmitIntent(resolveIntent(text, options));
|
|
1502
1486
|
}
|
|
1503
1487
|
|
|
1504
|
-
/** 프롬프트 zone 에 관측만 덧입힌다 — 렌더 산출은 `inner` 가 소유한다.
|
|
1505
|
-
*
|
|
1506
|
-
* ⭐ **왜 뽑았나**(무인 리뷰 must-fix · 2026-08-01): 종전엔 이 래퍼가 `zones.push({...})` 안에
|
|
1507
|
-
* 인라인이라, 테스트가 `inner`(=`buildDashboardTurnTypeaheadPromptZone`)만 불러도 통과했다.
|
|
1508
|
-
* ⇒ ***래퍼가 `inner.render` 를 부르는 것을 끊어도 검사가 침묵***했다. 이제 그 결선이 검사된다.
|
|
1509
|
-
*
|
|
1510
|
-
* ⛔⚠️ **여전히 검사 밖인 한 겹**: 이 함수의 반환이 실제로 `zones` 배열에 **push 되는지**는
|
|
1511
|
-
* `showDashboard` 안의 지역 조립부라 단위 검사가 닿지 않는다. ***무한 후퇴이므로 여기서 경계를 긋는다*** —
|
|
1512
|
-
* 그 한 겹은 **라이브 검증**(`dev --elanous --hold` ⊕ `pty snapshot`)이 맡는다. */
|
|
1513
|
-
export function observeDashboardTurnTypeaheadPromptZone(
|
|
1514
|
-
inner: LayoutZone,
|
|
1515
|
-
deps: {
|
|
1516
|
-
promptBottomRow: number;
|
|
1517
|
-
state: { buffer: string; queuedSubmissions: string[] };
|
|
1518
|
-
isDebugEnabled?: () => boolean;
|
|
1519
|
-
log?: (category: string, event: string, data: Record<string, unknown>) => void;
|
|
1520
|
-
},
|
|
1521
|
-
): LayoutZone {
|
|
1522
|
-
return {
|
|
1523
|
-
...inner,
|
|
1524
|
-
render: (height, width) => {
|
|
1525
|
-
const rows = inner.render(height, width);
|
|
1526
|
-
const enabled = deps.isDebugEnabled ? deps.isDebugEnabled() : debug.enabled;
|
|
1527
|
-
if (deps.state.buffer && enabled) {
|
|
1528
|
-
(deps.log ?? ((c, e, d) => debug.log(c, e, d)))('dashboard.turn-typeahead-prompt', 'dashboard-draw-prompt', {
|
|
1529
|
-
row: deps.promptBottomRow,
|
|
1530
|
-
text: rows.at(-1) ?? '',
|
|
1531
|
-
bufferLength: deps.state.buffer.length,
|
|
1532
|
-
queuedSubmissionCount: deps.state.queuedSubmissions.length,
|
|
1533
|
-
});
|
|
1534
|
-
}
|
|
1535
|
-
return rows;
|
|
1536
|
-
},
|
|
1537
|
-
};
|
|
1538
|
-
}
|
|
1539
|
-
|
|
1540
1488
|
type DashboardFrameRenderer = (lines: string[], options: RenderOptions) => void;
|
|
1541
1489
|
|
|
1542
1490
|
/** Compose coordinator-owned modal surfaces into the dashboard's single frame overlay. */
|
|
@@ -1915,6 +1863,20 @@ export function renderDashboardStatusLines(input: Omit<DashboardStatusLinesInput
|
|
|
1915
1863
|
return buildDashboardStatusLines({ ...input, seatsNow });
|
|
1916
1864
|
}
|
|
1917
1865
|
|
|
1866
|
+
/** The pending-input registry is process-local; a remote ACP loop cannot drain it. */
|
|
1867
|
+
export function activeDashboardTypeaheadSessionId(acpSessionId: string | null, daemonAttached: boolean): string | null {
|
|
1868
|
+
return daemonAttached ? null : acpSessionId;
|
|
1869
|
+
}
|
|
1870
|
+
|
|
1871
|
+
/** The streaming keyboard's production typeahead transition. */
|
|
1872
|
+
export function applyDashboardStreamingTypeaheadKey(
|
|
1873
|
+
state: Parameters<typeof applyTurnTypeaheadKey>[0],
|
|
1874
|
+
key: Parameters<typeof applyTurnTypeaheadKey>[1],
|
|
1875
|
+
isImmediate: Parameters<typeof applyTurnTypeaheadKey>[2],
|
|
1876
|
+
): ReturnType<typeof applyTurnTypeaheadKey> {
|
|
1877
|
+
return applyTurnTypeaheadKey(state, key, isImmediate);
|
|
1878
|
+
}
|
|
1879
|
+
|
|
1918
1880
|
export async function showDashboard(opts: ShowDashboardOptions = {}): Promise<DashboardAction> {
|
|
1919
1881
|
let firstDashboardFrameRendered = false;
|
|
1920
1882
|
await awaitGlobalPersonaLoad().catch(() => {});
|
|
@@ -2915,6 +2877,11 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
2915
2877
|
// current value so log analysis can filter "what keys fired while
|
|
2916
2878
|
// a turn was in flight".
|
|
2917
2879
|
let streamingInFlight = false;
|
|
2880
|
+
let noteClipboardActivity: () => void = () => {};
|
|
2881
|
+
let noteClipboardBusyChange: () => void = () => {};
|
|
2882
|
+
let noteClipboardPanelState: (active: boolean, reason: string) => void = () => {};
|
|
2883
|
+
let dashboardAcpIsBusy: () => boolean = () => false;
|
|
2884
|
+
let lastDashboardInputAt = Date.now();
|
|
2918
2885
|
/** 지금 턴의 escGate 중단 — 외부 `/stop`(TUI-STOP-INPUT-BYPASS)이 대기열을 건너뛰어 부른다. 턴 밖이면 null. */
|
|
2919
2886
|
let currentTurnExternalStop: (() => void) | null = null;
|
|
2920
2887
|
const resolveTmuxStatusLabel = (): string | null => {
|
|
@@ -3404,6 +3371,8 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
3404
3371
|
getCwd: () => workingDir.cwd,
|
|
3405
3372
|
notify: (line) => { chatLines.push(C.muted(line)); draw(); },
|
|
3406
3373
|
});
|
|
3374
|
+
// Set only by the failed-turn callback and consumed by that turn's streaming cleanup.
|
|
3375
|
+
let autowakeTurnFailureRaw: string | null = null;
|
|
3407
3376
|
const internalTurnYieldPort = wrapAgentWakePort(seatAutowake.wrapPort(internalTurnGate.port));
|
|
3408
3377
|
// ⭐ H5 자기 예약 깨움(TUI-H5-SCHEDULE-WAKEUP) — 프로세스 안 타이머가 그 시각에 H2 문으로 한 턴을 청한다.
|
|
3409
3378
|
// 직전 회차 판정 = 그 예약이 연 내부 턴이 아직 도나. 도구 등록은 아래 host tool 자리(하니스 자식 제외).
|
|
@@ -3416,7 +3385,6 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
3416
3385
|
const acpSessionIdRef: { current: string | null } = { current: null };
|
|
3417
3386
|
const adoptedAcpSessionIds = new Set<string>();
|
|
3418
3387
|
let activeAcpSessionId: string | null = null;
|
|
3419
|
-
const activeSessionIdForTypeahead = (): string | null => acpSessionIdRef.current;
|
|
3420
3388
|
const paintTurnTypeaheadEcho = (): void => {
|
|
3421
3389
|
const { rows: tr, cols: tc } = termSize();
|
|
3422
3390
|
const pf = currentPromptFrame(tr);
|
|
@@ -4087,6 +4055,8 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
4087
4055
|
// makes the "*N" suffix tick up within the same frame so the
|
|
4088
4056
|
// user sees feedback for their own action immediately.
|
|
4089
4057
|
// TUI-TYPING-LAG — async probe: `git status` must not block key input.
|
|
4058
|
+
lastDashboardInputAt = Date.now();
|
|
4059
|
+
lastGitDirtyProbeAt = lastDashboardInputAt;
|
|
4090
4060
|
void refreshGitDirtyAsync(getSessionCwd(), { force: true })
|
|
4091
4061
|
.then(() => { try { draw(); } catch { /* TUI torn down */ } }, () => { /* noop */ });
|
|
4092
4062
|
});
|
|
@@ -4111,9 +4081,11 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
4111
4081
|
// extras.
|
|
4112
4082
|
// 3. SWD flip → dispose + re-wire (fresh repo root).
|
|
4113
4083
|
let gitUnsub: (() => void) | null = null;
|
|
4084
|
+
let lastGitDirtyProbeAt = Date.now();
|
|
4114
4085
|
const wireGitForSwd = (): void => {
|
|
4115
4086
|
if (gitUnsub) { try { gitUnsub(); } catch {} gitUnsub = null; }
|
|
4116
4087
|
const swd = getSessionCwd();
|
|
4088
|
+
lastGitDirtyProbeAt = Date.now();
|
|
4117
4089
|
gitUnsub = subscribeGitChanges(swd, () => {
|
|
4118
4090
|
try { draw(); } catch { /* noop */ }
|
|
4119
4091
|
});
|
|
@@ -4151,17 +4123,18 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
4151
4123
|
// the git snapshot (async subprocesses) and the self-ambient store scan (worker thread). A turn
|
|
4152
4124
|
// then serves them from cache instead of rebuilding synchronously on the turn path. Both are
|
|
4153
4125
|
// no-ops while the cached value is younger than the threshold; failures are fail-soft.
|
|
4126
|
+
const currentDashboardIdleMs = (): number =>
|
|
4127
|
+
dashboardIdleMs(Date.now(), lastDashboardInputAt, streamingInFlight || dashboardAcpIsBusy());
|
|
4154
4128
|
const warmTurnPreambleCaches = (): void => {
|
|
4155
|
-
|
|
4156
|
-
try { void refreshSelfAmbientCache({}, { ifOlderThanMs:
|
|
4129
|
+
const ambientCacheTtlMs = selfAmbientKeepWarmIntervalMs(currentDashboardIdleMs());
|
|
4130
|
+
try { void refreshSelfAmbientCache({}, { ifOlderThanMs: ambientCacheTtlMs }); } catch { /* noop */ }
|
|
4157
4131
|
};
|
|
4158
|
-
|
|
4159
|
-
|
|
4160
|
-
warmTurnPreambleCaches();
|
|
4132
|
+
const probeGitDirty = (minIntervalMs: number): void => {
|
|
4133
|
+
lastGitDirtyProbeAt = Date.now();
|
|
4161
4134
|
try {
|
|
4162
4135
|
const before = getGitStatusView(getSessionCwd());
|
|
4163
4136
|
// TUI-TYPING-LAG — the 5s probe ran `git status` synchronously (130ms+, hundreds under load).
|
|
4164
|
-
void refreshGitDirtyAsync(getSessionCwd(), { minIntervalMs
|
|
4137
|
+
void refreshGitDirtyAsync(getSessionCwd(), { minIntervalMs }).then((after) => {
|
|
4165
4138
|
if (
|
|
4166
4139
|
(before.dirty?.total ?? -1) !== (after.dirty?.total ?? -1) ||
|
|
4167
4140
|
(before.aheadBehind?.ahead ?? -1) !== (after.aheadBehind?.ahead ?? -1)
|
|
@@ -4170,6 +4143,26 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
4170
4143
|
}
|
|
4171
4144
|
}, () => { /* noop */ });
|
|
4172
4145
|
} catch { /* noop */ }
|
|
4146
|
+
};
|
|
4147
|
+
// CLASSIC-IDLE-GIT-POLL — no git children while idle (2 min without input); the next key warms once
|
|
4148
|
+
// off the input path (deferred) and polling resumes. `git-fs.idle poll-state` records each flip.
|
|
4149
|
+
const gitIdlePoll = createIdleGitPoll({
|
|
4150
|
+
idleMs: currentDashboardIdleMs,
|
|
4151
|
+
poll: (idleMs) => {
|
|
4152
|
+
try { void refreshGitSnapshotAsync(getSessionCwd(), { ifOlderThanMs: 30_000 }); } catch { /* noop */ }
|
|
4153
|
+
if (Date.now() - lastGitDirtyProbeAt < gitDirtyRefreshIntervalMs(idleMs)) return;
|
|
4154
|
+
probeGitDirty(gitDirtyRefreshIntervalMs(idleMs));
|
|
4155
|
+
},
|
|
4156
|
+
warm: () => {
|
|
4157
|
+
try { void refreshGitSnapshotAsync(getSessionCwd(), { ifOlderThanMs: 30_000 }); } catch { /* noop */ }
|
|
4158
|
+
probeGitDirty(0);
|
|
4159
|
+
},
|
|
4160
|
+
});
|
|
4161
|
+
warmTurnPreambleCaches();
|
|
4162
|
+
try { void refreshGitSnapshotAsync(getSessionCwd(), { ifOlderThanMs: 30_000 }); } catch { /* noop */ }
|
|
4163
|
+
const gitDirtyTimer: ReturnType<typeof setInterval> = setInterval(() => {
|
|
4164
|
+
warmTurnPreambleCaches();
|
|
4165
|
+
gitIdlePoll.tick();
|
|
4173
4166
|
}, 5_000);
|
|
4174
4167
|
(gitDirtyTimer as unknown as { unref?: () => void }).unref?.();
|
|
4175
4168
|
// The running module's installed version, not the user's working directory, is the baseline.
|
|
@@ -4584,6 +4577,8 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
4584
4577
|
};
|
|
4585
4578
|
let pluginHost: PluginHost;
|
|
4586
4579
|
let lastThemeLoadError = '';
|
|
4580
|
+
let lastThemeResolutionName: string | null = null;
|
|
4581
|
+
let lastPluginThemeAppliedDebugKey: string | null = null;
|
|
4587
4582
|
let iulThemePreviewOverride: string | null = null;
|
|
4588
4583
|
let lastHostChromePolicyDebugKey = '';
|
|
4589
4584
|
const observeEssentialFrameCursor = createDashboardEssentialCursorObserver({
|
|
@@ -4598,9 +4593,26 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
4598
4593
|
const raw = iulThemePreviewOverride
|
|
4599
4594
|
? { ...(getUserConfig().dashboard.theme as object ?? {}), active: iulThemePreviewOverride }
|
|
4600
4595
|
: getUserConfig().dashboard.theme;
|
|
4596
|
+
const activeThemeName = getActiveThemeName(raw);
|
|
4597
|
+
if (activeThemeName !== lastThemeResolutionName) {
|
|
4598
|
+
lastThemeResolutionName = activeThemeName;
|
|
4599
|
+
lastPluginThemeAppliedDebugKey = null;
|
|
4600
|
+
}
|
|
4601
4601
|
return resolveActiveTheme({
|
|
4602
4602
|
raw,
|
|
4603
|
-
loadPlugin: (id) =>
|
|
4603
|
+
loadPlugin: (id) => {
|
|
4604
|
+
const tokens = pluginHost?.loadThemeTokens(id) ?? null;
|
|
4605
|
+
if (!tokens) lastPluginThemeAppliedDebugKey = null;
|
|
4606
|
+
return tokens;
|
|
4607
|
+
},
|
|
4608
|
+
onPluginApplied: (event) => {
|
|
4609
|
+
const key = `${event.id}:${event.tokensCount}:${event.source}`;
|
|
4610
|
+
if (key === lastPluginThemeAppliedDebugKey) return;
|
|
4611
|
+
try {
|
|
4612
|
+
debug.log('tui.theme', 'plugin-theme-applied', event);
|
|
4613
|
+
lastPluginThemeAppliedDebugKey = key;
|
|
4614
|
+
} catch { /* observation is best-effort */ }
|
|
4615
|
+
},
|
|
4604
4616
|
onPluginError: (message) => {
|
|
4605
4617
|
if (lastThemeLoadError !== message) {
|
|
4606
4618
|
lastThemeLoadError = message;
|
|
@@ -6049,6 +6061,8 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
6049
6061
|
}
|
|
6050
6062
|
};
|
|
6051
6063
|
const syncCompanionPopups = (): void => {
|
|
6064
|
+
// CLASSIC-IDLE-CLIPBOARD: every clipboard open/close/dock path ends here — keep it the only gate.
|
|
6065
|
+
noteClipboardPanelState(companionPopupHost.isActive('clipboard'), companionPopupHost.isDocked('clipboard') ? 'panel-docked' : companionPopupHost.isOpen('clipboard') ? 'panel-open' : 'panel-close');
|
|
6052
6066
|
const { cols, rows } = termSize();
|
|
6053
6067
|
const workspaceHost = display.workspaceHostAPI();
|
|
6054
6068
|
const ownerId = companionPopupHost.ownerId;
|
|
@@ -6857,7 +6871,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
6857
6871
|
} catch { /* 승격 실패가 스트리밍을 막지 않는다 */ }
|
|
6858
6872
|
return 'consumed';
|
|
6859
6873
|
}
|
|
6860
|
-
const r =
|
|
6874
|
+
const r = applyDashboardStreamingTypeaheadKey(turnTypeaheadRef.state, k, isStreamingImmediateSlash);
|
|
6861
6875
|
if (r.consumed) {
|
|
6862
6876
|
turnTypeaheadRef.state = r.state;
|
|
6863
6877
|
if (r.submissionDisposition) {
|
|
@@ -6873,7 +6887,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
6873
6887
|
// ⛔ H2 — 내부 턴 중의 사람 입력은 그 턴에 끼워 넣지 않는다(턴 끝 FIFO 로 기다린다).
|
|
6874
6888
|
if (r.submissionDisposition === 'fifo' && !r.immediateSubmission && !internalTurnGate.isInternalTurnActive()) {
|
|
6875
6889
|
const queuedText = turnTypeaheadRef.state.queuedSubmissions.at(-1);
|
|
6876
|
-
const sid =
|
|
6890
|
+
const sid = activeDashboardTypeaheadSessionId(acpSessionIdRef.current, daemonAttached);
|
|
6877
6891
|
if (queuedText && sid) {
|
|
6878
6892
|
const queuedHistoryEntry = inputHistoryStore.record({
|
|
6879
6893
|
text: queuedText,
|
|
@@ -7049,6 +7063,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
7049
7063
|
};
|
|
7050
7064
|
|
|
7051
7065
|
const cleanup = attachStreamingKeys(async (key) => {
|
|
7066
|
+
noteClipboardActivity();
|
|
7052
7067
|
// ── Pre-dispatch gates ────────────────────────────────────
|
|
7053
7068
|
//
|
|
7054
7069
|
// These run BEFORE `routeInputEventAsync` because:
|
|
@@ -7146,6 +7161,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
7146
7161
|
// ⛔ TUI-STALE-BUSY-MARKER — busy 는 «끄는 closure 를 돌려주기 직전»에 켠다. 위 준비(ESC 게이트·키 리스너)가
|
|
7147
7162
|
// 던지면 호출자는 cleanup 을 못 받으므로, 먼저 켜 두면 아무도 못 끄는 busy 가 남는다(#37).
|
|
7148
7163
|
streamingInFlight = true;
|
|
7164
|
+
noteClipboardBusyChange();
|
|
7149
7165
|
reportTuiTurn('busy');
|
|
7150
7166
|
const externalStop = (): void => { stopTurnViaEscGate(escGate); };
|
|
7151
7167
|
currentTurnExternalStop = externalStop;
|
|
@@ -7164,8 +7180,11 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
7164
7180
|
} finally {
|
|
7165
7181
|
userScrolledDuringStream = false;
|
|
7166
7182
|
streamingInFlight = false;
|
|
7183
|
+
noteClipboardBusyChange();
|
|
7167
7184
|
reportTuiTurn('idle');
|
|
7168
|
-
|
|
7185
|
+
const failedTurnRaw = autowakeTurnFailureRaw;
|
|
7186
|
+
autowakeTurnFailureRaw = null;
|
|
7187
|
+
seatAutowake.noteTurnEnded({ sessionId: currentChatPersonaSessionId(), lastLine: chatLines.at(-1) ?? '', errorDetail: failedTurnRaw ?? undefined });
|
|
7169
7188
|
}
|
|
7170
7189
|
};
|
|
7171
7190
|
};
|
|
@@ -7232,6 +7251,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
7232
7251
|
const dashboardAcpChat = new DashboardAcpChat({
|
|
7233
7252
|
cwd: () => workingDir.cwd,
|
|
7234
7253
|
log: (msg) => pushLog('debug', ` [acp] ${msg}`),
|
|
7254
|
+
onBusyChange: () => noteClipboardBusyChange(),
|
|
7235
7255
|
// Follow-up #9 — wrap the modal approver so BG records flip to
|
|
7236
7256
|
// `waiting_for_confirmation` even when the peer (codex-acp /
|
|
7237
7257
|
// gemini-cli) doesn't emit the `tool_call_update.status` field.
|
|
@@ -7241,6 +7261,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
7241
7261
|
globalBackgroundManager(),
|
|
7242
7262
|
),
|
|
7243
7263
|
});
|
|
7264
|
+
dashboardAcpIsBusy = () => dashboardAcpChat.isBusy();
|
|
7244
7265
|
activeAcpRuntimeModel = () => dashboardAcpChat.activeRuntimeModel();
|
|
7245
7266
|
|
|
7246
7267
|
// Obsidian vault browser (Phase O3). Shares the FsEntry shape and
|
|
@@ -12394,7 +12415,17 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
12394
12415
|
// ticks every ~1.5s on Darwin and stores up to 50 unique text
|
|
12395
12416
|
// snapshots. Stopped during dashboard teardown to avoid leaking
|
|
12396
12417
|
// intervals if the host re-enters showDashboard.
|
|
12397
|
-
|
|
12418
|
+
// CLASSIC-IDLE-CLIPBOARD: dormant until the clipboard companion is open.
|
|
12419
|
+
const clipHistory: ClipboardHistory = startClipboardHistory({
|
|
12420
|
+
active: companionPopupHost.isActive('clipboard'),
|
|
12421
|
+
isBusy: () => streamingInFlight || dashboardAcpChat.isBusy(),
|
|
12422
|
+
});
|
|
12423
|
+
noteClipboardPanelState = (active, reason) => clipHistory.setActive(active, reason);
|
|
12424
|
+
noteClipboardActivity = () => {
|
|
12425
|
+
lastDashboardInputAt = Date.now();
|
|
12426
|
+
clipHistory.noteActivity();
|
|
12427
|
+
};
|
|
12428
|
+
noteClipboardBusyChange = () => clipHistory.noteBusyChange();
|
|
12398
12429
|
process.once('beforeExit', () => { clipHistory.stop(); });
|
|
12399
12430
|
// Re-render whenever the poller picks up a new entry — only when
|
|
12400
12431
|
// we're actually showing the history viewer, otherwise the side-
|
|
@@ -15196,6 +15227,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15196
15227
|
const key: import('../tui.js').Key = wdAutoInput
|
|
15197
15228
|
? { name: CHAT_MAIN_AUTO_ENTRY_KEY_NAME, ctrl: false, shift: false }
|
|
15198
15229
|
: await readKey();
|
|
15230
|
+
if (!wdAutoInput) { noteClipboardActivity(); gitIdlePoll.noteActivity('input'); }
|
|
15199
15231
|
const helpModal = currentTransientTerminalModal('dashboard-help');
|
|
15200
15232
|
if (key.name === 'escape' && helpModal) {
|
|
15201
15233
|
helpModal.dispose();
|
|
@@ -18570,6 +18602,10 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
18570
18602
|
settleEscAbortToolCall(escAbortToolState, toolCall);
|
|
18571
18603
|
escHarnessSpacesByCallId.delete(toolCall.id);
|
|
18572
18604
|
},
|
|
18605
|
+
onThought: (text) => {
|
|
18606
|
+
turnStreamRuntime.onThought?.(text);
|
|
18607
|
+
draw();
|
|
18608
|
+
},
|
|
18573
18609
|
};
|
|
18574
18610
|
},
|
|
18575
18611
|
runTurnUsageRuntime: (usage) => {
|
|
@@ -18690,6 +18726,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
18690
18726
|
warningLine: (message) => C.warning(`${ICONS.warning} ${message}`),
|
|
18691
18727
|
pushErrorLine: (message) => { chatLines.push(C.error(`Error: ${message}`)); },
|
|
18692
18728
|
pushFailureNotice: (notice, raw) => {
|
|
18729
|
+
autowakeTurnFailureRaw = raw;
|
|
18693
18730
|
chatLines.push(C.warning(notice));
|
|
18694
18731
|
detailViewerRuntime.stage('turn error', raw.split(/\r?\n/));
|
|
18695
18732
|
},
|
|
@@ -95,6 +95,7 @@ export interface DashboardChatMainPlainTurnRuntimeDeps {
|
|
|
95
95
|
onText(chunk: string, accumulated: string): void;
|
|
96
96
|
onToolCall(call: unknown): void;
|
|
97
97
|
onToolResult(call: unknown): void;
|
|
98
|
+
onThought?(text: string): void;
|
|
98
99
|
getAssistantStart(): number;
|
|
99
100
|
};
|
|
100
101
|
runTurnUsageRuntime: (usage: unknown) => void;
|
|
@@ -117,6 +118,7 @@ export interface DashboardChatMainPlainTurnRuntimeDeps {
|
|
|
117
118
|
onToolCall: (call: unknown) => void;
|
|
118
119
|
onToolResult: (call: unknown) => void;
|
|
119
120
|
onUsage: (usage: unknown) => void;
|
|
121
|
+
onThought?: (text: string) => void;
|
|
120
122
|
}): Promise<unknown>;
|
|
121
123
|
};
|
|
122
124
|
autoTts: {
|
|
@@ -483,6 +485,7 @@ export async function runDashboardChatMainPlainTurn(
|
|
|
483
485
|
onUsage: (usage) => {
|
|
484
486
|
deps.runTurnUsageRuntime(usage);
|
|
485
487
|
},
|
|
488
|
+
onThought: (text) => { turnStreamRuntime.onThought?.(text); },
|
|
486
489
|
autoTts: deps.autoTts,
|
|
487
490
|
voiceChat: deps.voiceChat,
|
|
488
491
|
drainCooldownMs: userConfig.voice.tts.drainCooldownMs,
|
|
@@ -39,6 +39,7 @@ export interface DashboardPlainTurnAcpSend {
|
|
|
39
39
|
onToolCall: (call: unknown) => void;
|
|
40
40
|
onToolResult: (call: unknown) => void;
|
|
41
41
|
onUsage: (usage: unknown) => void;
|
|
42
|
+
onThought?: (text: string) => void;
|
|
42
43
|
}): Promise<unknown>;
|
|
43
44
|
}
|
|
44
45
|
|
|
@@ -55,6 +56,8 @@ export interface DashboardPlainTurnStreamDeps {
|
|
|
55
56
|
onToolCall: (call: unknown) => void;
|
|
56
57
|
onToolResult: (call: unknown) => void;
|
|
57
58
|
onUsage: (usage: unknown) => void;
|
|
59
|
+
/** TUI-TURN-NARRATION — 추론 요약 문단(선택). */
|
|
60
|
+
onThought?: (text: string) => void;
|
|
58
61
|
|
|
59
62
|
/** Auto-TTS hooks. `pushChunk` is fired on every text delta;
|
|
60
63
|
* `commit` / `cancel` are called by the settle sink in the
|
|
@@ -173,6 +176,7 @@ export async function runDashboardPlainTurnStream(
|
|
|
173
176
|
deps.onToolResult(call);
|
|
174
177
|
},
|
|
175
178
|
onUsage: (usage) => deps.onUsage(usage),
|
|
179
|
+
...(deps.onThought ? { onThought: (text: string) => deps.onThought!(text) } : {}),
|
|
176
180
|
});
|
|
177
181
|
settled = deps.abortCtrl.signal.aborted ? 'cancelled' : 'end_turn';
|
|
178
182
|
// Return the cumulative full response so commit / metrics / autocopy
|
|
@@ -92,7 +92,16 @@ export type SeatAutowakeSkipReason =
|
|
|
92
92
|
| 'nothing-pending'
|
|
93
93
|
| 'human-recent'
|
|
94
94
|
| 'same-order'
|
|
95
|
-
| 'cap'
|
|
95
|
+
| 'cap'
|
|
96
|
+
| 'terminal-codex-400';
|
|
97
|
+
|
|
98
|
+
/** The rendered error line is captured before the turn footer shortens it. */
|
|
99
|
+
export interface SeatAutowakeTurnResult {
|
|
100
|
+
sessionId: string | null;
|
|
101
|
+
lastLine: string;
|
|
102
|
+
/** Raw turn failure staged for /detail open when the visible line is condensed. */
|
|
103
|
+
errorDetail?: string;
|
|
104
|
+
}
|
|
96
105
|
|
|
97
106
|
export interface SeatAutowakeInput {
|
|
98
107
|
/** 자리 TUI 의 자리(대문자) — 자리 아님이면 null. */
|
|
@@ -187,7 +196,7 @@ export interface SeatAutowakeDeps {
|
|
|
187
196
|
|
|
188
197
|
export interface SeatAutowakeController {
|
|
189
198
|
/** 모델 턴이 끝났다(스트리밍 정리 지점) — 다음 입력칸 마운트에서 한 번 잰다. */
|
|
190
|
-
noteTurnEnded(): void;
|
|
199
|
+
noteTurnEnded(result?: SeatAutowakeTurnResult): void;
|
|
191
200
|
/** 입력칸이 마운트됐다 — 턴 끝이 무장돼 있으면 판정하고, 남은 일이 있으면 H2 로 연다. */
|
|
192
201
|
check(): SeatAutowakeDecision & { opened?: boolean; rejected?: string };
|
|
193
202
|
/** H2 의 yield port 를 감싸 «마운트 = 판정 시점»으로 잇는다(입력칸 무접촉). */
|
|
@@ -229,6 +238,9 @@ export function createSeatAutowake(deps: SeatAutowakeDeps): SeatAutowakeControll
|
|
|
229
238
|
let lastOpenedAt = 0;
|
|
230
239
|
let capNotified = false;
|
|
231
240
|
let recheckArmed = false;
|
|
241
|
+
let activeSessionId: string | null = null;
|
|
242
|
+
let lastOrphanFailure: { callId: string; count: number } | null = null;
|
|
243
|
+
let terminalCallId: string | null = null;
|
|
232
244
|
|
|
233
245
|
const check: SeatAutowakeController['check'] = () => {
|
|
234
246
|
const detection = detect(deps.getCwd());
|
|
@@ -256,6 +268,14 @@ export function createSeatAutowake(deps: SeatAutowakeDeps): SeatAutowakeControll
|
|
|
256
268
|
seat, enabled, turnEnded, unread, queue, now: t, lastHumanKeyAt: humanAt,
|
|
257
269
|
humanQuietMs: quietMs, lastFingerprint, consecutive, consecutiveCap: deps.consecutiveCap,
|
|
258
270
|
});
|
|
271
|
+
if (terminalCallId && activeSessionId) {
|
|
272
|
+
turnEnded = false;
|
|
273
|
+
log('tui.autowake', 'terminal-blocked', {
|
|
274
|
+
seat, sessionId: activeSessionId, errorKind: 'codex-orphan-tool-output-400',
|
|
275
|
+
callId: terminalCallId, recommendedAction: '/session new',
|
|
276
|
+
});
|
|
277
|
+
return { action: 'skip', reason: 'terminal-codex-400', unread: decision.unread, queue: decision.queue };
|
|
278
|
+
}
|
|
259
279
|
if (decision.action === 'skip' && decision.reason === 'not-turn-end') return decision;
|
|
260
280
|
const base = {
|
|
261
281
|
seat,
|
|
@@ -301,7 +321,40 @@ export function createSeatAutowake(deps: SeatAutowakeDeps): SeatAutowakeControll
|
|
|
301
321
|
};
|
|
302
322
|
|
|
303
323
|
return {
|
|
304
|
-
noteTurnEnded() {
|
|
324
|
+
noteTurnEnded(result) {
|
|
325
|
+
turnEnded = true;
|
|
326
|
+
if (!result) return;
|
|
327
|
+
if (result.sessionId !== activeSessionId) {
|
|
328
|
+
activeSessionId = result.sessionId;
|
|
329
|
+
lastOrphanFailure = null;
|
|
330
|
+
terminalCallId = null;
|
|
331
|
+
lastFingerprint = null;
|
|
332
|
+
consecutive = 0;
|
|
333
|
+
}
|
|
334
|
+
// The production failed-turn path renders this exact 400 notice and
|
|
335
|
+
// stages its raw detail. Ordinary assistant text can quote the same API
|
|
336
|
+
// error, so it must never be parsed as a failed turn by itself.
|
|
337
|
+
const is400Notice = result.lastLine.includes('모델 API 가 요청을 400 으로 거절')
|
|
338
|
+
&& result.lastLine.includes('원문 /detail open');
|
|
339
|
+
const match = is400Notice
|
|
340
|
+
? /\bCodex API 400\b[^\n]*?No tool call found for function call output with call_id\s+([\w-]+)/iu.exec(result.errorDetail ?? '')
|
|
341
|
+
: null;
|
|
342
|
+
if (!match || !activeSessionId) {
|
|
343
|
+
lastOrphanFailure = null;
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
const callId = match[1]!;
|
|
347
|
+
lastOrphanFailure = lastOrphanFailure?.callId === callId
|
|
348
|
+
? { callId, count: lastOrphanFailure.count + 1 } : { callId, count: 1 };
|
|
349
|
+
if (lastOrphanFailure.count < 2 || terminalCallId) return;
|
|
350
|
+
terminalCallId = callId;
|
|
351
|
+
log('tui.autowake', 'terminal', {
|
|
352
|
+
seat: detect(deps.getCwd())?.seat ?? null,
|
|
353
|
+
sessionId: activeSessionId, errorKind: 'codex-orphan-tool-output-400',
|
|
354
|
+
callId, recommendedAction: '/session new',
|
|
355
|
+
});
|
|
356
|
+
deps.notify?.(`⏹ Codex 400 자동 재개 중단 · 세션 ${activeSessionId} · call_id ${callId} · /session new 로 새 세션을 시작하세요`);
|
|
357
|
+
},
|
|
305
358
|
check,
|
|
306
359
|
wrapPort(port) {
|
|
307
360
|
return {
|
|
@@ -33,6 +33,12 @@ import { getTheme } from '../../themes/index.js';
|
|
|
33
33
|
// same shape `pluginHost.loadThemeTokens` produces — not a full ThemeTokens.
|
|
34
34
|
export type PluginThemeLoader = (id: string) => ThemeTokenInput | null | undefined;
|
|
35
35
|
|
|
36
|
+
export interface PluginThemeAppliedEvent {
|
|
37
|
+
id: string;
|
|
38
|
+
tokensCount: number;
|
|
39
|
+
source: 'plugin';
|
|
40
|
+
}
|
|
41
|
+
|
|
36
42
|
export interface ResolveActiveThemeOptions {
|
|
37
43
|
/** Raw `dashboard.theme` value from user-config. Shape is flexible:
|
|
38
44
|
* `null` | `string` | `{ active: string, ... }` | `{ tokens: {...} }`. */
|
|
@@ -44,17 +50,19 @@ export interface ResolveActiveThemeOptions {
|
|
|
44
50
|
* (so a broken plugin doesn't crash the dashboard) but reported
|
|
45
51
|
* here for visibility. */
|
|
46
52
|
onPluginError?: (message: string) => void;
|
|
53
|
+
/** Called after plugin tokens have been merged into the resolved theme. */
|
|
54
|
+
onPluginApplied?: (event: PluginThemeAppliedEvent) => void;
|
|
47
55
|
}
|
|
48
56
|
|
|
49
57
|
/** Resolve the active dashboard theme from user-config, with preset
|
|
50
58
|
* + plugin + default fallback layers. Pure function — no I/O. */
|
|
51
59
|
export function resolveActiveTheme(opts: ResolveActiveThemeOptions): ThemeTokens {
|
|
52
|
-
const { raw, loadPlugin, onPluginError } = opts;
|
|
60
|
+
const { raw, loadPlugin, onPluginError, onPluginApplied } = opts;
|
|
53
61
|
|
|
54
62
|
// Extract active name + user overrides from the raw user-config
|
|
55
63
|
// value. The config shape evolved over time — handle all known
|
|
56
64
|
// forms defensively.
|
|
57
|
-
const activeName =
|
|
65
|
+
const activeName = getActiveThemeName(raw);
|
|
58
66
|
const rawOverrides: ThemeTokenInput | undefined = extractOverrides(raw);
|
|
59
67
|
|
|
60
68
|
// Branch 1: preset registry hit.
|
|
@@ -70,10 +78,20 @@ export function resolveActiveTheme(opts: ResolveActiveThemeOptions): ThemeTokens
|
|
|
70
78
|
try {
|
|
71
79
|
const contributed = loadPlugin(activeName);
|
|
72
80
|
if (contributed) {
|
|
73
|
-
|
|
81
|
+
const resolved = mergeThemeTokens(
|
|
74
82
|
mergeThemeTokens(DEFAULT_THEME_TOKENS, contributed),
|
|
75
83
|
rawOverrides ?? {},
|
|
76
84
|
);
|
|
85
|
+
try {
|
|
86
|
+
onPluginApplied?.({
|
|
87
|
+
id: activeName,
|
|
88
|
+
tokensCount: countTokenLeaves(contributed),
|
|
89
|
+
source: 'plugin',
|
|
90
|
+
});
|
|
91
|
+
} catch {
|
|
92
|
+
// Observation failures must not discard an already-resolved theme.
|
|
93
|
+
}
|
|
94
|
+
return resolved;
|
|
77
95
|
}
|
|
78
96
|
} catch (err: unknown) {
|
|
79
97
|
const message =
|
|
@@ -86,7 +104,18 @@ export function resolveActiveTheme(opts: ResolveActiveThemeOptions): ThemeTokens
|
|
|
86
104
|
return resolveThemeTokens(raw);
|
|
87
105
|
}
|
|
88
106
|
|
|
89
|
-
function
|
|
107
|
+
function countTokenLeaves(value: unknown, isRoot = true): number {
|
|
108
|
+
if (value === null || value === undefined) return 0;
|
|
109
|
+
if (typeof value !== 'object') return 1;
|
|
110
|
+
if (Array.isArray(value)) {
|
|
111
|
+
return value.reduce((count, item) => count + countTokenLeaves(item, false), 0);
|
|
112
|
+
}
|
|
113
|
+
return Object.entries(value as Record<string, unknown>)
|
|
114
|
+
.filter(([key]) => !isRoot || key !== 'name')
|
|
115
|
+
.reduce((count, [, item]) => count + countTokenLeaves(item, false), 0);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function getActiveThemeName(raw: unknown): string | null {
|
|
90
119
|
if (typeof raw === 'string') return raw.trim() || null;
|
|
91
120
|
if (raw && typeof raw === 'object' && !Array.isArray(raw)) {
|
|
92
121
|
const active = (raw as Record<string, unknown>).active;
|
|
@@ -84,7 +84,7 @@ function buildCardMessages(cwd: string, deps: SeatBootDeps): { messages: LLMMess
|
|
|
84
84
|
const content =
|
|
85
85
|
`## 자리 부트 카드 — 너는 이 작업 디렉터리의 ${detection.seat} 자리에서 일한다\n` +
|
|
86
86
|
`(판정: ${detection.source === 'cwd' ? `cwd 의 /seats/${detection.seat}` : 'COORD_ID'} · 세션 시작 스냅샷 ${at} · 이후 바뀐 값은 다시 조회하라)\n` +
|
|
87
|
-
`사람이 다른 일을 먼저 시키지 않았다면, 첫 답에서
|
|
87
|
+
`사람이 다른 일을 먼저 시키지 않았다면, 첫 답에서 자리 이름·'자리 역할' 절의 역할·안 읽은 우편 수를 각각 명시하고 처리할 일을 제안하라. 역할이 미관측이면 추측하지 말고 미관측이라고 말하라.\n\n` +
|
|
88
88
|
card;
|
|
89
89
|
return {
|
|
90
90
|
messages: [{ role: 'system', content }],
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { SurfaceUx } from '../../agent/surface-ux/types.js';
|
|
2
|
+
import type { AskUserQuestionRequest } from '../../ask-user-question/types.js';
|
|
3
|
+
import { DASHBOARD_CLARIFICATION_REQUEST } from '../../esc-abort-gate.js';
|
|
4
|
+
import type { GoalDocumentClarification } from '../../self-implement/goal-author-clarification.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Converts the line-oriented self-dev clarification seam into the existing
|
|
8
|
+
* structured SurfaceUx question contract. A missing, cancelled, or failed
|
|
9
|
+
* surface answer becomes an empty line, which preserves clarification's
|
|
10
|
+
* existing "unanswered → deferred" behavior without exposing answer text to
|
|
11
|
+
* the observation payload emitted by SurfaceUx.
|
|
12
|
+
*/
|
|
13
|
+
export async function readDashboardAskClarification(
|
|
14
|
+
clarification: GoalDocumentClarification,
|
|
15
|
+
surfaceUx: Pick<SurfaceUx, 'question'> | undefined,
|
|
16
|
+
notify?: (line: string) => void,
|
|
17
|
+
): Promise<string> {
|
|
18
|
+
if (!surfaceUx) return '';
|
|
19
|
+
const request: AskUserQuestionRequest = {
|
|
20
|
+
questions: [{
|
|
21
|
+
id: clarification.questionId,
|
|
22
|
+
header: 'Clarify goal',
|
|
23
|
+
question: clarification.question,
|
|
24
|
+
options: clarification.options.map((option) => ({
|
|
25
|
+
label: option.label,
|
|
26
|
+
description: option.description,
|
|
27
|
+
})),
|
|
28
|
+
includeOther: clarification.includeOther,
|
|
29
|
+
}],
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(request, DASHBOARD_CLARIFICATION_REQUEST, { value: true });
|
|
32
|
+
try {
|
|
33
|
+
const pending = surfaceUx.question(request);
|
|
34
|
+
const id = clarification.questionId;
|
|
35
|
+
notify?.('하니스가 묻는다 — 창에서 고르거나 Esc 로 답 없이 진행');
|
|
36
|
+
const result = await pending;
|
|
37
|
+
if (!result || result.cancelled) return '';
|
|
38
|
+
const answer = result.answers[id];
|
|
39
|
+
const selectedLabel = Array.isArray(answer) ? answer[0] : answer;
|
|
40
|
+
const optionIndex = clarification.options.findIndex((option) => option.label === selectedLabel);
|
|
41
|
+
if (optionIndex >= 0) return String(optionIndex);
|
|
42
|
+
const other = clarification.includeOther ? result.otherText?.[id]?.trim() : '';
|
|
43
|
+
return other || '';
|
|
44
|
+
} catch {
|
|
45
|
+
return '';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|