elanous 0.2.43 → 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/{Om5xS9jpjSXJCeTNGYEi4 → HMXsxdy5MIIcHPMHv1wD4}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{3557ac4a.c8931684475018ad.js → 08334415.f0e80896acbef722.js} +1 -1
- 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/118.2a89982fe4276880.js +23 -0
- 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/{3955.6922286237f2ac2b.js → 1306.967240ede9a0f757.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1344.3b95f3bd1b77a3fe.js +94 -0
- package/apps/pwa/out/_next/static/chunks/{5628.6ddb2d5ffba4ff4c.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/{2573.387a707f6f9d720c.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/{7910-6f139bcafd238b9f.js → 1850-522de4ee34957210.js} +1 -1
- 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/{1406.a1dc2ab6f8449374.js → 1978.eeb60a606dc5deac.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{3402.44b565b314f2263c.js → 2043.e233e3b5a3e790f5.js} +1 -1
- 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/{3694.e0099884345f0198.js → 2216.802962c04f40a26e.js} +1 -1
- 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/239.de075467b5523469.js +287 -0
- package/apps/pwa/out/_next/static/chunks/{1200.6a37c202f9f17e9a.js → 249.ba7051590d603c8f.js} +3 -3
- 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/{3935.16701e33f8982dc9.js → 2954.bbefc95d6b20e0d8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{aa57532f.510551854ff239b1.js → 2e0f720a.a0697c08e3806a60.js} +1 -1
- 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/{5930.8b4df3b46c32b05a.js → 3349.b5f09ee474d9533e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{5866.366966af47fdde5d.js → 3503.a47a9755fb4d97b0.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3506-5f429b3b7e1392b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7900.096f455c7c1efc53.js → 3843.bad404d008893291.js} +2 -2
- 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/{8588.d1c6a2903727ce87.js → 4393.28fa5228d0eec217.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/4404.7281c847c6e10dfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8062-7cd0bcc7f01455ba.js → 4415-b9d6a90960920a4a.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{8313-dfa1021bb58a46d6.js → 447-5b304de1fe098f43.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4484-8ebea83d431e6fae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6944.309f4e3ea54d1537.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/{3072.01338851ca21a6f7.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/{8986.8e2e4efbfa655c59.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/4891.3f80ba517a3b2373.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8205.282ca4bb62d54a0a.js → 4998.810ca8833084caa9.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/4f98febc.ea5841d4d616bfb2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5789.2da35c258292e1e5.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/{9770.5f75bc6088b16109.js → 5439.3fec6dbce29ecb36.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1313-19f737e0222c4444.js → 5612-074d9a5e00dfac6a.js} +1 -1
- 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/{3969.272ee7f9fd6c62e5.js → 5790.5eb06a653ebd8571.js} +1 -1
- 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/{6540.c7bef57ad8f90a87.js → 5989.7ecd362c5c44b747.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{0ad6802e.ae7afb63fdcb4491.js → 5a34fb2f.52f1b4e1baebb48a.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{0966f8a1.745fcd44f64a87ea.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/{2144.25b292396712196d.js → 6245.1182e007e9d230d9.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{363bfab3.9623b9f89363541f.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/{d96660fb.cbc21a2a88539dbb.js → 6549dad0.2740b25e51bf8f05.js} +7 -7
- package/apps/pwa/out/_next/static/chunks/{5564.9e72532188f57586.js → 6881.9e7955847640c7fe.js} +4 -4
- 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/{3903.3ef4656c67572764.js → 7010.1bbd17a7f2b3e376.js} +1 -1
- 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/{2312.0c8b61e22d3136d7.js → 7679.32c40cdd14f20b4a.js} +1 -1
- 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/{4199.ce86b281fd0a60b7.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/8551.f762945c2cda2e95.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8635-57a9d8d9db70f4f1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{fb7d20d5-6892502b6ee39ca6.js → 86961958-4b0689a5048f756b.js} +1 -1
- 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/87f498e5-0881de09f2e44707.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8843.c3197f904c952b81.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{cb0f8df8.09a4a6be97e3fc5f.js → 892fd990.456232f326cc39c2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{837-81336ebaca8198a8.js → 8965-135a2c9eaa2464cb.js} +1 -1
- 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/{8637.90f92d5c8db4732c.js → 9398.1f56e3f17795f43f.js} +1 -1
- 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-0a815f34367b6db6.js → page-da787e8a10b8a82e.js} +1 -1
- 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/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +22 -22
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +22 -22
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +22 -22
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +21 -21
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +21 -21
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +22 -22
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +21 -21
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +22 -22
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +22 -22
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +21 -21
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +22 -22
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +22 -22
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +22 -22
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +22 -22
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +21 -21
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +21 -21
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +22 -22
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +22 -22
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +22 -22
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +21 -21
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +21 -21
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +21 -21
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +22 -22
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +22 -22
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +21 -21
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +21 -21
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +21 -21
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +21 -21
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +22 -22
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +22 -22
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +21 -21
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +22 -22
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +22 -22
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +22 -22
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +22 -22
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +22 -22
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +21 -21
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +22 -22
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +22 -22
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +22 -22
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +22 -22
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +22 -22
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +22 -22
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +22 -22
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +22 -22
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +22 -22
- package/graphs/overlays/README.md +6 -0
- package/graphs/release/release-loop.yaml +33 -17
- package/graphs/units/verbs/make-doc.yaml +1 -0
- package/package.json +1 -1
- package/scripts/bench-metering-plan.ts +229 -0
- package/scripts/demo/demo1104-parallel-host.ts +56 -0
- package/scripts/demo/demo1104-parallel.ts +72 -0
- package/scripts/public-leak-baseline.txt +0 -1
- package/scripts/release-loop/docs-node.ts +4 -2
- package/scripts/release-loop/gate-image-pin.ts +116 -2
- package/scripts/release-loop/gate-node.ts +217 -25
- package/scripts/release-loop/gate-progress-sim.ts +73 -0
- package/scripts/release-loop/notes-repair.ts +18 -1
- package/scripts/release-loop/preflight.ts +188 -8
- 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/warm-control-forward.ts +178 -0
- package/scripts/retro-cycle.ts +30 -8
- package/scripts/rhythm/daily.ts +4 -1
- package/scripts/rhythm/linear-progress-sync.ts +28 -15
- package/scripts/ux-sim.ts +7 -1
- package/scripts/warm-pool-provider-config.ts +6 -1
- package/src/agent-mission/grok-auth-status.ts +78 -18
- package/src/agent-mission/mission-out.ts +2 -2
- package/src/agent-substrate/pr-reviewer.ts +147 -11
- package/src/agent-substrate/self-review-cli.ts +10 -2
- package/src/auto-research/research-fanout.ts +221 -0
- package/src/auto-research/research-turn.ts +282 -36
- package/src/autopilot/mission-codebase-gate.ts +7 -3
- package/src/cli/control-cli.ts +15 -6
- package/src/cli/log-event-names.ts +8 -0
- package/src/cli/setup-keys.ts +20 -8
- package/src/cli/tui-test-cli.ts +9 -5
- 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/research-policy.ts +7 -1
- package/src/core-turn/run-core-turn.ts +186 -39
- package/src/core-turn/types.ts +2 -0
- package/src/dashboard/classic-sidetab-mission-job.ts +113 -24
- package/src/dashboard/classic-sidetab-mission-pair.ts +3 -2
- package/src/dashboard/classic-sidetab-mission-trio.ts +35 -12
- package/src/dashboard/classic-sidetab-mission.ts +2 -0
- package/src/dashboard/index.ts +9 -1
- package/src/dashboard/sidetab-runtime.ts +2 -0
- package/src/dashboard/visible-mission-diagnostics.ts +16 -0
- 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/graph-runner/graph-cli.ts +24 -1
- package/src/graph-runner/graph-grow-llm.ts +3 -1
- package/src/graph-runner/runner.ts +226 -30
- package/src/harness/harness-cli-command.ts +4 -2
- package/src/harness/harness-pod-dispatch.ts +3 -0
- package/src/index.ts +2 -2
- package/src/llm/child-first-llm-observation.ts +112 -0
- package/src/llm/provider-credentials.ts +60 -4
- package/src/llm/provider-failure-evidence.ts +44 -0
- package/src/llm.ts +170 -11
- package/src/mcp/client.ts +7 -0
- package/src/mcp/proxy-runtime.ts +6 -1
- package/src/mcp/server.ts +54 -0
- package/src/native-tool-catalog.ts +2 -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/telegram-trigger-bot.ts +6 -6
- package/src/nexus/boot/register-mcp-clients.ts +114 -8
- package/src/nexus/index.ts +15 -0
- package/src/nexus/outbound/grokbot-adapter.ts +71 -0
- package/src/nexus/outbound/router.ts +33 -13
- package/src/oauth/codex-owner-mirror.ts +47 -10
- package/src/onboarding/first-run.ts +44 -6
- package/src/preview/terminal.ts +22 -7
- package/src/prompt-enhance/enhance.ts +10 -0
- package/src/pty-shell/pty-write-provenance.ts +21 -3
- package/src/pty-shell/registry.ts +9 -2
- package/src/release-loop/proposal-auto-place.ts +83 -0
- package/src/research/axis-fanout.ts +40 -5
- package/src/research/lenses/second-order.ts +312 -0
- package/src/self-dev/dev-cli.ts +3 -1
- package/src/self-dev/draft-sweep.ts +31 -10
- package/src/self-dev/draft-triage-rules.ts +60 -3
- package/src/self-dev/run-supervisor.ts +152 -2
- package/src/self-implement/goal-author.ts +208 -23
- package/src/self-implement/graph-overlay-yaml.ts +151 -0
- package/src/self-implement/graph-yaml.ts +68 -2
- package/src/self-implement/orchestrator.ts +62 -15
- package/src/self-implement/test-scenario-request.ts +37 -6
- package/src/session/chat.ts +2 -2
- package/src/session-runtime/index.ts +37 -5
- 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 +105 -47
- package/src/skills/tools/omni-search.ts +4 -2
- package/src/task-agent/parent-host.ts +19 -1
- package/src/task-agent/recall-inject.ts +98 -0
- package/src/task-agent/task-hand.ts +26 -7
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +19 -1
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +15 -0
- package/src/task-orchestrator/surfaces/pod-si-warm-host.ts +21 -9
- package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +1 -1
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +460 -96
- package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +45 -3
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +38 -8
- package/src/tool-hints/gate.ts +45 -14
- package/src/tool-hints/signals.ts +1 -1
- package/src/tool-hints/types.ts +2 -0
- package/src/tool-runtime/browser-hand-runtime.ts +11 -1
- package/src/tool-runtime/browser-runtime.ts +31 -18
- package/src/tool-runtime/elanous-linear-secretary-runtime.ts +152 -36
- package/src/tool-runtime/types.ts +2 -0
- package/src/tui/entry.ts +27 -7
- package/src/tui/sidetab/attach.ts +112 -0
- package/src/tui/sidetab/list.ts +3 -2
- package/src/tui-client/next-dashboard-runtime.ts +52 -0
- package/src/ux-sim/draft-inventory-builder.ts +2 -1
- package/src/ux-sim/linear-secretary.ts +4 -12
- package/src/ux-sim/mock-scenario-catalog.json +32 -29
- package/src/ux-sim/mock-scenario-catalog.ts +55 -3
- package/src/ux-sim/release-sim-rig.ts +62 -18
- package/src/ux-sim/service-key-setup.ts +63 -0
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/114.2b90424d1a3ce84c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1151-5c2bb8f002ca2dd6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1261-a616d5728e02e624.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1357.3bbef3976c37f94a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1362-20adddfaf662b0fa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1737-9491fc6ab29b9ec6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1803-4f91a8e7dcaf042c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1961.a81b12872c3e93a9.js +0 -23
- package/apps/pwa/out/_next/static/chunks/1970cf59.2d4d8ce5d6c81853.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1971-8890f3962ba7ee0a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2073-ba274e00e4f9efb4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2268-53861f339e0b65a2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/273.f156eee28f11af77.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2873.d2140e5a82546401.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3091.a5a4143dea33d197.js +0 -90
- package/apps/pwa/out/_next/static/chunks/3095.dc44586a5f83b86d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3113.d7472bbc27d580c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3228-9650b6447b6fa288.js +0 -1
- package/apps/pwa/out/_next/static/chunks/360.ae9f9f4c33c395e8.js +0 -79
- package/apps/pwa/out/_next/static/chunks/3638.80412ea63aae8f3f.js +0 -286
- package/apps/pwa/out/_next/static/chunks/3744.54f87db52acfd1ab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4311-6dd3144002cc0c2d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4426-2b230fad00c88930.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4445.7990c76b3751a918.js +0 -115
- package/apps/pwa/out/_next/static/chunks/4447-14c5161fa59166c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4856-b0b8075bba8c53f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4870-de370d65e73c0bb5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4885-2c989165c4b29fad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4894.fec2ca9e99caefa2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5093.8f04b7f8cb899a95.js +0 -94
- package/apps/pwa/out/_next/static/chunks/5122-2bb177cebf89e19a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5154.5f56dc3902e3d275.js +0 -36
- package/apps/pwa/out/_next/static/chunks/529.64ff7257180b2ac9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5394.5dabeb0c62293a28.js +0 -93
- package/apps/pwa/out/_next/static/chunks/5461.08bf2404ff38ec85.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5474-22e08a85583209b2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5567-265df39ed8fe9dcb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5570-a94ae19811cb2046.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5574-b47c9ef2dceff1fd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5730.43d7ccc09988e646.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5824.da9527b15a3221e5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5963-c4d8469c52a0828b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6001.ec4049ceb3c43418.js +0 -27
- package/apps/pwa/out/_next/static/chunks/6120-471f03db1e299c0c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6175-41479e643aca1878.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6291.a2de4f9787637075.js +0 -104
- package/apps/pwa/out/_next/static/chunks/6400-6699907c3537436a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6428.1f4327d6ae5fdf9a.js +0 -287
- package/apps/pwa/out/_next/static/chunks/644.02cb026fa44bcd0a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6466-6c87d60d3dd174fb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6773.d4264665ab31bec0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6822.3c789f1a8443e774.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7261-8ff69d3b2ee671fd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7266.084c6bbc70035140.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7271.5c0100e7320aa856.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7429-bf5731358c8f2f68.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7464.01f7a0ae1215fbe7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7479.0fcad5f37eb64f0c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7483.427a2fe2049e388d.js +0 -148
- package/apps/pwa/out/_next/static/chunks/7502-be74718178e13e56.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7530.0889722b19572065.js +0 -24
- package/apps/pwa/out/_next/static/chunks/7645.5b2ee3ad45c55ea3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7788.7d1c79f1a8e18946.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7966.f71c8958d1637548.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8073.f6cf2f2c71aafbd0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8201.190b94088980f430.js +0 -74
- package/apps/pwa/out/_next/static/chunks/8447.7963352ef5f71b76.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8574-868e8129525ef6d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/868.6e953be05bcf6dca.js +0 -41
- package/apps/pwa/out/_next/static/chunks/8706-e1fe0309343a2273.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8749-06384cdfc4520add.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8861-cc1fa1c7b920fa8e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8967-7dfebf710c9dec9d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8997-3c564dbb3b58b055.js +0 -1
- package/apps/pwa/out/_next/static/chunks/923.2034d10ae91e9c20.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9312.bc1b89c5d4368033.js +0 -1
- package/apps/pwa/out/_next/static/chunks/943.39ae5e82f4f1893f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9469.0500480de55fb205.js +0 -32
- package/apps/pwa/out/_next/static/chunks/9810-2543267050e58b82.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9870.8419702475254745.js +0 -8
- package/apps/pwa/out/_next/static/chunks/9941-376d1b74d51b01a4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9958.385434ab04241758.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-deea1450b17cb8dc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-70985b904f8650ef.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-a2e15e33e56a4353.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-fc72ce2db12d6ca9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-be03e41f9436ebd9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-35a35999382da3f2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-3ff5b1e6ca88b848.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-a65101300a0ee5c1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-3aca5b6d67dba511.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-45b8ab0a71e61314.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-53046e282d4cda8e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-17809e60e8354c17.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-fd2442d347bf5898.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-e9d720d6fc082e21.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-6b8b4267bab0a677.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-deea1450b17cb8dc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-8bcf6233ac7c17af.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-7cc25591cfc2126f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-053e871f35c9beba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-eff819f0c2d5e084.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-4d7e9d8db5274a87.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-2b2d8f5aa5f69ad4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-0b8f92c5062e68b1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1bd9d0fdac2ced3d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-9ee28f7df07428ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-44b7a1ff468c6648.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-cbc6523711dc1b65.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-fdad47899c2695be.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-79a8b5fee4c20871.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-03e8ac9606aeaffb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-4cd55c55ec287e2f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-db17b4305404161e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-30041d848350fd02.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-c540da022dbf86b0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9399efc538da057f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-ca2d09128c585ca4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-0e2635aecd343038.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ef7f4399b6b7726e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-deea1450b17cb8dc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-caf530535b875468.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-eaa20c1543a5fd8e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c541eb1b75120f61.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-ab5e213eda9479f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-e858ba0ed9393b68.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-1638ee9dd6e0582f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-4cf5a399109391f2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b4396321238798ec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-cb72bfd21006781a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-6135d0242afbc434.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-a1dccf907eddb856.js +0 -1
- package/apps/pwa/out/_next/static/chunks/c7945435-b44d4dbe90ba0dcb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/ea514caa.05a24f78d9dffe5f.js +0 -122
- package/apps/pwa/out/_next/static/chunks/framework-e8a911e19b1be41f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-7022f418fabba021.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-e5f15df755756a1e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-4525f91e36940c9b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-140f0e519c085b0f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-8f22ef63dcb865b1.js +0 -1
- /package/apps/pwa/out/_next/static/{Om5xS9jpjSXJCeTNGYEi4 → HMXsxdy5MIIcHPMHv1wD4}/_ssgManifest.js +0 -0
|
@@ -2,11 +2,26 @@ import { resolveInstanceName } from '../instance-identity.js';
|
|
|
2
2
|
import type { LLMToolSpec } from '../llm.js';
|
|
3
3
|
import { listPtyManifestRows, type PtyManifestRow } from '../pty-shell/pty-manifest.js';
|
|
4
4
|
import { describePtyRunState } from '../pty-shell/tui-run-state.js';
|
|
5
|
+
import { ptyWriteControlState } from '../pty-shell/pty-write-provenance.js';
|
|
5
6
|
|
|
6
7
|
const graphemes = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
|
|
7
8
|
|
|
8
9
|
export type SidetabBadge = 'busy' | 'idle' | 'stale' | 'unknown' | 'exited';
|
|
9
10
|
|
|
11
|
+
export interface SidetabControlInput {
|
|
12
|
+
readonly accessMode: 'read' | 'write' | 'auto';
|
|
13
|
+
readonly lastWriter: 'agent' | 'human' | null;
|
|
14
|
+
readonly activeMission: string | null;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface SidetabControlState {
|
|
18
|
+
readonly actor: 'agent' | 'human' | 'waiting';
|
|
19
|
+
readonly badge: '🤖' | '👤' | '⏸';
|
|
20
|
+
readonly label: string;
|
|
21
|
+
readonly title: string;
|
|
22
|
+
readonly emphasized: boolean;
|
|
23
|
+
}
|
|
24
|
+
|
|
10
25
|
export interface SidetabRow {
|
|
11
26
|
readonly id: string;
|
|
12
27
|
readonly label: string;
|
|
@@ -17,6 +32,15 @@ export interface SidetabRow {
|
|
|
17
32
|
readonly nestDepth?: number;
|
|
18
33
|
readonly ownerPid?: number;
|
|
19
34
|
readonly currentProcess?: boolean;
|
|
35
|
+
readonly controlState?: SidetabControlState;
|
|
36
|
+
readonly runId?: string;
|
|
37
|
+
readonly virtual?: boolean;
|
|
38
|
+
readonly attention?: boolean;
|
|
39
|
+
readonly status?: string;
|
|
40
|
+
readonly seat?: string;
|
|
41
|
+
readonly host?: string;
|
|
42
|
+
readonly cardId?: string;
|
|
43
|
+
readonly version?: string;
|
|
20
44
|
}
|
|
21
45
|
|
|
22
46
|
export interface SidetabState {
|
|
@@ -25,11 +49,44 @@ export interface SidetabState {
|
|
|
25
49
|
}
|
|
26
50
|
|
|
27
51
|
export interface SidetabScope {
|
|
52
|
+
/** `all` is retained for existing callers; `mode` is the three-scope contract. */
|
|
53
|
+
readonly mode?: 'mine' | 'runs' | 'all';
|
|
28
54
|
readonly all?: boolean;
|
|
29
55
|
readonly currentPtyId?: string;
|
|
30
56
|
readonly currentPid?: number;
|
|
31
57
|
/** Current classic chat session; classic shell rows carry it in their purpose tag. */
|
|
32
58
|
readonly currentSessionId?: string;
|
|
59
|
+
readonly controlByPtyId?: Readonly<Record<string, SidetabControlInput>>;
|
|
60
|
+
readonly filters?: readonly string[];
|
|
61
|
+
readonly crossInstanceParent?: readonly string[];
|
|
62
|
+
readonly expandedRunIds?: readonly string[];
|
|
63
|
+
readonly podRows?: readonly SidetabPodRow[];
|
|
64
|
+
readonly harnessRuns?: readonly SidetabHarnessRun[];
|
|
65
|
+
readonly maxTabs?: number;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface SidetabHarnessRun {
|
|
69
|
+
readonly runId: string;
|
|
70
|
+
readonly label?: string;
|
|
71
|
+
readonly instance?: string;
|
|
72
|
+
readonly parentPtyId?: string;
|
|
73
|
+
readonly status?: string;
|
|
74
|
+
readonly attention?: boolean;
|
|
75
|
+
readonly seat?: string;
|
|
76
|
+
readonly host?: string;
|
|
77
|
+
readonly cardId?: string;
|
|
78
|
+
readonly version?: string;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface SidetabPodRow {
|
|
82
|
+
readonly id: string;
|
|
83
|
+
readonly runId: string;
|
|
84
|
+
readonly label: string;
|
|
85
|
+
readonly status?: string;
|
|
86
|
+
readonly seat?: string;
|
|
87
|
+
readonly host?: string;
|
|
88
|
+
readonly cardId?: string;
|
|
89
|
+
readonly version?: string;
|
|
33
90
|
}
|
|
34
91
|
|
|
35
92
|
export type SidetabKey = 'toggle' | 'up' | 'down' | 'other';
|
|
@@ -60,15 +117,36 @@ export function applySidetabKey(state: SidetabState, key: SidetabKey, rowCount:
|
|
|
60
117
|
return { ...state, selected: (state.selected + delta + rowCount) % rowCount };
|
|
61
118
|
}
|
|
62
119
|
|
|
120
|
+
function sidetabControlState(input: SidetabControlInput): SidetabControlState {
|
|
121
|
+
const actor = input.lastWriter === 'human'
|
|
122
|
+
? 'human'
|
|
123
|
+
: input.lastWriter === 'agent' && input.accessMode === 'auto'
|
|
124
|
+
? 'agent'
|
|
125
|
+
: 'waiting';
|
|
126
|
+
if (actor === 'agent') {
|
|
127
|
+
return {
|
|
128
|
+
actor,
|
|
129
|
+
badge: '🤖',
|
|
130
|
+
label: '🤖 엘라누스 조작 중',
|
|
131
|
+
title: input.activeMission ? '🤖 엘라누스가 미션 진행 중 · 입력하면 넘겨받기' : '🤖 엘라누스 조작 중 · 입력하면 넘겨받기',
|
|
132
|
+
emphasized: true,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return actor === 'human'
|
|
136
|
+
? { actor, badge: '👤', label: '사람', title: '', emphasized: false }
|
|
137
|
+
: { actor, badge: '⏸', label: '대기', title: '', emphasized: false };
|
|
138
|
+
}
|
|
139
|
+
|
|
63
140
|
export function sidetabRowsFromManifest(
|
|
64
141
|
rows: readonly PtyManifestRow[],
|
|
65
142
|
instance: string,
|
|
66
143
|
runState: (row: PtyManifestRow) => { turn: string; stale: boolean | null } = describePtyRunState,
|
|
67
144
|
scope?: SidetabScope,
|
|
68
145
|
): SidetabRow[] {
|
|
146
|
+
const mode = scope?.mode ?? (scope?.all ? 'all' : 'mine');
|
|
69
147
|
const currentPid = scope?.currentPid ?? process.pid;
|
|
70
148
|
const currentSessionId = scope?.currentSessionId;
|
|
71
|
-
const eligible = rows.filter((row) => row.instance === instance && (
|
|
149
|
+
const eligible = rows.filter((row) => (row.instance === instance || scope?.crossInstanceParent?.includes(row.id)) && (
|
|
72
150
|
(row.kind === 'tui' && Boolean(row.sessionId))
|
|
73
151
|
|| Boolean(row.parentPtyId)
|
|
74
152
|
|| row.purpose?.startsWith('next-tui-sidetab:')
|
|
@@ -81,7 +159,7 @@ export function sidetabRowsFromManifest(
|
|
|
81
159
|
if (scope) {
|
|
82
160
|
const parent = eligible.find((row) => row.kind === 'tui'
|
|
83
161
|
&& (row.id === (scope.currentPtyId ?? `tui:${currentPid}`) || row.ownerPid === currentPid));
|
|
84
|
-
if (
|
|
162
|
+
if (mode === 'mine') {
|
|
85
163
|
const includedIds = new Set<string>(parent ? [parent.id] : []);
|
|
86
164
|
const includedPids = new Set<number>(parent ? [parent.ownerPid, parent.ptyPid, currentPid] : [currentPid]);
|
|
87
165
|
let changed = true;
|
|
@@ -99,9 +177,9 @@ export function sidetabRowsFromManifest(
|
|
|
99
177
|
}
|
|
100
178
|
scoped = eligible.filter((row) => includedIds.has(row.id));
|
|
101
179
|
}
|
|
102
|
-
if (
|
|
180
|
+
if (mode === 'mine') scoped = scoped.filter((row) => row.alive);
|
|
103
181
|
}
|
|
104
|
-
|
|
182
|
+
const basicRows = scoped
|
|
105
183
|
.map((row) => {
|
|
106
184
|
const badge: SidetabBadge = !row.alive
|
|
107
185
|
? 'exited'
|
|
@@ -123,15 +201,113 @@ export function sidetabRowsFromManifest(
|
|
|
123
201
|
nestDepth: row.nestDepth,
|
|
124
202
|
ownerPid: row.ownerPid,
|
|
125
203
|
currentProcess: row.kind === 'tui' && row.ownerPid === process.pid,
|
|
204
|
+
...(scope?.controlByPtyId?.[row.id]
|
|
205
|
+
? { controlState: sidetabControlState(scope.controlByPtyId[row.id]!) }
|
|
206
|
+
: {}),
|
|
126
207
|
...(sessionId ? { sessionId } : classicTerminalSessionId ? { sessionId: classicTerminalSessionId } : {}),
|
|
208
|
+
...(row.runId ? { runId: row.runId } : {}),
|
|
127
209
|
};
|
|
128
210
|
});
|
|
211
|
+
if (!scope) return basicRows;
|
|
212
|
+
|
|
213
|
+
// The pre-scope loader exposed manifest PTYs as selectable rows, even
|
|
214
|
+
// when they carried a runId. Keep that contract for existing callers:
|
|
215
|
+
// run grouping, filtering, expansion and tab caps are opt-in scope UI.
|
|
216
|
+
// In particular, do not synthesize run: ids or more:tabs rows in the
|
|
217
|
+
// classic all/mine list, whose actions target manifest PTY ids.
|
|
218
|
+
const scopedRunView = scope.mode !== undefined
|
|
219
|
+
|| scope.harnessRuns !== undefined
|
|
220
|
+
|| scope.podRows !== undefined
|
|
221
|
+
|| scope.filters !== undefined
|
|
222
|
+
|| scope.expandedRunIds !== undefined
|
|
223
|
+
|| scope.maxTabs !== undefined;
|
|
224
|
+
if (!scopedRunView) return basicRows;
|
|
225
|
+
|
|
226
|
+
const runMeta = new Map((scope.harnessRuns ?? []).map((run) => [run.runId, run]));
|
|
227
|
+
const visibleRunIds = new Set(basicRows.flatMap((row) => row.runId ? [row.runId] : []));
|
|
228
|
+
for (const run of scope.harnessRuns ?? []) {
|
|
229
|
+
if (mode === 'all' || mode === 'runs' || (run.parentPtyId && basicRows.some((row) => row.id === run.parentPtyId))) visibleRunIds.add(run.runId);
|
|
230
|
+
}
|
|
231
|
+
const runs: SidetabRow[] = [...visibleRunIds].map((runId) => {
|
|
232
|
+
const members = basicRows.filter((row) => row.runId === runId);
|
|
233
|
+
const meta = runMeta.get(runId);
|
|
234
|
+
const pods = (scope.podRows ?? []).filter((row) => row.runId === runId);
|
|
235
|
+
const status = meta?.status ?? (members.some((row) => row.badge === 'stale') ? 'stuck' : members.some((row) => row.badge === 'busy') ? 'running' : 'idle');
|
|
236
|
+
const attention = meta?.attention ?? /^(asking|hitl|stuck|failed|error|blocked)$/i.test(status);
|
|
237
|
+
return {
|
|
238
|
+
id: `run:${runId}`, runId, label: meta?.label ?? runId, kind: 'harness-run', badge: status === 'failed' || status === 'error' ? 'stale' : members[0]?.badge ?? 'unknown',
|
|
239
|
+
attention, status, ...(meta?.seat ? { seat: meta.seat } : {}), ...(meta?.host ? { host: meta.host } : {}),
|
|
240
|
+
...(meta?.cardId ? { cardId: meta.cardId } : {}), ...(meta?.version ? { version: meta.version } : {}),
|
|
241
|
+
nestDepth: 0,
|
|
242
|
+
...(pods.length ? { sessionId: `${members.length} child · ${pods.length} pod` } : members.length ? { sessionId: `${members.length} child` } : {}),
|
|
243
|
+
};
|
|
244
|
+
});
|
|
245
|
+
const filters = scope.filters ?? [];
|
|
246
|
+
const filterRows = (items: readonly SidetabRow[]): SidetabRow[] => items.filter((row) => filters.every((raw) => {
|
|
247
|
+
const colon = raw.indexOf(':');
|
|
248
|
+
if (colon < 0) return true;
|
|
249
|
+
const key = raw.slice(0, colon); const values = raw.slice(colon + 1).split('|').map((value) => value.trim().toLowerCase()).filter(Boolean);
|
|
250
|
+
if (values.length === 0) return true;
|
|
251
|
+
if (key === 'status') return values.some((value) => row.status?.toLowerCase() === value || row.badge === value);
|
|
252
|
+
if (key === 'seat') return values.includes(row.seat?.toLowerCase() ?? '');
|
|
253
|
+
if (key === 'host') return values.includes(row.host?.toLowerCase() ?? '');
|
|
254
|
+
if (key === 'card') return values.includes(row.cardId?.toLowerCase() ?? '');
|
|
255
|
+
if (key === 'version') return values.includes(row.version?.toLowerCase() ?? '');
|
|
256
|
+
return true;
|
|
257
|
+
}));
|
|
258
|
+
let output: SidetabRow[];
|
|
259
|
+
if (mode === 'runs' || mode === 'all') {
|
|
260
|
+
const orderedRuns = runs.sort((a, b) => Number(Boolean(b.attention)) - Number(Boolean(a.attention)) || a.label.localeCompare(b.label));
|
|
261
|
+
output = mode === 'runs' ? orderedRuns : [...orderedRuns, ...basicRows.filter((row) => !row.runId)];
|
|
262
|
+
} else {
|
|
263
|
+
const runIds = new Set(runs.map((row) => row.runId!));
|
|
264
|
+
const outsideAttention = (scope.harnessRuns ?? []).filter((run) => run.attention && !runIds.has(run.runId));
|
|
265
|
+
output = [
|
|
266
|
+
...(outsideAttention.length ? [{
|
|
267
|
+
id: 'attention:outside-runs', label: `${outsideAttention.length} 함대 주의 런`, kind: 'attention-badge', badge: 'stale' as const,
|
|
268
|
+
attention: true, status: 'attention',
|
|
269
|
+
}] : []),
|
|
270
|
+
...basicRows.filter((row) => !row.runId || !runIds.has(row.runId)),
|
|
271
|
+
...runs,
|
|
272
|
+
];
|
|
273
|
+
}
|
|
274
|
+
output = filterRows(output);
|
|
275
|
+
const expanded = new Set(scope.expandedRunIds ?? []);
|
|
276
|
+
const expandedRows: SidetabRow[] = [];
|
|
277
|
+
for (const row of output) {
|
|
278
|
+
expandedRows.push(row);
|
|
279
|
+
if (row.kind !== 'harness-run' || !expanded.has(row.runId!)) continue;
|
|
280
|
+
expandedRows.push(...filterRows(basicRows.filter((child) => child.runId === row.runId)).map((child) => ({ ...child, nestDepth: 1 })));
|
|
281
|
+
expandedRows.push(...filterRows((scope.podRows ?? []).filter((pod) => pod.runId === row.runId).map((pod) => ({
|
|
282
|
+
id: `pod:${pod.id}`, runId: pod.runId, label: pod.label, kind: 'pod', badge: 'unknown' as const, virtual: true, nestDepth: 1,
|
|
283
|
+
...(pod.status ? { status: pod.status } : {}), ...(pod.seat ? { seat: pod.seat } : {}), ...(pod.host ? { host: pod.host } : {}),
|
|
284
|
+
...(pod.cardId ? { cardId: pod.cardId } : {}), ...(pod.version ? { version: pod.version } : {}),
|
|
285
|
+
}))));
|
|
286
|
+
}
|
|
287
|
+
const maxTabs = Math.max(1, scope.maxTabs ?? 8);
|
|
288
|
+
if (expandedRows.length > maxTabs) {
|
|
289
|
+
const visible = expandedRows.slice(0, Math.max(0, maxTabs - 1));
|
|
290
|
+
visible.push({ id: 'more:tabs', label: `+${expandedRows.length - visible.length} 더`, kind: 'overflow', badge: 'unknown' });
|
|
291
|
+
return visible;
|
|
292
|
+
}
|
|
293
|
+
return expandedRows;
|
|
129
294
|
}
|
|
130
295
|
|
|
131
|
-
export function loadSidetabRows(all = false, currentSessionId?: string): SidetabRow[] {
|
|
132
|
-
|
|
296
|
+
export function loadSidetabRows(all = false, currentSessionId?: string, scopeOverrides?: Partial<SidetabScope>): SidetabRow[] {
|
|
297
|
+
const manifestRows = listPtyManifestRows();
|
|
298
|
+
const controlByPtyId = Object.fromEntries(manifestRows.flatMap((row) => {
|
|
299
|
+
const control = ptyWriteControlState(row.id);
|
|
300
|
+
if (!control) return [];
|
|
301
|
+
// Purpose/nickname/kind identify a PTY, not its active task. Keep the
|
|
302
|
+
// control indicator honest until a mission source is wired into this
|
|
303
|
+
// loader; sidetabControlState will then show the generic control label.
|
|
304
|
+
return [[row.id, { ...control, activeMission: null }]];
|
|
305
|
+
}));
|
|
306
|
+
return sidetabRowsFromManifest(manifestRows, resolveInstanceName(), describePtyRunState, {
|
|
133
307
|
all,
|
|
308
|
+
controlByPtyId,
|
|
134
309
|
...(currentSessionId ? { currentSessionId } : {}),
|
|
310
|
+
...scopeOverrides,
|
|
135
311
|
});
|
|
136
312
|
}
|
|
137
313
|
|
|
@@ -157,9 +333,12 @@ export function formatSidetabLines(
|
|
|
157
333
|
if (truncated && width > 0) { result += '…'; used++; }
|
|
158
334
|
return result + ' '.repeat(Math.max(0, width - used));
|
|
159
335
|
};
|
|
336
|
+
const selectedControl = mode === 'list' ? rows[selected]?.controlState : undefined;
|
|
337
|
+
const titleLine = fit(selectedControl?.title || ' 세션 · PTY');
|
|
338
|
+
const emphasizedTitle = selectedControl?.emphasized ? `\u001b[1;36m${titleLine}\u001b[0m` : titleLine;
|
|
160
339
|
const lines = mode === 'new'
|
|
161
340
|
? [fit(' 새 PTY'), fit(' s shell · e elanous'), fit(' c codex · l claude · Esc')]
|
|
162
|
-
: [
|
|
341
|
+
: [emphasizedTitle, fit(' ↑↓ 전환 · 클릭 선택')];
|
|
163
342
|
const rowCapacity = Math.max(0, Math.floor(height) - lines.length - (mode === 'list' ? 1 : 0));
|
|
164
343
|
const visibleCount = Math.min(rows.length || 1, rowCapacity);
|
|
165
344
|
const start = rows.length <= visibleCount
|
|
@@ -170,7 +349,13 @@ export function formatSidetabLines(
|
|
|
170
349
|
const index = start + offset;
|
|
171
350
|
const row = rows[index]!;
|
|
172
351
|
const marker = index === selected ? '›' : ' ';
|
|
173
|
-
|
|
352
|
+
const controlBadge = row.controlState ? `${row.controlState.badge} ` : '';
|
|
353
|
+
// `unknown` contributes no actionable state and made the pre-existing
|
|
354
|
+
// classic PTY label truncate after adding the control badge. Keep the
|
|
355
|
+
// known control actor and the complete selectable label visible.
|
|
356
|
+
const runBadge = row.controlState && row.badge === 'unknown' ? '' : `${row.badge} `;
|
|
357
|
+
const rowLine = fit(` ${marker} ${controlBadge}${runBadge}${row.label}`);
|
|
358
|
+
lines.push(row.controlState?.emphasized && index === selected ? `\u001b[1;36m${rowLine}\u001b[0m` : rowLine);
|
|
174
359
|
}
|
|
175
360
|
if (mode === 'list' && lines.length < Math.floor(height)) lines.push(fit(' + new · /side new'));
|
|
176
361
|
return lines;
|
|
@@ -187,6 +372,7 @@ export interface NextSidetabRequest {
|
|
|
187
372
|
target?: string;
|
|
188
373
|
character?: 'shell' | 'elanous';
|
|
189
374
|
mission?: string;
|
|
375
|
+
parallelMission?: string;
|
|
190
376
|
agent?: 'codex' | 'claude';
|
|
191
377
|
confirm?: boolean;
|
|
192
378
|
}
|
|
@@ -201,6 +387,7 @@ export interface NextSidetabHostDeps {
|
|
|
201
387
|
detach(): unknown;
|
|
202
388
|
spawn(character: 'shell' | 'elanous'): unknown;
|
|
203
389
|
runMission?(agent: 'codex' | 'claude', mission: string): Promise<unknown>;
|
|
390
|
+
runMissionPair?(agent: 'codex' | 'claude', mission: string, parallelMission: string): Promise<unknown>;
|
|
204
391
|
kill(row: SidetabRow): unknown;
|
|
205
392
|
}
|
|
206
393
|
export interface NextSidetabIpcProcess {
|
|
@@ -210,7 +397,7 @@ export interface NextSidetabIpcProcess {
|
|
|
210
397
|
|
|
211
398
|
export const nextSidetabToolSpec: LLMToolSpec = {
|
|
212
399
|
name: NEXT_SIDETAB_TOOL_NAME,
|
|
213
|
-
description: 'Control the Next TUI side tab: list/view sessions and PTYs, switch sessions, attach or detach, start a local shell or elanous PTY, run
|
|
400
|
+
description: 'Control the Next TUI side tab: list/view sessions and PTYs, switch sessions, attach or detach, start a local shell or elanous PTY, run one visible Codex or Claude mission, or split one task into complementary graph branches that launch both visible agents concurrently. For a parallelMission, return both verified result files through the existing Codex + Claude pair-synthesis pipeline, with one comparison/adoption artifact and attribution table; do not create a second synthesis. Ask the user to confirm before calling kill with confirm=true.',
|
|
214
401
|
parameters: {
|
|
215
402
|
type: 'object',
|
|
216
403
|
properties: {
|
|
@@ -218,6 +405,7 @@ export const nextSidetabToolSpec: LLMToolSpec = {
|
|
|
218
405
|
target: { type: 'string', description: 'Optional exact or partial row id/label; required for targeted actions.' },
|
|
219
406
|
character: { type: 'string', enum: ['shell', 'elanous'], description: 'Only used with action=new.' },
|
|
220
407
|
mission: { type: 'string', description: 'Mission text to type visibly into a new Codex or Claude side-tab PTY; the tool appends a result-file path and checks the completion marker.' },
|
|
408
|
+
parallelMission: { type: 'string', description: 'Optional second mission. Starts the other agent concurrently and returns both verified result files together for synthesis.' },
|
|
221
409
|
agent: { type: 'string', enum: ['codex', 'claude'], description: 'Coding agent for action=mission; defaults to codex.' },
|
|
222
410
|
confirm: { type: 'boolean', description: 'Must be true only after the user explicitly confirmed killing the selected PTY.' },
|
|
223
411
|
},
|
|
@@ -251,8 +439,15 @@ export function createNextSidetabHostHandler(deps: NextSidetabHostDeps): NextSid
|
|
|
251
439
|
if (request.action === 'mission') {
|
|
252
440
|
const mission = request.mission?.trim();
|
|
253
441
|
if (!mission) return { error: 'mission 텍스트가 필요합니다' };
|
|
254
|
-
if (!deps.runMission) return { error: '사이드탭 미션 실행기가 연결되지 않았습니다' };
|
|
442
|
+
if (!deps.runMission && !deps.runMissionPair) return { error: '사이드탭 미션 실행기가 연결되지 않았습니다' };
|
|
255
443
|
if (request.agent !== undefined && request.agent !== 'codex' && request.agent !== 'claude') return { error: 'agent는 codex 또는 claude여야 합니다' };
|
|
444
|
+
const parallelMission = request.parallelMission?.trim();
|
|
445
|
+
if (request.parallelMission !== undefined && !parallelMission) return { error: 'parallelMission 텍스트가 비었습니다' };
|
|
446
|
+
if (parallelMission) {
|
|
447
|
+
if (!deps.runMissionPair) return { error: 'Codex/Claude pair 실행기가 연결되지 않았습니다' };
|
|
448
|
+
return deps.runMissionPair(request.agent ?? 'codex', mission, parallelMission);
|
|
449
|
+
}
|
|
450
|
+
if (!deps.runMission) return { error: '단일 사이드탭 미션 실행기가 연결되지 않았습니다' };
|
|
256
451
|
return deps.runMission(request.agent ?? 'codex', mission);
|
|
257
452
|
}
|
|
258
453
|
if (request.action === 'detach') return deps.detach();
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { VisibleMissionPty, VisibleMissionResult } from './visible-agent-mission.js';
|
|
2
|
+
|
|
3
|
+
export type VisibleMissionAgent = 'codex' | 'claude';
|
|
4
|
+
|
|
5
|
+
export interface VisibleMissionPairDeps<Pty extends VisibleMissionPty = VisibleMissionPty> {
|
|
6
|
+
spawn(agent: VisibleMissionAgent): Pty | null;
|
|
7
|
+
run(agent: VisibleMissionAgent, mission: string, pty: Pty): Promise<VisibleMissionResult>;
|
|
8
|
+
dispose?(pty: Pty): void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** Spawn both visible agent PTYs before dispatching either mission, then collect both verified files. */
|
|
12
|
+
export async function runVisibleAgentMissionPair<Pty extends VisibleMissionPty>(
|
|
13
|
+
deps: VisibleMissionPairDeps<Pty>,
|
|
14
|
+
primaryAgent: VisibleMissionAgent,
|
|
15
|
+
primaryMission: string,
|
|
16
|
+
parallelMission: string,
|
|
17
|
+
): Promise<{ ok: boolean; codex: VisibleMissionResult | null; claude: VisibleMissionResult | null; error?: string }> {
|
|
18
|
+
const agents: readonly [VisibleMissionAgent, VisibleMissionAgent] = [primaryAgent, primaryAgent === 'codex' ? 'claude' : 'codex'];
|
|
19
|
+
const ptys = new Map<VisibleMissionAgent, Pty>();
|
|
20
|
+
for (const agent of agents) {
|
|
21
|
+
let pty: Pty | null;
|
|
22
|
+
try { pty = deps.spawn(agent); }
|
|
23
|
+
catch (error) {
|
|
24
|
+
for (const started of ptys.values()) {
|
|
25
|
+
try { deps.dispose?.(started); } catch { /* keep cleanup best-effort across the pair */ }
|
|
26
|
+
}
|
|
27
|
+
return { ok: false, codex: null, claude: null, error: `${agent} sidetab PTY could not start; neither mission was dispatched: ${error instanceof Error ? error.message : String(error)}` };
|
|
28
|
+
}
|
|
29
|
+
if (!pty) {
|
|
30
|
+
for (const started of ptys.values()) {
|
|
31
|
+
try { deps.dispose?.(started); } catch { /* keep cleanup best-effort across the pair */ }
|
|
32
|
+
}
|
|
33
|
+
return { ok: false, codex: null, claude: null, error: `${agent} sidetab PTY could not start; neither mission was dispatched` };
|
|
34
|
+
}
|
|
35
|
+
ptys.set(agent, pty);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const missions = new Map<VisibleMissionAgent, string>([[primaryAgent, primaryMission], [agents[1], parallelMission]]);
|
|
39
|
+
const results = await Promise.all(agents.map(async (agent) => {
|
|
40
|
+
const pty = ptys.get(agent)!;
|
|
41
|
+
try { return [agent, await deps.run(agent, missions.get(agent)!, pty)] as const; }
|
|
42
|
+
catch (error) {
|
|
43
|
+
return [agent, { ok: false, path: '', promptReady: false, missionVisible: false, promptReturned: false, completionMarker: false,
|
|
44
|
+
error: error instanceof Error ? error.message : String(error) }] as const;
|
|
45
|
+
}
|
|
46
|
+
}));
|
|
47
|
+
const byAgent = new Map(results);
|
|
48
|
+
const codex = byAgent.get('codex')!;
|
|
49
|
+
const claude = byAgent.get('claude')!;
|
|
50
|
+
return { ok: codex.ok && claude.ok, codex, claude };
|
|
51
|
+
}
|