elanous 0.2.42 → 0.2.44
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/{X1ucLw10Cds_h614NoEnh → HMXsxdy5MIIcHPMHv1wD4}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/08334415.f0e80896acbef722.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1032-78ba4f6391258cab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1082-53f86a26e03d309d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1109-7d0e264f6f2edbc7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1124-7c26330402481143.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2160.a097e7b138ae1c55.js → 118.2a89982fe4276880.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1244.6c435dbf1bf21d8a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1252.9e665904d3aa3b1a.js +32 -0
- package/apps/pwa/out/_next/static/chunks/1266.a46cc33cb6a72d75.js +104 -0
- package/apps/pwa/out/_next/static/chunks/1306.967240ede9a0f757.js +24 -0
- package/apps/pwa/out/_next/static/chunks/1344.3b95f3bd1b77a3fe.js +94 -0
- package/apps/pwa/out/_next/static/chunks/{4043.6b91203436c9c86b.js → 1401.22dfe92640a2b1ac.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/1431-f7c78bd5be21e011.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1451-cdd35a8a0b31834b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6632.0eac1c554f8f2ef3.js → 1694.18debfd77562e56d.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1708-f03d587b7a7545c8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1775-fa7152bdeff6c95f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/178-4da509cd7266672a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1850-522de4ee34957210.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1876-c6f6e0ddcc76c6a1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1976.097066b072432242.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3507.97e1977bc4d5fb0a.js → 1978.eeb60a606dc5deac.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/2043.e233e3b5a3e790f5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2150.71b94e3348107c83.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2158.ebc6fc5a10280ab7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2216.802962c04f40a26e.js +64 -0
- package/apps/pwa/out/_next/static/chunks/2294.7890edcfa046c97d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/235.c89aaae4bcd6233a.js +74 -0
- package/apps/pwa/out/_next/static/chunks/{5885.0a3e52c8faccec98.js → 239.de075467b5523469.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/249.ba7051590d603c8f.js +226 -0
- package/apps/pwa/out/_next/static/chunks/2571.a6ac4e26c8618403.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2610.e149cd564a08913e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2705.9816f3c244f8b85f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2801.afeb8a4dae22f85f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2954.bbefc95d6b20e0d8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2e0f720a.a0697c08e3806a60.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3042.96ec235fe41c8d4e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3097-8e358f158acef46b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3205-93b1abe28b4fb16a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3273.b4434f0dcae7eb29.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3311.9cbc43ea0c90d60c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1487.2f67b79444062da6.js → 3349.b5f09ee474d9533e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3503.a47a9755fb4d97b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3506-5f429b3b7e1392b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3843.bad404d008893291.js +77 -0
- package/apps/pwa/out/_next/static/chunks/3877-4b40e530b47e3bf9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/435-ce2958253cf7de61.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4393.28fa5228d0eec217.js +149 -0
- package/apps/pwa/out/_next/static/chunks/4404.7281c847c6e10dfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8673-bab689a55f7e13b9.js → 4415-b9d6a90960920a4a.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/447-5b304de1fe098f43.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4484-8ebea83d431e6fae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8262.ddc03e06b733f184.js → 4502.bdcc877abd437a05.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4599-f95790fc5c65b8df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1262.e804feb8fd1acb8c.js → 46.57c783fa4884714f.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/463-b9114e411f33728e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4659.a57d1f0c5d754cd2.js +36 -0
- package/apps/pwa/out/_next/static/chunks/4722-a847e7a28115035f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1063.2fb8a9dc55c731f2.js → 4757.67c6d7473a038e78.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4874-c86f878ec4502ad3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6377.bc7df239edbff244.js → 4891.3f80ba517a3b2373.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4998.810ca8833084caa9.js +62 -0
- package/apps/pwa/out/_next/static/chunks/4f98febc.ea5841d4d616bfb2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3482.a9ae9d2ad6a5bd97.js → 5052.7dbb12a55d4f18f5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5166-ca73b3e361085a6d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5180-039f4a18b07ad387.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5232.5a2ce4daf7a9e11d.js +115 -0
- package/apps/pwa/out/_next/static/chunks/5439.3fec6dbce29ecb36.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5612-074d9a5e00dfac6a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5675-01989d524a84c505.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5751.af641a1adf5ec697.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5758-c6cb98714d18ab0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/578eded8.b582637306e16964.js +122 -0
- package/apps/pwa/out/_next/static/chunks/5790.5eb06a653ebd8571.js +34 -0
- package/apps/pwa/out/_next/static/chunks/5853-4033e5bd5afbe06b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5904.97d70bb7f46b2db7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3347.f846266b5e5f3ede.js → 5989.7ecd362c5c44b747.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{73d2eb0e.4966ad55293c801a.js → 5a34fb2f.52f1b4e1baebb48a.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{7a98bc80.fa935989e829f9c2.js → 5a5078f8.2099200e5ea95e16.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6036-c302c34ff0b3d410.js +1 -0
- package/apps/pwa/out/_next/static/chunks/606.ef81c313381f4264.js +1 -0
- package/apps/pwa/out/_next/static/chunks/616.1af54a928b1ba704.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6201.bc936f71f613a8e9.js +41 -0
- package/apps/pwa/out/_next/static/chunks/6204-fdc86e0e64c4f92d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7411.9b4b8b747dc7b802.js → 6245.1182e007e9d230d9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{b450776b.3db34d8d965f82d3.js → 63699a35.17262e162bc514b2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6420.494801a80030160c.js +27 -0
- package/apps/pwa/out/_next/static/chunks/{e8543907.5b040a5f22a0b0e5.js → 6549dad0.2740b25e51bf8f05.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9427.96aa912ddb5801e0.js → 6881.9e7955847640c7fe.js} +17 -17
- package/apps/pwa/out/_next/static/chunks/6931.fcdfb94141e67b3d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6991-8e081c6ce38c0ba1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7010.1bbd17a7f2b3e376.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7029.d1466acf55fae2ed.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7152-a123aa8e129c131f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7455.196168fffac3b9c4.js +24 -0
- package/apps/pwa/out/_next/static/chunks/7638.6ca4770dd1129138.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7649-f37d76260e5e2a5a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7679.32c40cdd14f20b4a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7751.04bfbd16b4c6cd0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7864.b1ff31d4030b8994.js +148 -0
- package/apps/pwa/out/_next/static/chunks/7869-c47bd2c075c1fefa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8138.6c10b2a356d52fca.js → 8442.2f09ca969d631615.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8445.2738dbd59a78c78c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8447.5510c439f9938c6d.js +286 -0
- package/apps/pwa/out/_next/static/chunks/{9415.69e4a21c60c7d2db.js → 8551.f762945c2cda2e95.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8635-57a9d8d9db70f4f1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/86961958-4b0689a5048f756b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8709.3c6019bb18f8554f.js +8 -0
- package/apps/pwa/out/_next/static/chunks/8759.c999528a0a907bf6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9a852a62-6192a6ea9346ced3.js → 87f498e5-0881de09f2e44707.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8843.c3197f904c952b81.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3d0154af.5331fec737ffe8c3.js → 892fd990.456232f326cc39c2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8965-135a2c9eaa2464cb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8971-8d3b9c96f8a6c958.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9059.c8598d96f8e5e9cd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9115.90447ae198b84eae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9147.d9b0a02e0babc9b4.js +93 -0
- package/apps/pwa/out/_next/static/chunks/9204-83075f4b70c61cdc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9244-c32ef14b5dc72bdf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/930.2a9a30f964350c66.js +90 -0
- package/apps/pwa/out/_next/static/chunks/9398.1f56e3f17795f43f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9527.3e5ad31c891c5fcb.js +79 -0
- package/apps/pwa/out/_next/static/chunks/9571-4ac933e774d1225c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-9fc644de2d8edae3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-0c9dace2db62bee8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f5e65c3dc9d89f2a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-2a9c19b9a140b7b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-61533ad92141adfb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-112004ced6fd0329.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-f733318c237a49d8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-51ea677d2d33bbc0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-428b41f2f9566e3c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-1b29396ea90a61e5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-cf83ec613ac904bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-3f4c0ecbc284bb5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-b63c322f54f70cc6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-fe328c4ee9aac6b4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-bfb855c584f0fb98.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-9fc644de2d8edae3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-47b1710c110eabd7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-42895214458bc6d2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-d03de0ebd8366e23.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-3ed6c47e4b1c61c2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-ae653e9bf261c738.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-23f3f0a0209c0ac4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-88c691273aae66f9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-e187ac52a95538b3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-6e45828daed1295e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-edb5d7287bb46186.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-4a7eaacd93c3f6a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-3ca073d43d74cc84.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-1e9fee67b1199436.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-df1283ea963c6816.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-19fcf8d8301ccd18.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-5ab699e0303bbb40.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-7cde0d29756984c5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-9d4c598e8ee22f7a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-cc1609a71f44ec62.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-7659a9a1345bfaa9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-0afef60ecc0c4af5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-a3553949f8f34f5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-9fc644de2d8edae3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-057a69702f3c67c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-c0f0e570f3f74c73.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-1825071ae34e3b89.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-6244e3e135d8ccfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-da787e8a10b8a82e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-1316d32498e2be42.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-4df94572e343de2e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-708969f7475e88c1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-c58add08c919a1dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-a24847f45e5d5bf9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-acfec65a3a60e22e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-3dfc598e6fbde245.js +1 -0
- package/apps/pwa/out/_next/static/chunks/framework-c658a626118411b7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-4c73685fd891445b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-6310f7e5de7dd01d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-51c326bf48610be1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-d0beadf754da59b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-acd243bfbf3f6732.js +1 -0
- package/apps/pwa/out/_next/static/css/d1f8bb401740a549.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +23 -23
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +23 -23
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +23 -23
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +22 -22
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +22 -22
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +23 -23
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +22 -22
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +23 -23
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +23 -23
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +22 -22
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +23 -23
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +23 -23
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +23 -23
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +23 -23
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +22 -22
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +22 -22
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +23 -23
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +23 -23
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +23 -23
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +22 -22
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +22 -22
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +22 -22
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +23 -23
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +23 -23
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +22 -22
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +22 -22
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +22 -22
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +22 -22
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +23 -23
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +23 -23
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +22 -22
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +23 -23
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +23 -23
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +23 -23
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +23 -23
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +23 -23
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +22 -22
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +23 -23
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +23 -23
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +23 -23
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +23 -23
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +23 -23
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +23 -23
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +23 -23
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +23 -23
- package/catalog/external-commands.yaml +5 -3
- package/catalog/meta/catalogVersion.yaml +2 -1
- package/catalog/signing/catalog-signing-public.pem +3 -0
- package/graphs/intake/intake-daily.yaml +16 -0
- package/graphs/intake/news-sources.yaml +1 -0
- package/graphs/intake/recipes.yaml +7 -0
- package/graphs/overlays/README.md +6 -0
- package/graphs/overlays/examples/research-runtime-empty-terminal.yaml +28 -0
- package/graphs/profiles/local.yaml +5 -0
- package/graphs/profiles/pod.yaml +4 -0
- package/graphs/release/release-loop.yaml +33 -17
- package/graphs/units/verbs/make-doc.yaml +1 -0
- package/package.json +6 -2
- package/plugins/demo-absorption-briefing/plugin.json +18 -0
- package/plugins/demo-absorption-briefing/skills/demo-absorption-briefing/SKILL.md +8 -0
- package/plugins/demo-browser-hand/plugin.json +13 -0
- package/plugins/demo-browser-hand/skills/demo-browser-hand/SKILL.md +8 -0
- package/plugins/demo-linear-secretary/plugin.json +15 -0
- package/plugins/demo-linear-secretary/skills/demo-linear-secretary/SKILL.md +8 -0
- package/plugins/demo-plugin-wizard/plugin.json +11 -0
- package/plugins/demo-plugin-wizard/skills/demo-plugin-wizard/SKILL.md +8 -0
- package/plugins/demo-research/plugin.json +16 -0
- package/plugins/demo-research/skills/demo-research/SKILL.md +8 -0
- package/plugins/demo-video-briefing/plugin.json +15 -0
- package/plugins/demo-video-briefing/skills/demo-video-briefing/SKILL.md +8 -0
- package/scripts/bench-metering-plan.ts +229 -0
- package/scripts/build-signed-catalog.ts +48 -0
- package/scripts/ci-typecheck-main-delta.sh +88 -0
- package/scripts/codex-fallback-live-probe.ts +1 -1
- package/scripts/demo/demo1104-parallel-host.ts +56 -0
- package/scripts/demo/demo1104-parallel-scenes.ts +301 -0
- package/scripts/demo/demo1104-parallel.ts +72 -0
- package/scripts/demo/demo1104-stage.config.ts +21 -0
- package/scripts/demo/demo1104-stage.ts +316 -0
- package/scripts/goal-method-audit.ts +17 -1
- package/scripts/graph-units/land-enqueue.ts +90 -0
- package/scripts/hooks/codex-notify.sh +32 -0
- package/scripts/install.sh +10 -38
- package/scripts/landing-heal/land-plan.ts +57 -0
- package/scripts/public-leak-baseline.txt +0 -1
- package/scripts/release-loop/auto-approve-node.ts +1 -1
- package/scripts/release-loop/docs-node.ts +4 -2
- package/scripts/release-loop/gate-autoheal-sim-evidence.ts +60 -0
- package/scripts/release-loop/gate-image-pin.ts +116 -2
- package/scripts/release-loop/gate-method.ts +139 -0
- package/scripts/release-loop/gate-node.ts +395 -43
- package/scripts/release-loop/gate-progress-sim.ts +73 -0
- package/scripts/release-loop/gate-traffic-mode.ts +151 -3
- package/scripts/release-loop/node-verdict.ts +38 -25
- package/scripts/release-loop/notes-repair.ts +18 -1
- package/scripts/release-loop/preflight.ts +544 -10
- package/scripts/release-loop/render-warm-control-manifest.ts +22 -0
- package/scripts/release-loop/resume-release.ts +9 -7
- package/scripts/release-loop/resume.ts +13 -4
- package/scripts/release-loop/unattended-release.ts +20 -9
- package/scripts/release-loop/warm-control-forward.ts +178 -0
- package/scripts/retro-cycle.ts +30 -8
- package/scripts/rhythm/daily.ts +39 -4
- package/scripts/rhythm/linear-progress-sync.ts +311 -0
- package/scripts/ux-sim.ts +7 -1
- package/scripts/video-pipeline.ts +9 -1
- package/scripts/warm-pool-provider-config.ts +35 -7
- package/src/acp/agent-manager.ts +1 -0
- package/src/acp/codex-app-server-agent.ts +33 -0
- package/src/acp/codex-app-server-client.ts +153 -16
- package/src/acp/core-turn-bridge.ts +17 -12
- package/src/acp/event-router.ts +20 -1
- package/src/acp/server.ts +6 -0
- package/src/agent-mission/browser-roundtrip-coordinator.ts +85 -0
- package/src/agent-mission/claude-headless.ts +4 -1
- package/src/agent-mission/codex-exec.ts +105 -0
- package/src/agent-mission/driver.ts +192 -11
- package/src/agent-mission/grok-auth-status.ts +107 -0
- package/src/agent-mission/hand-hooks.ts +101 -0
- package/src/agent-mission/mission-cli.ts +56 -21
- package/src/agent-mission/mission-hand-reply.ts +118 -0
- package/src/agent-mission/mission-line.ts +180 -0
- package/src/agent-mission/mission-out.ts +256 -18
- package/src/agent-mission/tool-install.ts +122 -11
- package/src/agent-substrate/pr-reviewer.ts +147 -11
- package/src/agent-substrate/self-review-cli.ts +10 -2
- package/src/agents/general-purpose.md +1 -1
- package/src/auto-research/research-fanout.ts +221 -0
- package/src/auto-research/research-turn.ts +362 -31
- package/src/autopilot/mission-codebase-gate.ts +7 -3
- package/src/autopilot/pr-manager.ts +31 -3
- package/src/boot/daemon-tools/self-implement.ts +3 -1
- package/src/boot/daemon-tools/web-search.ts +1 -2
- package/src/briefing/brief-items.ts +55 -11
- package/src/cli/agent-cli.ts +2 -1
- package/src/cli/catalog-cli.ts +31 -0
- package/src/cli/connector-cli.ts +16 -0
- package/src/cli/control-cli.ts +15 -6
- package/src/cli/doctor-fix.ts +2 -2
- package/src/cli/intake-source-cli.ts +44 -8
- package/src/cli/log-event-names.ts +8 -0
- package/src/cli/msg-cli.ts +32 -3
- package/src/cli/pr-cli.ts +21 -1
- package/src/cli/pr-land-heavy-remote.ts +44 -6
- package/src/cli/pr-land-overlap-evidence.ts +13 -1
- package/src/cli/pr-land-pod-shadow-job.ts +143 -5
- package/src/cli/pr-land-pod-shadow.ts +9 -2
- package/src/cli/release-checklist-read-cli.ts +44 -16
- package/src/cli/release-cli.ts +23 -3
- package/src/cli/research-cli.ts +9 -0
- package/src/cli/setup-cli.ts +166 -6
- package/src/cli/setup-keys.ts +199 -0
- package/src/cli/task-plugin-wizard-host.ts +114 -0
- package/src/cli/tasks-cli.ts +54 -9
- package/src/cli/tui-test-cli.ts +190 -0
- package/src/config.ts +4 -2
- package/src/connectors/linear-daily-progress.ts +228 -0
- package/src/connectors/linear-projector.ts +34 -12
- package/src/connectors/linear.ts +151 -7
- package/src/control-plane/ledger.ts +42 -4
- package/src/control-plane/member-tokens.ts +25 -2
- package/src/control-plane/ports.ts +8 -3
- package/src/control-plane/server.ts +26 -5
- package/src/core-turn/deep-turn-bloom.ts +67 -0
- package/src/core-turn/research-policy.ts +43 -0
- package/src/core-turn/run-core-turn.ts +488 -51
- package/src/core-turn/types.ts +4 -0
- package/src/dashboard/chat/acp-chat.ts +10 -0
- package/src/dashboard/classic-sidetab-mission-job.ts +192 -0
- package/src/dashboard/classic-sidetab-mission-pair.ts +82 -0
- package/src/dashboard/classic-sidetab-mission-trio.ts +242 -0
- package/src/dashboard/classic-sidetab-mission.ts +169 -5
- package/src/dashboard/index.ts +387 -14
- package/src/dashboard/input/chat-main-acp-dispatch.ts +23 -0
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +8 -0
- package/src/dashboard/mission-cli-consumer.ts +20 -8
- package/src/dashboard/plugin-wizard-runtime.ts +50 -0
- package/src/dashboard/plugin-wizard-tool.ts +55 -0
- package/src/dashboard/sidetab-runtime.ts +3 -1
- package/src/dashboard/terminal-popup-runtime.ts +6 -3
- package/src/dashboard/visible-mission-diagnostics.ts +16 -0
- package/src/decisions/linear-progress-summary.ts +78 -0
- package/src/decisions/linear-progress-sync.ts +152 -0
- package/src/domains/outbound-alert.ts +49 -11
- package/src/domains/retro-cycle-observation.ts +43 -0
- package/src/domains/retro-cycle.ts +13 -2
- package/src/domains/retro-proposals.ts +92 -0
- package/src/domains/retro-report.ts +6 -1
- package/src/domains/telegram-kind-route.ts +16 -9
- package/src/graph-runner/arg-allowance.ts +13 -0
- package/src/graph-runner/graph-cli.ts +24 -1
- package/src/graph-runner/graph-grow-llm.ts +3 -1
- package/src/graph-runner/graph-run-api.ts +3 -1
- package/src/graph-runner/runner.ts +310 -46
- package/src/graph-wizard/mission-compose.ts +407 -12
- package/src/harness/dispatch-backpressure.ts +54 -1
- package/src/harness/dispatch-shadow-compare.ts +74 -0
- package/src/harness/harness-cli-command.ts +15 -3
- package/src/harness/harness-pod-dispatch.ts +3 -0
- package/src/harness/skill-exec.ts +21 -9
- package/src/harness/skill-select.ts +1 -1
- package/src/hooks/error-report-cloud.ts +101 -0
- package/src/hooks/receiver.ts +29 -2
- package/src/index.ts +129 -12
- package/src/intake-plane/actions.ts +354 -0
- package/src/intake-plane/adapters/telegram-ambient.ts +34 -18
- package/src/intake-plane/intake-sources.ts +78 -8
- package/src/intake-plane/items.ts +14 -4
- package/src/intake-plane/linear-mission-sync.ts +80 -0
- package/src/intake-plane/linear-secretary-runtime.ts +178 -0
- package/src/intake-plane/linear-wish.ts +227 -1
- package/src/life/life-cli.ts +168 -0
- package/src/life/life-kinds.ts +160 -0
- package/src/live-supply/budget-consumer.ts +78 -0
- package/src/live-supply/read.ts +3 -0
- package/src/live-supply/snapshot.ts +45 -0
- package/src/llm/child-first-llm-observation.ts +112 -0
- package/src/llm/provider-credentials.ts +68 -6
- package/src/llm/provider-failure-evidence.ts +44 -0
- package/src/llm.ts +172 -12
- package/src/maturity/feature-maturity.ts +3 -3
- package/src/mcp/client.ts +7 -0
- package/src/mcp/proxy-runtime.ts +6 -1
- package/src/mcp/server.ts +54 -0
- package/src/msg/msg-sse-server.ts +3 -3
- package/src/msg/msg-store.ts +177 -19
- package/src/native-tool-catalog.ts +36 -2
- package/src/nexus/api/consult-requests.ts +18 -6
- package/src/nexus/api/discord-trigger-bot.ts +6 -6
- package/src/nexus/api/graphs-api.ts +4 -2
- package/src/nexus/api/grokbot-trigger-bot.ts +206 -0
- package/src/nexus/api/http-server.ts +37 -1
- package/src/nexus/api/mcp-public-allowlist.ts +2 -0
- package/src/nexus/api/telegram-trigger-bot.ts +6 -6
- package/src/nexus/boot/register-mcp-clients.ts +114 -8
- package/src/nexus/index.ts +22 -2
- package/src/nexus/outbound/format.ts +9 -0
- package/src/nexus/outbound/grokbot-adapter.ts +71 -0
- package/src/nexus/outbound/router.ts +121 -16
- package/src/nexus/setup-status.ts +9 -0
- package/src/nexus/state/state.ts +3 -0
- package/src/oauth/codex-account-store.ts +20 -7
- package/src/oauth/codex-owner-mirror.ts +81 -0
- package/src/oauth/codex.ts +17 -2
- package/src/oauth/fallback-chain.ts +47 -17
- package/src/onboarding/first-run-doctor.ts +8 -1
- package/src/onboarding/first-run.ts +126 -29
- package/src/onboarding/key-setup.ts +103 -0
- package/src/onboarding/menu-answer.ts +13 -0
- package/src/onboarding/secret-prompt.ts +37 -0
- package/src/plugins/install/plugin-install.ts +59 -0
- package/src/pr-tool/census.ts +130 -0
- package/src/preview/terminal.ts +22 -7
- package/src/prompt-enhance/enhance.ts +10 -0
- package/src/pty-shell/pty-control-ipc.ts +4 -1
- package/src/pty-shell/pty-write-provenance.ts +21 -3
- package/src/pty-shell/registry.ts +9 -2
- package/src/registry/catalog-server.ts +232 -0
- package/src/registry/loader.ts +45 -1
- package/src/registry/types.ts +1 -2
- package/src/release-loop/proposal-auto-place.ts +83 -0
- package/src/research/axis-fanout.ts +79 -29
- package/src/research/lenses/second-order.ts +312 -0
- package/src/self-dev/ask-launch-flow.ts +72 -1
- package/src/self-dev/dev-cli.ts +7 -2
- package/src/self-dev/dev-pipeline.ts +5 -0
- package/src/self-dev/draft-residue.ts +64 -5
- package/src/self-dev/draft-sweep.ts +31 -10
- package/src/self-dev/draft-triage-rules.ts +60 -3
- package/src/self-dev/graph-front-nodes.ts +2 -1
- package/src/self-dev/graph-journey-route.ts +76 -21
- package/src/self-dev/launch-preflight.ts +58 -0
- package/src/self-dev/orchestrate.ts +1 -1
- package/src/self-dev/run-supervisor.ts +152 -2
- package/src/self-dev/shard-aggregate.ts +4 -0
- package/src/self-dev/shard-run.ts +36 -15
- package/src/self-implement/abandoned-classification.ts +12 -3
- package/src/self-implement/budget-gate.ts +7 -0
- package/src/self-implement/child-llm-preference.ts +10 -1
- package/src/self-implement/doctor-visit.ts +30 -8
- package/src/self-implement/elanous-tui-spawn.ts +3 -0
- package/src/self-implement/fixtures/tdd-green-missing-passing-child-transcript.txt +2 -0
- package/src/self-implement/gate-artifacts.ts +2 -1
- package/src/self-implement/goal-author-cli.ts +4 -2
- package/src/self-implement/goal-author.ts +549 -10
- package/src/self-implement/graph-overlay-yaml.ts +181 -4
- package/src/self-implement/graph-overlay.ts +3 -1
- package/src/self-implement/graph-profile-yaml.ts +107 -0
- package/src/self-implement/graph-yaml.ts +94 -5
- package/src/self-implement/off-diff-evidence.ts +249 -5
- package/src/self-implement/orchestrator.ts +298 -26
- package/src/self-implement/run-chart.ts +6 -3
- package/src/self-implement/run-ledger.ts +51 -1
- package/src/self-implement/runtime-overlay-run-steps.ts +95 -0
- package/src/self-implement/tdd-evidence-tags.ts +9 -0
- package/src/self-implement/test-scenario-request.ts +37 -6
- package/src/self-implement/train-gate-receipt.ts +166 -0
- package/src/self-implement/train-gate-remote.ts +62 -18
- package/src/session/chat.ts +6 -4
- package/src/session/session-fanout.ts +2 -0
- package/src/session/streaming/acp-stream-sink.ts +2 -1
- package/src/session/streaming/chunk-producer.ts +6 -0
- package/src/session/streaming/stream-compositor.ts +3 -2
- package/src/session-runtime/index.ts +74 -6
- package/src/session-runtime/retry-policy.ts +1 -1
- package/src/setup/llm-env-detect.ts +3 -0
- package/src/setup/service-key-catalog.ts +46 -0
- package/src/setup/service-keys.ts +241 -0
- package/src/sidetab-core/model.ts +205 -10
- package/src/sidetab-core/visible-agent-mission-pair.ts +51 -0
- package/src/sidetab-core/visible-agent-mission.ts +182 -48
- package/src/skills/tools/agent.ts +23 -4
- package/src/skills/tools/omni-search.ts +127 -27
- package/src/task-agent/parent-host.ts +29 -1
- package/src/task-agent/recall-inject.ts +98 -0
- package/src/task-agent/repair-outcomes.ts +65 -0
- package/src/task-agent/task-hand.ts +46 -14
- package/src/task-orchestrator/dispatcher.ts +14 -1
- package/src/task-orchestrator/linear-capture-events.ts +55 -0
- package/src/task-orchestrator/store.ts +16 -5
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +23 -1
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +107 -1
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +113 -14
- package/src/task-orchestrator/surfaces/pod-si-warm-host.ts +21 -9
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +23 -11
- package/src/task-orchestrator/surfaces/pod-warm-switch.ts +2 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +1 -1
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +467 -77
- package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +45 -3
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +210 -14
- package/src/task-orchestrator/surfaces/self-implement.ts +27 -3
- package/src/task-orchestrator/surfaces/warm-reuse-evidence.ts +169 -0
- package/src/task-orchestrator/types.ts +14 -0
- package/src/telegram.ts +14 -16
- package/src/terminal/coding-agent.ts +14 -5
- package/src/terminal/session-registry.ts +1 -1
- package/src/tool-hints/gate.ts +46 -14
- package/src/tool-hints/signals.ts +1 -1
- package/src/tool-hints/types.ts +2 -0
- package/src/tool-runtime/agent-runtime.ts +1 -0
- package/src/tool-runtime/browser-hand-runtime.ts +391 -0
- package/src/tool-runtime/browser-runtime.ts +33 -19
- package/src/tool-runtime/elanous-linear-issue-runtime.ts +76 -0
- package/src/tool-runtime/elanous-linear-secretary-runtime.ts +173 -0
- package/src/tool-runtime/graph-mcp-runtimes.ts +240 -0
- package/src/tool-runtime/index.ts +6 -0
- package/src/tool-runtime/types.ts +5 -0
- package/src/tui/entry.ts +51 -8
- package/src/tui/sidetab/attach.ts +252 -11
- package/src/tui/sidetab/herdr-portal.ts +225 -0
- package/src/tui/sidetab/list.ts +3 -2
- package/src/tui-client/next-dashboard-runtime.ts +52 -0
- package/src/user-config.ts +34 -9
- package/src/user-intent/types.ts +4 -3
- package/src/ux-sim/browser-hand.ts +165 -0
- package/src/ux-sim/draft-inventory-builder.ts +199 -0
- package/src/ux-sim/fake-browser-page.ts +81 -0
- package/src/ux-sim/fake-linear-device.ts +31 -0
- package/src/ux-sim/graph-engine-sim.ts +47 -0
- package/src/ux-sim/linear-secretary.ts +208 -0
- package/src/ux-sim/mock-scenario-catalog.json +81 -26
- package/src/ux-sim/mock-scenario-catalog.ts +175 -5
- package/src/ux-sim/onboarding-first-run-device.ts +31 -21
- package/src/ux-sim/release-sim-rig.ts +62 -18
- package/src/ux-sim/scenario.ts +70 -26
- package/src/ux-sim/service-key-setup.ts +113 -0
- package/src/ux-sim/term-slash-device.ts +74 -0
- package/src/ux-sim/turn-throw-sim.ts +31 -0
- package/src/version/packed-revision.json +1 -1
- package/src/web-search/exa.ts +77 -0
- package/src/web-search/index.ts +30 -9
- package/src/web-search/provider.ts +4 -1
- package/src/web-search/x-intent.ts +5 -0
- package/apps/pwa/out/_next/static/chunks/0244e5b5.6fc7670f8223d82d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1121.13ba7a8aff19df81.js +0 -36
- package/apps/pwa/out/_next/static/chunks/1147-5196d19c222051b3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1319.b9b815ae0f181e06.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1345-31427b833438f521.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1455-530ca16c7e71baff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1574.878c18ecc97b1bd4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1586.fafc33a9a5835cb7.js +0 -32
- package/apps/pwa/out/_next/static/chunks/1744.855fd60ae4c4a8c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/193.21a47a3e07ef6860.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1945.7b54990d578c119b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2004.e839fda7ea5a738a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2044-dd681a5c08779ff8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2101.2248decb38829b03.js +0 -286
- package/apps/pwa/out/_next/static/chunks/2300.41ea70ac1bef1446.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2357-07b5eeb5fb12628d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2364.28652020695a6db3.js +0 -34
- package/apps/pwa/out/_next/static/chunks/2456.b6de0e1c05f28843.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2526.c3e50ac1fec064bd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2549-cda50b716ff4250c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2550-5f1e88f615568045.js +0 -1
- package/apps/pwa/out/_next/static/chunks/261-319078c954e40d66.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2690.0521c738b7749931.js +0 -115
- package/apps/pwa/out/_next/static/chunks/2974.595d1e29d040cb6a.js +0 -64
- package/apps/pwa/out/_next/static/chunks/3207.a756c95e9ec8c3c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3285.89ee2f298682f5e5.js +0 -93
- package/apps/pwa/out/_next/static/chunks/3447.06edc7b092021417.js +0 -41
- package/apps/pwa/out/_next/static/chunks/3510-9ca392698bfe4391.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3541.772e5ce425aaa611.js +0 -24
- package/apps/pwa/out/_next/static/chunks/3741.9cf76acaa2ee5298.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3837.a210d7d0db8d8abd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3898-955c896f394217a6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3947-ef57acea76eaa8d2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4037-3b82ebc7d78afdc7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/405.9022d4a478202b67.js +0 -77
- package/apps/pwa/out/_next/static/chunks/417-fb2cc9a9910e5968.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4276.336d76d858fcdf1b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4302.6ced9aa4535de947.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4320.583cbab64db6be02.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4768-8eac183fd291ca53.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4770.769c9cd9c7034eba.js +0 -148
- package/apps/pwa/out/_next/static/chunks/4895.65605ec3e6504e89.js +0 -74
- package/apps/pwa/out/_next/static/chunks/50061469.0326382241ef3b2d.js +0 -122
- package/apps/pwa/out/_next/static/chunks/5112.4b9f300124fab7b3.js +0 -149
- package/apps/pwa/out/_next/static/chunks/5335.375ee922bcd5bc83.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5342.023a2e729689b320.js +0 -27
- package/apps/pwa/out/_next/static/chunks/53c73f84.373b6160adfa89a4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5431-72a1dbde59400691.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5440-4236de26c5ea5856.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5486-b318c165f645d8ba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5506-c7d2ec25c62a7c94.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5570-c66ecbea26b4e3b1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5696.ffca5aa259d8451e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5793-8c584aea2aa87560.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5848-6de6b8c173351a90.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5999.94e3c83040200f31.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5a7901d6-2d8d9b5587cf9042.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6131.348b7d6bdcd267ce.js +0 -226
- package/apps/pwa/out/_next/static/chunks/6164.86133a0172611184.js +0 -90
- package/apps/pwa/out/_next/static/chunks/6515.e07e8b2b8a707a87.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6522-c005514f87d18982.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6642.648adb1767f39ecf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6848.138805a09d001d09.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7049-c09e2b7a253a24f3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7072.1e00447d9fa39972.js +0 -104
- package/apps/pwa/out/_next/static/chunks/7106.64201c539c5e220c.js +0 -94
- package/apps/pwa/out/_next/static/chunks/7151-1f742b455986530e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7199.18d6b25e001154ce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7279-c199ea83f34338fa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/728b938d.ffaa7ad583d60e58.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7309.171c3de54e0322f1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/733.7a1ab3342e03306f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7504.d5cf1e7cd89b1b08.js +0 -24
- package/apps/pwa/out/_next/static/chunks/7573-0fd4af62d65d4598.js +0 -1
- package/apps/pwa/out/_next/static/chunks/759.6f8267df4689c401.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7825-668b046f72f14483.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7852-1538768b6eb19388.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7868.cff810430bb63c91.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8084-dfcc796874ab4e07.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8266.6bf9b131b2584678.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8403.7b81d5e64074a725.js +0 -8
- package/apps/pwa/out/_next/static/chunks/8470.1998cbd0866a7eac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8505.fd803c6c33b54cc3.js +0 -79
- package/apps/pwa/out/_next/static/chunks/8546-6f03f8ea34dd61d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8687-246fda8433d3477c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/898-280022fb082936bc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9098-50eefc1844212e3d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9211-330b6736a63d4cb3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9249.976f1e69a9d80754.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9255-cf88fceda5666645.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9306-e523ba58bb8adc42.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9324.a9866d717ba62cb6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9325.a8510e8aa87c8143.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9353-12bfff0c130104cf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9479-154a697d4b6e4e98.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9540-65aa6ccc31b3fd78.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9633.ce5bddc56784da72.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9656-374232558fd528d0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9832.f4a98c878ecf2c0a.js +0 -62
- package/apps/pwa/out/_next/static/chunks/9865.f094440645f02d98.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-e772b4710df5d936.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-4361368e6a76b967.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-802f349fdd65248d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-7f35513988a2a495.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-798121656540e33e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-20a089490affe98c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-e5e4ec786d70e604.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-d12fe5d0801430e4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-d8cf21022fecc026.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-21ce565c9c57ee97.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-b56563025f619c9b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-52f14dd133da8348.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-c0ed7fdcdba76633.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-af8c3020cb520f15.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-72eda67af9f5e35c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-e772b4710df5d936.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-67a6620d31f0a46f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-f059363aa0880ec2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-f9f917d6a57f69fb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-d3ae55eee2f0826c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-0e3d7b9421b79dac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-ba738f7e233eb211.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-33438b98c74fd599.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-0b34d5fd990d793a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-0f291d3c8fd55a3a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-3fced192be5279c1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-04cb3cf182a7c1ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-6ccbd2ab23a21542.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-aa0518c48a5f4e56.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-4b32226d341ad7d7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-3224fd8f6383b61f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-efbc97459f2914e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-2fe487d88cd5d97c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-48861dd1a858bab7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-197d5d4d21d228ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-a763ba89fbdd9c27.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-7edb253510b1c136.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-0c875702c61965ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-e772b4710df5d936.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-e425c951151095f7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-9c90e0aec4e27f77.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-733e09a02e727d42.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-4f899e14c34d77a1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-bf067887b3307423.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-7af10868ff87d04e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-efe5304057aa11c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-76bcd29aaa8a26c3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-4cfd88e2273ce50f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-0a1ddb47efba0a32.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-2a176c707152c892.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-efe03031b8797fbf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-d0d2d673bfd8a8a9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-4c9fceb2baa09cb7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-b0ab8d8fc9a97556.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-7e2cc62a2e5cec96.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-22324935f753ec5e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-9dc1bfa25334998a.js +0 -1
- package/apps/pwa/out/_next/static/css/be9019f696217521.css +0 -1
- /package/apps/pwa/out/_next/static/{X1ucLw10Cds_h614NoEnh → HMXsxdy5MIIcHPMHv1wD4}/_ssgManifest.js +0 -0
package/src/dashboard/index.ts
CHANGED
|
@@ -779,8 +779,11 @@ export function getEscAbortRunningCount(
|
|
|
779
779
|
export function createDashboardClassicSidetabMissionCallbacks(
|
|
780
780
|
runMission: (agent: 'codex' | 'claude', mission: string, context?: ClassicSidetabMissionDispatchContext) => Promise<ClassicSidetabMissionResult>,
|
|
781
781
|
cancelMission?: (interactionId: string) => Promise<boolean>,
|
|
782
|
+
runMissionPair?: (agent: 'codex' | 'claude', mission: string, parallelMission: string, context?: ClassicSidetabMissionDispatchContext) => Promise<ClassicSidetabMissionPairResult>,
|
|
783
|
+
handReply?: (input: ClassicSidetabHandReplyInput) => Promise<{ ok: boolean; body: string }>,
|
|
784
|
+
runMissionTrio?: (mission: string, context?: ClassicSidetabMissionDispatchContext) => Promise<ClassicSidetabMissionTrioResult>,
|
|
782
785
|
): ClassicSidetabMissionIntegration {
|
|
783
|
-
return createClassicSidetabMissionIntegration(runMission, cancelMission);
|
|
786
|
+
return createClassicSidetabMissionIntegration(runMission, cancelMission, runMissionPair, handReply, runMissionTrio);
|
|
784
787
|
}
|
|
785
788
|
|
|
786
789
|
/** Bind the classic sidetab runtime to the ACP tool callbacks used by the dashboard. */
|
|
@@ -970,9 +973,15 @@ import {
|
|
|
970
973
|
} from './context-menu-action-runtime.js';
|
|
971
974
|
import { createDashboardTerminalPopupRuntime } from './terminal-popup-runtime.js';
|
|
972
975
|
import { createDashboardSidetabRuntime, mergeLocalAgentSessions, runDashboardAgentMission } from './sidetab-runtime.js';
|
|
973
|
-
import {
|
|
976
|
+
import { visibleMissionFailureLogData } from './visible-mission-diagnostics.js';
|
|
977
|
+
import { CLASSIC_SIDETAB_MISSION_TOOL_NAME, createClassicSidetabMissionIntegration, createClassicSidetabMissionPairSessionRegistry, type ClassicSidetabHandReplyInput, type ClassicSidetabMissionAgent, type ClassicSidetabMissionDispatchContext, type ClassicSidetabMissionIntegration, type ClassicSidetabMissionPairResult, type ClassicSidetabMissionResult, type ClassicSidetabMissionTrioResult } from './classic-sidetab-mission.js';
|
|
974
978
|
import { cancelClassicMissionCli, startClassicMissionCli } from './mission-cli-consumer.js';
|
|
975
979
|
import { enqueueClassicSidetabMissionCompletion } from './classic-sidetab-mission-job.js';
|
|
980
|
+
import { startClassicSidetabMissionPair } from './classic-sidetab-mission-pair.js';
|
|
981
|
+
import { startClassicSidetabMissionTrio } from './classic-sidetab-mission-trio.js';
|
|
982
|
+
import { createDashboardPluginWizardRuntime } from './plugin-wizard-runtime.js';
|
|
983
|
+
import { TUI_PLUGIN_WIZARD_TOOL_NAME } from './plugin-wizard-tool.js';
|
|
984
|
+
import { probeGrokLogin } from '../agent-mission/grok-auth-status.js';
|
|
976
985
|
import { loadSidetabRows } from '../sidetab-core/model.js';
|
|
977
986
|
import { toggleDashboardAssistantRenderState } from './assistant-render-state-runtime.js';
|
|
978
987
|
import { bootDashboardAcpBgSweep } from './acp-bg-sweep-boot.js';
|
|
@@ -1112,8 +1121,10 @@ import {
|
|
|
1112
1121
|
import { initElementObservability } from '../element-registry/index.js';
|
|
1113
1122
|
import {
|
|
1114
1123
|
createSearchPlannerState,
|
|
1124
|
+
buildSubagentSessionRuntimeToolSpecs,
|
|
1115
1125
|
buildSessionRuntimeToolSpecs,
|
|
1116
1126
|
buildSessionDashboardStatusLines,
|
|
1127
|
+
resolveDynamicSessionNativeToolSpecs,
|
|
1117
1128
|
consumeSessionQuickControl,
|
|
1118
1129
|
createSessionPostureState,
|
|
1119
1130
|
enterSessionControlMode,
|
|
@@ -13570,7 +13581,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13570
13581
|
// single line.
|
|
13571
13582
|
type TerminalPopupRequest =
|
|
13572
13583
|
| { kind: 'shell'; cwd: string; command?: string; env?: Record<string, string> }
|
|
13573
|
-
| { kind: 'coding-agent'; brand: 'claude-code' | 'codex' | 'gemini'; cwd: string; extraArgs?: readonly string[] };
|
|
13584
|
+
| { kind: 'coding-agent'; brand: 'claude-code' | 'codex' | 'gemini' | 'grok'; cwd: string; extraArgs?: readonly string[]; env?: Record<string, string>; id?: string };
|
|
13574
13585
|
|
|
13575
13586
|
const openInteractiveTerminalPopup = (req: TerminalPopupRequest): TerminalSession | null => {
|
|
13576
13587
|
const { cols: tc, rows: tr } = termSize();
|
|
@@ -13686,7 +13697,9 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13686
13697
|
{
|
|
13687
13698
|
brand: req.brand,
|
|
13688
13699
|
cwd: req.cwd,
|
|
13700
|
+
id: req.id,
|
|
13689
13701
|
extraArgs: req.extraArgs ? [...req.extraArgs] : undefined,
|
|
13702
|
+
env: req.env,
|
|
13690
13703
|
onExit: handleExit,
|
|
13691
13704
|
onTitleAction: handleTitleAction,
|
|
13692
13705
|
},
|
|
@@ -13699,6 +13712,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13699
13712
|
const installLabel =
|
|
13700
13713
|
req.brand === 'claude-code' ? 'Claude Code'
|
|
13701
13714
|
: req.brand === 'gemini' ? 'Gemini CLI (@google/gemini-cli)'
|
|
13715
|
+
: req.brand === 'grok' ? 'Grok CLI'
|
|
13702
13716
|
: 'Codex CLI';
|
|
13703
13717
|
chatLines.push(C.muted(
|
|
13704
13718
|
` Install ${installLabel} first, then try again.`,
|
|
@@ -13816,10 +13830,39 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13816
13830
|
},
|
|
13817
13831
|
spawnShell: () => { spawnGlobalTerminalModal(); },
|
|
13818
13832
|
spawnAgent: (agent) => {
|
|
13819
|
-
|
|
13833
|
+
void (async () => {
|
|
13834
|
+
try {
|
|
13835
|
+
const prepared = await prepareClassicSidetabAgentCli(agent);
|
|
13836
|
+
if (!prepared.ready) {
|
|
13837
|
+
chatLines.push(C.warning(` ${prepared.message}`));
|
|
13838
|
+
chatScrollOffset = -1;
|
|
13839
|
+
draw();
|
|
13840
|
+
return;
|
|
13841
|
+
}
|
|
13842
|
+
TerminalPopup.agent(agent === 'claude' ? 'claude-code' : 'codex').cwd(workingDir.cwd).open();
|
|
13843
|
+
} catch {
|
|
13844
|
+
chatLines.push(C.warning(` ${agent}: 설치·로그인 상태를 확인하지 못했습니다`));
|
|
13845
|
+
chatScrollOffset = -1;
|
|
13846
|
+
draw();
|
|
13847
|
+
}
|
|
13848
|
+
})();
|
|
13820
13849
|
},
|
|
13821
13850
|
runMission: async (agent, mission, requestedOutputPath) => {
|
|
13822
|
-
|
|
13851
|
+
try {
|
|
13852
|
+
const prepared = await prepareClassicSidetabAgentCli(agent);
|
|
13853
|
+
if (!prepared.ready) return {
|
|
13854
|
+
ok: false, path: requestedOutputPath ?? '', promptReady: false,
|
|
13855
|
+
missionVisible: false, promptReturned: false, completionMarker: false,
|
|
13856
|
+
error: prepared.message,
|
|
13857
|
+
};
|
|
13858
|
+
} catch {
|
|
13859
|
+
return {
|
|
13860
|
+
ok: false, path: requestedOutputPath ?? '', promptReady: false,
|
|
13861
|
+
missionVisible: false, promptReturned: false, completionMarker: false,
|
|
13862
|
+
error: `${agent}: 설치·로그인 상태를 확인하지 못했습니다`,
|
|
13863
|
+
};
|
|
13864
|
+
}
|
|
13865
|
+
const result = await runDashboardAgentMission({
|
|
13823
13866
|
agent,
|
|
13824
13867
|
requestedOutputPath,
|
|
13825
13868
|
open: () => TerminalPopup.agent(agent === 'claude' ? 'claude-code' : 'codex').cwd(workingDir.cwd).open() ?? undefined,
|
|
@@ -13844,6 +13887,9 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13844
13887
|
if (terminalModalRouter.current()?.id === session.id) terminalModalRouter.close();
|
|
13845
13888
|
},
|
|
13846
13889
|
});
|
|
13890
|
+
const failure = visibleMissionFailureLogData(agent, result);
|
|
13891
|
+
if (failure) debug.log('classic-sidetab.mission', 'failed', failure, { level: 'warn' });
|
|
13892
|
+
return result;
|
|
13847
13893
|
},
|
|
13848
13894
|
detach: (row) => {
|
|
13849
13895
|
if (row?.currentProcess) {
|
|
@@ -13885,15 +13931,45 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13885
13931
|
},
|
|
13886
13932
|
});
|
|
13887
13933
|
closeClassicSidetabRuntime = () => classicSidetabRuntime.close();
|
|
13934
|
+
const classicMissionPairSessions = createClassicSidetabMissionPairSessionRegistry();
|
|
13935
|
+
const cancelClassicSidetabMission = async (interactionId: string): Promise<boolean> => {
|
|
13936
|
+
const paired = classicMissionPairSessions.cancel(
|
|
13937
|
+
interactionId,
|
|
13938
|
+
(sessionId) => Boolean(sessionRegistry.get(sessionId)),
|
|
13939
|
+
(sessionId) => sessionRegistry.kill(sessionId),
|
|
13940
|
+
);
|
|
13941
|
+
return paired ?? cancelClassicMissionCli(interactionId);
|
|
13942
|
+
};
|
|
13943
|
+
const handReplyTargets = new Map<string, { missionId: string; attemptId: string; agent: 'codex' | 'claude'; token: string; nexusUrl: string; ptyId: string; runId: string }>();
|
|
13944
|
+
const prepareClassicSidetabAgentCli = async (agent: 'codex' | 'claude') => {
|
|
13945
|
+
const [{ prepareAgentCli }, { requestConfirmation }] = await Promise.all([
|
|
13946
|
+
import('../agent-mission/tool-install.js'), import('../hitl/confirm.js'),
|
|
13947
|
+
]);
|
|
13948
|
+
return prepareAgentCli(agent, {
|
|
13949
|
+
onStatus: (line) => {
|
|
13950
|
+
chatLines.push(C.muted(` ${line}`));
|
|
13951
|
+
chatScrollOffset = -1;
|
|
13952
|
+
draw();
|
|
13953
|
+
},
|
|
13954
|
+
confirmInstall: async (prompt) => (await requestConfirmation({
|
|
13955
|
+
prompt,
|
|
13956
|
+
detail: '확인하면 공식 npm 설치 명령을 실행한 뒤 설치 버전과 로그인을 다시 확인합니다.',
|
|
13957
|
+
agentKind: 'agent-cli',
|
|
13958
|
+
onTimeout: () => false,
|
|
13959
|
+
})).answer,
|
|
13960
|
+
});
|
|
13961
|
+
};
|
|
13962
|
+
const pluginWizardPairCompletions = new Map<string, Promise<import('./classic-sidetab-mission-job.js').ClassicSidetabMissionPairCompletionResult>>();
|
|
13888
13963
|
const classicSidetabMission = createDashboardClassicSidetabMissionCallbacks(async (agent, mission, context) => {
|
|
13889
13964
|
const started = await startClassicMissionCli({
|
|
13890
13965
|
agent,
|
|
13891
13966
|
prompt: mission,
|
|
13967
|
+
...(context?.linearIssueId ? { linearIssueId: context.linearIssueId } : {}),
|
|
13892
13968
|
onInteractionId: (interactionId) => debug.log('classic-sidetab.mission', 'started', {
|
|
13893
13969
|
interactionId,
|
|
13894
13970
|
toolCallId: context?.callId ?? null,
|
|
13895
13971
|
}),
|
|
13896
|
-
});
|
|
13972
|
+
}, { prepareAgentCli: prepareClassicSidetabAgentCli });
|
|
13897
13973
|
if (!('completion' in started)) return started;
|
|
13898
13974
|
const job = started;
|
|
13899
13975
|
enqueueClassicSidetabMissionCompletion(job, agent, (notification) => globalTaskNotificationQueue.enqueue(notification));
|
|
@@ -13904,7 +13980,225 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13904
13980
|
path: job.path,
|
|
13905
13981
|
content: 'Independent sidetab job started; this conversation can continue.',
|
|
13906
13982
|
};
|
|
13907
|
-
},
|
|
13983
|
+
}, cancelClassicSidetabMission, async (agent, mission, parallelMission, context) => {
|
|
13984
|
+
for (const member of ['codex', 'claude'] as const) {
|
|
13985
|
+
const prepared = await prepareClassicSidetabAgentCli(member);
|
|
13986
|
+
if (!prepared.ready) {
|
|
13987
|
+
const failed = (error: string) => ({ ok: false, status: 'failed' as const, error });
|
|
13988
|
+
return {
|
|
13989
|
+
pairId: 'agent-cli-not-ready',
|
|
13990
|
+
codex: member === 'codex' ? failed(prepared.message) : failed('Pair 실행을 시작하지 않았습니다'),
|
|
13991
|
+
claude: member === 'claude' ? failed(prepared.message) : failed('Pair 실행을 시작하지 않았습니다'),
|
|
13992
|
+
};
|
|
13993
|
+
}
|
|
13994
|
+
}
|
|
13995
|
+
const [{ createMissionLineStore }, { missionChildEnv, renderMissionAgentInstructions, createMissionOutStore }, { effectiveInstanceRoot }, { resolveDaemonEndpoint }] = await Promise.all([
|
|
13996
|
+
import('../agent-mission/mission-line.js'), import('../agent-mission/mission-out.js'),
|
|
13997
|
+
import('../instance/resolve.js'), import('../nexus/daemon-endpoint.js'),
|
|
13998
|
+
]);
|
|
13999
|
+
const stateRoot = effectiveInstanceRoot();
|
|
14000
|
+
const missionStore = createMissionOutStore(stateRoot);
|
|
14001
|
+
const endpoint = (process.env.ELANOUS_NEXUS_URL?.trim() || resolveDaemonEndpoint()?.baseUrl || '').replace(/\/$/, '');
|
|
14002
|
+
const handLines = new Map<string, { attemptId: string; handLine?: ReturnType<ReturnType<typeof createMissionLineStore>['issue']> }>();
|
|
14003
|
+
const spawnVisible = (member: 'codex' | 'claude', missionId: string, attemptId: string) => {
|
|
14004
|
+
const ptyId = crypto.randomUUID();
|
|
14005
|
+
const handLine = endpoint ? createMissionLineStore(stateRoot).issue({
|
|
14006
|
+
missionId, attemptId, agent: member,
|
|
14007
|
+
who: member === 'claude' ? 'Claude' : 'Codex', what: mission.replace(/\s+/g, ' ').trim().slice(0, 180) || 'sidetab mission',
|
|
14008
|
+
runId: ptyId, ptyId,
|
|
14009
|
+
}) : undefined;
|
|
14010
|
+
handLines.set(missionId, { attemptId, handLine });
|
|
14011
|
+
try {
|
|
14012
|
+
const env = handLine && endpoint
|
|
14013
|
+
? Object.fromEntries(Object.entries(missionChildEnv(stateRoot, missionId, process.env, { ...handLine, agent: member, nexusUrl: endpoint, runId: ptyId, ptyId })).filter((entry): entry is [string, string] => typeof entry[1] === 'string'))
|
|
14014
|
+
: undefined;
|
|
14015
|
+
const session = TerminalPopup.agent(member === 'claude' ? 'claude-code' : 'codex').cwd(workingDir.cwd).id(ptyId).env(env ?? {}).open();
|
|
14016
|
+
if (session && terminalModalRouter.current()?.id === session.id) terminalModalRouter.close();
|
|
14017
|
+
if (session) debug.log('classic-sidetab.mission-pair', 'started', { pairMember: member, interactionId: session.id, toolCallId: context?.callId ?? null });
|
|
14018
|
+
return session;
|
|
14019
|
+
} catch {
|
|
14020
|
+
return null;
|
|
14021
|
+
}
|
|
14022
|
+
};
|
|
14023
|
+
const runVisible = async (member: 'codex' | 'claude', prompt: string, session: TerminalSession | null, missionId?: string): Promise<ClassicSidetabMissionResult> => {
|
|
14024
|
+
const outputPath = session
|
|
14025
|
+
? join(session.cwd, '.elanous', 'mission-results', `classic-pair-${session.id}-${Date.now()}.md.tmp`)
|
|
14026
|
+
: '';
|
|
14027
|
+
if (!session) return { ok: false, status: 'failed', path: outputPath, error: `${member} sidetab PTY could not start` };
|
|
14028
|
+
let missionFinished = false;
|
|
14029
|
+
let askMonitor: Promise<void> | undefined;
|
|
14030
|
+
try {
|
|
14031
|
+
const [{ runVisibleAgentMission }, { codexBackend, claudeBackend }] = await Promise.all([
|
|
14032
|
+
import('../sidetab-core/visible-agent-mission.js'),
|
|
14033
|
+
import('../agent-mission/driver.js'),
|
|
14034
|
+
]);
|
|
14035
|
+
const targetOutputPath = outputPath.slice(0, -4);
|
|
14036
|
+
missionStore.create({ missionId: missionId!, agent: member, prompt, cwd: session.cwd, outputPath, targetOutputPath });
|
|
14037
|
+
const lineIdentity = handLines.get(missionId!);
|
|
14038
|
+
if (lineIdentity?.handLine && endpoint) handReplyTargets.set(missionId!, {
|
|
14039
|
+
missionId: missionId!, attemptId: lineIdentity.attemptId, agent: member,
|
|
14040
|
+
token: lineIdentity.handLine.token, nexusUrl: endpoint, ptyId: session.id, runId: session.id,
|
|
14041
|
+
});
|
|
14042
|
+
const backend = member === 'codex' ? codexBackend : claudeBackend;
|
|
14043
|
+
askMonitor = (async () => {
|
|
14044
|
+
const seen = new Set<number>();
|
|
14045
|
+
while (!missionFinished) {
|
|
14046
|
+
for (const event of missionStore.replies(missionId!).filter((reply) => reply.kind === 'ask' && !seen.has(reply.sequence))) {
|
|
14047
|
+
seen.add(event.sequence);
|
|
14048
|
+
try {
|
|
14049
|
+
globalTaskNotificationQueue.enqueue({
|
|
14050
|
+
taskId: `${missionId}:ask:${event.sequence}`,
|
|
14051
|
+
...(context?.parentSessionId ? { parentSessionId: context.parentSessionId } : {}),
|
|
14052
|
+
agentName: member === 'claude' ? 'Claude Code' : 'Codex',
|
|
14053
|
+
label: 'sidetab mission ask', state: 'done', truncated: false,
|
|
14054
|
+
output: JSON.stringify({
|
|
14055
|
+
missionId, sequence: event.sequence, runId: session.id, ptyId: session.id,
|
|
14056
|
+
actor: member, question: event.text, options: null,
|
|
14057
|
+
defaults: event.defaults ?? '', deadline: event.deadline ?? null,
|
|
14058
|
+
instruction: 'Call HandReply with missionId, replyTo=sequence, actor=agent, runId, kind=answer/correct, and text; correct also needs scope/stop/priority. After the deadline the child uses its default.',
|
|
14059
|
+
}),
|
|
14060
|
+
durationMs: 0, finishedAt: Date.now(),
|
|
14061
|
+
});
|
|
14062
|
+
} catch { /* notification delivery cannot interrupt the PTY mission */ }
|
|
14063
|
+
}
|
|
14064
|
+
await new Promise((resolve) => setTimeout(resolve, 400));
|
|
14065
|
+
}
|
|
14066
|
+
})();
|
|
14067
|
+
const resultPromise = Promise.resolve().then(() => runVisibleAgentMission({
|
|
14068
|
+
pty: {
|
|
14069
|
+
snapshot: () => session.preview.renderForLLM(),
|
|
14070
|
+
write: (bytes) => session.preview.write(bytes),
|
|
14071
|
+
isAlive: () => session.preview.isAlive,
|
|
14072
|
+
},
|
|
14073
|
+
mission: `${renderMissionAgentInstructions(missionId!, stateRoot)}\n\nTask:\n${prompt}`,
|
|
14074
|
+
outputPath,
|
|
14075
|
+
handleTrust: (screen, write) => backend.handleTrust?.(screen, write) ?? false,
|
|
14076
|
+
}));
|
|
14077
|
+
const result = await resultPromise.finally(() => { missionFinished = true; });
|
|
14078
|
+
await askMonitor;
|
|
14079
|
+
handReplyTargets.delete(missionId!);
|
|
14080
|
+
const failure = visibleMissionFailureLogData(member, result, missionId);
|
|
14081
|
+
if (failure) debug.log('classic-sidetab.mission-pair', 'member-failed', failure, { level: 'warn' });
|
|
14082
|
+
if (result.ok) await missionStore.complete(missionId!);
|
|
14083
|
+
else await missionStore.finish(missionId!, { status: 'failed', error: result.error ?? 'visible mission failed' });
|
|
14084
|
+
return { ...result, status: result.ok ? 'completed' as const : 'failed' as const, interactionId: missionId };
|
|
14085
|
+
} catch (error) {
|
|
14086
|
+
missionFinished = true;
|
|
14087
|
+
await askMonitor?.catch(() => undefined);
|
|
14088
|
+
if (missionId) handReplyTargets.delete(missionId);
|
|
14089
|
+
if (missionId && missionStore.read(missionId)?.status === 'running') {
|
|
14090
|
+
await missionStore.finish(missionId, { status: 'failed', error: error instanceof Error ? error.message : String(error) }).catch(() => undefined);
|
|
14091
|
+
}
|
|
14092
|
+
return { ok: false, status: 'failed' as const, interactionId: missionId, path: outputPath, error: error instanceof Error ? error.message : String(error) };
|
|
14093
|
+
}
|
|
14094
|
+
};
|
|
14095
|
+
const started = startClassicSidetabMissionPair({
|
|
14096
|
+
agent,
|
|
14097
|
+
mission,
|
|
14098
|
+
parallelMission,
|
|
14099
|
+
context,
|
|
14100
|
+
spawnVisible,
|
|
14101
|
+
runVisible,
|
|
14102
|
+
registry: classicMissionPairSessions,
|
|
14103
|
+
hasSession: (sessionId) => Boolean(sessionRegistry.get(sessionId)),
|
|
14104
|
+
killSession: (sessionId) => sessionRegistry.kill(sessionId),
|
|
14105
|
+
enqueue: (notification) => globalTaskNotificationQueue.enqueue(notification),
|
|
14106
|
+
});
|
|
14107
|
+
if (context?.callId?.startsWith('plugin-wizard:')) {
|
|
14108
|
+
pluginWizardPairCompletions.set(context.callId, started.completion);
|
|
14109
|
+
}
|
|
14110
|
+
void started.completion;
|
|
14111
|
+
return started.result;
|
|
14112
|
+
}, async (input) => {
|
|
14113
|
+
const target = handReplyTargets.get(input.missionId);
|
|
14114
|
+
if (!target) {
|
|
14115
|
+
const [{ effectiveInstanceRoot }, { createMissionOutStore }, { recordHeadlessMissionHandReply }] = await Promise.all([
|
|
14116
|
+
import('../instance/resolve.js'), import('../agent-mission/mission-out.js'), import('../agent-mission/mission-hand-reply.js'),
|
|
14117
|
+
]);
|
|
14118
|
+
const store = createMissionOutStore(effectiveInstanceRoot());
|
|
14119
|
+
const result = await recordHeadlessMissionHandReply(input, store);
|
|
14120
|
+
return { ok: result.ok, body: result.ok ? `Recorded ${input.kind} on headless mission line (record-only; no PTY input).` : result.reason };
|
|
14121
|
+
}
|
|
14122
|
+
const { recordAndDeliverMissionHandReply } = await import('../agent-mission/mission-hand-reply.js');
|
|
14123
|
+
const result = await recordAndDeliverMissionHandReply({ target, ...input });
|
|
14124
|
+
const delivery = result.ok ? result.delivery === 'ask-ledger' ? 'recorded in the mission ledger for a matching ask waiter' : 'delivered through PTY arbiter' : '';
|
|
14125
|
+
return { ok: result.ok, body: result.ok ? `Recorded ${input.kind} and ${delivery} (line ${result.lineId}).` : `${result.reason}; recorded=${result.recorded}, delivered=${result.delivered}${result.lineId ? ` (line ${result.lineId})` : ''}.` };
|
|
14126
|
+
}, async (mission, context) => {
|
|
14127
|
+
const { codexBackend, claudeBackend, grokBackend } = await import('../agent-mission/driver.js');
|
|
14128
|
+
const spawnVisible = (member: ClassicSidetabMissionAgent, missionId: string) => {
|
|
14129
|
+
try {
|
|
14130
|
+
const brand = member === 'claude' ? 'claude-code' : member;
|
|
14131
|
+
const backend = member === 'codex' ? codexBackend : member === 'claude' ? claudeBackend : grokBackend;
|
|
14132
|
+
const session = TerminalPopup.agent(brand).cwd(workingDir.cwd).id(missionId).args(backend.args).open();
|
|
14133
|
+
if (session && terminalModalRouter.current()?.id === session.id) terminalModalRouter.close();
|
|
14134
|
+
if (session) debug.log('classic-sidetab.mission-trio', 'started', { member, interactionId: session.id, toolCallId: context?.callId ?? null });
|
|
14135
|
+
return session;
|
|
14136
|
+
} catch (error) {
|
|
14137
|
+
debug.log('classic-sidetab.mission-trio', 'spawn-failed', { member, reason: error instanceof Error ? error.message : String(error) }, { level: 'warn' });
|
|
14138
|
+
return null;
|
|
14139
|
+
}
|
|
14140
|
+
};
|
|
14141
|
+
const runVisible = async (member: ClassicSidetabMissionAgent, prompt: string, session: TerminalSession | null, missionId?: string): Promise<ClassicSidetabMissionResult> => {
|
|
14142
|
+
const outputPath = session ? join(session.cwd, '.elanous', 'mission-results', `classic-trio-${member}-${session.id}-${Date.now()}.md.tmp`) : '';
|
|
14143
|
+
if (!session) return { ok: false, status: 'failed', path: outputPath, error: `${member} sidetab PTY could not start` };
|
|
14144
|
+
try {
|
|
14145
|
+
const { runVisibleAgentMission } = await import('../sidetab-core/visible-agent-mission.js');
|
|
14146
|
+
const backend = member === 'codex' ? codexBackend : member === 'claude' ? claudeBackend : grokBackend;
|
|
14147
|
+
const result = await runVisibleAgentMission({
|
|
14148
|
+
pty: { snapshot: () => session.preview.renderForLLM(), write: (bytes) => session.preview.write(bytes), isAlive: () => session.preview.isAlive },
|
|
14149
|
+
mission: prompt,
|
|
14150
|
+
outputPath,
|
|
14151
|
+
handleTrust: (screen, write) => backend.handleTrust?.(screen, write) ?? false,
|
|
14152
|
+
});
|
|
14153
|
+
const failure = visibleMissionFailureLogData(member, result, missionId);
|
|
14154
|
+
if (failure) debug.log('classic-sidetab.mission-trio', 'member-failed', failure, { level: 'warn' });
|
|
14155
|
+
return { ...result, status: result.ok ? 'completed' : 'failed', interactionId: missionId, finalScreen: session.preview.renderForLLM() };
|
|
14156
|
+
} catch (error) {
|
|
14157
|
+
return {
|
|
14158
|
+
ok: false,
|
|
14159
|
+
status: 'failed',
|
|
14160
|
+
path: outputPath,
|
|
14161
|
+
interactionId: missionId,
|
|
14162
|
+
error: error instanceof Error ? error.message : String(error),
|
|
14163
|
+
finalScreen: session.preview.renderForLLM(),
|
|
14164
|
+
};
|
|
14165
|
+
}
|
|
14166
|
+
};
|
|
14167
|
+
const started = await startClassicSidetabMissionTrio({
|
|
14168
|
+
mission,
|
|
14169
|
+
context,
|
|
14170
|
+
checkGrokAuth: probeGrokLogin,
|
|
14171
|
+
spawnVisible: (member, missionId) => spawnVisible(member, missionId),
|
|
14172
|
+
runVisible,
|
|
14173
|
+
registry: classicMissionPairSessions,
|
|
14174
|
+
hasSession: (sessionId) => Boolean(sessionRegistry.get(sessionId)),
|
|
14175
|
+
killSession: (sessionId) => sessionRegistry.kill(sessionId),
|
|
14176
|
+
enqueue: (notification) => globalTaskNotificationQueue.enqueue(notification),
|
|
14177
|
+
});
|
|
14178
|
+
void started.completion;
|
|
14179
|
+
return started.result;
|
|
14180
|
+
});
|
|
14181
|
+
const tuiPluginWizard = createDashboardPluginWizardRuntime({
|
|
14182
|
+
getWorkspace: () => getSessionCwd(),
|
|
14183
|
+
runMissionPair: async ({ runId, prompt, context }) => {
|
|
14184
|
+
const pairCallId = `plugin-wizard:${runId}`;
|
|
14185
|
+
const started = await classicSidetabMission.dispatchTool('RunSidetabMission', {
|
|
14186
|
+
agent: 'codex', mission: prompt, parallelMission: prompt,
|
|
14187
|
+
}, { callId: pairCallId, ...(context?.parentSessionId ? { parentSessionId: context.parentSessionId } : {}) });
|
|
14188
|
+
const completion = pluginWizardPairCompletions.get(pairCallId);
|
|
14189
|
+
if (!completion || started?.status === 'error') {
|
|
14190
|
+
pluginWizardPairCompletions.delete(pairCallId);
|
|
14191
|
+
throw new Error(started?.body ?? 'Codex/Claude pair did not start');
|
|
14192
|
+
}
|
|
14193
|
+
try {
|
|
14194
|
+
const result = await completion;
|
|
14195
|
+
return {
|
|
14196
|
+
codex: { ok: result.codex.ok, ...(result.codex.content ? { content: result.codex.content } : {}), ...(result.codex.error ? { error: result.codex.error } : {}) },
|
|
14197
|
+
claude: { ok: result.claude.ok, ...(result.claude.content ? { content: result.claude.content } : {}), ...(result.claude.error ? { error: result.claude.error } : {}) },
|
|
14198
|
+
};
|
|
14199
|
+
} finally { pluginWizardPairCompletions.delete(pairCallId); }
|
|
14200
|
+
},
|
|
14201
|
+
});
|
|
13908
14202
|
disposeClassicSigquit = registerClassicSigquitHandler(() => {
|
|
13909
14203
|
classicSidetabRuntime.beginPrefix();
|
|
13910
14204
|
});
|
|
@@ -15417,7 +15711,19 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15417
15711
|
surface: acpTurnRef.turnProfile?.surface,
|
|
15418
15712
|
})
|
|
15419
15713
|
: [];
|
|
15420
|
-
const
|
|
15714
|
+
const surface = acpTurnRef.turnProfile?.surface;
|
|
15715
|
+
const researchDefaults = surface?.id === 'research/agent'
|
|
15716
|
+
? resolveDynamicSessionNativeToolSpecs({
|
|
15717
|
+
userText,
|
|
15718
|
+
defaultFamilyIds: surface.defaultNativeFamilyIds,
|
|
15719
|
+
surfaceId: surface.id,
|
|
15720
|
+
}).filter(tool => ['WebSearch', 'OmniSearch', 'WebFetch'].includes(tool.name))
|
|
15721
|
+
: [];
|
|
15722
|
+
const withSurfaceDefaults = [...new Map(
|
|
15723
|
+
[...researchDefaults, ...tools].map(tool => [tool.name, tool] as const),
|
|
15724
|
+
).values()];
|
|
15725
|
+
const classicTools = runtime ? classicSidetabMission.getTools(withSurfaceDefaults) : withSurfaceDefaults;
|
|
15726
|
+
const tuiTools = tuiPluginWizard.getTools(classicTools);
|
|
15421
15727
|
return [
|
|
15422
15728
|
...tuiChatPersonaMessages(currentChatPersonaSessionId(), chatPersonaSelection),
|
|
15423
15729
|
...buildDashboardTurnPreamble({
|
|
@@ -15433,14 +15739,14 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15433
15739
|
// codex-only behavioral addendum (fix L-1) inside the
|
|
15434
15740
|
// universal preamble.
|
|
15435
15741
|
modelFamily: getModelFamily(activeModel),
|
|
15436
|
-
enabledTools:
|
|
15742
|
+
enabledTools: tuiTools.map(t => t.name),
|
|
15437
15743
|
seatBoot: true,
|
|
15438
15744
|
}),
|
|
15439
15745
|
];
|
|
15440
15746
|
},
|
|
15441
15747
|
getTools: ({ userText }) => {
|
|
15442
15748
|
const runtime = acpToolRuntime;
|
|
15443
|
-
if (!runtime) return [];
|
|
15749
|
+
if (!runtime) return tuiPluginWizard.getTools([]);
|
|
15444
15750
|
const tools = buildSessionRuntimeToolSpecs({
|
|
15445
15751
|
userText,
|
|
15446
15752
|
hostTools: pluginHost.hostLLMTools(),
|
|
@@ -15448,7 +15754,19 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15448
15754
|
optionalTools: acpTurnRef.optionalSpecs,
|
|
15449
15755
|
surface: acpTurnRef.turnProfile?.surface,
|
|
15450
15756
|
});
|
|
15451
|
-
const
|
|
15757
|
+
const surface = acpTurnRef.turnProfile?.surface;
|
|
15758
|
+
const researchDefaults = surface?.id === 'research/agent'
|
|
15759
|
+
? resolveDynamicSessionNativeToolSpecs({
|
|
15760
|
+
userText,
|
|
15761
|
+
defaultFamilyIds: surface.defaultNativeFamilyIds,
|
|
15762
|
+
surfaceId: surface.id,
|
|
15763
|
+
}).filter(tool => ['WebSearch', 'OmniSearch', 'WebFetch'].includes(tool.name))
|
|
15764
|
+
: [];
|
|
15765
|
+
const withSurfaceDefaults = [...new Map(
|
|
15766
|
+
[...researchDefaults, ...tools].map(tool => [tool.name, tool] as const),
|
|
15767
|
+
).values()];
|
|
15768
|
+
const classicTools = classicSidetabMission.getTools(withSurfaceDefaults);
|
|
15769
|
+
const tuiTools = tuiPluginWizard.getTools(classicTools);
|
|
15452
15770
|
// ⭐ Remember this turn's catalog so a spawned sub-agent can inherit it.
|
|
15453
15771
|
//
|
|
15454
15772
|
// `dispatchAgent` computes `childTools = (hostTools ?? []).filter(...)`,
|
|
@@ -15456,8 +15774,8 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15456
15774
|
// or edit anything, which is the whole point of delegating code work.
|
|
15457
15775
|
// Exposing `Agent` without this wiring is worse than not exposing it:
|
|
15458
15776
|
// the model picks a delegate that provably cannot act.
|
|
15459
|
-
acpTurnToolSpecs =
|
|
15460
|
-
return
|
|
15777
|
+
acpTurnToolSpecs = tuiTools.filter(tool => tool.name !== CLASSIC_SIDETAB_MISSION_TOOL_NAME && tool.name !== TUI_PLUGIN_WIZARD_TOOL_NAME);
|
|
15778
|
+
return tuiTools;
|
|
15461
15779
|
},
|
|
15462
15780
|
// R2 essential TUI execution boundary: ACP receives the same
|
|
15463
15781
|
// Codex-first decision as every other surface. The core bridge now
|
|
@@ -15473,8 +15791,14 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15473
15791
|
// Count at the server-side boundary, before any tool effect and
|
|
15474
15792
|
// before the ACP notification can reach the TUI client.
|
|
15475
15793
|
acpToolDispatchCount++;
|
|
15794
|
+
const pluginWizardResult = tuiPluginWizard.dispatchTool(name, args, {
|
|
15795
|
+
callId: ctx?.callId,
|
|
15796
|
+
parentSessionId: ctx?.sessionId,
|
|
15797
|
+
});
|
|
15798
|
+
if (pluginWizardResult) return await pluginWizardResult;
|
|
15476
15799
|
const classicMissionResult = classicSidetabMission.dispatchTool(name, args, {
|
|
15477
15800
|
callId: ctx?.callId,
|
|
15801
|
+
parentSessionId: ctx?.sessionId,
|
|
15478
15802
|
});
|
|
15479
15803
|
if (classicMissionResult) return classicMissionResult;
|
|
15480
15804
|
// For Agent with no `hand` or `hand: internal`, the sidetab
|
|
@@ -15507,6 +15831,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15507
15831
|
draw,
|
|
15508
15832
|
signal: turnSignal,
|
|
15509
15833
|
toolCallId: ctx?.callId,
|
|
15834
|
+
inheritGeneralPurposeToolCatalog: true,
|
|
15510
15835
|
// ⛔⭐ 폴백은 `''` 가 아니라 `undefined` 다 — 「안 넘김」과 「말했는데 어휘가 없음」은 «다른 값»이다.
|
|
15511
15836
|
// harnessMentionState(session-runtime 소비처)는 `undefined → 'absent'` · `'' → 'not-matched'` 로
|
|
15512
15837
|
// 가른다. `?? ''` 로 접으면 그 둘이 같은 값이 되고, 그것이 2026-08-06 에 「TUI 가 하니스에게
|
|
@@ -15534,12 +15859,39 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15534
15859
|
parentSessionId: ctx?.sessionId,
|
|
15535
15860
|
toolCallId,
|
|
15536
15861
|
signal: hasParentTurnAbortSignal ? turnSignal : undefined,
|
|
15862
|
+
inheritGeneralPurposeToolCatalog: true,
|
|
15537
15863
|
// ⭐ Agent-family context. Without these two the sub-agent runs
|
|
15538
15864
|
// text-only (see getTools above). `agentDispatchTool` routes the
|
|
15539
15865
|
// child's calls back through THIS dispatcher so the child gets the
|
|
15540
15866
|
// same policy/truncation treatment as the parent — not a second,
|
|
15541
15867
|
// laxer path.
|
|
15542
15868
|
agentHostTools: acpTurnToolSpecs,
|
|
15869
|
+
// Agent children inherit the full TUI-visible tool catalog,
|
|
15870
|
+
// not only this turn's surface/tier-selected model catalog.
|
|
15871
|
+
// Calls still route through this parent dispatcher, preserving
|
|
15872
|
+
// availability and dangerous-tool policy checks.
|
|
15873
|
+
buildChildToolCatalog: (childCwd) => {
|
|
15874
|
+
const childCatalog = buildSubagentSessionRuntimeToolSpecs({
|
|
15875
|
+
hostTools: pluginHost.hostLLMTools(),
|
|
15876
|
+
// Runtime can disappear between the parent turn and a child
|
|
15877
|
+
// spawn. In that case keep the captured TUI host catalog below.
|
|
15878
|
+
runtimeTools: runtime?.listToolRuntimes('tui') ?? [],
|
|
15879
|
+
optionalTools: acpTurnRef.optionalSpecs,
|
|
15880
|
+
});
|
|
15881
|
+
const specs = [...new Map(
|
|
15882
|
+
[...acpTurnToolSpecs, ...childCatalog]
|
|
15883
|
+
.filter(tool => tool.name !== CLASSIC_SIDETAB_MISSION_TOOL_NAME && tool.name !== TUI_PLUGIN_WIZARD_TOOL_NAME)
|
|
15884
|
+
.map(tool => [tool.name, tool] as const),
|
|
15885
|
+
).values()];
|
|
15886
|
+
return {
|
|
15887
|
+
specs,
|
|
15888
|
+
dispatch: (childName: string, childArgs: Record<string, unknown>) =>
|
|
15889
|
+
acpDispatchToolSelf
|
|
15890
|
+
? acpDispatchToolSelf(childName, childArgs, ctx)
|
|
15891
|
+
: Promise.resolve({ error: 'parent dispatcher unavailable' }),
|
|
15892
|
+
workingDirectory: childCwd,
|
|
15893
|
+
};
|
|
15894
|
+
},
|
|
15543
15895
|
// ⛔ Forward the parent's `ctx` — without it `turnIndex` is lost and
|
|
15544
15896
|
// the child's output is attributed to the wrong turn by the
|
|
15545
15897
|
// truncation/persist path (and the search planner loses its
|
|
@@ -17774,11 +18126,32 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
17774
18126
|
},
|
|
17775
18127
|
agentLauncher: {
|
|
17776
18128
|
open: (brand, agentArgs) => {
|
|
17777
|
-
TerminalPopup
|
|
18129
|
+
const launch = () => TerminalPopup
|
|
17778
18130
|
.agent(brand)
|
|
17779
18131
|
.cwd(getSessionCwd())
|
|
17780
18132
|
.args([...agentArgs])
|
|
17781
18133
|
.open();
|
|
18134
|
+
if (brand === 'gemini') {
|
|
18135
|
+
launch();
|
|
18136
|
+
return;
|
|
18137
|
+
}
|
|
18138
|
+
const agent = brand === 'claude-code' ? 'claude' : 'codex';
|
|
18139
|
+
void (async () => {
|
|
18140
|
+
try {
|
|
18141
|
+
const prepared = await prepareClassicSidetabAgentCli(agent);
|
|
18142
|
+
if (!prepared.ready) {
|
|
18143
|
+
chatLines.push(C.warning(` ${prepared.message}`));
|
|
18144
|
+
chatScrollOffset = -1;
|
|
18145
|
+
draw();
|
|
18146
|
+
return;
|
|
18147
|
+
}
|
|
18148
|
+
launch();
|
|
18149
|
+
} catch {
|
|
18150
|
+
chatLines.push(C.warning(` ${agent}: 설치·로그인 상태를 확인하지 못했습니다`));
|
|
18151
|
+
chatScrollOffset = -1;
|
|
18152
|
+
draw();
|
|
18153
|
+
}
|
|
18154
|
+
})();
|
|
17782
18155
|
},
|
|
17783
18156
|
},
|
|
17784
18157
|
theme: {
|
|
@@ -127,6 +127,29 @@ export function dispatchDashboardChatMainAcpSend(
|
|
|
127
127
|
else interimBodyRanges.push({ start: assistantBodyStart, end: assistantBodyEnd });
|
|
128
128
|
deps.setChatScrollToTail();
|
|
129
129
|
},
|
|
130
|
+
replaceText: (fullText) => {
|
|
131
|
+
const insertionIndex = interimBodyRanges.length > 0
|
|
132
|
+
? Math.min(...interimBodyRanges.map((range) => range.start))
|
|
133
|
+
: deps.chatLines.length;
|
|
134
|
+
for (const { start, end } of [...interimBodyRanges].reverse()) {
|
|
135
|
+
deps.chatLines.splice(start, end - start);
|
|
136
|
+
}
|
|
137
|
+
interimBodyRanges.length = 0;
|
|
138
|
+
accumulated = fullText;
|
|
139
|
+
firstChunk = false;
|
|
140
|
+
assistantTextActive = true;
|
|
141
|
+
assistantRunUsesPrefix = true;
|
|
142
|
+
assistantBodyText = fullText;
|
|
143
|
+
assistantBodyStart = insertionIndex;
|
|
144
|
+
const rendered = deps.formatAssistantLines(fullText);
|
|
145
|
+
rendered.forEach((line, index) => {
|
|
146
|
+
deps.chatLines.splice(insertionIndex + index, 0,
|
|
147
|
+
index === 0 ? `${deps.formatAssistantPrefix(display)} ${line}` : ` ${line}`);
|
|
148
|
+
});
|
|
149
|
+
assistantBodyEnd = insertionIndex + rendered.length;
|
|
150
|
+
interimBodyRanges.push({ start: insertionIndex, end: assistantBodyEnd });
|
|
151
|
+
deps.setChatScrollToTail();
|
|
152
|
+
},
|
|
130
153
|
foldGoalInterim: (text) => {
|
|
131
154
|
const verdict = classifyInterimReply(text.split('\n'));
|
|
132
155
|
if (verdict.interim && interimBodyRanges.length > 0) {
|
|
@@ -9,6 +9,7 @@ import type { DashboardTurnBlockAttachLike } from '../turn-message-runtime.js';
|
|
|
9
9
|
import type { DashboardAssistantRenderState } from '../turn-tail-runtime.js';
|
|
10
10
|
import type { SearchPlannerState } from '../../session-runtime/index.js';
|
|
11
11
|
import { runDashboardPlainTurnStream } from './dashboard-plain-turn-stream.js';
|
|
12
|
+
import { runConfiguredTurnThrowSim, type TurnThrowSim } from '../../ux-sim/turn-throw-sim.js';
|
|
12
13
|
import {
|
|
13
14
|
formatFailureNotice, matchFailureText, recordFailureSignatureMatch,
|
|
14
15
|
} from '../../self-health/signatures.js';
|
|
@@ -103,6 +104,8 @@ export interface DashboardChatMainPlainTurnRuntimeDeps {
|
|
|
103
104
|
readToolDispatchCount?: () => number | null;
|
|
104
105
|
|
|
105
106
|
attachChatStreamingKeys: (abortCtrl: AbortController) => () => void;
|
|
107
|
+
/** Test-injectable turn-body failure. Omitted in ordinary callers; the configured simulation remains inert by default. */
|
|
108
|
+
turnThrowSim?: TurnThrowSim;
|
|
106
109
|
/** ⭐ 관측 심 — 형제 `chat-main-entry-runtime` 과 «같은 형태»다(재발명 0 · `OBS-T124`). */
|
|
107
110
|
debugLog?: (category: string, event: string, payload: Record<string, unknown>, opts?: { level?: 'warn' }) => void;
|
|
108
111
|
createOptionalSpecs: () => Promise<unknown[]>;
|
|
@@ -228,6 +231,7 @@ export async function runDashboardChatMainPlainTurn(
|
|
|
228
231
|
cleanedUp = true;
|
|
229
232
|
attachedCleanupEsc();
|
|
230
233
|
};
|
|
234
|
+
await (deps.turnThrowSim ?? runConfiguredTurnThrowSim)(stage);
|
|
231
235
|
// ⛔⭐⭐⭐ **「스트리밍 키 사다리가 «이 턴»에 걸렸나」를 값으로 남긴다**(2026-08-19 · `OBS-T124`).
|
|
232
236
|
//
|
|
233
237
|
// 🚨 왜 필요한가 — 대표 제보(*"스트리밍 중 친 발화가 큐에 안 쌓인다"*)를 라이브로 재현했더니
|
|
@@ -270,6 +274,7 @@ export async function runDashboardChatMainPlainTurn(
|
|
|
270
274
|
// message actually carries the pixels/bytes, not just the token.
|
|
271
275
|
await deps.loadAttachments(deps.contextRegistry);
|
|
272
276
|
stage = 'loadAttachments';
|
|
277
|
+
await (deps.turnThrowSim ?? runConfiguredTurnThrowSim)(stage);
|
|
273
278
|
if (finishIfAborted()) return;
|
|
274
279
|
|
|
275
280
|
const { userMsg } = deps.buildTurnMessage({
|
|
@@ -290,6 +295,7 @@ export async function runDashboardChatMainPlainTurn(
|
|
|
290
295
|
typeof userMsg.content === 'string' ? userMsg.content : '',
|
|
291
296
|
);
|
|
292
297
|
stage = 'beginCodeEditTurn';
|
|
298
|
+
await (deps.turnThrowSim ?? runConfiguredTurnThrowSim)(stage);
|
|
293
299
|
if (finishIfAborted()) return;
|
|
294
300
|
|
|
295
301
|
const preamble = deps.buildTurnPreamble({
|
|
@@ -309,6 +315,7 @@ export async function runDashboardChatMainPlainTurn(
|
|
|
309
315
|
const compactChanged = prePassApplied && (deps.chat.history.length !== beforeCompact.length
|
|
310
316
|
|| deps.chat.history.some((message, index) => message !== beforeCompact[index]));
|
|
311
317
|
stage = 'runAutoCompact';
|
|
318
|
+
await (deps.turnThrowSim ?? runConfiguredTurnThrowSim)(stage);
|
|
312
319
|
if (finishIfAborted()) return;
|
|
313
320
|
|
|
314
321
|
deps.pushChatLine('');
|
|
@@ -317,6 +324,7 @@ export async function runDashboardChatMainPlainTurn(
|
|
|
317
324
|
let assistantStart = deps.chatLines.length;
|
|
318
325
|
let optionalSpecs = await deps.createOptionalSpecs();
|
|
319
326
|
stage = 'createOptionalSpecs';
|
|
327
|
+
await (deps.turnThrowSim ?? runConfiguredTurnThrowSim)(stage);
|
|
320
328
|
if (finishIfAborted()) return;
|
|
321
329
|
if (deps.control) {
|
|
322
330
|
const signal = findRecentQuickPassSignal({
|