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
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import type { Command } from 'commander';
|
|
4
|
+
import { getElanousConfigDir } from '../elanous-config-dir.js';
|
|
5
|
+
import { readNexusRuntime } from '../nexus/runtime.js';
|
|
6
|
+
import { TASK_CARD_PREFIX } from '../task-agent/task-card-prefix.js';
|
|
7
|
+
import type { Task } from '../task-orchestrator/types.js';
|
|
8
|
+
import type { TasksCliDeps } from './tasks-cli.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* CLI-ENTRY-LAZY — `tasks list`·`tasks show` 의 등록과 넥서스 조회 보조.
|
|
12
|
+
* ⛔ 이 파일은 task-agent 의 board·shadow·mission 클러스터(·dashboard)를 «정적으로» 싣지 않는다 — 가벼운 진입(`light-cli.ts`)이
|
|
13
|
+
* `tasks-cli.ts` 전체 대신 이것만 등록한다. 과제 카드(`ta-…`) 상세는 `tasks-card-show.ts` 를 그때 싣는다.
|
|
14
|
+
* 같은 등록 함수를 `tasks-cli.ts` 가 부르므로 전체 진입과 출력 계약이 한 코드다.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
type TaskRow = Pick<Task, 'id' | 'title' | 'priority' | 'status' | 'createdAt' | 'approval' | 'generatedBy'>;
|
|
18
|
+
|
|
19
|
+
/** `tasks hand`·`show` 가 남기는 `task-agent` 관측의 logs.db surface 라벨. */
|
|
20
|
+
export const TASK_AGENT_SINK_SURFACE = 'task-agent';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 독립 CLI 프로세스는 데몬의 logs.db 싱크를 상속하지 않는다 — 등록하지 않으면 `debug.log('task-agent', …)` 가
|
|
24
|
+
* 파일 트레일에만 남고 `elanous logs --category task-agent` 에 0건으로 보인다(10-06 실측: 카드 3장 · 이벤트 0).
|
|
25
|
+
* fail-open — 등록 실패가 과제 넘기기를 막지 않는다.
|
|
26
|
+
*/
|
|
27
|
+
export async function registerTaskAgentSink(register?: (surface: string) => Promise<unknown>): Promise<void> {
|
|
28
|
+
try {
|
|
29
|
+
const fn = register ?? (await import('../domains/standalone-log-sink.js')).registerStandaloneLogSink;
|
|
30
|
+
await fn(TASK_AGENT_SINK_SURFACE);
|
|
31
|
+
} catch { /* fail-open — 파일 트레일이 진실원 */ }
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const PRIORITY_RANK: Record<Task['priority'], number> = { urgent: 0, high: 1, medium: 2, low: 3 };
|
|
35
|
+
export const NEXUS_DOWN = '넥서스가 안 떠 있다 — `elanous nexus run`';
|
|
36
|
+
|
|
37
|
+
function taskOrder(a: TaskRow, b: TaskRow): number {
|
|
38
|
+
return PRIORITY_RANK[a.priority] - PRIORITY_RANK[b.priority]
|
|
39
|
+
|| a.createdAt - b.createdAt || a.id.localeCompare(b.id);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function taskSource(task: TaskRow): string {
|
|
43
|
+
return task.generatedBy?.kind === 'external'
|
|
44
|
+
? `${task.generatedBy.provider}:${task.generatedBy.ref}` : '-';
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function taskLine(task: TaskRow): string {
|
|
48
|
+
return [task.id, task.priority, task.status, task.approval?.state ?? '-', taskSource(task), task.title].join('\t');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function credentials(deps: TasksCliDeps): { baseUrl: string; token?: string } | null {
|
|
52
|
+
const port = deps.baseUrl !== undefined ? undefined : readNexusRuntime()?.httpPort;
|
|
53
|
+
const baseUrl = deps.baseUrl ?? (port ? `http://127.0.0.1:${port}` : undefined);
|
|
54
|
+
if (!baseUrl) return null;
|
|
55
|
+
// Same as `connector linear sync`: an isolated (--test) universe has no acp-token and its
|
|
56
|
+
// daemon accepts loopback callers without one — send the bearer only when there is one.
|
|
57
|
+
let token = deps.bearerToken;
|
|
58
|
+
if (token === undefined) {
|
|
59
|
+
try { token = readFileSync(join(getElanousConfigDir(), 'acp-token'), 'utf8').trim() || undefined; }
|
|
60
|
+
catch { token = undefined; }
|
|
61
|
+
}
|
|
62
|
+
return { baseUrl, ...(token ? { token } : {}) };
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export class NexusUnavailable extends Error {}
|
|
66
|
+
|
|
67
|
+
export async function request(deps: TasksCliDeps, auth: { baseUrl: string; token?: string }, path: string, method = 'GET'): Promise<Response> {
|
|
68
|
+
try {
|
|
69
|
+
return await (deps.fetch ?? fetch)(`${auth.baseUrl}${path}`, {
|
|
70
|
+
method,
|
|
71
|
+
headers: auth.token ? { Authorization: `Bearer ${auth.token}` } : {},
|
|
72
|
+
});
|
|
73
|
+
} catch {
|
|
74
|
+
// Fetch exceptions can include the URL or credentials; never forward their text.
|
|
75
|
+
throw new NexusUnavailable();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export async function responseJson(response: Response): Promise<unknown> {
|
|
80
|
+
try { return await response.json(); }
|
|
81
|
+
catch { throw new Error('넥서스 응답 JSON이 유효하지 않다'); }
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function httpError(response: Response): Error {
|
|
85
|
+
// Do not echo server-supplied error bodies: they may contain credentials.
|
|
86
|
+
return new Error(`HTTP ${response.status}`);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function handleError(error: unknown, out: (line: string) => void): void {
|
|
90
|
+
if (error instanceof NexusUnavailable) {
|
|
91
|
+
out(NEXUS_DOWN);
|
|
92
|
+
process.exitCode = 2;
|
|
93
|
+
} else {
|
|
94
|
+
out(error instanceof Error ? error.message : '태스크 요청 실패');
|
|
95
|
+
process.exitCode = 1;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** `tasks` 하위 명령들이 함께 쓰는 출력·인증 문맥 — 응답 출력에서 쓰인 토큰을 가린다. */
|
|
100
|
+
export interface TasksCliContext {
|
|
101
|
+
deps: TasksCliDeps;
|
|
102
|
+
out: (line: string) => void;
|
|
103
|
+
authenticate: () => { baseUrl: string; token?: string };
|
|
104
|
+
clearToken: () => void;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function createTasksCliContext(deps: TasksCliDeps): TasksCliContext {
|
|
108
|
+
let activeToken: string | undefined;
|
|
109
|
+
const output = deps.output ?? console.log;
|
|
110
|
+
return {
|
|
111
|
+
deps,
|
|
112
|
+
out: (line: string) => output(activeToken ? line.replaceAll(activeToken, '[redacted]') : line),
|
|
113
|
+
authenticate: () => {
|
|
114
|
+
const auth = credentials(deps);
|
|
115
|
+
activeToken = auth?.token;
|
|
116
|
+
if (!auth) throw new NexusUnavailable();
|
|
117
|
+
return auth;
|
|
118
|
+
},
|
|
119
|
+
clearToken: () => { activeToken = undefined; },
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** `tasks` 뿌리 명령(별칭 `task`) — 전체·가벼운 등록이 같은 뿌리를 쓴다. */
|
|
124
|
+
export function registerTasksRoot(program: Command): Command {
|
|
125
|
+
return program.command('tasks').alias('task').description('TOX 태스크 조회 및 승인 · TASK-AGENT 과제 넘기기(hand)');
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function registerTaskListCommand(tasks: Command, ctx: TasksCliContext): void {
|
|
129
|
+
const { deps, out, authenticate } = ctx;
|
|
130
|
+
tasks.command('list')
|
|
131
|
+
.description('우선순위와 생성 시각 순으로 태스크 보기')
|
|
132
|
+
.option('--status <s>', '상태로 필터')
|
|
133
|
+
.option('--provider <p>', '외부 출처로 필터')
|
|
134
|
+
.option('--json', 'JSON 출력')
|
|
135
|
+
.action(async (opts: { status?: string; provider?: string; json?: boolean }) => {
|
|
136
|
+
try {
|
|
137
|
+
ctx.clearToken();
|
|
138
|
+
const auth = authenticate();
|
|
139
|
+
const response = await request(deps, auth, '/v1/tasks');
|
|
140
|
+
if (!response.ok) throw httpError(response);
|
|
141
|
+
const body = await responseJson(response) as { tasks?: Array<Pick<TaskRow, 'id' | 'status'>> };
|
|
142
|
+
if (!Array.isArray(body?.tasks)) throw new Error('넥서스 태스크 목록 형식이 유효하지 않다');
|
|
143
|
+
const cards = body.tasks.filter((task) => !opts.status || task.status === opts.status);
|
|
144
|
+
// The list endpoint returns board cards without approval or provenance.
|
|
145
|
+
// Obtain those fields from the detail endpoint rather than displaying guesses.
|
|
146
|
+
const rows: TaskRow[] = [];
|
|
147
|
+
for (const card of cards) {
|
|
148
|
+
const detail = await request(deps, auth, `/v1/tasks/${encodeURIComponent(card.id)}`);
|
|
149
|
+
if (!detail.ok) throw httpError(detail);
|
|
150
|
+
const data = await responseJson(detail) as { task?: TaskRow };
|
|
151
|
+
if (!data?.task || data.task.id !== card.id) throw new Error('넥서스 태스크 상세 형식이 유효하지 않다');
|
|
152
|
+
if (!opts.provider || (data.task.generatedBy?.kind === 'external' && data.task.generatedBy.provider === opts.provider)) rows.push(data.task);
|
|
153
|
+
}
|
|
154
|
+
rows.sort(taskOrder);
|
|
155
|
+
if (opts.json) out(JSON.stringify(rows));
|
|
156
|
+
else {
|
|
157
|
+
out('id\t우선순위\t상태\t승인\t출처\t제목');
|
|
158
|
+
for (const row of rows) out(taskLine(row));
|
|
159
|
+
}
|
|
160
|
+
} catch (error) { handleError(error, out); }
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export function registerTaskShowCommand(tasks: Command, ctx: TasksCliContext): void {
|
|
165
|
+
const { deps, out, authenticate } = ctx;
|
|
166
|
+
tasks.command('show <id>')
|
|
167
|
+
.description(`태스크 상세 보기 (id 가 \`${TASK_CARD_PREFIX}\` 로 시작하면 TASK-AGENT 과제 카드 ⊕ 다음 수)`)
|
|
168
|
+
.option('--json', 'JSON 출력')
|
|
169
|
+
.action(async (id: string, opts: { json?: boolean }) => {
|
|
170
|
+
if (id.startsWith(TASK_CARD_PREFIX)) {
|
|
171
|
+
const { showTaskCard } = await import('./tasks-card-show.js');
|
|
172
|
+
await showTaskCard(id, opts, deps, out);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
ctx.clearToken();
|
|
177
|
+
const auth = authenticate();
|
|
178
|
+
const response = await request(deps, auth, `/v1/tasks/${encodeURIComponent(id)}`);
|
|
179
|
+
if (!response.ok) throw httpError(response);
|
|
180
|
+
const data = await responseJson(response) as { task?: TaskRow };
|
|
181
|
+
if (!data?.task) throw new Error('넥서스 태스크 상세 형식이 유효하지 않다');
|
|
182
|
+
if (opts.json) out(JSON.stringify(data));
|
|
183
|
+
else {
|
|
184
|
+
out(taskLine(data.task));
|
|
185
|
+
out(JSON.stringify(data, null, 2));
|
|
186
|
+
}
|
|
187
|
+
} catch (error) { handleError(error, out); }
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** 가벼운 진입 전용 — `tasks list`·`tasks show` 만 등록한다(전체 레지스트리 `registerTasksCommands` 를 싣지 않는다). */
|
|
192
|
+
export function registerTaskReadCommands(program: Command, deps: TasksCliDeps = {}): void {
|
|
193
|
+
const ctx = createTasksCliContext(deps);
|
|
194
|
+
const tasks = registerTasksRoot(program);
|
|
195
|
+
registerTaskListCommand(tasks, ctx);
|
|
196
|
+
registerTaskShowCommand(tasks, ctx);
|
|
197
|
+
}
|
|
@@ -256,7 +256,7 @@ export async function runCoreTurn(
|
|
|
256
256
|
mode: deferredEnabled ? 'always' : 'off',
|
|
257
257
|
});
|
|
258
258
|
}
|
|
259
|
-
debug.log('capability.resolve', 'tier-split', {
|
|
259
|
+
debug.log('capability.resolve', 'tool-tier-split', {
|
|
260
260
|
sessionId: ctx.sessionId,
|
|
261
261
|
surfaceId: surface.id,
|
|
262
262
|
surfaceSelectionReason: surface.selectionReason,
|
|
@@ -285,7 +285,9 @@ export async function runCoreTurn(
|
|
|
285
285
|
signal: ctx.signal,
|
|
286
286
|
...(ctx.sessionId !== undefined ? { sessionId: ctx.sessionId } : {}),
|
|
287
287
|
...(ctx.maxToolTurns !== undefined ? { maxTurns: ctx.maxToolTurns } : {}),
|
|
288
|
-
...(ctx.
|
|
288
|
+
...(ctx.initialProvider !== undefined
|
|
289
|
+
? { initialProvider: ctx.initialProvider, ...(ctx.skipProviders ? { skipProviders: ctx.skipProviders } : {}) }
|
|
290
|
+
: ctx.modelOverride !== undefined ? { model: ctx.modelOverride } : {}),
|
|
289
291
|
...(ctx.callbacks?.onResolvedProvider !== undefined ? { onResolvedProvider: ctx.callbacks.onResolvedProvider } : {}),
|
|
290
292
|
...(ctx.budgetGrant !== undefined ? { budgetGrant: ctx.budgetGrant } : {}),
|
|
291
293
|
...(ctx.terminalToolNames !== undefined ? { terminalToolNames: ctx.terminalToolNames } : {}),
|
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
|
|
27
27
|
import { extractRecentUserText, runCoreTurn } from './run-core-turn.js';
|
|
28
28
|
import type { CoreTurnContext, CoreTurnResult, CoreTurnStopReason } from './types.js';
|
|
29
|
-
import { getToolLoopPhaseRejectedTools } from '../llm.js';
|
|
29
|
+
import { getToolLoopPhaseRejectedTools, TOOL_LOOP_MAX_TURNS_DEFAULT } from '../llm.js';
|
|
30
|
+
import { DELEGATE_HINT, shouldHintDelegate } from '../agent/delegate-hint.js';
|
|
30
31
|
import type { LLMMessage, ContentBlock, LLMToolSpec } from '../llm.js';
|
|
31
32
|
import type { LLMUsage } from '../prompt-cache/types.js';
|
|
32
33
|
import { debug } from '../debug/log.js';
|
|
@@ -173,6 +174,22 @@ export function buildUpdateGoalToolSpec(): LLMToolSpec {
|
|
|
173
174
|
export const GOAL_INTERNAL_NOTICE_RULE =
|
|
174
175
|
'이 반려·재요청은 내부 지시다. 사용자에게 보이는 답에 «완료 주장이 거부됐다/어긋났다»·«죄송합니다» 같은 내부 사정을 쓰지 말고, 고친 결과와 사실만 말하라.';
|
|
175
176
|
|
|
177
|
+
/** TUI-GOAL-INTERIM-QUIET(0.2.36 · 대표 10-22 «이 멘트 출력할 필요 없어 보인다 · 왜 이런 구조?») —
|
|
178
|
+
* 골이 열린 동안 반복마다 «아직 …못했습니다 · 완료 경로를 보고할 수 없습니다» 같은 최종 보고형 문단이 쌓였다
|
|
179
|
+
* (n8n 세션 u9yquv 실물: 반복 상한 8회 동안 4회). 중간 답은 진행 한 줄 · 최종 보고는 한 번만. */
|
|
180
|
+
export const GOAL_INTERIM_REPLY_RULE =
|
|
181
|
+
'- 목표가 열려 있는 동안의 중간 답은 진행 한 줄(방금 한 것 · 다음 할 것)만 쓴다. «아직 …하지 못했습니다»·«…보고할 수 없습니다» 같은 미완 목록·최종 보고형 문단은 쓰지 마라 — 최종 보고(한 것 · 남은 것 · 증거)는 update_goal(complete|blocked) 때 또는 마지막 반복에서 한 번만 쓴다.';
|
|
182
|
+
|
|
183
|
+
/** 마지막 반복 직전에 붙이는 한 줄 — 상한으로 끝나도 최종 보고가 «한 번»은 남게. */
|
|
184
|
+
export const GOAL_FINAL_ITERATION_NOTE =
|
|
185
|
+
'[last iteration] 이번이 이 목표의 마지막 반복이다. 이번에 끝내지 못하면 답 끝에 최종 보고를 한 번 써라: 한 것 · 남은 것 · 확인한 증거.';
|
|
186
|
+
|
|
187
|
+
/** 중간 답이 «최종 보고형»(미완 목록)인가 — 관측 전용(행동을 바꾸지 않는다). */
|
|
188
|
+
const INTERIM_REPORT_SHAPED = /(?:보고할 수 없|하지 못했습니다|못했습니다|완료되지 않았|검증되지 않았|확인하지 못했|not (?:yet )?(?:verified|completed)|cannot report)/i;
|
|
189
|
+
export function isInterimReportShaped(text: string): boolean {
|
|
190
|
+
return INTERIM_REPORT_SHAPED.test(text);
|
|
191
|
+
}
|
|
192
|
+
|
|
176
193
|
/** 목표 실행 계약 — 첫 turn 앞에 leading system 메시지로 주입. codex 자체 prompt.md /
|
|
177
194
|
* ext-goal continuation.md 의 지속·anti-shrink·증거완료 언어 이식. ASCII + 한국어. */
|
|
178
195
|
export const GOAL_SYSTEM_PREAMBLE = [
|
|
@@ -182,6 +199,7 @@ export const GOAL_SYSTEM_PREAMBLE = [
|
|
|
182
199
|
'- 완료는 증거로 판정한다. 모든 요구사항/산출물/검증에 대해 실제 현재 상태에서 증거를 확인하라. 불확실하거나 간접적인 증거는 미달성으로 보고 계속하라.',
|
|
183
200
|
`- 목표가 실제로 완전히 끝났고 증거로 확인됐을 때만 ${UPDATE_GOAL_TOOL_NAME} 도구를 status="complete" 로 호출하고 evidence 에 그 증거를 적어 종료하라. 완료 신호는 이 도구 호출뿐이다(텍스트 문장이 아니다).`,
|
|
184
201
|
'- 아직 할 일이 남았으면 멈추거나 허락을 구하지 말고 다음 최고가치 스텝을 바로 실행하라.',
|
|
202
|
+
GOAL_INTERIM_REPLY_RULE,
|
|
185
203
|
`- [continue]·[finalize]·[evidence required]·[evidence mismatch]·[tool call rejected] 같은 반려·재요청은 내부 지시다. 사용자에게 보이는 답에 «완료 주장이 거부됐다/어긋났다»·«죄송합니다» 같은 내부 사정을 쓰지 말고, ${UPDATE_GOAL_TOOL_NAME} 호출도 답에서 설명하지 마라.`,
|
|
186
204
|
].join('\n');
|
|
187
205
|
|
|
@@ -191,6 +209,7 @@ export const GOAL_CONTINUATION_PROMPT = [
|
|
|
191
209
|
'아직 목표가 완료로 증명되지 않았다. 완료를 미리 선언하지 말고, 현재 상태 대비 실제로 검증하라:',
|
|
192
210
|
'남은 요구사항을 식별하고, 다음 최고가치 스텝을 지금 도구로 실행하라.',
|
|
193
211
|
'이미 사용자에게 한 답을 다시 쓰지 마라 — 새 사실이 없으면 텍스트 없이 update_goal 만 호출하라.',
|
|
212
|
+
'이번 반복의 답은 진행 한 줄만 쓴다(미완 목록·«보고할 수 없습니다» 같은 최종 보고형 문단 금지 — 최종 보고는 complete|blocked 때 한 번).',
|
|
194
213
|
// evidence-audit(ref codex ext/goal continuation.md:41,51) — 스푸핑·조기완료 차단.
|
|
195
214
|
'완료 증거로 의도/부분진전/이전 작업 기억/그럴듯한 답을 쓰지 마라. 현재 상태(파일·명령출력·테스트결과·PR·런타임 동작)를 실제로 확인한 증거만 인정한다.',
|
|
196
215
|
'예산이 곧 소진된다거나 그만두고 싶다는 이유로 완료를 선언하지 마라.',
|
|
@@ -513,6 +532,10 @@ export async function runGoalLoop(
|
|
|
513
532
|
if (opts.injectPreamble !== false) {
|
|
514
533
|
messages.unshift({ role: 'system', content: GOAL_SYSTEM_PREAMBLE });
|
|
515
534
|
}
|
|
535
|
+
// TUI-GOAL-INTERIM-QUIET r2 — 반복이 한 번뿐이면 재주입이 없으니 «마지막 반복» 줄을 첫 turn 앞에 둔다.
|
|
536
|
+
if (maxIterations <= 1) {
|
|
537
|
+
messages.splice(opts.injectPreamble !== false ? 1 : 0, 0, { role: 'system', content: GOAL_FINAL_ITERATION_NOTE });
|
|
538
|
+
}
|
|
516
539
|
|
|
517
540
|
// 종결 선언 도구를 모델 catalog 에 주입. dispatch 는 루프가 가로채 benign ack 를 준다.
|
|
518
541
|
const updateGoalSpec = buildUpdateGoalToolSpec();
|
|
@@ -529,6 +552,8 @@ export async function runGoalLoop(
|
|
|
529
552
|
let rejectedToolCompletionRetried = 0;
|
|
530
553
|
let lastSig = '';
|
|
531
554
|
let lastInputTokens = 0;
|
|
555
|
+
let delegateHinted = false;
|
|
556
|
+
let toolCallsThisIteration = 0;
|
|
532
557
|
// OH8 후속 PR-2 — 가장 최근에 관측된 `run_tests` 결과(구조체). complete 주장의 반증으로 쓴다.
|
|
533
558
|
// 리셋 판단: iteration 경계에서 리셋하지 않고 "가장 최근 run_tests"를 last-wins 로 유지한다.
|
|
534
559
|
// 근거(오완료 방지): 모델이 이전 턴에 테스트 실패를 보고도 이번 턴에 test 재실행 없이 complete 만
|
|
@@ -599,6 +624,41 @@ export async function runGoalLoop(
|
|
|
599
624
|
};
|
|
600
625
|
|
|
601
626
|
try {
|
|
627
|
+
/** TUI-GOAL-INTERIM-QUIET — 골이 «실제로» 계속 열려 다음 반복을 재주입하는 모든 자리의 한 길목(r1 must-fix).
|
|
628
|
+
* ① 다음이 마지막 반복이면 어느 재주입이든 «최종 보고 한 번» 줄을 붙인다
|
|
629
|
+
* ② 관측은 여기서 — 완료·차단 신호가 반려돼 골이 열린 반복도 빠지지 않는다.
|
|
630
|
+
* ③ 상한에 닿았으면(다음 반복이 없다) 아무것도 하지 않는다 — 소비되지 않을 메시지·관측을 남기지 않는다(r2 must-fix). */
|
|
631
|
+
const reinject = (content: string): void => {
|
|
632
|
+
if (iterations >= maxIterations) return;
|
|
633
|
+
const lastIteration = iterations === maxIterations - 1;
|
|
634
|
+
try {
|
|
635
|
+
debug.log('goal.loop', 'interim-reply', {
|
|
636
|
+
sessionId: ctx.sessionId, ...runAttribution, iteration: iterations, lastIteration,
|
|
637
|
+
reportShaped: isInterimReportShaped(lastResult.finalText), finalChars: lastResult.finalText.length,
|
|
638
|
+
}, { level: 'debug' });
|
|
639
|
+
} catch { /* 관측 실패가 루프를 막지 않는다 */ }
|
|
640
|
+
const nextIteration = iterations + 1;
|
|
641
|
+
const toolBudget = ctx.maxToolTurns ?? TOOL_LOOP_MAX_TURNS_DEFAULT;
|
|
642
|
+
const shouldAttachDelegateHint = shouldHintDelegate({
|
|
643
|
+
iteration: nextIteration, maxIterations, toolCallsThisIteration, toolBudget,
|
|
644
|
+
alreadyHinted: delegateHinted,
|
|
645
|
+
});
|
|
646
|
+
if (shouldAttachDelegateHint) {
|
|
647
|
+
delegateHinted = true;
|
|
648
|
+
const reason = toolBudget > 0 && toolCallsThisIteration >= toolBudget * 0.8
|
|
649
|
+
? 'tool-budget-80-percent' : 'work-remaining';
|
|
650
|
+
try {
|
|
651
|
+
debug.log('agent.delegate', 'hint', {
|
|
652
|
+
sessionId: ctx.sessionId, ...runAttribution, iteration: nextIteration, reason,
|
|
653
|
+
});
|
|
654
|
+
} catch { /* 관측 실패가 재주입을 막지 않는다 */ }
|
|
655
|
+
}
|
|
656
|
+
messages.push({ role: 'user', content: [
|
|
657
|
+
content,
|
|
658
|
+
...(lastIteration ? [GOAL_FINAL_ITERATION_NOTE] : []),
|
|
659
|
+
...(shouldAttachDelegateHint ? [DELEGATE_HINT] : []),
|
|
660
|
+
].join('\n') });
|
|
661
|
+
};
|
|
602
662
|
while (iterations < maxIterations) {
|
|
603
663
|
// ⭐ 외부 soft-stop 은 **다음 iteration 진입 직전**에 본다(리뷰 must-fix · 2026-07-30).
|
|
604
664
|
// ⛔ turn 직후에 두면 같은 iteration 의 결과 판정(goal_complete·blocked·error·
|
|
@@ -694,6 +754,7 @@ export async function runGoalLoop(
|
|
|
694
754
|
// 반복의 history 로 이어붙인다. caller 의 onTurnComplete/onUsage 도 계속 통지.
|
|
695
755
|
let turnNewMessages: LLMMessage[] = [];
|
|
696
756
|
let dispatchCount = 0;
|
|
757
|
+
toolCallsThisIteration = 0;
|
|
697
758
|
let iterInputTokens = 0;
|
|
698
759
|
let iterOutputTokens = 0;
|
|
699
760
|
let iterCacheReadTokens = 0;
|
|
@@ -802,6 +863,7 @@ export async function runGoalLoop(
|
|
|
802
863
|
// update_goal 은 종결 신호 — 실 dispatcher 로 새지 않게 가로채 ack 만 돌려준다.
|
|
803
864
|
dispatchTool: (name, args, dctx) => {
|
|
804
865
|
dispatchCount += 1;
|
|
866
|
+
if (name !== UPDATE_GOAL_TOOL_NAME) toolCallsThisIteration += 1;
|
|
805
867
|
try {
|
|
806
868
|
debug.log('goal.loop', 'dispatch', {
|
|
807
869
|
sessionId: ctx.sessionId, ...runAttribution,
|
|
@@ -978,10 +1040,7 @@ export async function runGoalLoop(
|
|
|
978
1040
|
}, { level: 'warn' });
|
|
979
1041
|
blockedStreak = 0;
|
|
980
1042
|
readbackStreak = 0;
|
|
981
|
-
|
|
982
|
-
role: 'user',
|
|
983
|
-
content: buildEvidenceMismatchPrompt(rt.fail, rt.unmatchedFilters),
|
|
984
|
-
});
|
|
1043
|
+
reinject(buildEvidenceMismatchPrompt(rt.fail, rt.unmatchedFilters));
|
|
985
1044
|
continue;
|
|
986
1045
|
}
|
|
987
1046
|
// ①-b 재시도 후에도 불일치 → fail-open: 통과시키되 관측에 기록(코딩툴 fail-open 계약·
|
|
@@ -1001,10 +1060,7 @@ export async function runGoalLoop(
|
|
|
1001
1060
|
}, { level: 'warn' });
|
|
1002
1061
|
blockedStreak = 0;
|
|
1003
1062
|
readbackStreak = 0;
|
|
1004
|
-
|
|
1005
|
-
role: 'user',
|
|
1006
|
-
content: buildRejectedToolCompletionPrompt(rejectedTools),
|
|
1007
|
-
});
|
|
1063
|
+
reinject(buildRejectedToolCompletionPrompt(rejectedTools));
|
|
1008
1064
|
continue;
|
|
1009
1065
|
}
|
|
1010
1066
|
// ①-d retry exhausted → fail-open for coding tool guards, recorded for observability.
|
|
@@ -1104,7 +1160,7 @@ export async function runGoalLoop(
|
|
|
1104
1160
|
seatCapHits += 1;
|
|
1105
1161
|
blockedStreak = 0;
|
|
1106
1162
|
readbackStreak = 0;
|
|
1107
|
-
|
|
1163
|
+
reinject(SEAT_TURN_CAP_CONTINUE_PROMPT);
|
|
1108
1164
|
continue;
|
|
1109
1165
|
}
|
|
1110
1166
|
|
|
@@ -1114,7 +1170,7 @@ export async function runGoalLoop(
|
|
|
1114
1170
|
debug.log('goal.loop', 'complete-rejected-no-evidence', { sessionId: ctx.sessionId, ...runAttribution, iterations }, { level: 'warn' });
|
|
1115
1171
|
blockedStreak = 0;
|
|
1116
1172
|
readbackStreak = 0;
|
|
1117
|
-
|
|
1173
|
+
reinject(GOAL_EVIDENCE_REQUIRED_PROMPT);
|
|
1118
1174
|
continue;
|
|
1119
1175
|
}
|
|
1120
1176
|
|
|
@@ -1127,7 +1183,7 @@ export async function runGoalLoop(
|
|
|
1127
1183
|
debug.log('goal.loop', 'blocked-accepted', { sessionId: ctx.sessionId, ...runAttribution, iterations }, { level: 'warn' });
|
|
1128
1184
|
return finish({ finalText: lastResult.finalText, iterations, stopReason: 'no_progress', goalComplete: false });
|
|
1129
1185
|
}
|
|
1130
|
-
|
|
1186
|
+
reinject(GOAL_CONTINUATION_PROMPT);
|
|
1131
1187
|
continue;
|
|
1132
1188
|
}
|
|
1133
1189
|
blockedStreak = 0;
|
|
@@ -1141,7 +1197,7 @@ export async function runGoalLoop(
|
|
|
1141
1197
|
debug.log('goal.loop', 'marker-readback-exhausted', { sessionId: ctx.sessionId, ...runAttribution, iterations }, { level: 'warn' });
|
|
1142
1198
|
return finish({ finalText: lastResult.finalText, iterations, stopReason: 'no_progress', goalComplete: false });
|
|
1143
1199
|
}
|
|
1144
|
-
|
|
1200
|
+
reinject(GOAL_READBACK_PROMPT);
|
|
1145
1201
|
continue;
|
|
1146
1202
|
}
|
|
1147
1203
|
readbackStreak = 0;
|
|
@@ -1159,7 +1215,7 @@ export async function runGoalLoop(
|
|
|
1159
1215
|
sessionId: ctx.sessionId, ...runAttribution, iterations, attempt: intentStallReprompts,
|
|
1160
1216
|
finalChars: lastResult.finalText.length, provider: intentStallProvider,
|
|
1161
1217
|
}, { level: 'info' });
|
|
1162
|
-
|
|
1218
|
+
reinject(GOAL_INTENT_STALL_PROMPT);
|
|
1163
1219
|
continue;
|
|
1164
1220
|
}
|
|
1165
1221
|
debug.log('goal.loop', 'intent-stall-exhausted', {
|
|
@@ -1179,7 +1235,7 @@ export async function runGoalLoop(
|
|
|
1179
1235
|
sessionId: ctx.sessionId, ...runAttribution, iterations,
|
|
1180
1236
|
finalChars: lastResult.finalText.length, provider: intentStallProvider,
|
|
1181
1237
|
}, { level: 'info' });
|
|
1182
|
-
|
|
1238
|
+
reinject(GOAL_INTENT_STALL_PROMPT);
|
|
1183
1239
|
continue;
|
|
1184
1240
|
}
|
|
1185
1241
|
|
|
@@ -1214,7 +1270,8 @@ export async function runGoalLoop(
|
|
|
1214
1270
|
lastSig = sig;
|
|
1215
1271
|
|
|
1216
1272
|
// ⑦ 도구를 썼지만 완료 신호가 없음 = 진행 중 → continuation 재주입 후 다음 반복.
|
|
1217
|
-
|
|
1273
|
+
// 다음이 마지막 반복이면 «최종 보고 한 번» 줄을 붙인다(TUI-GOAL-INTERIM-QUIET).
|
|
1274
|
+
reinject(GOAL_CONTINUATION_PROMPT);
|
|
1218
1275
|
}
|
|
1219
1276
|
|
|
1220
1277
|
debug.log('goal.loop', 'max-iterations', { sessionId: ctx.sessionId, ...runAttribution, iterations }, { level: 'warn' });
|
package/src/core-turn/types.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
// folds dashboard onto `runCoreTurn` once the core event set is
|
|
16
16
|
// proven sufficient.
|
|
17
17
|
|
|
18
|
-
import type { LLMMessage, LLMOpts, LLMToolSpec } from '../llm.js';
|
|
18
|
+
import type { LLMMessage, LLMOpts, LLMProvider, LLMToolSpec } from '../llm.js';
|
|
19
19
|
import type { LLMUsage } from '../prompt-cache/types.js';
|
|
20
20
|
|
|
21
21
|
/** Stop reasons exposed by `runCoreTurn`. Mirrors the ACP
|
|
@@ -163,6 +163,11 @@ export interface CoreTurnContext {
|
|
|
163
163
|
terminalPriorAnswerVisible?: LLMOpts['terminalPriorAnswerVisible'];
|
|
164
164
|
/** Optional model override (forwarded to `streamLLMWithTools`). */
|
|
165
165
|
modelOverride?: string;
|
|
166
|
+
/** TUI-400-AUTOHEAL-FALLBACK — 이 턴을 이 공급자부터 연다(`streamLLMWithTools` `initialProvider` · 폴백은 허용).
|
|
167
|
+
* 주면 `modelOverride` 는 보내지 않는다(앞 공급자 모델 이름을 옮기지 않는다). */
|
|
168
|
+
initialProvider?: LLMProvider;
|
|
169
|
+
/** 이 턴 폴백 후보에서 뺄 공급자(`streamLLMWithTools` `skipProviders`). */
|
|
170
|
+
skipProviders?: readonly string[];
|
|
166
171
|
}
|
|
167
172
|
|
|
168
173
|
export interface CoreTurnResult {
|
|
@@ -12,35 +12,12 @@
|
|
|
12
12
|
// instance through every boundary clutters signatures; a singleton
|
|
13
13
|
// with a single reset hook for tests is pragmatic here.
|
|
14
14
|
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
type ContextKeyService,
|
|
18
|
-
type ContextKeys,
|
|
19
|
-
} from '../../input-core/context-keys.js';
|
|
15
|
+
import type { ContextKeyService, ContextKeys } from '../../input-core/context-keys.js';
|
|
16
|
+
import { getRuntimeContextKeyService, getRuntimeContextKeys, resetRuntimeContextKeysForTests, updateRuntimeContextKeys } from '../../input-core/context-key-runtime.js';
|
|
20
17
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
export
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** Convenience — equivalent to `getDashboardContextKeyService().keys`.
|
|
30
|
-
* Suitable for `ResolverDeps.getContextKeys`. */
|
|
31
|
-
export function getDashboardContextKeys(): Readonly<ContextKeys> {
|
|
32
|
-
return getDashboardContextKeyService().keys;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/** Convenience — merge a patch into the singleton. Equivalent to
|
|
36
|
-
* `getDashboardContextKeyService().update(patch)`. */
|
|
37
|
-
export function updateDashboardContextKeys(patch: Partial<ContextKeys>): void {
|
|
38
|
-
getDashboardContextKeyService().update(patch);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/** Test helper — drop the singleton so the next get creates a fresh
|
|
42
|
-
* service. Dashboard is never re-initialised at runtime; this is
|
|
43
|
-
* strictly for test hermeticity. */
|
|
44
|
-
export function __resetDashboardContextKeysForTests(): void {
|
|
45
|
-
service = null;
|
|
46
|
-
}
|
|
18
|
+
/** Dashboard-facing names remain stable while the singleton lives in the shared input layer. */
|
|
19
|
+
export const getDashboardContextKeyService = getRuntimeContextKeyService;
|
|
20
|
+
export const getDashboardContextKeys = getRuntimeContextKeys;
|
|
21
|
+
export const updateDashboardContextKeys = updateRuntimeContextKeys;
|
|
22
|
+
export const __resetDashboardContextKeysForTests = resetRuntimeContextKeysForTests;
|
|
23
|
+
export type { ContextKeyService, ContextKeys };
|