elanous 0.2.35 → 0.2.36
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/chunks/{d06f9160.a3d9062f95de8ad7.js → 053a429e.9a63436527cc751c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/109.f196abf3484bb97f.js +287 -0
- package/apps/pwa/out/_next/static/chunks/{4346.8601952e73bf5803.js → 1201.afbfc5b1c5e5cbe4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1517.9275b89572098ff3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1574.ad11f8db8396ab45.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1614.7a8c5c40aee0261f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1871-f1eb29d8dbb4065b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/190.285c832bd9626f8c.js +64 -0
- package/apps/pwa/out/_next/static/chunks/2193.0ea24c4a7aa1d004.js +36 -0
- package/apps/pwa/out/_next/static/chunks/223-ad865c1e80491d78.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2265-f0d90b6dbec05f81.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2267.eb4a62a209f09ec4.js +149 -0
- package/apps/pwa/out/_next/static/chunks/2341-86cd06c0cf01aa33.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2352.9abc42422bade876.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2397-c1653a816061842d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3103.0df8da390948bb84.js → 2500.cbc1257b774aae52.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{7644.17e37ba6f1d4226e.js → 2683.c9773a0c589b031b.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/2709.8e1889034255fc5f.js +24 -0
- package/apps/pwa/out/_next/static/chunks/{4718-17d2af636796a330.js → 275-02ea4c2a33980422.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/2812ca6a.3b9f4a7a08885744.js +1 -0
- package/apps/pwa/out/_next/static/chunks/284.ac77c0db55bfd3a8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8714.ff0b7ce3ec3e3ae2.js → 2941.3c3546f96bc6efa7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2976.b000698a3c6512dc.js +24 -0
- package/apps/pwa/out/_next/static/chunks/{9214.63a510d39178e997.js → 2986.45d7652e4f13557e.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3031-85328a92fcce4da6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3136.30aaaa5fa03662a3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3677-4215f826f6aa68e5.js → 3148-98efd4869d660a87.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3155.2587a55196ecb394.js +226 -0
- package/apps/pwa/out/_next/static/chunks/3277.785db1cf09f98601.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3320-f9c77381f85a2c0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3324.a09703033abcbd2f.js +34 -0
- package/apps/pwa/out/_next/static/chunks/3386-91049feabff9a94e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/339.80afb7e8839372af.js +8 -0
- package/apps/pwa/out/_next/static/chunks/3410.7f9af5ab77cbe65f.js +115 -0
- package/apps/pwa/out/_next/static/chunks/3538.a445e50bb359d068.js +32 -0
- package/apps/pwa/out/_next/static/chunks/3540c645.2595a6af01a97672.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3621.581b2054cc14bee4.js +286 -0
- package/apps/pwa/out/_next/static/chunks/3676.8c28d16fd84ca843.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9512.5a76207a730e0491.js → 3727.7949ccaacaa71242.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/375-b84540853523fe52.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8557-e7898769499cd56f.js → 3757-180308bc61021b05.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/379.ee262e37586fe1ae.js +74 -0
- package/apps/pwa/out/_next/static/chunks/{359-2250789a2d3499e7.js → 3840-5825d56d46976a92.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3969-81054381eaec4c4c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{da5176c6.6773b6c5994e1d99.js → 3a3d9966.cc4d4585a2708e7c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4067-bf9aa60547972937.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4116.a84a92a2492c080e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4176.e5729c93c29151eb.js +104 -0
- package/apps/pwa/out/_next/static/chunks/4227-e6c84686bc8946ca.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9952.5daf5f94063a2b3e.js → 4286.b70c4520306817e8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4304.e9b2512834a9e23e.js +23 -0
- package/apps/pwa/out/_next/static/chunks/4327.b9e08a71c0009348.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{938.66ad1ef0e5abae1c.js → 4615.8525eb0add35eba6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4946.bd106eafd668f248.js +148 -0
- package/apps/pwa/out/_next/static/chunks/5085-bce4904931767ca6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5125.2eb9968b83767193.js +93 -0
- package/apps/pwa/out/_next/static/chunks/5128-75b733fd74a9a1eb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6236.e18cced2d5ba6afb.js → 528.38ce20ef8aa251ff.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/5489f3fe.4bb1458b09f6dead.js +122 -0
- package/apps/pwa/out/_next/static/chunks/{3408.21d1570602f4b6c0.js → 552.b7d061ad91eeac51.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/5560-2a4648f6a30f16e7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5711.957b095705c12560.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1530.0e612369b6fd7ea0.js → 575.d929793a53f27c4b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5772-e29e14f8ff127122.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5887.5b2f5b44ce0f7e9a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5899-4c112a2d908cf97f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/599.c39c571b6733f2a2.js +41 -0
- package/apps/pwa/out/_next/static/chunks/6041.1b65efb796ebc2a5.js +79 -0
- package/apps/pwa/out/_next/static/chunks/6057-765c0a26028c86b2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6142.f289e0d039f453a6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6199-6bcd61d2a3910e04.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6236.cdf7293e710a9b2d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6387-237e079dac9a3ae6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6448-b6d272d074276e14.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6466-92e65a48490b68a9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6566.926a1d1b7c911442.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6580-cdc0e4a634ce4708.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6659-b242dc31b20b3f29.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6690.c5d9b321b1f79384.js +1 -0
- package/apps/pwa/out/_next/static/chunks/671-e9b6ad0c771c5514.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6862.bcbf89dd0f4496b3.js +27 -0
- package/apps/pwa/out/_next/static/chunks/6912-7b375ee48732c767.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6925.562d532110879886.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7385.50a308a477bdfc21.js → 6943.c6b24124853a47b2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{630.fe5a46428d63b013.js → 727.7deb87749b0a343a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{2018.a741297bce759490.js → 7481.39f7a4654907bf6e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7545.b1aa42cd15503319.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7551-416d298c2dc4a9ab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8444.4c26b379ca2b9596.js → 771.c3cdb6c1f7f47c02.js} +17 -17
- package/apps/pwa/out/_next/static/chunks/7784.1f0ac4a16d190cf4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7870-309de463786ac1fc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7888-e29b151bb6a3bb8b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3589.5444a06bcf6e775c.js → 7891.03f910124a737985.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7905-6ba78d9234608f79.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8037.e254fd797aa224d1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8207.f527886b7c464529.js +1 -0
- package/apps/pwa/out/_next/static/chunks/856.50bda61439d465e6.js +62 -0
- package/apps/pwa/out/_next/static/chunks/{b2f6ba4d.fb56fdbbf798df33.js → 873d6c12.09bd499f57171543.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{5101.e32282718f99ed6f.js → 8904.7d51af2dc033965c.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/9031-92e9b487edb681ee.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9060.5410d9f6a95f6287.js +90 -0
- package/apps/pwa/out/_next/static/chunks/{5637.281e5dec4ea6ecf1.js → 914.8abefd48d579547b.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/9187-c87a2207d4ac5d46.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4705-194e64e47ca0fbdb.js → 9250-072df22eaadaa6b5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9289.3e92f278821e18e0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9319.7816d3cc741cd34f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9327-e016bb9f1674d24f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9365.3de48bf75193ff9a.js +77 -0
- package/apps/pwa/out/_next/static/chunks/9383.5b5e9aa56b5fea97.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9387-cb929573ef436f39.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9489.c27becacc3283dec.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8637.47f5b35afcae5e6b.js → 9514.131c52cc75fe6439.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9536.28962663c7734376.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9686-12286f5bbf15a5a0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9776.289d40cc5a4c342a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1674.2a65fd5668e1cc5f.js → 9789.60f723d18097ec30.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/989.f0c17523c5e61f65.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9972-1df393aa8d4f7d52.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9f31e478.fefcbcd3c388ebc5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-96750aba7430959f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-4105e5bbbb043024.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-5d4fa75c2acb113e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-a79a9bdb3b2142bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-f1c2047484992a35.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-15ffc49b2d8c70e2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-67d53a3fc8734135.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-e30c8dc696491336.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-2136e04fa77696e2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-fecd2814790c2e12.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-280aa4a98fc5bb44.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-c14e96b65fb4b883.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-187dac74825ed6bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-6bc7246ea8c92448.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-083747f1d4518f61.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-96750aba7430959f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-15ca95a16ec96e1f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-a8ac031b3810eb64.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-8835f93110494cda.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-e2de2e59111c9aad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-f2b2e4bf6e981450.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-5b92b7f75df20948.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-468eddf2b1a84ecb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-2af16e62c12f22df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-18b40867a77a5793.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-fe934f2979f5a4a2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-3eec435537357170.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-ff88cbfd2aa99fc8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-a5b39fb780c70ab5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ae465dde1d1b3933.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-e7abc34a48a6f71e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-cab9674fde9ead26.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-1da49bc8712284d0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5e8aa657551ac912.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-fcc36f36c6dc1fe2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-d22db22f2a7296ca.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-d12dc7b1773878f0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-99debec9ea7fbec0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-96750aba7430959f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-2a088a78bad7e924.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-2e8ed57db7e69993.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-4b3a16213c2ae8fe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f098747ddf38c98b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-c15958835534404b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-68279e3c843c1fd7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-a34a74453367a39d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-8767a7db2155a5bd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-bd5976683460d7f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-b7364835e7f2ef54.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-311af16b3ee0ffca.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-fb670757274ae990.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{0368f25d-ad84af92fefee68f.js → ccae1c4b-0cf414f5eff1b10d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{cbe38a15.5a032598e39970c6.js → ceba0382.650712b56b85b582.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{b6705a4f-b9a9047de9eecfd0.js → da5ecc5c-b005ad8cac737d57.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{56d372f2.681ab4ec4c998fae.js → f9a61e4d.1fc2c1dbdd49fe46.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/framework-6d497cbf1eef04c6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-012f5edec932f337.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-da5aeb809edc94a2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-5ee319af6f749dfe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-4bc84653a718d6c6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-8a96cf6775c73d6e.js +1 -0
- package/apps/pwa/out/_next/static/{T1mBQqmkwKDLGtyisDCOd → uC-N0emedeNOFuaBQFv-I}/_buildManifest.js +1 -1
- 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/docs/goal-context/05-authoring-lessons.jsonl +47 -0
- package/docs/goal-context/README.md +3 -0
- package/graphs/default-loop.yaml +6 -1
- package/graphs/implement-loop.yaml +24 -0
- package/graphs/release/recipes.yaml +6 -0
- package/graphs/release/release-loop.yaml +17 -4
- package/graphs/wizard/recipes.yaml +44 -0
- package/graphs/wizard/wizard-loop.yaml +44 -0
- package/graphs/work/research-report.yaml +2 -0
- package/package.json +1 -1
- package/scripts/ci-typecheck-changed.ts +139 -5
- package/scripts/coord-role-pack.ts +1 -1
- package/scripts/first10-gate.ts +416 -0
- package/scripts/fleet/wsl-node-setup.sh +432 -0
- package/scripts/release-loop/docs-node.ts +204 -8
- package/scripts/release-loop/gate-node.ts +249 -53
- package/scripts/release-loop/node-verdict.ts +2 -0
- package/scripts/release-loop/resume-cap.ts +14 -34
- package/scripts/release-loop/resume-release.ts +37 -11
- package/scripts/release-loop/traffic-node.ts +59 -0
- package/scripts/release-loop/traffic-transition.ts +159 -0
- package/scripts/rhythm/daily.ts +137 -3
- package/scripts/ux-sim.ts +53 -0
- package/skills/README.md +1 -0
- package/src/acp/core-turn-bridge.ts +48 -6
- package/src/agent/delegate-hint.ts +16 -0
- package/src/agent/runner.ts +82 -2
- package/src/agent/task-notification.ts +56 -10
- package/src/agent/types.ts +4 -0
- package/src/agent-substrate/pr-reviewer.ts +55 -3
- package/src/agent-substrate/review-intent.ts +29 -2
- package/src/agent-substrate/review-observation.ts +3 -0
- package/src/agent-substrate/self-review-cli.ts +168 -16
- package/src/autopilot/mission-codebase-gate.ts +141 -12
- package/src/autopilot/pr-manager.ts +25 -5
- package/src/boot/daemon-tools/self-implement.ts +1 -0
- package/src/budget/usage-outcomes.ts +8 -4
- package/src/capture/tui-self-report.ts +102 -0
- package/src/chat/goal-continue-verdict.ts +41 -0
- package/src/chat/index.ts +30 -4
- package/src/chat/internal-turn-origin.ts +1 -0
- package/src/chat/paste-fold.ts +86 -0
- package/src/chat/tool-render/block.ts +32 -0
- package/src/chat/tool-render/dispatch.ts +2 -20
- package/src/chat/tool-render/result-text.ts +98 -0
- package/src/chat/turn-typeahead.ts +70 -7
- package/src/cli/config-audit.ts +119 -0
- package/src/cli/doctor-cli.ts +22 -0
- package/src/cli/guardian-cli.ts +10 -0
- package/src/cli/herdr-cli.ts +34 -0
- package/src/cli/light-entry-route.ts +6 -3
- package/src/cli/log-event-names.ts +2 -0
- package/src/cli/make-cli.ts +247 -11
- package/src/cli/msg-cli.ts +117 -3
- package/src/cli/pr-cli.ts +29 -16
- package/src/cli/pr-land-base-read.ts +11 -2
- package/src/cli/pr-land-heavy-remote.ts +6 -3
- package/src/cli/pr-land-overlap-evidence.ts +23 -4
- package/src/cli/pr-land-recovery.ts +117 -1
- package/src/cli/pty-takeover-cli.ts +8 -7
- package/src/cli/release-cli.ts +21 -5
- package/src/cli/release-single-flight.ts +1 -1
- package/src/cli/tasks-card-show.ts +162 -0
- package/src/cli/tasks-cli.ts +574 -356
- package/src/cli/tasks-read-cli.ts +197 -0
- package/src/core-turn/run-core-turn.ts +4 -2
- package/src/core-turn/run-goal-loop.ts +73 -16
- package/src/core-turn/types.ts +6 -1
- package/src/dashboard/context/keys.ts +8 -31
- package/src/dashboard/index.ts +202 -49
- package/src/dashboard/input/agent-wake.ts +7 -1
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +146 -3
- package/src/dashboard/input/chat-main-slash-command.ts +4 -2
- package/src/dashboard/input/goal-continue.ts +210 -0
- package/src/dashboard/input/goal-interim.ts +2 -0
- package/src/dashboard/input/internal-turn.ts +2 -8
- package/src/dashboard/input/seat-autowake.ts +9 -7
- package/src/dashboard/input/turn-autoheal.ts +52 -0
- package/src/dashboard/seat-boot-preamble.ts +132 -5
- package/src/dashboard/slash-runtime/chat-persona.ts +65 -8
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +3 -2
- package/src/dashboard/slash-runtime/model-choices.ts +15 -0
- package/src/dashboard/stale-install-check.ts +3 -99
- package/src/debug/batch-queue.ts +119 -0
- package/src/debug/tui-log-tag.ts +67 -0
- package/src/display/agent-surface.ts +7 -0
- package/src/domains/standalone-log-sink.ts +15 -2
- package/src/esc-abort-gate.ts +69 -0
- package/src/git-fs/worktree.ts +95 -1
- package/src/graph-runner/graph-cli.ts +18 -0
- package/src/graph-runner/runner.ts +20 -11
- package/src/graph-wizard/generate.ts +108 -4
- package/src/graph-wizard/steps.ts +15 -0
- package/src/grounding/proactive-ground.ts +86 -0
- package/src/harness/control-inbox.ts +49 -1
- package/src/harness/harness-cli-command.ts +51 -7
- package/src/harness/harness-incidents.ts +52 -1
- package/src/harness/pod-control-send.ts +33 -5
- package/src/harness/self-send-remote.ts +69 -0
- package/src/harness/self-send-routing-guard.ts +6 -0
- package/src/harness/self-send-target.ts +4 -3
- package/src/index.ts +327 -12
- package/src/input-core/context-key-runtime.ts +21 -0
- package/src/light-cli.ts +6 -1
- package/src/llm-wellformed.ts +70 -0
- package/src/llm.ts +35 -4
- package/src/loops/msg-wake.ts +35 -39
- package/src/loops/orchestrator/inbox.ts +59 -11
- package/src/loops/orchestrator/knowhow-pack.ts +364 -0
- package/src/loops/orchestrator/tick.ts +5 -1
- package/src/maturity/feature-maturity.ts +1 -1
- package/src/models/prompts.ts +17 -2
- package/src/msg/msg-post-office.ts +116 -0
- package/src/mss/logging/log-store.ts +79 -22
- package/src/nexus/api/decisions-route.ts +38 -18
- package/src/nexus/api/graph-wizard-api.ts +20 -2
- package/src/nexus/boot/register-mcp-clients.ts +263 -38
- package/src/nexus/onboarding/first-boot-wizard.ts +56 -8
- package/src/onboarding/first-run.ts +37 -6
- package/src/onboarding/web-first.ts +43 -11
- package/src/ops/overview-collect.ts +12 -6
- package/src/ops/overview.ts +3 -3
- package/src/persona/loader.ts +11 -0
- package/src/persona/types.ts +8 -0
- package/src/prompt-library/session-guidance.ts +14 -0
- package/src/provider-summary.ts +8 -0
- package/src/pty-shell/herdr-agent-report.ts +118 -9
- package/src/pty-shell/herdr-prompt.ts +266 -0
- package/src/pty-shell/pty-control-ipc.ts +151 -8
- package/src/pty-shell/pty-special-keys.ts +42 -2
- package/src/pty-shell/stale-install-check.ts +99 -0
- package/src/pty-shell/tui-run-state.ts +14 -2
- package/src/release-loop/auto-start.ts +20 -2
- package/src/release-loop/checklist.ts +76 -4
- package/src/release-loop/rehearsal.ts +36 -20
- package/src/repl/index.ts +19 -1
- package/src/seat-loop/knowhow-lint.ts +1 -1
- package/src/self-dev/decompose-proposal.ts +172 -20
- package/src/self-dev/decompose.ts +61 -0
- package/src/self-dev/dev-cli.ts +37 -3
- package/src/self-dev/dev-pipeline.ts +8 -2
- package/src/self-dev/draft-triage-rules.ts +31 -0
- package/src/self-dev/glm-credential-guard.ts +77 -0
- package/src/self-dev/graph-journey-nodes.ts +1 -0
- package/src/self-dev/graph-journey-route.ts +12 -2
- package/src/self-dev/orchestrate-cli.ts +68 -3
- package/src/self-dev/orchestrate.ts +116 -17
- package/src/self-dev/run-supervisor.ts +55 -2
- package/src/self-dev/run-types.ts +1 -1
- package/src/self-health/autoheal.ts +153 -0
- package/src/self-health/signatures.ts +6 -0
- package/src/self-implement/device-first.ts +116 -0
- package/src/self-implement/doctor-visit.ts +239 -1
- package/src/self-implement/evidence-command-budget.ts +80 -0
- package/src/self-implement/goal-author-cli.ts +1 -0
- package/src/self-implement/goal-author-decompose.ts +265 -4
- package/src/self-implement/goal-author.ts +33 -8
- package/src/self-implement/goal-elaborate.ts +176 -22
- package/src/self-implement/goal-refine.ts +3 -0
- package/src/self-implement/graph-variant.ts +40 -6
- package/src/self-implement/headless-elanous-driver.ts +19 -3
- package/src/self-implement/off-diff-evidence.ts +58 -6
- package/src/self-implement/orchestrator.ts +222 -21
- package/src/self-implement/pod-warm-pool-profile.ts +1 -0
- package/src/self-implement/pwa-import-graph.ts +1 -1
- package/src/self-implement/rework-policy.ts +30 -0
- package/src/self-implement/run-ledger.ts +108 -0
- package/src/self-implement/run-ttl.ts +38 -24
- package/src/self-implement/scope-adjacency.ts +3 -1
- package/src/self-implement/seams.ts +60 -4
- package/src/self-implement/wiring-check.ts +358 -0
- package/src/shell-env-bootstrap.ts +11 -4
- package/src/skills/runner.ts +4 -2
- package/src/skills/tools/agent.ts +290 -48
- package/src/skills/tools/schedule-wakeup.ts +23 -4
- package/src/skills/tools/shell.ts +61 -6
- package/src/skills/tools/terminal-modal-inject.ts +1 -2
- package/src/skills/tools/terminal-modal.ts +10 -8
- package/src/skills/url-router.ts +41 -1
- package/src/smart-wizard/run.ts +66 -0
- package/src/status/bar.ts +34 -6
- package/src/status/status-provider-info.ts +37 -6
- package/src/steward/rejudge-tick.ts +10 -2
- package/src/steward/ta-repair-event-collect.ts +17 -6
- package/src/task-agent/actions.ts +3 -1
- package/src/task-agent/land-queue.ts +21 -8
- package/src/task-agent/live-moves.ts +22 -6
- package/src/task-agent/mission.ts +30 -0
- package/src/task-agent/rejudge-on-head.ts +15 -0
- package/src/task-agent/repair-cycle.ts +138 -32
- package/src/task-agent/repair-next-move.ts +31 -3
- package/src/task-agent/repair-outcomes.ts +29 -0
- package/src/task-agent/repair-worker.ts +14 -4
- package/src/task-agent/shadow.ts +41 -3
- package/src/task-agent/task-card-prefix.ts +2 -0
- package/src/task-agent/task-hand.ts +477 -22
- package/src/task-agent/task-parent-role-llm.ts +36 -0
- package/src/task-agent/tier-split.ts +78 -9
- package/src/task-orchestrator/surfaces/pod-account-broker.ts +9 -0
- package/src/task-orchestrator/surfaces/pod-child-reuse.ts +146 -0
- package/src/task-orchestrator/surfaces/pod-command-job.ts +86 -5
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +215 -3
- package/src/task-orchestrator/surfaces/pod-launch-history.ts +133 -0
- package/src/task-orchestrator/surfaces/pod-manifest-test-normalize.ts +11 -0
- package/src/task-orchestrator/surfaces/pod-pool.ts +76 -4
- package/src/task-orchestrator/surfaces/pod-provenance.ts +8 -2
- package/src/task-orchestrator/surfaces/pod-repair-commit.ts +18 -3
- package/src/task-orchestrator/surfaces/pod-si-warm-entry.ts +16 -0
- package/src/task-orchestrator/surfaces/pod-si-warm-host.ts +224 -0
- package/src/task-orchestrator/surfaces/pod-si-warm-protocol.ts +201 -0
- package/src/task-orchestrator/surfaces/pod-si-warm-provider.ts +444 -0
- package/src/task-orchestrator/surfaces/pod-si-warm-runner.ts +387 -0
- package/src/task-orchestrator/surfaces/pod-si-warm-transport.ts +157 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-protocol.ts +4 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +485 -36
- package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +3 -0
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +396 -19
- package/src/task-orchestrator/surfaces/self-implement.ts +42 -2
- package/src/tool-runtime/index.ts +15 -2
- package/src/tool-runtime/mcp-proxy-bootstrap.ts +29 -0
- package/src/tty-foreground.ts +155 -0
- package/src/tui/chat/goal-interim.ts +173 -0
- package/src/tui/chat/log-view.ts +205 -18
- package/src/tui/chat/self-health-status.ts +232 -0
- package/src/tui/entry.ts +370 -81
- package/src/tui/input/composer.ts +8 -1
- package/src/tui/slash/compact-command.ts +7 -0
- package/src/tui/slash/compact.ts +1 -7
- package/src/tui/slash/resume.ts +75 -0
- package/src/tui-client/local-chat-turn.ts +45 -2
- package/src/tui-client/next-dashboard-runtime.ts +8 -0
- package/src/tui-client/next-loop-command.ts +70 -0
- package/src/tui-client/next-wakeup.ts +191 -0
- package/src/tui.ts +37 -0
- package/src/ui/modal-adapter.ts +2 -2
- package/src/ux-sim/classic-tui-seat-scenarios.ts +516 -0
- package/src/ux-sim/cli-config-audit-device.ts +121 -0
- package/src/ux-sim/dashboard-event-loop-stall-monitor-device.ts +238 -0
- package/src/ux-sim/event-monkey.ts +3 -2
- package/src/ux-sim/fake-bin.ts +45 -0
- package/src/ux-sim/fake-herdr.ts +238 -0
- package/src/ux-sim/fake-llm.ts +111 -6
- package/src/ux-sim/fault-glm-no-credential.ts +116 -0
- package/src/ux-sim/fault-nextmove-dispatch.ts +102 -1
- package/src/ux-sim/fault-scope-escape-lift.ts +33 -6
- package/src/ux-sim/fault-tui-400-autoheal.ts +297 -0
- package/src/ux-sim/goal-device.ts +619 -0
- package/src/ux-sim/in-process-cli.ts +22 -5
- package/src/ux-sim/mock-authoring-first-run-child.ts +35 -0
- package/src/ux-sim/mock-authoring-first-run.ts +97 -0
- package/src/ux-sim/mock-seat-pty-frame-child.ts +29 -0
- package/src/ux-sim/mock-seat-pty-frame.ts +297 -0
- package/src/ux-sim/mock-seat-pty-sequence-child.ts +21 -0
- package/src/ux-sim/mock-seat-pty-sequence.ts +206 -0
- package/src/ux-sim/next-tui-seat-scenarios.ts +631 -0
- package/src/ux-sim/onboarding-first-run-device.ts +269 -0
- package/src/ux-sim/pty-key-modifiers-device.ts +85 -0
- package/src/ux-sim/subagent-tools-device.ts +81 -0
- package/src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.ts +250 -0
- package/src/ux-sim/tty-foreground-steal-child.ts +21 -0
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/1165.bad13fc9151a7288.js +0 -1
- package/apps/pwa/out/_next/static/chunks/13.02a07436dec15f89.js +0 -32
- package/apps/pwa/out/_next/static/chunks/1540.af38731fa7c4a3e0.js +0 -41
- package/apps/pwa/out/_next/static/chunks/1850.f2b470ba5a471da0.js +0 -24
- package/apps/pwa/out/_next/static/chunks/193.62da94cd0b88323b.js +0 -74
- package/apps/pwa/out/_next/static/chunks/1975.260f6d249fac5f7c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1982-67cd8dfe8682325f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1993-c0007b7ad0c0ef41.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1999-bb415351c8a2846c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1c735de4.f993a30bbd3c57c4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1dc5a567.9b092bfae3d7099b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2085.8f950b4bda1cbbc7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2159-6179a961376956b9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/216.b5c2a421aa1d28a5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2251.49fbe369f74c372c.js +0 -148
- package/apps/pwa/out/_next/static/chunks/2286-2939577360d3dcc0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2625.5d870aa999f33db1.js +0 -34
- package/apps/pwa/out/_next/static/chunks/2668.34d21539e62bf111.js +0 -77
- package/apps/pwa/out/_next/static/chunks/2833-0fe47af99ed13c29.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2930.d0edb4f108787ef7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2973.77318e7d85f59477.js +0 -62
- package/apps/pwa/out/_next/static/chunks/3123.2bee9ba15d320bd2.js +0 -90
- package/apps/pwa/out/_next/static/chunks/3162-6cf652bf7124d8cf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3577-7340009f7007a795.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3618.f514792d6c59d7fd.js +0 -36
- package/apps/pwa/out/_next/static/chunks/3669.343f9119aa276001.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3736.c2efad489604cc3b.js +0 -79
- package/apps/pwa/out/_next/static/chunks/3817.f9aeab2bb6675d73.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3f7c4ee5.3dde54f01a816613.js +0 -122
- package/apps/pwa/out/_next/static/chunks/4182-0b9b1251c29cc0cf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4441-875b97f5821ed58a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4582.bd68683c076649e3.js +0 -286
- package/apps/pwa/out/_next/static/chunks/4605-6e623f55aec77422.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4607.5cc27468628eb4bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4627.f07508b3936fd6c0.js +0 -24
- package/apps/pwa/out/_next/static/chunks/4747-c22262c093e46807.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4775-178215aed0daba61.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4815-6ffb8c3c991cc45d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4834-beca8b47ad29a898.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5023-fb4802b6d2492b02.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5154.a118f3957ed14e36.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5210-a2e0015e3d4d5d9c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5356.84ac712cc15928bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5401.22352141b6fd336e.js +0 -23
- package/apps/pwa/out/_next/static/chunks/5483-dd5d7697f6bdb106.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5662.02eaa029af05ad46.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5760.22456f433c6f42c0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5852.db1f7449f4f74612.js +0 -287
- package/apps/pwa/out/_next/static/chunks/5891-0f11a7d7362a9072.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5943.264d14a44ca32513.js +0 -1
- package/apps/pwa/out/_next/static/chunks/604-1b3c39df083c02aa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6121-5f97072330738caf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6193.07d8ca5af4b09086.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6203-b3fea3a60d69ff14.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6286.d638fb5953e2e757.js +0 -8
- package/apps/pwa/out/_next/static/chunks/6301.ae0245f507e4395e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6673.fbbe5699f6ea5991.js +0 -27
- package/apps/pwa/out/_next/static/chunks/6777-f6d301efb5de828d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6786.423f24c88de034c7.js +0 -93
- package/apps/pwa/out/_next/static/chunks/6854-cef64a948c5e122d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6866-79aa5b4e47cac6aa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6b89c8bd.24df687a820500b3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7037-fe27f001db30d323.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7080.2d826860534fd88e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7118.8731be28c3ebb14b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7196.44241bc1df3e26fe.js +0 -149
- package/apps/pwa/out/_next/static/chunks/7235.c7c4e6cb5c693c2d.js +0 -104
- package/apps/pwa/out/_next/static/chunks/7706-58bfb1546637f217.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7839.5b91455338c9fd3f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7857-31f13ee96f4011aa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/81.f74cb60312fe4001.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8219.baa715d1deee80e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8256.e3ac8421a71f82f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8310-444a6a895c402f12.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8423.f7dda8aca4fcaae5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8437-8d5492094b166cfa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8496.75649af8652c74f4.js +0 -226
- package/apps/pwa/out/_next/static/chunks/8576.65bb654b524f3614.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8609.558ce2f8f9aea2be.js +0 -64
- package/apps/pwa/out/_next/static/chunks/8614.caec96cfb91f4ae7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8732.367f44a916202353.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9141-7fd1f73a5400bdc2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/921.c4267d0d69a65404.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9261.3962c3321b047691.js +0 -115
- package/apps/pwa/out/_next/static/chunks/936-26efd1a0efdd44d3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9627-4b9efe616b27e2e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/967-2aa39b2d04b4c690.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9734.40eb1e558c29ccea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9908.3aa54f7a586a73dc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9954-ca8d29752bdbb45a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9974-507fa67cb94066dd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-ce9e00f7fb45506a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-fa59d6d17daa3389.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-53f68bbe7bd4b774.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-1c500fbb9f4a7a04.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-99d72673aa5c307c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-d2d5adc1e9484c88.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-c607c5aae637f1cc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-fa8c23596d555c0f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-bdab8c5e855c8416.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-406b47745b53f269.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-a4276386b7051f50.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-8a26bab9ad375f25.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-775f48aa1dc7a2d5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-1c4dd5f959d0c558.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-c48938a8377c9f70.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-ce9e00f7fb45506a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-c6e7905859425aa9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-c280f4252452e830.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-cf8c57498f20970a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-ca3a17caf409fc83.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-26e6c18a1a750cf6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-3abc872cc6aeee39.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-f7481b7b2174fe3d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1ae7ef8077680337.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-47c5d4db587266bd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-415f1e243c7ccb13.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-73f380f17b76f95c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-2991073ad66ee2d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-1f5a60f70cb4dd0c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fbad60d1e358fb2c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-bac7dee94e5eae4a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-398047d6949e8ca5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-2d33a2231540ca89.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5bf1e6bf70bcb96c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-ba59c19376a0917d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-111f187139add30f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-acaae197d5be5779.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-0df20b0f546a0d7d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-ce9e00f7fb45506a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-27e1202d24b8fe35.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-bda78c50a78363e5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-da592691293d9c9f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f832994317a2e9f0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-dc0a532f5b9196ec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-cfccbbeae0473404.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-527e2073af84c81b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-bac86e9112671357.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-6d59dff410e9d76a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-53a61f8be09f02d2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-db8f559e763c17f9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-c02aa4cc66455093.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-50e6acebc630849b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-7a1ae342d5ed75e6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-7ad7d505ba1f92b4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-02edba75232cb235.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-97d6ebae3e8eee4a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-e986adaa429163e8.js +0 -1
- /package/apps/pwa/out/_next/static/{T1mBQqmkwKDLGtyisDCOd → uC-N0emedeNOFuaBQFv-I}/_ssgManifest.js +0 -0
package/src/dashboard/index.ts
CHANGED
|
@@ -328,6 +328,7 @@ import { composeDashboardKeyHandlers, dispatchDashboardKey } from './input/key-d
|
|
|
328
328
|
import { runDashboardChatMainEntry } from './input/chat-main-entry-runtime.js';
|
|
329
329
|
import { createMirrorDrawThrottle } from './mirror-draw-throttle.js';
|
|
330
330
|
import { runDashboardChatMainPlainTurn } from './input/chat-main-plain-turn-runtime.js';
|
|
331
|
+
import { createDashboardTurnAutoheal } from './input/turn-autoheal.js';
|
|
331
332
|
import {
|
|
332
333
|
createDashboardChatMainTurnSubmit,
|
|
333
334
|
runDashboardChatMainSubmitIntent,
|
|
@@ -451,7 +452,7 @@ import { FoldStack } from '../fold-stack.js';
|
|
|
451
452
|
import { getSkillIndex, reloadSkillIndex, applySkillFilter, skillIndexProblems } from '../skills/index.js';
|
|
452
453
|
import { skillRepairNotice } from '../skills/repair.js';
|
|
453
454
|
import type { DetectResult } from '../skills/router.js';
|
|
454
|
-
import { detectUrlRoute } from '../skills/url-router.js';
|
|
455
|
+
import { detectUrlRoute, extractUrls, workContextGuardReason } from '../skills/url-router.js';
|
|
455
456
|
import {
|
|
456
457
|
observeDevRequestRouteFailSoft,
|
|
457
458
|
type DevRequestRoutingConfig,
|
|
@@ -541,6 +542,54 @@ export function settleEscAbortPendingLines(lines: string[], fromIndex: number):
|
|
|
541
542
|
}
|
|
542
543
|
}
|
|
543
544
|
|
|
545
|
+
export interface EscAbortPendingSoftStopDeps {
|
|
546
|
+
/** Live foreground harness space for this turn — null when unidentified or multiple runs. */
|
|
547
|
+
getActiveHarnessSpace: () => string | null;
|
|
548
|
+
/** Push a line into the chat transcript. */
|
|
549
|
+
pushChatLine: (line: string) => void;
|
|
550
|
+
/** Self-implement hint line; returns true when it consumed the event. */
|
|
551
|
+
showHarnessEscHint: (targets: readonly string[]) => boolean;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
export type EscAbortPendingSoftStopOutcome = 'stopped' | 'failed' | 'hint' | 'waiting';
|
|
555
|
+
|
|
556
|
+
export interface EscAbortPendingSoftStopResult {
|
|
557
|
+
outcome: EscAbortPendingSoftStopOutcome;
|
|
558
|
+
/** Harness space that received the durable stop marker, when any. */
|
|
559
|
+
stoppedHarnessSpace: string | null;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* ⭐ TUI-ESC-EXIT production seam — the ESC soft-stop callback that
|
|
564
|
+
* `attachChatStreamingKeys` wires into `createEscAbortGate`'s
|
|
565
|
+
* `onAbortPending`, extracted as a directly callable export so the incident
|
|
566
|
+
* test (test/esc-harness-stop.test.ts) exercises the same function the
|
|
567
|
+
* dashboard executes. Identified foreground harness space → enqueue the real
|
|
568
|
+
* durable soft-stop marker (`enqueueSoftStop`) and verify it
|
|
569
|
+
* (`readSoftStopRequestStatus`), pushing the Korean stopped/failure line;
|
|
570
|
+
* unidentified/multiple-run falls back to the self-implement hint, else the
|
|
571
|
+
* caller paints the waiting line (`waiting`).
|
|
572
|
+
*/
|
|
573
|
+
export function runEscAbortPendingSoftStop(
|
|
574
|
+
targets: readonly string[],
|
|
575
|
+
deps: EscAbortPendingSoftStopDeps,
|
|
576
|
+
): EscAbortPendingSoftStopResult {
|
|
577
|
+
const spaceId = deps.getActiveHarnessSpace();
|
|
578
|
+
if (spaceId) {
|
|
579
|
+
try {
|
|
580
|
+
enqueueSoftStop(spaceId);
|
|
581
|
+
if (readSoftStopRequestStatus(spaceId).status !== 'present') throw new Error('soft-stop marker not persisted');
|
|
582
|
+
deps.pushChatLine(' ⏹ 멈췄다 — 해당 하니스 런에 중단 요청을 보냈습니다.');
|
|
583
|
+
return { outcome: 'stopped', stoppedHarnessSpace: spaceId };
|
|
584
|
+
} catch {
|
|
585
|
+
deps.pushChatLine(' ⚠ 하니스 런 중단 요청을 보내지 못했습니다. /harness runs 에서 확인해 주세요.');
|
|
586
|
+
return { outcome: 'failed', stoppedHarnessSpace: null };
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
if (deps.showHarnessEscHint(targets)) return { outcome: 'hint', stoppedHarnessSpace: null };
|
|
590
|
+
return { outcome: 'waiting', stoppedHarnessSpace: null };
|
|
591
|
+
}
|
|
592
|
+
|
|
544
593
|
export type DashboardToolDispatchSignalSource = 'parent-turn' | 'fallback';
|
|
545
594
|
|
|
546
595
|
export interface DashboardToolDispatchSignalObservation {
|
|
@@ -646,7 +695,7 @@ import { getModelFamily, getModelTier } from '../models/prompts.js';
|
|
|
646
695
|
import { buildPromptInjection, getPromptBankStore } from '../prompt-bank/index.js';
|
|
647
696
|
import { getInputHistoryStore } from '../input-history.js';
|
|
648
697
|
import { inspectActiveProvider } from '../provider-summary.js';
|
|
649
|
-
import { createStatusProviderInfoReader } from '../status/status-provider-info.js';
|
|
698
|
+
import { createStatusProviderInfoReader, statusModelActual } from '../status/status-provider-info.js';
|
|
650
699
|
import { activeCodexAccountView } from '../oauth/codex-account-store.js';
|
|
651
700
|
import { buildDashboardStatusLines, readDashboardSeatsNow, type DashboardStatusLinesInput } from './dashboard-status-lines.js';
|
|
652
701
|
import { buildFirstScreenBand, resolveTuiDaemonLink, type TuiDaemonLink } from './first-screen-band.js';
|
|
@@ -1039,7 +1088,9 @@ import { createQuitConfirmationState, gracefulQuit, type QuitConfirmationState }
|
|
|
1039
1088
|
import { consumeTurnEndInterrupted, handoffTurnTypeaheadAtTurnEnd, releaseTurnTypeaheadPending, runTurnTypeaheadPushNow, steerLastTurnTypeaheadSubmission } from './input/turn-steer-bridge.js';
|
|
1040
1089
|
import { abortTurnOnly } from '../turn-abort-scope.js';
|
|
1041
1090
|
import { consumeInternalTurnYield, createInternalTurnGate, formatInternalTurnBanner, resolveInternalTurnSubmitIntent, type InternalTurnRequest } from './input/internal-turn.js';
|
|
1091
|
+
import { createClassicInterimFold } from './input/goal-interim.js';
|
|
1042
1092
|
import { createSeatAutowake } from './input/seat-autowake.js';
|
|
1093
|
+
import { createGoalContinue } from './input/goal-continue.js';
|
|
1043
1094
|
import { createDashboardWakeupScheduler, registerScheduleWakeupHostTool } from '../skills/tools/schedule-wakeup.js';
|
|
1044
1095
|
import { createAttachmentRowMap } from '../log-pane/attachment-row-map.js';
|
|
1045
1096
|
import { createAttachmentPopup, type AttachmentPopupAction } from '../log-pane/attachment-popup.js';
|
|
@@ -1067,7 +1118,7 @@ import {
|
|
|
1067
1118
|
AGENT_ACTIVITY_SEGMENT_KEY,
|
|
1068
1119
|
PULSE_HALF_PERIOD_MS,
|
|
1069
1120
|
} from '../agent-activity-hud.js';
|
|
1070
|
-
import { DASHBOARD_CLARIFICATION_REQUEST, consumeStreamingTopModalEscape, createEscAbortGate, createHarnessEscHint, routeStreamingEscapeKey } from '../esc-abort-gate.js';
|
|
1121
|
+
import { DASHBOARD_CLARIFICATION_REQUEST, consumeStreamingTopModalEscape, createEscAbortGate, createEscAbortPendingGate, createHarnessEscHint, routeStreamingEscapeKey } from '../esc-abort-gate.js';
|
|
1071
1122
|
import { enqueueSoftStop, readSoftStopRequestStatus } from '../harness/control-inbox.js';
|
|
1072
1123
|
import { setSelfImplementSoftStopSpaceObserver } from '../self-implement/self-implement-runtime.js';
|
|
1073
1124
|
import { createViEditor, type ViEditorHandle } from '../vi-editor.js';
|
|
@@ -1161,7 +1212,7 @@ import { agentBatchScratchTitle, renderAgentBatchScratch } from '../display/agen
|
|
|
1161
1212
|
import { type ExecutionSurfaceHandle } from '../display/index.js';
|
|
1162
1213
|
import { AgentSurfaceStore, renderAgentDetail, renderAgentRoster, type AgentSurfaceState } from '../display/agent-surface.js';
|
|
1163
1214
|
import { globalAgentFlash } from '../display/agent-flash.js';
|
|
1164
|
-
import { globalTaskNotificationQueue } from '../agent/task-notification.js';
|
|
1215
|
+
import { globalTaskNotificationQueue, type TaskNotificationQueue, type PendingTaskNotification } from '../agent/task-notification.js';
|
|
1165
1216
|
import { createDashboardAgentWakeNotify, installAgentWake, wrapAgentWakePort } from './input/agent-wake.js';
|
|
1166
1217
|
import { renderDebugEventDetail, renderDebugEventRows, renderDebugStack, renderPromptInjectionDebug } from '../display/debug-surface.js';
|
|
1167
1218
|
import { buildDebugCallStack } from '../debug/call-stack.js';
|
|
@@ -1169,6 +1220,25 @@ import { buildAstGrepHostTool } from '../skills/tools/ast-grep.js';
|
|
|
1169
1220
|
import { buildLspHostTool } from '../skills/tools/lsp/index.js';
|
|
1170
1221
|
import { PluginHost } from '../plugins/core/host.js';
|
|
1171
1222
|
|
|
1223
|
+
/** Keep wake notifications immediate; display completed results only when a turn drains them. */
|
|
1224
|
+
export function subscribeDashboardAgentResults(
|
|
1225
|
+
queue: TaskNotificationQueue,
|
|
1226
|
+
listener: (notification: PendingTaskNotification) => void,
|
|
1227
|
+
pushHistoryLine: (line: string) => void,
|
|
1228
|
+
): () => void {
|
|
1229
|
+
const offWake = queue.onEnqueue(listener);
|
|
1230
|
+
const offDrain = queue.onDrain((items) => {
|
|
1231
|
+
for (const notification of items) {
|
|
1232
|
+
if (notification.resultPath) {
|
|
1233
|
+
pushHistoryLine(` Agent result · full result: ${notification.resultPath} · summary: ${notification.output}`);
|
|
1234
|
+
} else if (notification.preservationError) {
|
|
1235
|
+
pushHistoryLine(` Agent result preservation failed: ${notification.preservationError} · ${notification.output}`);
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
});
|
|
1239
|
+
return () => { offWake(); offDrain(); };
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1172
1242
|
/** Register the same L2 host tools used by the live TUI before each turn's catalog is assembled. */
|
|
1173
1243
|
export function registerDashboardCoreHostTools(host: Pick<PluginHost, 'registerHostTool'>): void {
|
|
1174
1244
|
const coreMod = require('../domains/core-tools.js') as typeof import('../domains/core-tools.js');
|
|
@@ -1403,6 +1473,10 @@ const isPluginBusy = (host: { active(): { plugin: { isBusy?: (s: any) => boolean
|
|
|
1403
1473
|
// ── Main dashboard ──
|
|
1404
1474
|
|
|
1405
1475
|
export interface ShowDashboardOptions {
|
|
1476
|
+
/** Internal startup timing signal for the completed synchronous setup: persona load,
|
|
1477
|
+
* input-core bootstrap, plugin discovery and the widget host. This is the pre-frame block
|
|
1478
|
+
* that `onFirstFrameRendered` used to hide behind one number. Elapsed ms since entry. */
|
|
1479
|
+
onSyncSetupComplete?: (elapsedMs: number) => void;
|
|
1406
1480
|
/** Internal startup timing signal for the first successfully flushed dashboard frame. */
|
|
1407
1481
|
onFirstFrameRendered?: () => void;
|
|
1408
1482
|
/** Force debug sinks on at launch (file + mirror). Equivalent to
|
|
@@ -1877,7 +1951,34 @@ export function applyDashboardStreamingTypeaheadKey(
|
|
|
1877
1951
|
return applyTurnTypeaheadKey(state, key, isImmediate);
|
|
1878
1952
|
}
|
|
1879
1953
|
|
|
1954
|
+
/** TUI-BOOT-TIMING-HOLES — show-dashboard 동기 셋업 창(첫 프레임 직전) 계측기.
|
|
1955
|
+
* `finish()` 는 한 번만 보고하고, 보고가 던져도 부팅을 막지 않는다(fail-open). */
|
|
1956
|
+
export interface SyncSetupWindow {
|
|
1957
|
+
/** 셋업이 끝난 지점에서 호출 — 진입 이후 경과 ms 를 보고한다. */
|
|
1958
|
+
finish(): void;
|
|
1959
|
+
}
|
|
1960
|
+
|
|
1961
|
+
export function openSyncSetupWindow(
|
|
1962
|
+
report: ((elapsedMs: number) => void) | undefined,
|
|
1963
|
+
now: () => number = () => performance.now(),
|
|
1964
|
+
): SyncSetupWindow {
|
|
1965
|
+
const startedAt = now();
|
|
1966
|
+
let finished = false;
|
|
1967
|
+
return {
|
|
1968
|
+
finish(): void {
|
|
1969
|
+
if (finished) return;
|
|
1970
|
+
finished = true;
|
|
1971
|
+
if (!report) return;
|
|
1972
|
+
try {
|
|
1973
|
+
report(now() - startedAt);
|
|
1974
|
+
} catch { /* timing signal must never break boot */ }
|
|
1975
|
+
},
|
|
1976
|
+
};
|
|
1977
|
+
}
|
|
1978
|
+
|
|
1880
1979
|
export async function showDashboard(opts: ShowDashboardOptions = {}): Promise<DashboardAction> {
|
|
1980
|
+
// TUI-BOOT-TIMING-HOLES — 첫 프레임 직전 동기 셋업 구간을 여기서 연다(셋업 종료 지점에서 닫는다).
|
|
1981
|
+
const syncSetupWindow = openSyncSetupWindow(opts.onSyncSetupComplete);
|
|
1881
1982
|
let firstDashboardFrameRendered = false;
|
|
1882
1983
|
await awaitGlobalPersonaLoad().catch(() => {});
|
|
1883
1984
|
const dashboardQuitConfirmationState = createQuitConfirmationState();
|
|
@@ -3357,7 +3458,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
3357
3458
|
// ⭐ H2 내부 턴 문(TUI-H2-INTERNAL-TURN) — 자율 재개(H3·H4·H5)가 지나갈 «문 하나». 판정은 모듈,
|
|
3358
3459
|
// 여기선 상태를 읽어 넘기기만 한다(⚠️ promptCtl·가시성 함수는 아래에서 선언 — 호출 시점엔 있다).
|
|
3359
3460
|
const internalTurnGate = createInternalTurnGate({
|
|
3360
|
-
isTurnRunning: () => streamingInFlight,
|
|
3461
|
+
isTurnRunning: () => streamingInFlight || dashboardAcpChat.isBusy() || internalTurnGate.isInternalTurnActive(),
|
|
3361
3462
|
isInputForeground: () =>
|
|
3362
3463
|
chatMainInputVisibilityState().inputOwnership?.owner === 'chat-main' && !topBlockingForegroundModal(),
|
|
3363
3464
|
getBufferText: () => promptCtl.getBufferText?.(),
|
|
@@ -3373,7 +3474,21 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
3373
3474
|
});
|
|
3374
3475
|
// Set only by the failed-turn callback and consumed by that turn's streaming cleanup.
|
|
3375
3476
|
let autowakeTurnFailureRaw: string | null = null;
|
|
3376
|
-
|
|
3477
|
+
// ⭐ TURN-END-BEFORE-GOAL 골 이어가기 — 답이 «…하겠습니다/해야 합니다» 로 끝났는데 결과물이 없으면 H2 문으로 한 턴 더.
|
|
3478
|
+
// 판정·상한은 모듈(goal-continue.ts), 여기선 배선만(입력칸 무접촉).
|
|
3479
|
+
const goalContinue = createGoalContinue({
|
|
3480
|
+
startTurnIfIdle: (text, opts) => internalTurnGate.startTurnIfIdle(text, opts),
|
|
3481
|
+
notify: (line) => { chatLines.push(C.muted(line)); draw(); },
|
|
3482
|
+
});
|
|
3483
|
+
const internalTurnYieldPort = wrapAgentWakePort(goalContinue.wrapPort(seatAutowake.wrapPort(internalTurnGate.port)));
|
|
3484
|
+
// ⭐ TUI-GOAL-INTERIM-QUIET — 이어가기 내부 턴이 열리면 «바로 앞» 중간 보고(못 했다·약속) 문단을 한 줄로 접는다.
|
|
3485
|
+
// 끼워 넣은 사람 에코가 있으면 줄 위치를 믿지 않고 접지 않는다(판정·관측은 goal-interim.ts).
|
|
3486
|
+
const goalInterimFold = createClassicInterimFold({ canFold: () => liveTypeaheadEchoes.length === 0 });
|
|
3487
|
+
/** 지금 턴의 스트림 런타임 — 턴 끝에 «마지막 답 블록» 시작을 읽는다(없으면 null → 접지 않는다). */
|
|
3488
|
+
let latestTurnStream: { getAssistantStart(): number } | null = null;
|
|
3489
|
+
const latestTurnReplyStart = (): number | null => {
|
|
3490
|
+
try { return latestTurnStream?.getAssistantStart() ?? null; } catch { return null; }
|
|
3491
|
+
};
|
|
3377
3492
|
// ⭐ H5 자기 예약 깨움(TUI-H5-SCHEDULE-WAKEUP) — 프로세스 안 타이머가 그 시각에 H2 문으로 한 턴을 청한다.
|
|
3378
3493
|
// 직전 회차 판정 = 그 예약이 연 내부 턴이 아직 도나. 도구 등록은 아래 host tool 자리(하니스 자식 제외).
|
|
3379
3494
|
const wakeupScheduler = createDashboardWakeupScheduler(internalTurnGate, {
|
|
@@ -3741,7 +3856,8 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
3741
3856
|
return mouseWiring.buildStatusLine({
|
|
3742
3857
|
swd,
|
|
3743
3858
|
gitState,
|
|
3744
|
-
|
|
3859
|
+
// TUI-MODEL-BADGE-ACTUAL (10-16) — 배지의 «지금» 은 이번 턴 실제 실행(폴백이면 «처음 → 실제»).
|
|
3860
|
+
providerInfo: readStatusProviderInfo(activeAcpRuntimeModel(), statusModelActual('dashboard')),
|
|
3745
3861
|
contextUsedTokens: metrics.lastContextUsed,
|
|
3746
3862
|
tmuxLabel: tmuxStatusLabel,
|
|
3747
3863
|
sshLabel: sshStatusLabel,
|
|
@@ -6582,7 +6698,9 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
6582
6698
|
});
|
|
6583
6699
|
let clarificationModalId: string | null = null;
|
|
6584
6700
|
|
|
6585
|
-
|
|
6701
|
+
// `turnEnd: false` — a phase inside a turn (skill-route detection) that attaches the same keys: its teardown is
|
|
6702
|
+
// not a turn end (TUI-ORPHAN-AUTO-RESUME-STOP E4 · 10-23: it reset seat-autowake's orphan-400 streak every turn).
|
|
6703
|
+
const attachChatStreamingKeys = (abortCtrl: AbortController, phase: { turnEnd?: boolean } = {}): () => void => {
|
|
6586
6704
|
const chatLinesStartIndex = chatLines.length;
|
|
6587
6705
|
userScrolledDuringStream = false;
|
|
6588
6706
|
const SCROLL_KEYS = new Set(['j', 'k', 'down', 'up', 'pageup', 'pagedown', 'home', 'end', 'g', 'G']);
|
|
@@ -6592,8 +6710,20 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
6592
6710
|
// so the user can make an informed call.
|
|
6593
6711
|
let abortGateModalId: string | null = null;
|
|
6594
6712
|
const showHarnessEscHint = createHarnessEscHint((line) => pushChatLine(line));
|
|
6595
|
-
let stoppedHarnessSpace: string | null = null;
|
|
6596
6713
|
const activeHarnessSpace = (): string | null => activeEscHarnessSpace(escAbortToolState, escHarnessSpacesByCallId);
|
|
6714
|
+
// ⭐ TUI-ESC-EXIT — `createEscAbortPendingGate` is the production
|
|
6715
|
+
// onAbortPending/onAbortRepeat seam shared with the incident test in
|
|
6716
|
+
// test/esc-harness-stop.test.ts; `runEscAbortPendingSoftStop` remains the
|
|
6717
|
+
// production soft-stop callback. The gate keeps an earlier successful
|
|
6718
|
+
// stopped space across later waiting/hint/failed callbacks.
|
|
6719
|
+
const escAbortPendingGate = createEscAbortPendingGate({
|
|
6720
|
+
runSoftStop: runEscAbortPendingSoftStop,
|
|
6721
|
+
formatWaitingTargets: formatEscAbortWaitingTargets,
|
|
6722
|
+
getActiveHarnessSpace: activeHarnessSpace,
|
|
6723
|
+
pushChatLine: (line) => pushChatLine(line),
|
|
6724
|
+
showHarnessEscHint,
|
|
6725
|
+
afterAbortEvent: () => { chatScrollOffset = -1; },
|
|
6726
|
+
});
|
|
6597
6727
|
const escGate = createEscAbortGate({
|
|
6598
6728
|
abortCtrl,
|
|
6599
6729
|
getRunningCount: () => getEscAbortRunningCount(escAbortToolState),
|
|
@@ -6608,28 +6738,11 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
6608
6738
|
getTheme: () => currentThemeTokens(),
|
|
6609
6739
|
getWaitingTargetNames: () => getEscAbortWaitingToolNames(escAbortToolState),
|
|
6610
6740
|
shouldAbortImmediately: () => activeHarnessSpace() !== null,
|
|
6611
|
-
|
|
6612
|
-
|
|
6613
|
-
|
|
6614
|
-
|
|
6615
|
-
|
|
6616
|
-
if (readSoftStopRequestStatus(spaceId).status !== 'present') throw new Error('soft-stop marker not persisted');
|
|
6617
|
-
stoppedHarnessSpace = spaceId;
|
|
6618
|
-
pushChatLine(' ⏹ 멈췄다 — 해당 하니스 런에 중단 요청을 보냈습니다.');
|
|
6619
|
-
} catch {
|
|
6620
|
-
pushChatLine(' ⚠ 하니스 런 중단 요청을 보내지 못했습니다. /harness runs 에서 확인해 주세요.');
|
|
6621
|
-
}
|
|
6622
|
-
} else if (!showHarnessEscHint(targets)) {
|
|
6623
|
-
pushChatLine(` ⏳ 중단 요청됨 — ${formatEscAbortWaitingTargets(targets)} 종료를 기다리는 중입니다.`);
|
|
6624
|
-
}
|
|
6625
|
-
chatScrollOffset = -1;
|
|
6626
|
-
},
|
|
6627
|
-
onAbortRepeat: ({ repeat, targets }) => {
|
|
6628
|
-
if (!stoppedHarnessSpace && !showHarnessEscHint(targets)) {
|
|
6629
|
-
pushChatLine(` ⏳ ESC 재시도 ${repeat}회 — ${formatEscAbortWaitingTargets(targets)} 종료를 기다리는 중입니다.`);
|
|
6630
|
-
}
|
|
6631
|
-
chatScrollOffset = -1;
|
|
6632
|
-
},
|
|
6741
|
+
// ⭐ TUI-ESC-EXIT — `runEscAbortPendingSoftStop` is the production
|
|
6742
|
+
// soft-stop callback seam; the incident test in
|
|
6743
|
+
// test/esc-harness-stop.test.ts exercises this same function.
|
|
6744
|
+
onAbortPending: escAbortPendingGate.onAbortPending,
|
|
6745
|
+
onAbortRepeat: escAbortPendingGate.onAbortRepeat,
|
|
6633
6746
|
// ⭐⭐⭐ 턴을 멈추기 «전»에 살아남을 자식을 백그라운드 라우팅으로 넘긴다(`R4a` · 2026-08-19).
|
|
6634
6747
|
// ⛔ 없으면 `R1` 이후 자식이 «고아»가 된다 — 살아 있는데 완료를 실어 나를 채널이 없다
|
|
6635
6748
|
// (`task-notification` 은 background 만 본다 · 부모 툴 루프는 턴과 함께 사라졌다).
|
|
@@ -6874,6 +6987,8 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
6874
6987
|
const r = applyDashboardStreamingTypeaheadKey(turnTypeaheadRef.state, k, isStreamingImmediateSlash);
|
|
6875
6988
|
if (r.consumed) {
|
|
6876
6989
|
turnTypeaheadRef.state = r.state;
|
|
6990
|
+
// TUI-PASTE-WHILE-STREAMING — 턴 중 붙여넣기를 버퍼가 받았다(종전엔 조용히 버려졌다).
|
|
6991
|
+
if (r.pasted) { try { debug.log('tui.paste', r.pasted.folded ? 'folded' : 'kept', { during: 'streaming', lines: r.pasted.lines, chars: r.pasted.chars }); } catch { /* fail-soft */ } }
|
|
6877
6992
|
if (r.submissionDisposition) {
|
|
6878
6993
|
debug.log('dashboard.turn-typeahead', 'submission-classified', {
|
|
6879
6994
|
length: (r.immediateSubmission ?? turnTypeaheadRef.state.queuedSubmissions.at(-1))?.length ?? 0,
|
|
@@ -7171,7 +7286,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
7171
7286
|
runTurnTeardownStep('stream-keys-detach', cleanup);
|
|
7172
7287
|
runTurnTeardownStep('esc-gate-dispose', () => { escGate.dispose(); });
|
|
7173
7288
|
try {
|
|
7174
|
-
if (!
|
|
7289
|
+
if (!escAbortPendingGate.getStoppedHarnessSpace()) settleEscAbortPendingLines(chatLines, chatLinesStartIndex);
|
|
7175
7290
|
} catch (err) {
|
|
7176
7291
|
const message = err instanceof Error ? err.message : String(err);
|
|
7177
7292
|
const stackHead = err instanceof Error ? err.stack?.split('\n')[1]?.trim() : undefined;
|
|
@@ -7184,7 +7299,18 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
7184
7299
|
reportTuiTurn('idle');
|
|
7185
7300
|
const failedTurnRaw = autowakeTurnFailureRaw;
|
|
7186
7301
|
autowakeTurnFailureRaw = null;
|
|
7187
|
-
seatAutowake.noteTurnEnded({ sessionId: currentChatPersonaSessionId(), lastLine: chatLines.at(-1) ?? '', errorDetail: failedTurnRaw ?? undefined });
|
|
7302
|
+
if (phase.turnEnd !== false) seatAutowake.noteTurnEnded({ sessionId: currentChatPersonaSessionId(), lastLine: chatLines.at(-1) ?? '', errorDetail: failedTurnRaw ?? undefined });
|
|
7303
|
+
try {
|
|
7304
|
+
// «이번 턴»이 그린 줄만 본다 — 앞 턴의 ✘·취소 표시가 이번 턴 판정에 새지 않게(r1 must-fix).
|
|
7305
|
+
const turnLines = chatLines.slice(chatLinesStartIndex);
|
|
7306
|
+
const tailLines = turnLines.slice(-16);
|
|
7307
|
+
// 실패(✘)·취소로 끝난 턴은 이어가지 않는다 — 사람이 판단할 자리다.
|
|
7308
|
+
const failed = failedTurnRaw !== null || turnLines.some((line) => /✘ 실패|응답 취소|취소됨/.test(line));
|
|
7309
|
+
// 마지막 답 블록만 — 스트림 applier 의 assistantStart(이번 턴 범위 안일 때). 도구 줄은 그 앞에 남는다.
|
|
7310
|
+
const replyStart = latestTurnReplyStart();
|
|
7311
|
+
goalInterimFold.noteTurnEnded(chatLines, replyStart !== null && replyStart >= chatLinesStartIndex ? replyStart : chatLines.length);
|
|
7312
|
+
goalContinue.noteTurnEnded({ lines: tailLines, failed });
|
|
7313
|
+
} catch { /* fail-soft: 골 이어가기는 턴 정리를 막지 않는다 */ }
|
|
7188
7314
|
}
|
|
7189
7315
|
};
|
|
7190
7316
|
};
|
|
@@ -11552,8 +11678,16 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
11552
11678
|
const frameCursorDecision = display.cursorDecision();
|
|
11553
11679
|
renderDashboardFrame(baseLines, composeDashboardFrameWithCoordinatorModal(display, {
|
|
11554
11680
|
onFrameWriteComplete: firstDashboardFrameRendered ? undefined : (error) => {
|
|
11555
|
-
if (
|
|
11681
|
+
if (firstDashboardFrameRendered) return;
|
|
11682
|
+
// TUI-BOOT-TIMING-HOLES — 셋업 창은 «첫 프레임 flush 완료» 에 닫는다(진입~flush).
|
|
11683
|
+
// 실패한 flush 도 창을 닫아 신호가 영영 오지 않는 일을 막는다(재시도 의미론은 그대로:
|
|
11684
|
+
// 첫 프레임 신호는 다음 성공 flush 가 낸다).
|
|
11685
|
+
if (error) {
|
|
11686
|
+
syncSetupWindow.finish();
|
|
11687
|
+
return;
|
|
11688
|
+
}
|
|
11556
11689
|
firstDashboardFrameRendered = true;
|
|
11690
|
+
syncSetupWindow.finish();
|
|
11557
11691
|
try { opts.onFirstFrameRendered?.(); } catch { /* timing must not break dashboard */ }
|
|
11558
11692
|
},
|
|
11559
11693
|
overlay: modalFrame,
|
|
@@ -13134,7 +13268,9 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13134
13268
|
// 채팅 한 줄 «✓ 위임 끝: <이름> — 다음 턴에 결과» · 결과는 다음 턴 preamble 이 싣는다.
|
|
13135
13269
|
// ⛔ 입력칸·injectKey·pty 주입 0(대표 비침투). dedupe·수명은 모듈, 여기선 배선만.
|
|
13136
13270
|
const agentWake = installAgentWake({
|
|
13137
|
-
subscribe: (listener) =>
|
|
13271
|
+
subscribe: (listener) => subscribeDashboardAgentResults(
|
|
13272
|
+
globalTaskNotificationQueue, listener, (line) => { pushChatLine(C.muted(line)); draw(); },
|
|
13273
|
+
),
|
|
13138
13274
|
// 그리기 실패는 삼키지 않는다 — 모듈이 잡아 notified{shown:false} 로 남긴다.
|
|
13139
13275
|
notify: createDashboardAgentWakeNotify((line) => { chatLines.push(C.muted(line)); }, () => draw()),
|
|
13140
13276
|
// 조각 2 — 자리 TUI ∧ 유휴면 H2 문으로 다음 턴(origin child-complete) · 판정은 모듈.
|
|
@@ -14841,7 +14977,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
14841
14977
|
let acpDispatchToolSelf: CoreTurnDispatchTool | null = null;
|
|
14842
14978
|
let acpToolDispatchCount = 0;
|
|
14843
14979
|
const trMod = await import('../tool-runtime/index.js');
|
|
14844
|
-
trMod.registerAllDefaultToolRuntimes();
|
|
14980
|
+
trMod.registerAllDefaultToolRuntimes({ mcpLazyBoot: true });
|
|
14845
14981
|
acpToolRuntime = trMod;
|
|
14846
14982
|
acpPersistToolOutputPreview = (
|
|
14847
14983
|
await import('../tool-runtime/truncation-store.js')
|
|
@@ -16240,6 +16376,8 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
16240
16376
|
// those tokens into the initial buffer so the user can just type
|
|
16241
16377
|
// their question next to the pre-filled [PDF #N] tokens.
|
|
16242
16378
|
let nextInitial: string | undefined = inputEntry.initialText;
|
|
16379
|
+
// TUI-PASTE-WHILE-STREAMING — 턴 중 접은 붙여넣기 토큰의 원문(넘김 입력창이 넘겨받는다 · 글에 토큰이 없으면 버린다).
|
|
16380
|
+
let nextInitialPastes: Array<[string, string]> = [];
|
|
16243
16381
|
let exitInputLoop = false;
|
|
16244
16382
|
let lastTurnFinalStatus: 'completed' | 'interrupted' | 'failed' | undefined;
|
|
16245
16383
|
|
|
@@ -16271,6 +16409,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
16271
16409
|
});
|
|
16272
16410
|
lastTurnFinalStatus = undefined;
|
|
16273
16411
|
nextInitial = drained.nextInitial;
|
|
16412
|
+
nextInitialPastes = [...nextInitialPastes, ...(drained.initialPastes ?? [])].filter(([token]) => nextInitial?.includes(token));
|
|
16274
16413
|
const queuedTurnEndText = drained.injectEnter ? drained.nextInitial : undefined;
|
|
16275
16414
|
if (interrupted && queuedBeforeDrain > 0) {
|
|
16276
16415
|
debug.log('dashboard.turn-typeahead', 'restored-after-interrupt', { count: queuedBeforeDrain });
|
|
@@ -16310,6 +16449,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
16310
16449
|
debugLog: debug.enabled ? (event, label, payload) => debug.log(event, label, payload) : undefined,
|
|
16311
16450
|
textInputOpts: {
|
|
16312
16451
|
internalTurnYield: internalTurnYieldPort,
|
|
16452
|
+
...(nextInitialPastes.length ? { initialPastes: nextInitialPastes } : {}),
|
|
16313
16453
|
onScrollKey: (name) => {
|
|
16314
16454
|
const { rows } = termSize();
|
|
16315
16455
|
const viewport = computePromptFrameLogViewportBounds(
|
|
@@ -16808,7 +16948,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
16808
16948
|
|
|
16809
16949
|
// Save to durable input history. Up/down reads the in-memory
|
|
16810
16950
|
// tail, while slash/LLM tools can search the full store.
|
|
16811
|
-
if (!internalTurn) internalTurnGate.noteHumanTurn();
|
|
16951
|
+
if (!internalTurn) { internalTurnGate.noteHumanTurn(); goalContinue.noteHumanTurn(); goalInterimFold.noteHumanTurn(); }
|
|
16812
16952
|
if (postTurn.historyRecord && !internalTurn) {
|
|
16813
16953
|
inputHistoryStore.record(postTurn.historyRecord);
|
|
16814
16954
|
refreshInputHistory();
|
|
@@ -17713,18 +17853,14 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
17713
17853
|
setWorkingFocusPreview: () => { setWorkingFocus('preview', 'slash-term-move-preview'); },
|
|
17714
17854
|
nextTerminalVwSlotId: (terminalId) => `term-slot:${terminalId}`,
|
|
17715
17855
|
},
|
|
17716
|
-
// TUI-LOOP-COMMAND —
|
|
17717
|
-
//
|
|
17718
|
-
// idle/busy 신호는 대시보드 루프가 이미 쓰는 것을 그대로 쓴다 —
|
|
17719
|
-
// 스트리밍 턴(streamingInFlight · reportTuiTurn busy/idle) +
|
|
17720
|
-
// ACP 세션 바쁨(dashboardAcpChat.isBusy()). 프롬프트 제출은
|
|
17721
|
-
// 플러그인 submitDashboardText 와 같은 기존 제출 틈
|
|
17722
|
-
// (dispatchDashboardSubmitText)으로 낸다 — 새 제출 경로를 만들지 않는다.
|
|
17856
|
+
// TUI-LOOP-COMMAND — the scheduler ticks; H2 alone judges whether
|
|
17857
|
+
// an internal turn can open. A rejection waits for the next tick.
|
|
17723
17858
|
loopCommand: {
|
|
17724
|
-
isIdle: () =>
|
|
17859
|
+
isIdle: () => true,
|
|
17725
17860
|
submitPrompt: (prompt: string) => {
|
|
17726
|
-
|
|
17727
|
-
|
|
17861
|
+
const result = internalTurnGate.startTurnIfIdle(prompt, { origin: 'scheduled', reason: '/loop' });
|
|
17862
|
+
if (result.opened) debug.log('dashboard.loop', 'fired', { turnId: result.turnId });
|
|
17863
|
+
else debug.log('dashboard.loop', 'rejected', { reason: result.reason });
|
|
17728
17864
|
},
|
|
17729
17865
|
schedulerRef: dashboardLoopSchedulerRef,
|
|
17730
17866
|
},
|
|
@@ -18176,6 +18312,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
18176
18312
|
// array but doesn't paint until after the skill router's
|
|
18177
18313
|
// classifier LLM call returns (~1-2s of visual silence).
|
|
18178
18314
|
if (internalTurn) {
|
|
18315
|
+
try { goalInterimFold.foldBeforeInternalTurn(chatLines, internalTurn.origin, C.muted); } catch { /* fail-soft: 접기는 턴을 막지 않는다 */ }
|
|
18179
18316
|
chatLines.push(C.muted(` ${formatInternalTurnBanner(internalTurn)}`));
|
|
18180
18317
|
chatScrollOffset = -1;
|
|
18181
18318
|
} else {
|
|
@@ -18221,6 +18358,10 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
18221
18358
|
// through to keyword routing in those cases.
|
|
18222
18359
|
{
|
|
18223
18360
|
const urlDec = detectUrlRoute(tok.text, getUserConfig().skills.urlRouting);
|
|
18361
|
+
const urlGuard = urlDec ? null : workContextGuardReason(tok.text);
|
|
18362
|
+
if (urlGuard && extractUrls(tok.text).length > 0) {
|
|
18363
|
+
debug.log('skill.router', 'url-route-guarded', { reason: urlGuard, textLength: tok.text.length });
|
|
18364
|
+
}
|
|
18224
18365
|
if (urlDec) {
|
|
18225
18366
|
debug.log('skill.router', 'url-route', {
|
|
18226
18367
|
kind: urlDec.kind, skill: urlDec.skill, absorb: urlDec.absorb,
|
|
@@ -18272,7 +18413,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
18272
18413
|
const detectTier = getModelTier(getUserConfig().llm.provider, getUserConfig().llm.model);
|
|
18273
18414
|
const routeStartedAt = Date.now();
|
|
18274
18415
|
const route = await runAbortableDashboardSkillRoute({
|
|
18275
|
-
attachKeys: attachChatStreamingKeys,
|
|
18416
|
+
attachKeys: (ctrl: AbortController) => attachChatStreamingKeys(ctrl, { turnEnd: false }),
|
|
18276
18417
|
detect: (signal) => detectDashboardSkillRoute(tok.text, visibleIndex, {
|
|
18277
18418
|
llmFallback: userCfg.llmFallback,
|
|
18278
18419
|
keywordScoreThreshold: userCfg.keywordScoreThreshold,
|
|
@@ -18537,7 +18678,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
18537
18678
|
return buildDashboardOptionalToolSpecs({
|
|
18538
18679
|
userConfig: uc,
|
|
18539
18680
|
termSize,
|
|
18540
|
-
registerAllDefaultToolRuntimes: () => { toolRuntime.registerAllDefaultToolRuntimes(); },
|
|
18681
|
+
registerAllDefaultToolRuntimes: () => { toolRuntime.registerAllDefaultToolRuntimes({ mcpLazyBoot: true }); },
|
|
18541
18682
|
setTerminalModalRuntimeDeps: (deps) => { toolRuntime.setTerminalModalRuntimeDeps(deps); },
|
|
18542
18683
|
...buildDefaultDashboardToolBuilders(),
|
|
18543
18684
|
}) as unknown[];
|
|
@@ -18584,6 +18725,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
18584
18725
|
renderedToolRuntime,
|
|
18585
18726
|
brainIcon: ICONS.brain,
|
|
18586
18727
|
});
|
|
18728
|
+
latestTurnStream = turnStreamRuntime;
|
|
18587
18729
|
return {
|
|
18588
18730
|
...turnStreamRuntime,
|
|
18589
18731
|
onText: (chunk, accumulated) => {
|
|
@@ -18642,6 +18784,17 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
18642
18784
|
},
|
|
18643
18785
|
resetAcpTurnRef: () => resetDashboardAcpTurnRef(acpTurnRef),
|
|
18644
18786
|
acpSession: dashboardAcpSession,
|
|
18787
|
+
// TUI-400-AUTOHEAL-FALLBACK(대표 10-22) — 400(대화 기록 어긋남)이면 ① 새 세션 ⊕ 요약 ② 다음 공급자로 스스로 회복.
|
|
18788
|
+
autoheal: createDashboardTurnAutoheal({
|
|
18789
|
+
session: dashboardAcpSession,
|
|
18790
|
+
getCwd: getSessionCwd,
|
|
18791
|
+
onRenewed: (sessionId) => {
|
|
18792
|
+
acpSessionIdRef.current = sessionId;
|
|
18793
|
+
observeSessionStart({ surface: 'tui', origin: 'new', reason: 'autoheal-400', sessionId });
|
|
18794
|
+
},
|
|
18795
|
+
remote: daemonAttached,
|
|
18796
|
+
activeModel: () => resolveDashboardActiveModel(tok.text) ?? undefined,
|
|
18797
|
+
}),
|
|
18645
18798
|
control: {
|
|
18646
18799
|
signalBus: dashboardControlSignals,
|
|
18647
18800
|
},
|
|
@@ -172,7 +172,13 @@ export function createAgentWake(deps: AgentWakeDeps): AgentWakeController {
|
|
|
172
172
|
return;
|
|
173
173
|
}
|
|
174
174
|
tryOpen(n, 'input-mounted');
|
|
175
|
-
} catch {
|
|
175
|
+
} catch (error) {
|
|
176
|
+
// fail-soft: 깨움은 입력을 막지 않는다 — 다만 «조용히 죽은» 이유는 TF 가 봐야 한다(거부는 사유 로그).
|
|
177
|
+
log('tui.agent-wake', 'rejected', {
|
|
178
|
+
taskId: n.taskId, agent: n.agentName, state: n.state, trigger: 'input-mounted', reason: 'error',
|
|
179
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
180
|
+
});
|
|
181
|
+
}
|
|
176
182
|
});
|
|
177
183
|
},
|
|
178
184
|
};
|