elanous 0.2.42 → 0.2.43
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 → Om5xS9jpjSXJCeTNGYEi4}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{7a98bc80.fa935989e829f9c2.js → 0966f8a1.745fcd44f64a87ea.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{73d2eb0e.4966ad55293c801a.js → 0ad6802e.ae7afb63fdcb4491.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/114.2b90424d1a3ce84c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1151-5c2bb8f002ca2dd6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1200.6a37c202f9f17e9a.js +226 -0
- package/apps/pwa/out/_next/static/chunks/1261-a616d5728e02e624.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1313-19f737e0222c4444.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1357.3bbef3976c37f94a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1362-20adddfaf662b0fa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3507.97e1977bc4d5fb0a.js → 1406.a1dc2ab6f8449374.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1737-9491fc6ab29b9ec6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1803-4f91a8e7dcaf042c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1961.a81b12872c3e93a9.js +23 -0
- package/apps/pwa/out/_next/static/chunks/{53c73f84.373b6160adfa89a4.js → 1970cf59.2d4d8ce5d6c81853.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1971-8890f3962ba7ee0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9211-330b6736a63d4cb3.js → 2073-ba274e00e4f9efb4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{7411.9b4b8b747dc7b802.js → 2144.25b292396712196d.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/2268-53861f339e0b65a2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2312.0c8b61e22d3136d7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6632.0eac1c554f8f2ef3.js → 2573.387a707f6f9d720c.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/273.f156eee28f11af77.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2873.d2140e5a82546401.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1262.e804feb8fd1acb8c.js → 3072.01338851ca21a6f7.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3091.a5a4143dea33d197.js +90 -0
- package/apps/pwa/out/_next/static/chunks/{2456.b6de0e1c05f28843.js → 3095.dc44586a5f83b86d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3207.a756c95e9ec8c3c8.js → 3113.d7472bbc27d580c7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3228-9650b6447b6fa288.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3402.44b565b314f2263c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3557ac4a.c8931684475018ad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8505.fd803c6c33b54cc3.js → 360.ae9f9f4c33c395e8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3638.80412ea63aae8f3f.js +286 -0
- package/apps/pwa/out/_next/static/chunks/{b450776b.3db34d8d965f82d3.js → 363bfab3.9623b9f89363541f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3694.e0099884345f0198.js +64 -0
- package/apps/pwa/out/_next/static/chunks/3744.54f87db52acfd1ab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3903.3ef4656c67572764.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3935.16701e33f8982dc9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3955.6922286237f2ac2b.js +24 -0
- package/apps/pwa/out/_next/static/chunks/3969.272ee7f9fd6c62e5.js +34 -0
- package/apps/pwa/out/_next/static/chunks/{8138.6c10b2a356d52fca.js → 4199.ce86b281fd0a60b7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4311-6dd3144002cc0c2d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4426-2b230fad00c88930.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2690.0521c738b7749931.js → 4445.7990c76b3751a918.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4447-14c5161fa59166c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4856-b0b8075bba8c53f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4870-de370d65e73c0bb5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4885-2c989165c4b29fad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1945.7b54990d578c119b.js → 4894.fec2ca9e99caefa2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5093.8f04b7f8cb899a95.js +94 -0
- package/apps/pwa/out/_next/static/chunks/5122-2bb177cebf89e19a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5154.5f56dc3902e3d275.js +36 -0
- package/apps/pwa/out/_next/static/chunks/529.64ff7257180b2ac9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5394.5dabeb0c62293a28.js +93 -0
- package/apps/pwa/out/_next/static/chunks/5461.08bf2404ff38ec85.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5474-22e08a85583209b2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9427.96aa912ddb5801e0.js → 5564.9e72532188f57586.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/5567-265df39ed8fe9dcb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5570-a94ae19811cb2046.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5574-b47c9ef2dceff1fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4043.6b91203436c9c86b.js → 5628.6ddb2d5ffba4ff4c.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/{1319.b9b815ae0f181e06.js → 5730.43d7ccc09988e646.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3482.a9ae9d2ad6a5bd97.js → 5789.2da35c258292e1e5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5824.da9527b15a3221e5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5866.366966af47fdde5d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1487.2f67b79444062da6.js → 5930.8b4df3b46c32b05a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5963-c4d8469c52a0828b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6001.ec4049ceb3c43418.js +27 -0
- package/apps/pwa/out/_next/static/chunks/6120-471f03db1e299c0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6175-41479e643aca1878.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6291.a2de4f9787637075.js +104 -0
- package/apps/pwa/out/_next/static/chunks/6400-6699907c3537436a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6428.1f4327d6ae5fdf9a.js +287 -0
- package/apps/pwa/out/_next/static/chunks/644.02cb026fa44bcd0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6466-6c87d60d3dd174fb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3347.f846266b5e5f3ede.js → 6540.c7bef57ad8f90a87.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/6773.d4264665ab31bec0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6822.3c789f1a8443e774.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8262.ddc03e06b733f184.js → 6944.309f4e3ea54d1537.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7261-8ff69d3b2ee671fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7266.084c6bbc70035140.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7271.5c0100e7320aa856.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7429-bf5731358c8f2f68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7464.01f7a0ae1215fbe7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7479.0fcad5f37eb64f0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4770.769c9cd9c7034eba.js → 7483.427a2fe2049e388d.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{1147-5196d19c222051b3.js → 7502-be74718178e13e56.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7530.0889722b19572065.js +24 -0
- package/apps/pwa/out/_next/static/chunks/7645.5b2ee3ad45c55ea3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7788.7d1c79f1a8e18946.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7900.096f455c7c1efc53.js +77 -0
- package/apps/pwa/out/_next/static/chunks/7910-6f139bcafd238b9f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7966.f71c8958d1637548.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8673-bab689a55f7e13b9.js → 8062-7cd0bcc7f01455ba.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/8073.f6cf2f2c71aafbd0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8201.190b94088980f430.js +74 -0
- package/apps/pwa/out/_next/static/chunks/8205.282ca4bb62d54a0a.js +62 -0
- package/apps/pwa/out/_next/static/chunks/8313-dfa1021bb58a46d6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/837-81336ebaca8198a8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8447.7963352ef5f71b76.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8574-868e8129525ef6d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8588.d1c6a2903727ce87.js +149 -0
- package/apps/pwa/out/_next/static/chunks/8637.90f92d5c8db4732c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/868.6e953be05bcf6dca.js +41 -0
- package/apps/pwa/out/_next/static/chunks/8706-e1fe0309343a2273.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8749-06384cdfc4520add.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9656-374232558fd528d0.js → 8861-cc1fa1c7b920fa8e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{5440-4236de26c5ea5856.js → 8967-7dfebf710c9dec9d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1063.2fb8a9dc55c731f2.js → 8986.8e2e4efbfa655c59.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8997-3c564dbb3b58b055.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4320.583cbab64db6be02.js → 923.2034d10ae91e9c20.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9312.bc1b89c5d4368033.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1574.878c18ecc97b1bd4.js → 943.39ae5e82f4f1893f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9469.0500480de55fb205.js +32 -0
- package/apps/pwa/out/_next/static/chunks/9770.5f75bc6088b16109.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9810-2543267050e58b82.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9870.8419702475254745.js +8 -0
- package/apps/pwa/out/_next/static/chunks/9941-376d1b74d51b01a4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9958.385434ab04241758.js +1 -0
- package/apps/pwa/out/_next/static/chunks/aa57532f.510551854ff239b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-deea1450b17cb8dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-70985b904f8650ef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-a2e15e33e56a4353.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-fc72ce2db12d6ca9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-be03e41f9436ebd9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-35a35999382da3f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-3ff5b1e6ca88b848.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-a65101300a0ee5c1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-3aca5b6d67dba511.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-45b8ab0a71e61314.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-53046e282d4cda8e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-17809e60e8354c17.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-fd2442d347bf5898.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-e9d720d6fc082e21.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-6b8b4267bab0a677.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-deea1450b17cb8dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-8bcf6233ac7c17af.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-7cc25591cfc2126f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-053e871f35c9beba.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-eff819f0c2d5e084.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-4d7e9d8db5274a87.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-2b2d8f5aa5f69ad4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-0b8f92c5062e68b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1bd9d0fdac2ced3d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-0f291d3c8fd55a3a.js → page-9ee28f7df07428ea.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-44b7a1ff468c6648.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-cbc6523711dc1b65.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-fdad47899c2695be.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-79a8b5fee4c20871.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-03e8ac9606aeaffb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-4cd55c55ec287e2f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-db17b4305404161e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-30041d848350fd02.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-c540da022dbf86b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9399efc538da057f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-ca2d09128c585ca4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-0e2635aecd343038.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ef7f4399b6b7726e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-deea1450b17cb8dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-caf530535b875468.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-eaa20c1543a5fd8e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c541eb1b75120f61.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-ab5e213eda9479f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-0a815f34367b6db6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-e858ba0ed9393b68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-1638ee9dd6e0582f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-4cf5a399109391f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b4396321238798ec.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-cb72bfd21006781a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-6135d0242afbc434.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-a1dccf907eddb856.js +1 -0
- package/apps/pwa/out/_next/static/chunks/c7945435-b44d4dbe90ba0dcb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3d0154af.5331fec737ffe8c3.js → cb0f8df8.09a4a6be97e3fc5f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{e8543907.5b040a5f22a0b0e5.js → d96660fb.cbc21a2a88539dbb.js} +7 -7
- package/apps/pwa/out/_next/static/chunks/{50061469.0326382241ef3b2d.js → ea514caa.05a24f78d9dffe5f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/fb7d20d5-6892502b6ee39ca6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/framework-e8a911e19b1be41f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-7022f418fabba021.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-e5f15df755756a1e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-4525f91e36940c9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-140f0e519c085b0f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-8f22ef63dcb865b1.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/examples/research-runtime-empty-terminal.yaml +28 -0
- package/graphs/profiles/local.yaml +5 -0
- package/graphs/profiles/pod.yaml +4 -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/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-scenes.ts +301 -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/release-loop/auto-approve-node.ts +1 -1
- package/scripts/release-loop/gate-autoheal-sim-evidence.ts +60 -0
- package/scripts/release-loop/gate-method.ts +139 -0
- package/scripts/release-loop/gate-node.ts +180 -20
- package/scripts/release-loop/gate-traffic-mode.ts +151 -3
- package/scripts/release-loop/node-verdict.ts +38 -25
- package/scripts/release-loop/preflight.ts +362 -8
- package/scripts/release-loop/unattended-release.ts +20 -9
- package/scripts/rhythm/daily.ts +36 -4
- package/scripts/rhythm/linear-progress-sync.ts +298 -0
- package/scripts/video-pipeline.ts +9 -1
- package/scripts/warm-pool-provider-config.ts +29 -6
- 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 +47 -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/agents/general-purpose.md +1 -1
- package/src/auto-research/research-turn.ts +95 -10
- 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/doctor-fix.ts +2 -2
- package/src/cli/intake-source-cli.ts +44 -8
- 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 +187 -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 +186 -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/core-turn/deep-turn-bloom.ts +67 -0
- package/src/core-turn/research-policy.ts +37 -0
- package/src/core-turn/run-core-turn.ts +320 -30
- package/src/core-turn/types.ts +2 -0
- package/src/dashboard/chat/acp-chat.ts +10 -0
- package/src/dashboard/classic-sidetab-mission-job.ts +103 -0
- package/src/dashboard/classic-sidetab-mission-pair.ts +81 -0
- package/src/dashboard/classic-sidetab-mission-trio.ts +219 -0
- package/src/dashboard/classic-sidetab-mission.ts +167 -5
- package/src/dashboard/index.ts +378 -13
- 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 +1 -1
- package/src/dashboard/terminal-popup-runtime.ts +6 -3
- 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/telegram-kind-route.ts +16 -9
- package/src/graph-runner/arg-allowance.ts +13 -0
- package/src/graph-runner/graph-run-api.ts +3 -1
- package/src/graph-runner/runner.ts +85 -17
- 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 +11 -1
- 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 +127 -10
- 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/provider-credentials.ts +8 -2
- package/src/llm.ts +2 -1
- package/src/maturity/feature-maturity.ts +3 -3
- 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/http-server.ts +37 -1
- package/src/nexus/api/mcp-public-allowlist.ts +2 -0
- package/src/nexus/index.ts +7 -2
- package/src/nexus/outbound/format.ts +9 -0
- package/src/nexus/outbound/router.ts +98 -13
- 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 +44 -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 +85 -26
- 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/pty-shell/pty-control-ipc.ts +4 -1
- package/src/registry/catalog-server.ts +232 -0
- package/src/registry/loader.ts +45 -1
- package/src/registry/types.ts +1 -2
- package/src/research/axis-fanout.ts +43 -28
- package/src/self-dev/ask-launch-flow.ts +72 -1
- package/src/self-dev/dev-cli.ts +4 -1
- package/src/self-dev/dev-pipeline.ts +5 -0
- package/src/self-dev/draft-residue.ts +64 -5
- 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/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 +358 -4
- package/src/self-implement/graph-overlay-yaml.ts +30 -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 +26 -3
- package/src/self-implement/off-diff-evidence.ts +249 -5
- package/src/self-implement/orchestrator.ts +240 -15
- 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/train-gate-receipt.ts +166 -0
- package/src/self-implement/train-gate-remote.ts +62 -18
- package/src/session/chat.ts +4 -2
- 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 +37 -1
- 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/visible-agent-mission.ts +98 -22
- package/src/skills/tools/agent.ts +23 -4
- package/src/skills/tools/omni-search.ts +123 -25
- package/src/task-agent/parent-host.ts +10 -0
- package/src/task-agent/repair-outcomes.ts +65 -0
- package/src/task-agent/task-hand.ts +20 -7
- 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 +4 -0
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +92 -1
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +113 -14
- 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-provider.ts +35 -9
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +172 -6
- 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 +1 -0
- package/src/tool-runtime/agent-runtime.ts +1 -0
- package/src/tool-runtime/browser-hand-runtime.ts +381 -0
- package/src/tool-runtime/browser-runtime.ts +2 -1
- package/src/tool-runtime/elanous-linear-issue-runtime.ts +76 -0
- package/src/tool-runtime/elanous-linear-secretary-runtime.ts +57 -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 +3 -0
- package/src/tui/entry.ts +24 -1
- package/src/tui/sidetab/attach.ts +140 -11
- package/src/tui/sidetab/herdr-portal.ts +225 -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 +198 -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 +216 -0
- package/src/ux-sim/mock-scenario-catalog.json +75 -23
- package/src/ux-sim/mock-scenario-catalog.ts +120 -2
- package/src/ux-sim/onboarding-first-run-device.ts +31 -21
- package/src/ux-sim/scenario.ts +70 -26
- package/src/ux-sim/service-key-setup.ts +50 -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/1345-31427b833438f521.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1455-530ca16c7e71baff.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/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/2160.a097e7b138ae1c55.js +0 -23
- 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/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/2974.595d1e29d040cb6a.js +0 -64
- 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/4768-8eac183fd291ca53.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4895.65605ec3e6504e89.js +0 -74
- 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/5431-72a1dbde59400691.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/5885.0a3e52c8faccec98.js +0 -287
- 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/6377.bc7df239edbff244.js +0 -1
- 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/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/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/9415.69e4a21c60c7d2db.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/9832.f4a98c878ecf2c0a.js +0 -62
- package/apps/pwa/out/_next/static/chunks/9865.f094440645f02d98.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9a852a62-6192a6ea9346ced3.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/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 → Om5xS9jpjSXJCeTNGYEi4}/_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,14 @@ 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 { CLASSIC_SIDETAB_MISSION_TOOL_NAME, createClassicSidetabMissionIntegration, type ClassicSidetabMissionDispatchContext, type ClassicSidetabMissionIntegration, type ClassicSidetabMissionResult } from './classic-sidetab-mission.js';
|
|
976
|
+
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
977
|
import { cancelClassicMissionCli, startClassicMissionCli } from './mission-cli-consumer.js';
|
|
975
978
|
import { enqueueClassicSidetabMissionCompletion } from './classic-sidetab-mission-job.js';
|
|
979
|
+
import { startClassicSidetabMissionPair } from './classic-sidetab-mission-pair.js';
|
|
980
|
+
import { startClassicSidetabMissionTrio } from './classic-sidetab-mission-trio.js';
|
|
981
|
+
import { createDashboardPluginWizardRuntime } from './plugin-wizard-runtime.js';
|
|
982
|
+
import { TUI_PLUGIN_WIZARD_TOOL_NAME } from './plugin-wizard-tool.js';
|
|
983
|
+
import { probeGrokLogin } from '../agent-mission/grok-auth-status.js';
|
|
976
984
|
import { loadSidetabRows } from '../sidetab-core/model.js';
|
|
977
985
|
import { toggleDashboardAssistantRenderState } from './assistant-render-state-runtime.js';
|
|
978
986
|
import { bootDashboardAcpBgSweep } from './acp-bg-sweep-boot.js';
|
|
@@ -1112,8 +1120,10 @@ import {
|
|
|
1112
1120
|
import { initElementObservability } from '../element-registry/index.js';
|
|
1113
1121
|
import {
|
|
1114
1122
|
createSearchPlannerState,
|
|
1123
|
+
buildSubagentSessionRuntimeToolSpecs,
|
|
1115
1124
|
buildSessionRuntimeToolSpecs,
|
|
1116
1125
|
buildSessionDashboardStatusLines,
|
|
1126
|
+
resolveDynamicSessionNativeToolSpecs,
|
|
1117
1127
|
consumeSessionQuickControl,
|
|
1118
1128
|
createSessionPostureState,
|
|
1119
1129
|
enterSessionControlMode,
|
|
@@ -13570,7 +13580,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13570
13580
|
// single line.
|
|
13571
13581
|
type TerminalPopupRequest =
|
|
13572
13582
|
| { kind: 'shell'; cwd: string; command?: string; env?: Record<string, string> }
|
|
13573
|
-
| { kind: 'coding-agent'; brand: 'claude-code' | 'codex' | 'gemini'; cwd: string; extraArgs?: readonly string[] };
|
|
13583
|
+
| { kind: 'coding-agent'; brand: 'claude-code' | 'codex' | 'gemini' | 'grok'; cwd: string; extraArgs?: readonly string[]; env?: Record<string, string>; id?: string };
|
|
13574
13584
|
|
|
13575
13585
|
const openInteractiveTerminalPopup = (req: TerminalPopupRequest): TerminalSession | null => {
|
|
13576
13586
|
const { cols: tc, rows: tr } = termSize();
|
|
@@ -13686,7 +13696,9 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13686
13696
|
{
|
|
13687
13697
|
brand: req.brand,
|
|
13688
13698
|
cwd: req.cwd,
|
|
13699
|
+
id: req.id,
|
|
13689
13700
|
extraArgs: req.extraArgs ? [...req.extraArgs] : undefined,
|
|
13701
|
+
env: req.env,
|
|
13690
13702
|
onExit: handleExit,
|
|
13691
13703
|
onTitleAction: handleTitleAction,
|
|
13692
13704
|
},
|
|
@@ -13699,6 +13711,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13699
13711
|
const installLabel =
|
|
13700
13712
|
req.brand === 'claude-code' ? 'Claude Code'
|
|
13701
13713
|
: req.brand === 'gemini' ? 'Gemini CLI (@google/gemini-cli)'
|
|
13714
|
+
: req.brand === 'grok' ? 'Grok CLI'
|
|
13702
13715
|
: 'Codex CLI';
|
|
13703
13716
|
chatLines.push(C.muted(
|
|
13704
13717
|
` Install ${installLabel} first, then try again.`,
|
|
@@ -13816,9 +13829,38 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13816
13829
|
},
|
|
13817
13830
|
spawnShell: () => { spawnGlobalTerminalModal(); },
|
|
13818
13831
|
spawnAgent: (agent) => {
|
|
13819
|
-
|
|
13832
|
+
void (async () => {
|
|
13833
|
+
try {
|
|
13834
|
+
const prepared = await prepareClassicSidetabAgentCli(agent);
|
|
13835
|
+
if (!prepared.ready) {
|
|
13836
|
+
chatLines.push(C.warning(` ${prepared.message}`));
|
|
13837
|
+
chatScrollOffset = -1;
|
|
13838
|
+
draw();
|
|
13839
|
+
return;
|
|
13840
|
+
}
|
|
13841
|
+
TerminalPopup.agent(agent === 'claude' ? 'claude-code' : 'codex').cwd(workingDir.cwd).open();
|
|
13842
|
+
} catch {
|
|
13843
|
+
chatLines.push(C.warning(` ${agent}: 설치·로그인 상태를 확인하지 못했습니다`));
|
|
13844
|
+
chatScrollOffset = -1;
|
|
13845
|
+
draw();
|
|
13846
|
+
}
|
|
13847
|
+
})();
|
|
13820
13848
|
},
|
|
13821
13849
|
runMission: async (agent, mission, requestedOutputPath) => {
|
|
13850
|
+
try {
|
|
13851
|
+
const prepared = await prepareClassicSidetabAgentCli(agent);
|
|
13852
|
+
if (!prepared.ready) return {
|
|
13853
|
+
ok: false, path: requestedOutputPath ?? '', promptReady: false,
|
|
13854
|
+
missionVisible: false, promptReturned: false, completionMarker: false,
|
|
13855
|
+
error: prepared.message,
|
|
13856
|
+
};
|
|
13857
|
+
} catch {
|
|
13858
|
+
return {
|
|
13859
|
+
ok: false, path: requestedOutputPath ?? '', promptReady: false,
|
|
13860
|
+
missionVisible: false, promptReturned: false, completionMarker: false,
|
|
13861
|
+
error: `${agent}: 설치·로그인 상태를 확인하지 못했습니다`,
|
|
13862
|
+
};
|
|
13863
|
+
}
|
|
13822
13864
|
return runDashboardAgentMission({
|
|
13823
13865
|
agent,
|
|
13824
13866
|
requestedOutputPath,
|
|
@@ -13885,15 +13927,45 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13885
13927
|
},
|
|
13886
13928
|
});
|
|
13887
13929
|
closeClassicSidetabRuntime = () => classicSidetabRuntime.close();
|
|
13930
|
+
const classicMissionPairSessions = createClassicSidetabMissionPairSessionRegistry();
|
|
13931
|
+
const cancelClassicSidetabMission = async (interactionId: string): Promise<boolean> => {
|
|
13932
|
+
const paired = classicMissionPairSessions.cancel(
|
|
13933
|
+
interactionId,
|
|
13934
|
+
(sessionId) => Boolean(sessionRegistry.get(sessionId)),
|
|
13935
|
+
(sessionId) => sessionRegistry.kill(sessionId),
|
|
13936
|
+
);
|
|
13937
|
+
return paired ?? cancelClassicMissionCli(interactionId);
|
|
13938
|
+
};
|
|
13939
|
+
const handReplyTargets = new Map<string, { missionId: string; attemptId: string; agent: 'codex' | 'claude'; token: string; nexusUrl: string; ptyId: string; runId: string }>();
|
|
13940
|
+
const prepareClassicSidetabAgentCli = async (agent: 'codex' | 'claude') => {
|
|
13941
|
+
const [{ prepareAgentCli }, { requestConfirmation }] = await Promise.all([
|
|
13942
|
+
import('../agent-mission/tool-install.js'), import('../hitl/confirm.js'),
|
|
13943
|
+
]);
|
|
13944
|
+
return prepareAgentCli(agent, {
|
|
13945
|
+
onStatus: (line) => {
|
|
13946
|
+
chatLines.push(C.muted(` ${line}`));
|
|
13947
|
+
chatScrollOffset = -1;
|
|
13948
|
+
draw();
|
|
13949
|
+
},
|
|
13950
|
+
confirmInstall: async (prompt) => (await requestConfirmation({
|
|
13951
|
+
prompt,
|
|
13952
|
+
detail: '확인하면 공식 npm 설치 명령을 실행한 뒤 설치 버전과 로그인을 다시 확인합니다.',
|
|
13953
|
+
agentKind: 'agent-cli',
|
|
13954
|
+
onTimeout: () => false,
|
|
13955
|
+
})).answer,
|
|
13956
|
+
});
|
|
13957
|
+
};
|
|
13958
|
+
const pluginWizardPairCompletions = new Map<string, Promise<import('./classic-sidetab-mission-job.js').ClassicSidetabMissionPairCompletionResult>>();
|
|
13888
13959
|
const classicSidetabMission = createDashboardClassicSidetabMissionCallbacks(async (agent, mission, context) => {
|
|
13889
13960
|
const started = await startClassicMissionCli({
|
|
13890
13961
|
agent,
|
|
13891
13962
|
prompt: mission,
|
|
13963
|
+
...(context?.linearIssueId ? { linearIssueId: context.linearIssueId } : {}),
|
|
13892
13964
|
onInteractionId: (interactionId) => debug.log('classic-sidetab.mission', 'started', {
|
|
13893
13965
|
interactionId,
|
|
13894
13966
|
toolCallId: context?.callId ?? null,
|
|
13895
13967
|
}),
|
|
13896
|
-
});
|
|
13968
|
+
}, { prepareAgentCli: prepareClassicSidetabAgentCli });
|
|
13897
13969
|
if (!('completion' in started)) return started;
|
|
13898
13970
|
const job = started;
|
|
13899
13971
|
enqueueClassicSidetabMissionCompletion(job, agent, (notification) => globalTaskNotificationQueue.enqueue(notification));
|
|
@@ -13904,7 +13976,221 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
13904
13976
|
path: job.path,
|
|
13905
13977
|
content: 'Independent sidetab job started; this conversation can continue.',
|
|
13906
13978
|
};
|
|
13907
|
-
},
|
|
13979
|
+
}, cancelClassicSidetabMission, async (agent, mission, parallelMission, context) => {
|
|
13980
|
+
for (const member of ['codex', 'claude'] as const) {
|
|
13981
|
+
const prepared = await prepareClassicSidetabAgentCli(member);
|
|
13982
|
+
if (!prepared.ready) {
|
|
13983
|
+
const failed = (error: string) => ({ ok: false, status: 'failed' as const, error });
|
|
13984
|
+
return {
|
|
13985
|
+
pairId: 'agent-cli-not-ready',
|
|
13986
|
+
codex: member === 'codex' ? failed(prepared.message) : failed('Pair 실행을 시작하지 않았습니다'),
|
|
13987
|
+
claude: member === 'claude' ? failed(prepared.message) : failed('Pair 실행을 시작하지 않았습니다'),
|
|
13988
|
+
};
|
|
13989
|
+
}
|
|
13990
|
+
}
|
|
13991
|
+
const [{ createMissionLineStore }, { missionChildEnv, renderMissionAgentInstructions, createMissionOutStore }, { effectiveInstanceRoot }, { resolveDaemonEndpoint }] = await Promise.all([
|
|
13992
|
+
import('../agent-mission/mission-line.js'), import('../agent-mission/mission-out.js'),
|
|
13993
|
+
import('../instance/resolve.js'), import('../nexus/daemon-endpoint.js'),
|
|
13994
|
+
]);
|
|
13995
|
+
const stateRoot = effectiveInstanceRoot();
|
|
13996
|
+
const missionStore = createMissionOutStore(stateRoot);
|
|
13997
|
+
const endpoint = (process.env.ELANOUS_NEXUS_URL?.trim() || resolveDaemonEndpoint()?.baseUrl || '').replace(/\/$/, '');
|
|
13998
|
+
const handLines = new Map<string, { attemptId: string; handLine?: ReturnType<ReturnType<typeof createMissionLineStore>['issue']> }>();
|
|
13999
|
+
const spawnVisible = (member: 'codex' | 'claude', missionId: string, attemptId: string) => {
|
|
14000
|
+
const ptyId = crypto.randomUUID();
|
|
14001
|
+
const handLine = endpoint ? createMissionLineStore(stateRoot).issue({
|
|
14002
|
+
missionId, attemptId, agent: member,
|
|
14003
|
+
who: member === 'claude' ? 'Claude' : 'Codex', what: mission.replace(/\s+/g, ' ').trim().slice(0, 180) || 'sidetab mission',
|
|
14004
|
+
runId: ptyId, ptyId,
|
|
14005
|
+
}) : undefined;
|
|
14006
|
+
handLines.set(missionId, { attemptId, handLine });
|
|
14007
|
+
try {
|
|
14008
|
+
const env = handLine && endpoint
|
|
14009
|
+
? 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'))
|
|
14010
|
+
: undefined;
|
|
14011
|
+
const session = TerminalPopup.agent(member === 'claude' ? 'claude-code' : 'codex').cwd(workingDir.cwd).id(ptyId).env(env ?? {}).open();
|
|
14012
|
+
if (session && terminalModalRouter.current()?.id === session.id) terminalModalRouter.close();
|
|
14013
|
+
if (session) debug.log('classic-sidetab.mission-pair', 'started', { pairMember: member, interactionId: session.id, toolCallId: context?.callId ?? null });
|
|
14014
|
+
return session;
|
|
14015
|
+
} catch {
|
|
14016
|
+
return null;
|
|
14017
|
+
}
|
|
14018
|
+
};
|
|
14019
|
+
const runVisible = async (member: 'codex' | 'claude', prompt: string, session: TerminalSession | null, missionId?: string): Promise<ClassicSidetabMissionResult> => {
|
|
14020
|
+
const outputPath = session
|
|
14021
|
+
? join(session.cwd, '.elanous', 'mission-results', `classic-pair-${session.id}-${Date.now()}.md.tmp`)
|
|
14022
|
+
: '';
|
|
14023
|
+
if (!session) return { ok: false, status: 'failed', path: outputPath, error: `${member} sidetab PTY could not start` };
|
|
14024
|
+
let missionFinished = false;
|
|
14025
|
+
let askMonitor: Promise<void> | undefined;
|
|
14026
|
+
try {
|
|
14027
|
+
const [{ runVisibleAgentMission }, { codexBackend, claudeBackend }] = await Promise.all([
|
|
14028
|
+
import('../sidetab-core/visible-agent-mission.js'),
|
|
14029
|
+
import('../agent-mission/driver.js'),
|
|
14030
|
+
]);
|
|
14031
|
+
const targetOutputPath = outputPath.slice(0, -4);
|
|
14032
|
+
missionStore.create({ missionId: missionId!, agent: member, prompt, cwd: session.cwd, outputPath, targetOutputPath });
|
|
14033
|
+
const lineIdentity = handLines.get(missionId!);
|
|
14034
|
+
if (lineIdentity?.handLine && endpoint) handReplyTargets.set(missionId!, {
|
|
14035
|
+
missionId: missionId!, attemptId: lineIdentity.attemptId, agent: member,
|
|
14036
|
+
token: lineIdentity.handLine.token, nexusUrl: endpoint, ptyId: session.id, runId: session.id,
|
|
14037
|
+
});
|
|
14038
|
+
const backend = member === 'codex' ? codexBackend : claudeBackend;
|
|
14039
|
+
askMonitor = (async () => {
|
|
14040
|
+
const seen = new Set<number>();
|
|
14041
|
+
while (!missionFinished) {
|
|
14042
|
+
for (const event of missionStore.replies(missionId!).filter((reply) => reply.kind === 'ask' && !seen.has(reply.sequence))) {
|
|
14043
|
+
seen.add(event.sequence);
|
|
14044
|
+
try {
|
|
14045
|
+
globalTaskNotificationQueue.enqueue({
|
|
14046
|
+
taskId: `${missionId}:ask:${event.sequence}`,
|
|
14047
|
+
...(context?.parentSessionId ? { parentSessionId: context.parentSessionId } : {}),
|
|
14048
|
+
agentName: member === 'claude' ? 'Claude Code' : 'Codex',
|
|
14049
|
+
label: 'sidetab mission ask', state: 'done', truncated: false,
|
|
14050
|
+
output: JSON.stringify({
|
|
14051
|
+
missionId, sequence: event.sequence, runId: session.id, ptyId: session.id,
|
|
14052
|
+
actor: member, question: event.text, options: null,
|
|
14053
|
+
defaults: event.defaults ?? '', deadline: event.deadline ?? null,
|
|
14054
|
+
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.',
|
|
14055
|
+
}),
|
|
14056
|
+
durationMs: 0, finishedAt: Date.now(),
|
|
14057
|
+
});
|
|
14058
|
+
} catch { /* notification delivery cannot interrupt the PTY mission */ }
|
|
14059
|
+
}
|
|
14060
|
+
await new Promise((resolve) => setTimeout(resolve, 400));
|
|
14061
|
+
}
|
|
14062
|
+
})();
|
|
14063
|
+
const resultPromise = Promise.resolve().then(() => runVisibleAgentMission({
|
|
14064
|
+
pty: {
|
|
14065
|
+
snapshot: () => session.preview.renderForLLM(),
|
|
14066
|
+
write: (bytes) => session.preview.write(bytes),
|
|
14067
|
+
isAlive: () => session.preview.isAlive,
|
|
14068
|
+
},
|
|
14069
|
+
mission: `${renderMissionAgentInstructions(missionId!, stateRoot)}\n\nTask:\n${prompt}`,
|
|
14070
|
+
outputPath,
|
|
14071
|
+
handleTrust: (screen, write) => backend.handleTrust?.(screen, write) ?? false,
|
|
14072
|
+
}));
|
|
14073
|
+
const result = await resultPromise.finally(() => { missionFinished = true; });
|
|
14074
|
+
await askMonitor;
|
|
14075
|
+
handReplyTargets.delete(missionId!);
|
|
14076
|
+
if (result.ok) await missionStore.complete(missionId!);
|
|
14077
|
+
else await missionStore.finish(missionId!, { status: 'failed', error: result.error ?? 'visible mission failed' });
|
|
14078
|
+
return { ...result, status: result.ok ? 'completed' as const : 'failed' as const, interactionId: missionId };
|
|
14079
|
+
} catch (error) {
|
|
14080
|
+
missionFinished = true;
|
|
14081
|
+
await askMonitor?.catch(() => undefined);
|
|
14082
|
+
if (missionId) handReplyTargets.delete(missionId);
|
|
14083
|
+
if (missionId && missionStore.read(missionId)?.status === 'running') {
|
|
14084
|
+
await missionStore.finish(missionId, { status: 'failed', error: error instanceof Error ? error.message : String(error) }).catch(() => undefined);
|
|
14085
|
+
}
|
|
14086
|
+
return { ok: false, status: 'failed' as const, interactionId: missionId, path: outputPath, error: error instanceof Error ? error.message : String(error) };
|
|
14087
|
+
}
|
|
14088
|
+
};
|
|
14089
|
+
const started = startClassicSidetabMissionPair({
|
|
14090
|
+
agent,
|
|
14091
|
+
mission,
|
|
14092
|
+
parallelMission,
|
|
14093
|
+
context,
|
|
14094
|
+
spawnVisible,
|
|
14095
|
+
runVisible,
|
|
14096
|
+
registry: classicMissionPairSessions,
|
|
14097
|
+
hasSession: (sessionId) => Boolean(sessionRegistry.get(sessionId)),
|
|
14098
|
+
killSession: (sessionId) => sessionRegistry.kill(sessionId),
|
|
14099
|
+
enqueue: (notification) => globalTaskNotificationQueue.enqueue(notification),
|
|
14100
|
+
});
|
|
14101
|
+
if (context?.callId?.startsWith('plugin-wizard:')) {
|
|
14102
|
+
pluginWizardPairCompletions.set(context.callId, started.completion);
|
|
14103
|
+
}
|
|
14104
|
+
void started.completion;
|
|
14105
|
+
return started.result;
|
|
14106
|
+
}, async (input) => {
|
|
14107
|
+
const target = handReplyTargets.get(input.missionId);
|
|
14108
|
+
if (!target) {
|
|
14109
|
+
const [{ effectiveInstanceRoot }, { createMissionOutStore }, { recordHeadlessMissionHandReply }] = await Promise.all([
|
|
14110
|
+
import('../instance/resolve.js'), import('../agent-mission/mission-out.js'), import('../agent-mission/mission-hand-reply.js'),
|
|
14111
|
+
]);
|
|
14112
|
+
const store = createMissionOutStore(effectiveInstanceRoot());
|
|
14113
|
+
const result = await recordHeadlessMissionHandReply(input, store);
|
|
14114
|
+
return { ok: result.ok, body: result.ok ? `Recorded ${input.kind} on headless mission line (record-only; no PTY input).` : result.reason };
|
|
14115
|
+
}
|
|
14116
|
+
const { recordAndDeliverMissionHandReply } = await import('../agent-mission/mission-hand-reply.js');
|
|
14117
|
+
const result = await recordAndDeliverMissionHandReply({ target, ...input });
|
|
14118
|
+
const delivery = result.ok ? result.delivery === 'ask-ledger' ? 'recorded in the mission ledger for a matching ask waiter' : 'delivered through PTY arbiter' : '';
|
|
14119
|
+
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})` : ''}.` };
|
|
14120
|
+
}, async (mission, context) => {
|
|
14121
|
+
const { codexBackend, claudeBackend, grokBackend } = await import('../agent-mission/driver.js');
|
|
14122
|
+
const spawnVisible = (member: ClassicSidetabMissionAgent, missionId: string) => {
|
|
14123
|
+
try {
|
|
14124
|
+
const brand = member === 'claude' ? 'claude-code' : member;
|
|
14125
|
+
const backend = member === 'codex' ? codexBackend : member === 'claude' ? claudeBackend : grokBackend;
|
|
14126
|
+
const session = TerminalPopup.agent(brand).cwd(workingDir.cwd).id(missionId).args(backend.args).open();
|
|
14127
|
+
if (session && terminalModalRouter.current()?.id === session.id) terminalModalRouter.close();
|
|
14128
|
+
if (session) debug.log('classic-sidetab.mission-trio', 'started', { member, interactionId: session.id, toolCallId: context?.callId ?? null });
|
|
14129
|
+
return session;
|
|
14130
|
+
} catch (error) {
|
|
14131
|
+
debug.log('classic-sidetab.mission-trio', 'spawn-failed', { member, reason: error instanceof Error ? error.message : String(error) }, { level: 'warn' });
|
|
14132
|
+
return null;
|
|
14133
|
+
}
|
|
14134
|
+
};
|
|
14135
|
+
const runVisible = async (member: ClassicSidetabMissionAgent, prompt: string, session: TerminalSession | null, missionId?: string): Promise<ClassicSidetabMissionResult> => {
|
|
14136
|
+
const outputPath = session ? join(session.cwd, '.elanous', 'mission-results', `classic-trio-${member}-${session.id}-${Date.now()}.md.tmp`) : '';
|
|
14137
|
+
if (!session) return { ok: false, status: 'failed', path: outputPath, error: `${member} sidetab PTY could not start` };
|
|
14138
|
+
try {
|
|
14139
|
+
const { runVisibleAgentMission } = await import('../sidetab-core/visible-agent-mission.js');
|
|
14140
|
+
const backend = member === 'codex' ? codexBackend : member === 'claude' ? claudeBackend : grokBackend;
|
|
14141
|
+
const result = await runVisibleAgentMission({
|
|
14142
|
+
pty: { snapshot: () => session.preview.renderForLLM(), write: (bytes) => session.preview.write(bytes), isAlive: () => session.preview.isAlive },
|
|
14143
|
+
mission: prompt,
|
|
14144
|
+
outputPath,
|
|
14145
|
+
handleTrust: (screen, write) => backend.handleTrust?.(screen, write) ?? false,
|
|
14146
|
+
});
|
|
14147
|
+
return { ...result, status: result.ok ? 'completed' : 'failed', interactionId: missionId, finalScreen: session.preview.renderForLLM() };
|
|
14148
|
+
} catch (error) {
|
|
14149
|
+
return {
|
|
14150
|
+
ok: false,
|
|
14151
|
+
status: 'failed',
|
|
14152
|
+
path: outputPath,
|
|
14153
|
+
interactionId: missionId,
|
|
14154
|
+
error: error instanceof Error ? error.message : String(error),
|
|
14155
|
+
finalScreen: session.preview.renderForLLM(),
|
|
14156
|
+
};
|
|
14157
|
+
}
|
|
14158
|
+
};
|
|
14159
|
+
const started = await startClassicSidetabMissionTrio({
|
|
14160
|
+
mission,
|
|
14161
|
+
context,
|
|
14162
|
+
checkGrokAuth: probeGrokLogin,
|
|
14163
|
+
spawnVisible: (member, missionId) => spawnVisible(member, missionId),
|
|
14164
|
+
runVisible,
|
|
14165
|
+
registry: classicMissionPairSessions,
|
|
14166
|
+
hasSession: (sessionId) => Boolean(sessionRegistry.get(sessionId)),
|
|
14167
|
+
killSession: (sessionId) => sessionRegistry.kill(sessionId),
|
|
14168
|
+
enqueue: (notification) => globalTaskNotificationQueue.enqueue(notification),
|
|
14169
|
+
});
|
|
14170
|
+
void started.completion;
|
|
14171
|
+
return started.result;
|
|
14172
|
+
});
|
|
14173
|
+
const tuiPluginWizard = createDashboardPluginWizardRuntime({
|
|
14174
|
+
getWorkspace: () => getSessionCwd(),
|
|
14175
|
+
runMissionPair: async ({ runId, prompt, context }) => {
|
|
14176
|
+
const pairCallId = `plugin-wizard:${runId}`;
|
|
14177
|
+
const started = await classicSidetabMission.dispatchTool('RunSidetabMission', {
|
|
14178
|
+
agent: 'codex', mission: prompt, parallelMission: prompt,
|
|
14179
|
+
}, { callId: pairCallId, ...(context?.parentSessionId ? { parentSessionId: context.parentSessionId } : {}) });
|
|
14180
|
+
const completion = pluginWizardPairCompletions.get(pairCallId);
|
|
14181
|
+
if (!completion || started?.status === 'error') {
|
|
14182
|
+
pluginWizardPairCompletions.delete(pairCallId);
|
|
14183
|
+
throw new Error(started?.body ?? 'Codex/Claude pair did not start');
|
|
14184
|
+
}
|
|
14185
|
+
try {
|
|
14186
|
+
const result = await completion;
|
|
14187
|
+
return {
|
|
14188
|
+
codex: { ok: result.codex.ok, ...(result.codex.content ? { content: result.codex.content } : {}), ...(result.codex.error ? { error: result.codex.error } : {}) },
|
|
14189
|
+
claude: { ok: result.claude.ok, ...(result.claude.content ? { content: result.claude.content } : {}), ...(result.claude.error ? { error: result.claude.error } : {}) },
|
|
14190
|
+
};
|
|
14191
|
+
} finally { pluginWizardPairCompletions.delete(pairCallId); }
|
|
14192
|
+
},
|
|
14193
|
+
});
|
|
13908
14194
|
disposeClassicSigquit = registerClassicSigquitHandler(() => {
|
|
13909
14195
|
classicSidetabRuntime.beginPrefix();
|
|
13910
14196
|
});
|
|
@@ -15417,7 +15703,19 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15417
15703
|
surface: acpTurnRef.turnProfile?.surface,
|
|
15418
15704
|
})
|
|
15419
15705
|
: [];
|
|
15420
|
-
const
|
|
15706
|
+
const surface = acpTurnRef.turnProfile?.surface;
|
|
15707
|
+
const researchDefaults = surface?.id === 'research/agent'
|
|
15708
|
+
? resolveDynamicSessionNativeToolSpecs({
|
|
15709
|
+
userText,
|
|
15710
|
+
defaultFamilyIds: surface.defaultNativeFamilyIds,
|
|
15711
|
+
surfaceId: surface.id,
|
|
15712
|
+
}).filter(tool => ['WebSearch', 'OmniSearch', 'WebFetch'].includes(tool.name))
|
|
15713
|
+
: [];
|
|
15714
|
+
const withSurfaceDefaults = [...new Map(
|
|
15715
|
+
[...researchDefaults, ...tools].map(tool => [tool.name, tool] as const),
|
|
15716
|
+
).values()];
|
|
15717
|
+
const classicTools = runtime ? classicSidetabMission.getTools(withSurfaceDefaults) : withSurfaceDefaults;
|
|
15718
|
+
const tuiTools = tuiPluginWizard.getTools(classicTools);
|
|
15421
15719
|
return [
|
|
15422
15720
|
...tuiChatPersonaMessages(currentChatPersonaSessionId(), chatPersonaSelection),
|
|
15423
15721
|
...buildDashboardTurnPreamble({
|
|
@@ -15433,14 +15731,14 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15433
15731
|
// codex-only behavioral addendum (fix L-1) inside the
|
|
15434
15732
|
// universal preamble.
|
|
15435
15733
|
modelFamily: getModelFamily(activeModel),
|
|
15436
|
-
enabledTools:
|
|
15734
|
+
enabledTools: tuiTools.map(t => t.name),
|
|
15437
15735
|
seatBoot: true,
|
|
15438
15736
|
}),
|
|
15439
15737
|
];
|
|
15440
15738
|
},
|
|
15441
15739
|
getTools: ({ userText }) => {
|
|
15442
15740
|
const runtime = acpToolRuntime;
|
|
15443
|
-
if (!runtime) return [];
|
|
15741
|
+
if (!runtime) return tuiPluginWizard.getTools([]);
|
|
15444
15742
|
const tools = buildSessionRuntimeToolSpecs({
|
|
15445
15743
|
userText,
|
|
15446
15744
|
hostTools: pluginHost.hostLLMTools(),
|
|
@@ -15448,7 +15746,19 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15448
15746
|
optionalTools: acpTurnRef.optionalSpecs,
|
|
15449
15747
|
surface: acpTurnRef.turnProfile?.surface,
|
|
15450
15748
|
});
|
|
15451
|
-
const
|
|
15749
|
+
const surface = acpTurnRef.turnProfile?.surface;
|
|
15750
|
+
const researchDefaults = surface?.id === 'research/agent'
|
|
15751
|
+
? resolveDynamicSessionNativeToolSpecs({
|
|
15752
|
+
userText,
|
|
15753
|
+
defaultFamilyIds: surface.defaultNativeFamilyIds,
|
|
15754
|
+
surfaceId: surface.id,
|
|
15755
|
+
}).filter(tool => ['WebSearch', 'OmniSearch', 'WebFetch'].includes(tool.name))
|
|
15756
|
+
: [];
|
|
15757
|
+
const withSurfaceDefaults = [...new Map(
|
|
15758
|
+
[...researchDefaults, ...tools].map(tool => [tool.name, tool] as const),
|
|
15759
|
+
).values()];
|
|
15760
|
+
const classicTools = classicSidetabMission.getTools(withSurfaceDefaults);
|
|
15761
|
+
const tuiTools = tuiPluginWizard.getTools(classicTools);
|
|
15452
15762
|
// ⭐ Remember this turn's catalog so a spawned sub-agent can inherit it.
|
|
15453
15763
|
//
|
|
15454
15764
|
// `dispatchAgent` computes `childTools = (hostTools ?? []).filter(...)`,
|
|
@@ -15456,8 +15766,8 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15456
15766
|
// or edit anything, which is the whole point of delegating code work.
|
|
15457
15767
|
// Exposing `Agent` without this wiring is worse than not exposing it:
|
|
15458
15768
|
// the model picks a delegate that provably cannot act.
|
|
15459
|
-
acpTurnToolSpecs =
|
|
15460
|
-
return
|
|
15769
|
+
acpTurnToolSpecs = tuiTools.filter(tool => tool.name !== CLASSIC_SIDETAB_MISSION_TOOL_NAME && tool.name !== TUI_PLUGIN_WIZARD_TOOL_NAME);
|
|
15770
|
+
return tuiTools;
|
|
15461
15771
|
},
|
|
15462
15772
|
// R2 essential TUI execution boundary: ACP receives the same
|
|
15463
15773
|
// Codex-first decision as every other surface. The core bridge now
|
|
@@ -15473,8 +15783,14 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15473
15783
|
// Count at the server-side boundary, before any tool effect and
|
|
15474
15784
|
// before the ACP notification can reach the TUI client.
|
|
15475
15785
|
acpToolDispatchCount++;
|
|
15786
|
+
const pluginWizardResult = tuiPluginWizard.dispatchTool(name, args, {
|
|
15787
|
+
callId: ctx?.callId,
|
|
15788
|
+
parentSessionId: ctx?.sessionId,
|
|
15789
|
+
});
|
|
15790
|
+
if (pluginWizardResult) return await pluginWizardResult;
|
|
15476
15791
|
const classicMissionResult = classicSidetabMission.dispatchTool(name, args, {
|
|
15477
15792
|
callId: ctx?.callId,
|
|
15793
|
+
parentSessionId: ctx?.sessionId,
|
|
15478
15794
|
});
|
|
15479
15795
|
if (classicMissionResult) return classicMissionResult;
|
|
15480
15796
|
// For Agent with no `hand` or `hand: internal`, the sidetab
|
|
@@ -15507,6 +15823,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15507
15823
|
draw,
|
|
15508
15824
|
signal: turnSignal,
|
|
15509
15825
|
toolCallId: ctx?.callId,
|
|
15826
|
+
inheritGeneralPurposeToolCatalog: true,
|
|
15510
15827
|
// ⛔⭐ 폴백은 `''` 가 아니라 `undefined` 다 — 「안 넘김」과 「말했는데 어휘가 없음」은 «다른 값»이다.
|
|
15511
15828
|
// harnessMentionState(session-runtime 소비처)는 `undefined → 'absent'` · `'' → 'not-matched'` 로
|
|
15512
15829
|
// 가른다. `?? ''` 로 접으면 그 둘이 같은 값이 되고, 그것이 2026-08-06 에 「TUI 가 하니스에게
|
|
@@ -15534,12 +15851,39 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
15534
15851
|
parentSessionId: ctx?.sessionId,
|
|
15535
15852
|
toolCallId,
|
|
15536
15853
|
signal: hasParentTurnAbortSignal ? turnSignal : undefined,
|
|
15854
|
+
inheritGeneralPurposeToolCatalog: true,
|
|
15537
15855
|
// ⭐ Agent-family context. Without these two the sub-agent runs
|
|
15538
15856
|
// text-only (see getTools above). `agentDispatchTool` routes the
|
|
15539
15857
|
// child's calls back through THIS dispatcher so the child gets the
|
|
15540
15858
|
// same policy/truncation treatment as the parent — not a second,
|
|
15541
15859
|
// laxer path.
|
|
15542
15860
|
agentHostTools: acpTurnToolSpecs,
|
|
15861
|
+
// Agent children inherit the full TUI-visible tool catalog,
|
|
15862
|
+
// not only this turn's surface/tier-selected model catalog.
|
|
15863
|
+
// Calls still route through this parent dispatcher, preserving
|
|
15864
|
+
// availability and dangerous-tool policy checks.
|
|
15865
|
+
buildChildToolCatalog: (childCwd) => {
|
|
15866
|
+
const childCatalog = buildSubagentSessionRuntimeToolSpecs({
|
|
15867
|
+
hostTools: pluginHost.hostLLMTools(),
|
|
15868
|
+
// Runtime can disappear between the parent turn and a child
|
|
15869
|
+
// spawn. In that case keep the captured TUI host catalog below.
|
|
15870
|
+
runtimeTools: runtime?.listToolRuntimes('tui') ?? [],
|
|
15871
|
+
optionalTools: acpTurnRef.optionalSpecs,
|
|
15872
|
+
});
|
|
15873
|
+
const specs = [...new Map(
|
|
15874
|
+
[...acpTurnToolSpecs, ...childCatalog]
|
|
15875
|
+
.filter(tool => tool.name !== CLASSIC_SIDETAB_MISSION_TOOL_NAME && tool.name !== TUI_PLUGIN_WIZARD_TOOL_NAME)
|
|
15876
|
+
.map(tool => [tool.name, tool] as const),
|
|
15877
|
+
).values()];
|
|
15878
|
+
return {
|
|
15879
|
+
specs,
|
|
15880
|
+
dispatch: (childName: string, childArgs: Record<string, unknown>) =>
|
|
15881
|
+
acpDispatchToolSelf
|
|
15882
|
+
? acpDispatchToolSelf(childName, childArgs, ctx)
|
|
15883
|
+
: Promise.resolve({ error: 'parent dispatcher unavailable' }),
|
|
15884
|
+
workingDirectory: childCwd,
|
|
15885
|
+
};
|
|
15886
|
+
},
|
|
15543
15887
|
// ⛔ Forward the parent's `ctx` — without it `turnIndex` is lost and
|
|
15544
15888
|
// the child's output is attributed to the wrong turn by the
|
|
15545
15889
|
// truncation/persist path (and the search planner loses its
|
|
@@ -17774,11 +18118,32 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
|
|
|
17774
18118
|
},
|
|
17775
18119
|
agentLauncher: {
|
|
17776
18120
|
open: (brand, agentArgs) => {
|
|
17777
|
-
TerminalPopup
|
|
18121
|
+
const launch = () => TerminalPopup
|
|
17778
18122
|
.agent(brand)
|
|
17779
18123
|
.cwd(getSessionCwd())
|
|
17780
18124
|
.args([...agentArgs])
|
|
17781
18125
|
.open();
|
|
18126
|
+
if (brand === 'gemini') {
|
|
18127
|
+
launch();
|
|
18128
|
+
return;
|
|
18129
|
+
}
|
|
18130
|
+
const agent = brand === 'claude-code' ? 'claude' : 'codex';
|
|
18131
|
+
void (async () => {
|
|
18132
|
+
try {
|
|
18133
|
+
const prepared = await prepareClassicSidetabAgentCli(agent);
|
|
18134
|
+
if (!prepared.ready) {
|
|
18135
|
+
chatLines.push(C.warning(` ${prepared.message}`));
|
|
18136
|
+
chatScrollOffset = -1;
|
|
18137
|
+
draw();
|
|
18138
|
+
return;
|
|
18139
|
+
}
|
|
18140
|
+
launch();
|
|
18141
|
+
} catch {
|
|
18142
|
+
chatLines.push(C.warning(` ${agent}: 설치·로그인 상태를 확인하지 못했습니다`));
|
|
18143
|
+
chatScrollOffset = -1;
|
|
18144
|
+
draw();
|
|
18145
|
+
}
|
|
18146
|
+
})();
|
|
17782
18147
|
},
|
|
17783
18148
|
},
|
|
17784
18149
|
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({
|