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
|
@@ -8,34 +8,86 @@
|
|
|
8
8
|
"artifact": "<test-state>/ux-sim/evidence/<scenario>-seed-<seed>-run-<runId>.json"
|
|
9
9
|
},
|
|
10
10
|
"devices": [
|
|
11
|
-
{
|
|
12
|
-
{
|
|
13
|
-
{
|
|
14
|
-
{
|
|
15
|
-
{
|
|
16
|
-
{
|
|
17
|
-
{
|
|
18
|
-
{
|
|
19
|
-
{
|
|
20
|
-
{
|
|
21
|
-
{
|
|
22
|
-
{
|
|
23
|
-
{
|
|
24
|
-
{
|
|
25
|
-
{
|
|
11
|
+
{"id": "fake-llm", "name": "Fake LLM", "implementation": ["src/ux-sim/fake-llm.ts"], "tests": ["src/ux-sim/fake-llm.test.ts"], "target": "LLM response and streaming boundary", "inputs": ["fixed or scripted response", "delay", "error/status"], "observations": ["captured calls", "stream chunks", "completion or failure"]},
|
|
12
|
+
{"id": "fake-executable", "name": "Fake executable and PATH", "implementation": ["src/ux-sim/fake-bin.ts"], "tests": ["src/ux-sim/fake-bin.test.ts"], "target": "external executable process boundary", "inputs": ["stdout", "stderr", "exit code", "signal", "delay", "argv"], "observations": ["spawn arguments", "output", "exit result"]},
|
|
13
|
+
{"id": "fake-github", "name": "Fake GitHub CLI and API", "implementation": ["src/ux-sim/fake-gh.ts"], "tests": ["src/ux-sim/fake-gh.test.ts"], "target": "PR list/edit/review/merge responses", "inputs": ["PR records", "pagination", "injected API failure"], "observations": ["requested operations", "deterministic response", "mutated fake state"]},
|
|
14
|
+
{"id": "fake-kubectl", "name": "Fake kubectl", "implementation": ["src/ux-sim/fake-kubectl.ts"], "tests": ["src/ux-sim/fake-kubectl.test.ts"], "target": "Pod and Job query/termination boundary", "inputs": ["Pod/Job fixtures", "query result or failure"], "observations": ["kubectl argv", "returned resource state", "failure"]},
|
|
15
|
+
{"id": "fake-herdr", "name": "Fake herdr", "implementation": ["src/ux-sim/fake-herdr.ts"], "tests": ["src/ux-sim/fake-herdr.test.ts"], "target": "pane lifecycle and report-agent handoff", "inputs": ["pane transitions", "missing report", "timeout"], "observations": ["pane state", "handoff result", "timeout classification"]},
|
|
16
|
+
{"id": "fake-clock", "name": "Fake clock", "implementation": ["src/ux-sim/fake-clock.ts"], "tests": ["src/ux-sim/fake-clock.test.ts"], "target": "process-local time and timer boundary", "inputs": ["clock advance", "scheduled callback"], "observations": ["elapsed time", "fired timers"]},
|
|
17
|
+
{"id": "temp-git-remote", "name": "Temporary Git remote", "implementation": ["src/ux-sim/temp-git-remote.ts"], "tests": ["src/ux-sim/temp-git-remote.test.ts"], "target": "real local git bare/clone boundary without GitHub", "inputs": ["temporary refs and commits"], "observations": ["local remote state", "branch and commit result"]},
|
|
18
|
+
{"id": "fake-land-queue", "name": "Fake landing queue", "implementation": ["src/ux-sim/fake-land-queue.ts"], "tests": ["src/ux-sim/fake-land-queue.test.ts"], "target": "landing train scheduling", "inputs": ["load", "gate verdict", "priority", "cut window", "conflict"], "observations": ["queue choice", "wait/reject reason", "slot availability"]},
|
|
19
|
+
{"id": "scenario-runner", "name": "Scenario file runner and human CLI", "implementation": ["src/ux-sim/scenario.ts", "src/ux-sim/mock-scenario-catalog.ts", "scripts/ux-sim.ts", "scenarios/ux-sim/provider-4xx-no-provider.yaml"], "tests": ["src/ux-sim/scenario.test.ts", "src/ux-sim/mock-scenario-catalog.test.ts"], "target": "registered test-only provider-response fault through the real Codex path; catalog list/show CLI", "inputs": ["scenario file", "seed", "registered HTTP/network fault", "MS-id"], "observations": ["widget snapshot", "debug event", "persistent logs.db row", "runId evidence artifact", "catalog listing/detail"]},
|
|
20
|
+
{"id": "draft-inventory", "name": "Draft triage inventory simulator", "implementation": ["src/ux-sim/draft-inventory-builder.ts", "src/ux-sim/scenario.ts"], "tests": ["src/ux-sim/draft-inventory-builder.test.ts", "src/ux-sim/scenario.test.ts"], "target": "production draft triage decision distribution and protected/running safety", "inputs": ["deterministic 200-draft inventory", "merged twins", "open duplicates", "harvest references", "file lineage", "labels", "run state", "age"], "observations": ["real decideDraft/draftClaimState decisions", "scenario screen summary", "runId-scoped logs.db events", "evidence artifact"]},
|
|
21
|
+
{"id": "linear-secretary", "name": "Integrated Linear secretary simulation", "implementation": ["src/ux-sim/linear-secretary.ts"], "tests": ["src/ux-sim/linear-secretary.test.ts"], "target": "test-only Telegram ambient intake through production intake/decision/browser coordinators with fake Linear and persisted isolated run evidence", "inputs": ["one-line request", "fake Linear GraphQL responses", "isolated browser capture"], "observations": ["child issues and progress", "browser attachment", "approval card", "runId-scoped event evidence", "external calls remain simulated"]},
|
|
22
|
+
{"id": "release-graph-rig", "name": "Release graph simulation rig", "implementation": ["src/ux-sim/release-sim-rig.ts", "scripts/release-loop/gate-node-sim.ts", "scripts/release-loop/gate-autoheal-sim-evidence.ts", "scenarios/ux-sim/release-sim-rig.yaml"], "tests": ["src/ux-sim/release-sim-rig.test.ts", "scripts/release-loop/gate-flow-sim.test.ts", "scripts/release-loop/gate-node-sim.test.ts"], "target": "release graph routing, resume and failure paths", "inputs": ["node outcome", "evidence", "resume state"], "observations": ["visited nodes", "unexpected edges", "ledger events", "final graph state"]},
|
|
23
|
+
{"id": "graph-engine-selector", "name": "Graph engine selection simulator", "implementation": ["src/ux-sim/graph-engine-sim.ts"], "tests": ["src/ux-sim/graph-engine-sim.test.ts"], "target": "production graph edge selection and growth policy from a synthetic component outcome", "inputs": ["graph", "component exit label", "optional growth"], "observations": ["selected edge", "growth applied", "source graph unchanged"]},
|
|
24
|
+
{"id": "tui-interaction", "name": "TUI interaction and rendering", "implementation": ["src/ux-sim/interaction.ts", "src/ux-sim/turn-states.ts", "src/ux-sim/render-frame.ts", "src/ux-sim/headless-tui.ts", "src/ux-sim/input-history.ts", "src/ux-sim/slash-menu-frames.ts", "src/ux-sim/mock-seat-pty-frame.ts", "src/ux-sim/mock-seat-pty-frame-child.ts", "src/ux-sim/mock-seat-pty-sequence.ts", "src/ux-sim/mock-seat-pty-sequence-child.ts", "src/ux-sim/pty-key-modifiers-device.ts", "src/ux-sim/tty-foreground-steal-child.ts"], "tests": ["src/ux-sim/interaction.test.ts", "src/ux-sim/turn-states.test.ts", "src/ux-sim/render-frame.test.ts", "src/ux-sim/headless-tui.test.ts", "src/ux-sim/input-history.test.ts", "src/ux-sim/slash-menu-frames.test.ts", "src/ux-sim/mock-seat-pty-frame.test.ts", "src/ux-sim/mock-seat-pty-sequence.test.ts", "src/ux-sim/pty-key-modifiers-device.test.ts"], "target": "TUI event, state, frame, input history and PTY boundaries", "inputs": ["keys", "turn phase", "PTY bytes", "frame dimensions", "queued input"], "observations": ["production renderer output", "state transitions", "PTY input/output", "event history"]},
|
|
25
|
+
{"id": "fault-injection", "name": "Fault injection devices", "implementation": ["src/ux-sim/fault-cred-expiry.ts", "src/ux-sim/fault-glm-no-credential.ts", "src/ux-sim/fault-needs-human-reason-repair.ts", "src/ux-sim/fault-nextmove-dispatch.ts", "src/ux-sim/fault-pod-child-result.ts", "src/ux-sim/fault-pod-codex-503.ts", "src/ux-sim/fault-pod-death.ts", "src/ux-sim/fault-pool-cap.ts", "src/ux-sim/fault-scope-escape-lift.ts", "src/ux-sim/fault-sqlite-busy.ts", "src/ux-sim/fault-tui-400-autoheal.ts", "src/ux-sim/gate-shard-host-reroute.ts"], "tests": ["src/ux-sim/fault-cred-expiry.test.ts", "src/ux-sim/fault-glm-no-credential.test.ts", "src/ux-sim/fault-needs-human-reason-repair.test.ts", "src/ux-sim/fault-nextmove-dispatch.test.ts", "src/ux-sim/fault-pod-child-result.test.ts", "src/ux-sim/fault-pod-codex-503.test.ts", "src/ux-sim/fault-pod-death.test.ts", "src/ux-sim/fault-pool-cap.test.ts", "src/ux-sim/fault-scope-escape-lift.test.ts", "src/ux-sim/fault-sqlite-busy.test.ts", "src/ux-sim/fault-tui-400-autoheal.test.ts", "src/ux-sim/gate-shard-host-reroute.test.ts"], "target": "credential, Pod, pool, routing, autoheal, scope and persistence failure boundaries", "inputs": ["explicit fault kind", "isolated fixture", "clock or resource outcome"], "observations": ["production decision function output", "reason/event", "recovery or refusal"]},
|
|
26
|
+
{"id": "product-devices", "name": "Product and task-agent devices", "implementation": ["src/ux-sim/boot-daemon-tools-pty-shell-device.ts", "src/ux-sim/cli-config-audit-device.ts", "src/ux-sim/computer-use.ts", "src/ux-sim/dashboard-event-loop-stall-monitor-device.ts", "src/ux-sim/event-monkey.ts", "src/ux-sim/goal-device.ts", "src/ux-sim/goal-interim-trace.ts", "src/ux-sim/onboarding-first-run-device.ts", "src/ux-sim/resume-picker-device.ts", "src/ux-sim/skills-tools-shell-device.ts", "src/ux-sim/subagent-tools-device.ts", "src/ux-sim/task-agent-parent-host-device.ts", "src/ux-sim/task-agent-rejudge-on-head-device.ts", "src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.ts"], "tests": ["src/ux-sim/boot-daemon-tools-pty-shell-device.test.ts", "src/ux-sim/cli-config-audit-device.test.ts", "src/ux-sim/computer-use.test.ts", "src/ux-sim/dashboard-event-loop-stall-monitor-device.test.ts", "src/ux-sim/event-monkey.test.ts", "src/ux-sim/goal-device.test.ts", "src/ux-sim/onboarding-first-run-device.test.ts", "src/ux-sim/resume-picker-device.test.ts", "src/ux-sim/self-implement-author-clarification.test.ts", "src/ux-sim/skills-tools-shell-device.test.ts", "src/ux-sim/subagent-tools-device.test.ts", "src/ux-sim/task-agent-parent-host-device.test.ts", "src/ux-sim/task-agent-rejudge-on-head-device.test.ts", "src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.test.ts"], "target": "selected product, PTY, agent and orchestration seams", "inputs": ["UI state", "task outcome", "host/review decision", "tool result"], "observations": ["rendered state", "decision result", "event sequence", "stop reason"]},
|
|
27
|
+
{"id": "turn-throw-sim", "name": "Delayed dashboard turn-body throw", "implementation": ["src/ux-sim/turn-throw-sim.ts", "src/dashboard/input/chat-main-plain-turn-runtime.ts", "src/dashboard/turn-busy-teardown.ts"], "tests": ["src/ux-sim/turn-throw-sim.test.ts", "src/dashboard/turn-busy-teardown.test.ts"], "target": "production plain-turn stage failure, turn-threw logging and busy teardown", "inputs": ["turn stage", "delay milliseconds", "queued external input"], "observations": ["tui.turn turn-threw phase=turn:<stage>", "turn.state idle", "one queued input delivered"]},
|
|
28
|
+
{"id": "first-run-and-seminar", "name": "First-run authoring and seminar scenarios", "implementation": ["src/ux-sim/mock-authoring-first-run.ts", "src/ux-sim/mock-authoring-first-run-child.ts", "src/ux-sim/seminar-rehearsal.ts", "src/ux-sim/classic-tui-seat-scenarios.ts", "src/ux-sim/next-tui-seat-scenarios.ts", "src/ux-sim/session-id-seed.ts"], "tests": ["src/ux-sim/mock-authoring-first-run.test.ts", "src/ux-sim/seminar-rehearsal.test.ts", "src/ux-sim/classic-tui-seat-scenarios.test.ts", "src/ux-sim/next-tui-seat-scenarios.test.ts"], "target": "first-run, authoring and scripted TUI flows", "inputs": ["mock author response", "scenario steps", "seeded session id"], "observations": ["step result", "TUI snapshot", "completion and failure markers"]},
|
|
29
|
+
{"id": "support-fakes", "name": "Additional fake and in-process CLI fixtures", "implementation": ["test/ux-sim/aimock-local.ts", "src/ux-sim/in-process-cli.ts", "src/ux-sim/browser-hand.ts", "src/ux-sim/fake-browser-page.ts", "src/ux-sim/fake-linear-device.ts", "src/ux-sim/service-key-setup.ts", "src/ux-sim/term-slash-device.ts"], "tests": ["src/ux-sim/aimock-local.test.ts", "src/ux-sim/in-process-cli.test.ts", "src/ux-sim/browser-hand.test.ts", "src/ux-sim/service-key-setup.test.ts", "src/ux-sim/term-slash-device.test.ts"], "target": "local fake LLM server, browser/linear fakes, service-key setup, terminal slash device and test CLI instance", "inputs": ["test state root", "fake endpoint response", "temporary git repository", "browser/page and service state"], "observations": ["isolated CLI result", "server requests", "repository state", "fake device interactions"]}
|
|
26
30
|
],
|
|
27
31
|
"scenarios": [
|
|
28
|
-
{
|
|
29
|
-
{
|
|
30
|
-
{
|
|
31
|
-
{
|
|
32
|
-
{
|
|
33
|
-
{
|
|
34
|
-
{
|
|
32
|
+
{"id": "UX-MS-01", "name": "Child report deficit with later harvest", "kind": "report-deficit", "device": "fault-injection", "implementation": ["src/ux-sim/fault-pod-child-result.ts"], "tests": ["src/ux-sim/fault-pod-child-result.test.ts"], "trigger": "A child completes with report-deficit while a later child has a harvestable PR.", "observe": ["failure classification remains report-deficit", "Pod terminal data stays attached", "later harvest remains independent"], "expected": "report-deficit is preserved and harvest result is visible"},
|
|
33
|
+
{"id": "UX-MS-02", "name": "Release gate regression routing", "kind": "gate-regression", "device": "release-graph-rig", "implementation": ["src/ux-sim/release-sim-rig.ts", "scripts/release-loop/gate-node-sim.ts", "scripts/release-loop/gate-autoheal-sim-evidence.ts", "scenarios/ux-sim/release-sim-rig.yaml"], "tests": ["src/ux-sim/release-sim-rig.test.ts", "scripts/release-loop/gate-node-sim.test.ts", "scripts/release-loop/gate-flow-sim.test.ts"], "trigger": "Inject a regression verdict into the release gate node.", "observe": ["visited graph nodes", "unexpected edge list", "terminal status"], "expected": "failure follows the configured repair/review route, not publish"},
|
|
34
|
+
{"id": "UX-MS-03", "name": "Review cap and no-verdict boundary", "kind": "review-cap-no-verdict", "device": "product-devices", "implementation": ["src/ux-sim/task-agent-rejudge-on-head-device.ts"], "tests": ["src/ux-sim/task-agent-rejudge-on-head-device.test.ts"], "trigger": "Stored review count reaches the cap or a review result is absent.", "observe": ["review request count", "verdict classification", "decision reason"], "expected": "the cap blocks another request and missing verdict stays unmeasured"},
|
|
35
|
+
{"id": "UX-MS-04", "name": "Pod credential failure", "kind": "pod-auth-failure", "device": "fault-injection", "implementation": ["src/ux-sim/fault-glm-no-credential.ts", "src/ux-sim/fault-pod-codex-503.ts"], "tests": ["src/ux-sim/fault-glm-no-credential.test.ts", "src/ux-sim/fault-pod-codex-503.test.ts"], "trigger": "Remove the child credential or inject a Codex 401/503 response.", "observe": ["credential readiness", "provider error event", "launch/recovery disposition"], "expected": "credential absence and temporary provider unavailability remain distinguishable"},
|
|
36
|
+
{"id": "UX-MS-05", "name": "TUI and gate worker stall", "kind": "stall", "device": "product-devices", "implementation": ["src/ux-sim/dashboard-event-loop-stall-monitor-device.ts"], "tests": ["src/ux-sim/dashboard-event-loop-stall-monitor-device.test.ts", "scripts/release-loop/gate-pod-stall.test.ts"], "trigger": "Delay the UI event loop or stop gate shard output.", "observe": ["typing lag/stall sample", "stalled shard reason", "bounded completion"], "expected": "stall is named and unrelated work can finish"},
|
|
37
|
+
{"id": "UX-MS-06", "name": "Landing train rejection", "kind": "train-rejection", "device": "fake-land-queue", "implementation": ["src/ux-sim/fake-land-queue.ts"], "tests": ["src/ux-sim/fake-land-queue.test.ts"], "trigger": "Inject a full queue, failed gate, conflicting head or closed cut window.", "observe": ["queue decision", "rejection reason", "slot state"], "expected": "the queue refuses with a reason and does not grant a slot"},
|
|
38
|
+
{"id": "UX-MS-07", "name": "Pod pool capacity and query errors", "kind": "pod-pool-error", "device": "fault-injection", "implementation": ["src/ux-sim/fault-pool-cap.ts", "src/ux-sim/fake-kubectl.ts"], "tests": ["src/ux-sim/fault-pool-cap.test.ts", "src/ux-sim/fake-kubectl.test.ts"], "trigger": "Omit a pool limit, saturate members, or inject a kubectl query failure.", "observe": ["recommended concurrency", "limitedBy", "query error"], "expected": "known running counts are capped; a query failure preserves unknown occupancy and emits no concurrency recommendation"},
|
|
39
|
+
{"id": "UX-MS-08", "name": "Delayed dashboard turn throw and queue teardown", "kind": "turn-throw-teardown", "device": "turn-throw-sim", "implementation": ["src/ux-sim/turn-throw-sim.ts", "src/dashboard/input/chat-main-plain-turn-runtime.ts", "src/dashboard/turn-busy-teardown.ts"], "tests": ["src/ux-sim/turn-throw-sim.test.ts", "src/dashboard/turn-busy-teardown.test.ts"], "trigger": "Configure a turn:<stage> throw with an optional delay while one external input is queued.", "observe": ["tui.turn turn-threw phase=turn:<stage>", "turn.state idle", "one queued input delivered"], "expected": "the production plain-turn catch logs the configured stage, teardown restores idle, and the queued input is delivered once"},
|
|
40
|
+
{"id": "UX-MS-09", "name": "Draft triage 200-case safety inventory", "kind": "draft-inventory-triage", "device": "draft-inventory", "implementation": ["src/ux-sim/draft-inventory-builder.ts", "src/ux-sim/scenario.ts"], "tests": ["src/ux-sim/draft-inventory-builder.test.ts", "src/ux-sim/scenario.test.ts"], "trigger": "Evaluate deterministic twin, duplicate, harvest, landed-file, protected-label, running, and stale draft cases.", "observe": ["200 production decideDraft results", "draftClaimState for running samples", "protected/running close count", "runId-linked assessment and completion events"], "expected": "scenario completes PASS with the intended case distribution, no mismatches, and no protected/running draft closed"},
|
|
41
|
+
{"id": "UX-MS-11", "name": "Codex request-shape 400 recovery boundary", "kind": "provider-request-rejected", "device": "scenario-runner", "implementation": ["scenarios/ux-sim/provider-4xx-no-provider.yaml", "src/ux-sim/scenario.ts"], "tests": ["src/ux-sim/scenario.test.ts"], "trigger": "Run the test-universe ScenarioV0 fixture with two injected HTTP 400 responses for the Codex request-shape boundary.", "observe": ["llm.codex/request-rejected-shape debug event", "response status and count", "ScenarioV0 completion event and runId evidence artifact"], "expected": "The isolated scenario records one request-rejected-shape event and one runId-scoped completion row."}
|
|
35
42
|
],
|
|
43
|
+
"candidateAudit": {
|
|
44
|
+
"source": "~/elanous-hq/seat-state/OP/MOCK-DEVICES-INVENTORY-1031.md §3",
|
|
45
|
+
"baseCommit": "0d483f46e1ab9ea081cff933f8bb840790c44dde",
|
|
46
|
+
"sourceRows": 34,
|
|
47
|
+
"existingPaths": 33,
|
|
48
|
+
"excludedPaths": 27,
|
|
49
|
+
"sourceExclusions": [
|
|
50
|
+
{"path": "scenarios/ux-sim/MK-MS-01.yaml", "reason": "Separately registered by open PR #34039 (MK-MS-01 E4 sequence); keep it outside this 33-candidate registration to avoid duplicate catalog ownership."}
|
|
51
|
+
],
|
|
52
|
+
"candidates": [
|
|
53
|
+
{"path": "scripts/tui-sim-bench.ts", "disposition": "excluded", "entryCommand": "not-applicable: benchmark requires an explicitly selected goal and provider", "logsRecorded": "no", "logsDetail": "Benchmark is not run by catalog discovery.", "excludeReason": "Measurement/benchmark tool, not a mock device."},
|
|
54
|
+
{"path": "scripts/tui-sim.ts", "disposition": "excluded", "entryCommand": "bun scripts/tui-sim.ts start --id mock-catalog-example --test", "logsRecorded": "conditional", "logsDetail": "Writes its own simulation artifacts, not ScenarioV0 logs.", "excludeReason": "Standalone TUI driver; separate artifact contract."},
|
|
55
|
+
{"path": "scripts/ux-sim.ts", "disposition": "already-indexed", "entryCommand": "bun scripts/ux-sim.ts list", "logsRecorded": "conditional", "logsDetail": "ScenarioV0 runs log completion; list/show are read-only.", "deviceId": "scenario-runner"},
|
|
56
|
+
{"path": "scripts/voice-dogfood-sim.ts", "disposition": "excluded", "entryCommand": "bun run scripts/voice-dogfood-sim.ts", "logsRecorded": "no", "logsDetail": "No ScenarioV0 logs.db contract.", "excludeReason": "Product dogfood script, not a reusable fake-device contract."},
|
|
57
|
+
{"path": "scripts/voice-pwa-sim.ts", "disposition": "excluded", "entryCommand": "bun run scripts/voice-pwa-sim.ts", "logsRecorded": "no", "logsDetail": "No ScenarioV0 logs.db contract.", "excludeReason": "PWA voice dogfood script, not an isolated reusable device."},
|
|
58
|
+
{"path": "scripts/release-loop/gate-autoheal-sim-evidence.ts", "disposition": "device", "entryCommand": "bun scripts/release-loop/gate-autoheal-sim-evidence.ts", "logsRecorded": "yes", "logsDetail": "Writes release-loop events to isolated logs.db with runId.", "deviceId": "release-graph-rig", "scenarioIds": ["UX-MS-02"]},
|
|
59
|
+
{"path": "scripts/release-loop/gate-node-sim.ts", "disposition": "device", "entryCommand": "bun test scripts/release-loop/gate-node-sim.test.ts", "logsRecorded": "no", "logsDetail": "Pure decision result asserted by test; no persistent event.", "deviceId": "release-graph-rig", "scenarioIds": ["UX-MS-02"]},
|
|
60
|
+
{"path": "scripts/release-loop/tui-sim-node.ts", "disposition": "excluded", "entryCommand": "called by release-loop tui-sim graph node; no standalone CLI", "logsRecorded": "no", "logsDetail": "Node result/artifact only.", "excludeReason": "Graph-node adapter for TUI measurements, not an independent mock device."},
|
|
61
|
+
{"path": "scripts/lib/pwa-scenarios/acp-replay.ts", "disposition": "excluded", "entryCommand": "bun test scripts/lib/pwa-scenarios/acp-replay.test.ts", "logsRecorded": "no", "logsDetail": "Browser/E2E cell result, not ScenarioV0 logs.", "excludeReason": "Live-browser PWA runner support; not a mock device."},
|
|
62
|
+
{"path": "scripts/lib/pwa-scenarios/cdp-driver.ts", "disposition": "excluded", "entryCommand": "bun scripts/pwa-scenarios.ts --base-url http://127.0.0.1:31455 --shots ./shots", "logsRecorded": "no", "logsDetail": "Writes optional screenshots and cell output through the PWA runner; no logs.db row.", "excludeReason": "Live-browser PWA runner support; not a mock device."},
|
|
63
|
+
{"path": "scripts/lib/pwa-scenarios/runner.ts", "disposition": "excluded", "entryCommand": "bun test scripts/lib/pwa-scenarios/runner.test.ts", "logsRecorded": "no", "logsDetail": "Browser/E2E cell result, not ScenarioV0 logs.", "excludeReason": "Live-browser PWA runner support; not a mock device."},
|
|
64
|
+
{"path": "scripts/lib/pwa-scenarios/scenarios.ts", "disposition": "excluded", "entryCommand": "bun test scripts/lib/pwa-scenarios/scenarios.test.ts", "logsRecorded": "no", "logsDetail": "Browser/E2E cell result, not ScenarioV0 logs.", "excludeReason": "Live-browser PWA runner support; not a mock device."},
|
|
65
|
+
{"path": "test/fixtures/acp-initialize-stub.ts", "disposition": "excluded", "entryCommand": "bun test test/acp-client-observability.test.ts", "logsRecorded": "no", "logsDetail": "The consuming ACP test asserts protocol behavior; fixture emits no app logs.db row.", "excludeReason": "Protocol fixture only; no independent scenario entry."},
|
|
66
|
+
{"path": "test/fixtures/mock-lsp-server.ts", "disposition": "excluded", "entryCommand": "bun test test/lsp-client.test.ts test/lsp-operations-dispatch.test.ts", "logsRecorded": "no", "logsDetail": "The consuming LSP tests assert protocol behavior; fixture emits no app logs.db row.", "excludeReason": "Protocol fixture only; no independent scenario entry."},
|
|
67
|
+
{"path": "test/helpers/intake-fake-repo.ts", "disposition": "excluded", "entryCommand": "bun test test/intake-plane-check-common-name.test.ts", "logsRecorded": "no", "logsDetail": "The consumer test asserts temporary-repository behavior.", "excludeReason": "Test helper, not a simulation device."},
|
|
68
|
+
{"path": "test/ux-sim/aimock-local.ts", "disposition": "already-indexed", "entryCommand": "bun test src/ux-sim/aimock-local.test.ts", "logsRecorded": "no", "logsDetail": "Test server interactions are asserted by tests, not app logs.db.", "deviceId": "support-fakes"},
|
|
69
|
+
{"path": "scenarios/dashboard-default.yaml", "disposition": "excluded", "entryCommand": "not-applicable: consumed by the Playground renderer; no direct scenario CLI", "logsRecorded": "runner-dependent", "logsDetail": "No standalone command or UX ScenarioV0 completion contract.", "excludeReason": "Graph/playground scenario, outside UX mock-device scope."},
|
|
70
|
+
{"path": "scenarios/heap-graph.yaml", "disposition": "excluded", "entryCommand": "not-applicable: consumed by the Playground renderer; no direct scenario CLI", "logsRecorded": "runner-dependent", "logsDetail": "No standalone command or UX ScenarioV0 completion contract.", "excludeReason": "Graph/playground scenario, outside UX mock-device scope."},
|
|
71
|
+
{"path": "scenarios/iul-timeline-viewer.yaml", "disposition": "excluded", "entryCommand": "not-applicable: consumed by the IUL timeline viewer; no direct scenario CLI", "logsRecorded": "runner-dependent", "logsDetail": "No standalone command or UX ScenarioV0 completion contract.", "excludeReason": "Graph/playground scenario, outside UX mock-device scope."},
|
|
72
|
+
{"path": "scenarios/ux-sim/provider-4xx-no-provider.yaml", "disposition": "scenario", "entryCommand": "bun bin/elanous.mjs --test sim run scenarios/ux-sim/provider-4xx-no-provider.yaml", "logsRecorded": "yes", "logsDetail": "ux.sim.scenario/completed in test logs.db; expects llm.codex/request-rejected-shape.", "deviceId": "scenario-runner", "scenarioIds": ["UX-MS-11"]},
|
|
73
|
+
{"path": "scenarios/ux-sim/release-sim-rig.yaml", "disposition": "already-indexed", "entryCommand": "bun bin/elanous.mjs --test sim run scenarios/ux-sim/release-sim-rig.yaml", "logsRecorded": "yes", "logsDetail": "ScenarioV0 completion row is stored in isolated test logs.db; the evidence artifact is a separate JSON file.", "deviceId": "release-graph-rig", "scenarioIds": ["UX-MS-02"]},
|
|
74
|
+
{"path": "tests/scenarios/4provider-feature-impl.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/4provider-feature-impl.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
75
|
+
{"path": "tests/scenarios/capability-level-11.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/capability-level-11.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
76
|
+
{"path": "tests/scenarios/codex-baseline.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/codex-baseline.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
77
|
+
{"path": "tests/scenarios/codex-opus-2way.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/codex-opus-2way.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
78
|
+
{"path": "tests/scenarios/codex-variance-w5f.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/codex-variance-w5f.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
79
|
+
{"path": "tests/scenarios/multi-turn-cache-rate.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/multi-turn-cache-rate.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
80
|
+
{"path": "tests/scenarios/repl-rotation-chain.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/repl-rotation-chain.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
81
|
+
{"path": "tests/scenarios/repl-self-debug-arc.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/repl-self-debug-arc.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
82
|
+
{"path": "tests/scenarios/repl-tool-doom-recovery.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/repl-tool-doom-recovery.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
83
|
+
{"path": "src/playground-scenario/default-scenarios.ts", "disposition": "excluded", "entryCommand": "bun test src/playground-scenario/", "logsRecorded": "no", "logsDetail": "Scenario constants consumed by Playground tests.", "excludeReason": "Product demo inputs, not mock-device implementation."},
|
|
84
|
+
{"path": "src/playground-scenario/fake-harness.ts", "disposition": "excluded", "entryCommand": "bun test src/playground-scenario/", "logsRecorded": "no", "logsDetail": "In-memory test harness consumed by Playground tests.", "excludeReason": "Test helper, no independent reusable mock interface."},
|
|
85
|
+
{"path": "src/showroom/outbound/channels/stubs.ts", "disposition": "excluded", "entryCommand": "bun test src/showroom/outbound/channels/", "logsRecorded": "no", "logsDetail": "Stub results asserted by channel tests.", "excludeReason": "Outbound channel stub, not a UX simulation device."}
|
|
86
|
+
]
|
|
87
|
+
},
|
|
36
88
|
"discovery": {
|
|
37
89
|
"trackedRoot": "src/ux-sim/*.ts runtime modules",
|
|
38
|
-
"candidateRoots": ["scripts/*sim*.ts", "scripts/release-loop/*sim*.ts", "scripts/lib/pwa-scenarios/*.ts", "test/**/*fake*", "test/**/*stub*", "test/scenarios/**/*"],
|
|
90
|
+
"candidateRoots": ["scripts/*sim*.ts", "scripts/release-loop/*sim*.ts", "scripts/lib/pwa-scenarios/*.ts", "test/**/*fake*", "test/**/*stub*", "test/scenarios/**/*", "scenarios/**/*.yaml", "src/playground-scenario/*.ts", "src/showroom/outbound/channels/stubs.ts"],
|
|
39
91
|
"limits": "The index records reviewed reusable simulation devices and named acceptance scenarios. Candidate paths outside the tracked root are surfaced for review; this is not proof that every repository fake/stub has scenario value."
|
|
40
92
|
}
|
|
41
93
|
}
|
|
@@ -23,6 +23,17 @@ export interface MockScenarioEntry {
|
|
|
23
23
|
expected: string;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
export interface MockScenarioCandidate {
|
|
27
|
+
path: string;
|
|
28
|
+
disposition: 'device' | 'scenario' | 'already-indexed' | 'excluded';
|
|
29
|
+
entryCommand: string;
|
|
30
|
+
logsRecorded: 'yes' | 'no' | 'conditional' | 'runner-dependent';
|
|
31
|
+
logsDetail: string;
|
|
32
|
+
deviceId?: string;
|
|
33
|
+
scenarioIds?: string[];
|
|
34
|
+
excludeReason?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
26
37
|
export interface MockScenarioCatalog {
|
|
27
38
|
version: 1;
|
|
28
39
|
runEvidence: {
|
|
@@ -34,6 +45,15 @@ export interface MockScenarioCatalog {
|
|
|
34
45
|
};
|
|
35
46
|
devices: MockScenarioDevice[];
|
|
36
47
|
scenarios: MockScenarioEntry[];
|
|
48
|
+
candidateAudit: {
|
|
49
|
+
source: string;
|
|
50
|
+
baseCommit: string;
|
|
51
|
+
sourceRows: number;
|
|
52
|
+
existingPaths: number;
|
|
53
|
+
excludedPaths: number;
|
|
54
|
+
sourceExclusions: Array<{ path: string; reason: string }>;
|
|
55
|
+
candidates: MockScenarioCandidate[];
|
|
56
|
+
};
|
|
37
57
|
discovery: { trackedRoot: string; candidateRoots: string[]; limits: string };
|
|
38
58
|
}
|
|
39
59
|
|
|
@@ -99,15 +119,112 @@ export function parseMockScenarioCatalog(value: unknown): MockScenarioCatalog {
|
|
|
99
119
|
expected: requireString(row.expected, `scenarios[${index}].expected`),
|
|
100
120
|
};
|
|
101
121
|
});
|
|
102
|
-
if (!isRecord(value.
|
|
103
|
-
|
|
122
|
+
if (!isRecord(value.candidateAudit) || !Array.isArray(value.candidateAudit.candidates) || !Array.isArray(value.candidateAudit.sourceExclusions)) {
|
|
123
|
+
throw new Error('candidateAudit and candidateAudit.candidates are required');
|
|
124
|
+
}
|
|
125
|
+
const knownScenarioIds = new Set(scenarios.map((scenario) => scenario.id));
|
|
126
|
+
const scenarioById = new Map(scenarios.map((scenario) => [scenario.id, scenario]));
|
|
127
|
+
const deviceById = new Map(devices.map((device) => [device.id, device]));
|
|
128
|
+
const candidatePaths = new Set<string>();
|
|
129
|
+
const sourceExclusions = value.candidateAudit.sourceExclusions.map((row, index) => {
|
|
130
|
+
if (!isRecord(row)) throw new Error(`candidateAudit.sourceExclusions[${index}] must be an object`);
|
|
131
|
+
const path = requireString(row.path, `candidateAudit.sourceExclusions[${index}].path`);
|
|
132
|
+
if (candidatePaths.has(path)) throw new Error(`candidateAudit.sourceExclusions contains duplicate path: ${path}`);
|
|
133
|
+
candidatePaths.add(path);
|
|
134
|
+
return { path, reason: requireString(row.reason, `candidateAudit.sourceExclusions[${index}].reason`) };
|
|
135
|
+
});
|
|
136
|
+
const candidates = value.candidateAudit.candidates.map((row, index): MockScenarioCandidate => {
|
|
137
|
+
if (!isRecord(row)) throw new Error(`candidateAudit.candidates[${index}] must be an object`);
|
|
138
|
+
const path = requireString(row.path, `candidateAudit.candidates[${index}].path`);
|
|
139
|
+
if (candidatePaths.has(path)) throw new Error(`candidateAudit.candidates contains duplicate path: ${path}`);
|
|
140
|
+
candidatePaths.add(path);
|
|
141
|
+
const disposition = requireString(row.disposition, `candidateAudit.candidates[${index}].disposition`);
|
|
142
|
+
if (!['device', 'scenario', 'already-indexed', 'excluded'].includes(disposition)) {
|
|
143
|
+
throw new Error(`candidateAudit.candidates[${index}].disposition is unknown: ${disposition}`);
|
|
144
|
+
}
|
|
145
|
+
const logsRecorded = requireString(row.logsRecorded, `candidateAudit.candidates[${index}].logsRecorded`);
|
|
146
|
+
if (!['yes', 'no', 'conditional', 'runner-dependent'].includes(logsRecorded)) {
|
|
147
|
+
throw new Error(`candidateAudit.candidates[${index}].logsRecorded is unknown: ${logsRecorded}`);
|
|
148
|
+
}
|
|
149
|
+
const deviceId = row.deviceId === undefined ? undefined : requireString(row.deviceId, `candidateAudit.candidates[${index}].deviceId`);
|
|
150
|
+
if (deviceId && !deviceIds.has(deviceId)) throw new Error(`candidateAudit.candidates[${index}] references unknown device: ${deviceId}`);
|
|
151
|
+
const scenarioIds = row.scenarioIds === undefined ? undefined : requireStringArray(row.scenarioIds, `candidateAudit.candidates[${index}].scenarioIds`);
|
|
152
|
+
for (const scenarioId of scenarioIds ?? []) {
|
|
153
|
+
if (!knownScenarioIds.has(scenarioId)) throw new Error(`candidateAudit.candidates[${index}] references unknown scenario: ${scenarioId}`);
|
|
154
|
+
}
|
|
155
|
+
const excludeReason = row.excludeReason === undefined ? undefined : requireString(row.excludeReason, `candidateAudit.candidates[${index}].excludeReason`);
|
|
156
|
+
if (disposition === 'excluded' && !excludeReason) throw new Error(`candidateAudit.candidates[${index}] excluded entries require excludeReason`);
|
|
157
|
+
if (disposition === 'excluded' && (deviceId || scenarioIds?.length)) {
|
|
158
|
+
throw new Error(`candidateAudit.candidates[${index}] excluded entries cannot have catalog links`);
|
|
159
|
+
}
|
|
160
|
+
if (disposition === 'device' && (!deviceId || !scenarioIds?.length)) {
|
|
161
|
+
throw new Error(`candidateAudit.candidates[${index}] device entries require deviceId and scenarioIds`);
|
|
162
|
+
}
|
|
163
|
+
if (disposition === 'scenario' && (!deviceId || !scenarioIds?.length)) {
|
|
164
|
+
throw new Error(`candidateAudit.candidates[${index}] scenario entries require deviceId and scenarioIds`);
|
|
165
|
+
}
|
|
166
|
+
if (disposition === 'already-indexed' && !deviceId && !scenarioIds?.length) {
|
|
167
|
+
throw new Error(`candidateAudit.candidates[${index}] already-indexed entries require a catalog link`);
|
|
168
|
+
}
|
|
169
|
+
if (scenarioIds?.length && !deviceId) {
|
|
170
|
+
throw new Error(`candidateAudit.candidates[${index}] scenarioIds require a deviceId`);
|
|
171
|
+
}
|
|
172
|
+
if (deviceId) {
|
|
173
|
+
const device = deviceById.get(deviceId)!;
|
|
174
|
+
if (![...device.implementation, ...device.tests].includes(path)) {
|
|
175
|
+
throw new Error(`candidateAudit.candidates[${index}] path is not registered by device ${deviceId}: ${path}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
for (const scenarioId of scenarioIds ?? []) {
|
|
179
|
+
const scenario = scenarioById.get(scenarioId)!;
|
|
180
|
+
if (scenario.device !== deviceId) {
|
|
181
|
+
throw new Error(`candidateAudit.candidates[${index}] deviceId does not own scenario ${scenarioId}`);
|
|
182
|
+
}
|
|
183
|
+
if (![...scenario.implementation, ...scenario.tests].includes(path)) {
|
|
184
|
+
throw new Error(`candidateAudit.candidates[${index}] path is not registered by scenario ${scenarioId}: ${path}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
path,
|
|
189
|
+
disposition: disposition as MockScenarioCandidate['disposition'],
|
|
190
|
+
entryCommand: requireString(row.entryCommand, `candidateAudit.candidates[${index}].entryCommand`),
|
|
191
|
+
logsRecorded: logsRecorded as MockScenarioCandidate['logsRecorded'],
|
|
192
|
+
logsDetail: requireString(row.logsDetail, `candidateAudit.candidates[${index}].logsDetail`),
|
|
193
|
+
...(deviceId ? { deviceId } : {}),
|
|
194
|
+
...(scenarioIds ? { scenarioIds } : {}),
|
|
195
|
+
...(excludeReason ? { excludeReason } : {}),
|
|
196
|
+
};
|
|
197
|
+
});
|
|
198
|
+
const candidateAudit = value.candidateAudit;
|
|
199
|
+
const sourceRows = candidateAudit.sourceRows;
|
|
200
|
+
const baseCommit = candidateAudit.baseCommit;
|
|
201
|
+
const existingPaths = candidateAudit.existingPaths;
|
|
202
|
+
const excludedPaths = candidateAudit.excludedPaths;
|
|
203
|
+
if (![sourceRows, existingPaths, excludedPaths].every((n) => Number.isInteger(n) && Number(n) >= 0)) {
|
|
204
|
+
throw new Error('candidateAudit counts must be non-negative integers');
|
|
205
|
+
}
|
|
206
|
+
if (sourceRows !== candidates.length + sourceExclusions.length || excludedPaths !== candidates.filter((candidate) => candidate.disposition === 'excluded').length) {
|
|
207
|
+
throw new Error('candidateAudit counts do not match the candidate rows');
|
|
208
|
+
}
|
|
209
|
+
if (Number(existingPaths) !== candidates.length) throw new Error('candidateAudit.existingPaths must equal the current candidate count');
|
|
104
210
|
const runEvidence = value.runEvidence;
|
|
211
|
+
if (!isRecord(runEvidence) || !isRecord(runEvidence.event)) throw new Error('runEvidence and runEvidence.event are required');
|
|
212
|
+
if (!isRecord(value.discovery)) throw new Error('discovery is required');
|
|
105
213
|
const event = runEvidence.event;
|
|
106
214
|
const discovery = value.discovery;
|
|
107
215
|
return {
|
|
108
216
|
version: 1,
|
|
109
217
|
devices,
|
|
110
218
|
scenarios,
|
|
219
|
+
candidateAudit: {
|
|
220
|
+
source: requireString(candidateAudit.source, 'candidateAudit.source'),
|
|
221
|
+
baseCommit: requireString(baseCommit, 'candidateAudit.baseCommit'),
|
|
222
|
+
sourceRows: Number(sourceRows),
|
|
223
|
+
existingPaths: Number(existingPaths),
|
|
224
|
+
excludedPaths: Number(excludedPaths),
|
|
225
|
+
sourceExclusions,
|
|
226
|
+
candidates,
|
|
227
|
+
},
|
|
111
228
|
runEvidence: {
|
|
112
229
|
scope: requireString(runEvidence.scope, 'runEvidence.scope'),
|
|
113
230
|
runId: requireString(runEvidence.runId, 'runEvidence.runId'),
|
|
@@ -133,6 +250,7 @@ export function renderMockScenarioList(catalog: MockScenarioCatalog): string[] {
|
|
|
133
250
|
'Mock scenario catalog · reusable devices and scenario references',
|
|
134
251
|
...catalog.scenarios.map((scenario) => `${scenario.id}\t${scenario.kind}\t${scenario.name}`),
|
|
135
252
|
`장치 ${catalog.devices.length} · 시나리오 ${catalog.scenarios.length} · 자세히: bun scripts/ux-sim.ts show <MS-id>`,
|
|
253
|
+
`후보 감사 ${catalog.candidateAudit.existingPaths}/${catalog.candidateAudit.sourceRows} 경로 확인 · 제외 ${catalog.candidateAudit.excludedPaths} · entry/logs 근거는 mock-scenario-catalog.json`,
|
|
136
254
|
];
|
|
137
255
|
}
|
|
138
256
|
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
// ux-sim device: the PRODUCTION
|
|
1
|
+
// ux-sim device: the PRODUCTION fresh-install setup menu, driven under a real util-linux PTY.
|
|
2
2
|
//
|
|
3
|
-
// Why this exists: the menu
|
|
4
|
-
// (`promptProviderMenu` → `parseMenuAnswer`) is only reachable when
|
|
3
|
+
// Why this exists: the fresh-install setup menu is only reachable when
|
|
5
4
|
// `process.stdin.isTTY` is true. A plain pipe makes the CLI take the non-TTY
|
|
6
5
|
// `needs-llm` shortcut instead, so the board (how many times the menu comes
|
|
7
6
|
// back, which phrase ends the run, whether `onboarding.ready` is written) is
|
|
8
7
|
// unmeasurable without a TTY. This device allocates one the same way the live
|
|
9
8
|
// seat does — util-linux `script -q -e -c` — so the production entrypoint
|
|
10
9
|
// `bin/elanous.mjs --test` runs its real `src/index.ts` → `runFirstRun` →
|
|
11
|
-
// `
|
|
10
|
+
// `runFirstRunProviderSetup` path.
|
|
12
11
|
//
|
|
13
12
|
// Isolation (K-MK-03): HOME/XDG/claude dirs are a fresh temp tree and the CLI
|
|
14
13
|
// is spawned with `--test --config-dir <temp>`, so the run cannot touch a real
|
|
@@ -19,26 +18,30 @@ import { spawn } from 'node:child_process';
|
|
|
19
18
|
import { mkdirSync, mkdtempSync, readFileSync, rmSync } from 'node:fs';
|
|
20
19
|
import { tmpdir } from 'node:os';
|
|
21
20
|
import { join, resolve } from 'node:path';
|
|
22
|
-
import { formatProviderMenu, orderProviderChoices } from '../onboarding/first-run.js';
|
|
21
|
+
import { FIRST_RUN_PROVIDER_MENU_PROMPT, formatProviderMenu, orderProviderChoices } from '../onboarding/first-run.js';
|
|
22
|
+
import {
|
|
23
|
+
FIRST_RUN_PROVIDER_SETUP_MENU_CHOICES,
|
|
24
|
+
FIRST_RUN_PROVIDER_SETUP_MENU_HEADING,
|
|
25
|
+
FIRST_RUN_PROVIDER_SETUP_MENU_MAX_MISSES,
|
|
26
|
+
} from '../cli/setup-keys.js';
|
|
23
27
|
import { spawnElanousSync } from '../instance/spawn-elanous.js';
|
|
24
28
|
import { createFakeBins, utilLinuxScript, type FakeBinCall } from './fake-bin.js';
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
*/
|
|
29
|
-
export
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
* turns into a failure instead of a stale expectation.
|
|
36
|
-
*/
|
|
29
|
+
/** English provider chooser and Korean fresh-install chooser headings. */
|
|
30
|
+
export const FIRST_RUN_MENU_MARKERS = [FIRST_RUN_PROVIDER_MENU_PROMPT, FIRST_RUN_PROVIDER_SETUP_MENU_HEADING] as const;
|
|
31
|
+
|
|
32
|
+
/** Count menu renders independently of the selected user-facing locale. */
|
|
33
|
+
export function countFirstRunMenuRenders(output: string): number {
|
|
34
|
+
const markerCounts = FIRST_RUN_MENU_MARKERS.map((marker) => output.split(marker).length - 1);
|
|
35
|
+
// A process keeps one locale; max also avoids counting one bilingual render twice.
|
|
36
|
+
return Math.max(...markerCounts);
|
|
37
|
+
}
|
|
38
|
+
/** Fixed provider-chooser choice line, taken from the production renderer. */
|
|
37
39
|
export const FIRST_RUN_MENU_CHOICES = formatProviderMenu(orderProviderChoices());
|
|
40
|
+
export const FIRST_RUN_MENU_CHOICE_MARKERS = [FIRST_RUN_MENU_CHOICES, FIRST_RUN_PROVIDER_SETUP_MENU_CHOICES] as const;
|
|
38
41
|
/** Line `runFirstRun` prints before a fresh install has to pick a provider. */
|
|
39
42
|
export const FIRST_RUN_SETUP_HINT = 'eln setup llm 으로 고르세요';
|
|
40
|
-
/** Misses the parser must reject
|
|
41
|
-
export const FIRST_RUN_MENU_ANSWERS = ['4', '1e0', '1'
|
|
43
|
+
/** Misses the parser must reject: out of range, exponent, and full-width digits. */
|
|
44
|
+
export const FIRST_RUN_MENU_ANSWERS = ['4', '1e0', '1'] as const;
|
|
42
45
|
|
|
43
46
|
const repoRoot = resolve(import.meta.dir, '../..');
|
|
44
47
|
const cliEntry = join(repoRoot, 'bin', 'elanous.mjs');
|
|
@@ -196,6 +199,7 @@ export async function driveFirstRunMenu(
|
|
|
196
199
|
let stdout = '';
|
|
197
200
|
let stderr = '';
|
|
198
201
|
let seen = 0;
|
|
202
|
+
let keyPasteAnswered = false;
|
|
199
203
|
const answersSent: string[] = [];
|
|
200
204
|
let closed = false;
|
|
201
205
|
let timedOut = false;
|
|
@@ -209,13 +213,19 @@ export async function driveFirstRunMenu(
|
|
|
209
213
|
|
|
210
214
|
child.stdout.on('data', (chunk: Buffer) => {
|
|
211
215
|
stdout += chunk.toString('utf8');
|
|
212
|
-
const count = stdout
|
|
216
|
+
const count = countFirstRunMenuRenders(stdout);
|
|
213
217
|
while (seen < count) {
|
|
214
218
|
seen += 1;
|
|
215
219
|
setTimeout(() => {
|
|
216
220
|
if (!closed) writeNext();
|
|
217
221
|
}, answerDelayMs);
|
|
218
222
|
}
|
|
223
|
+
if (!keyPasteAnswered && stdout.includes('.env 형식 키를 붙여 넣고 빈 줄로 끝내세요')) {
|
|
224
|
+
keyPasteAnswered = true;
|
|
225
|
+
setTimeout(() => {
|
|
226
|
+
if (!closed) child.stdin.write('\n');
|
|
227
|
+
}, answerDelayMs);
|
|
228
|
+
}
|
|
219
229
|
});
|
|
220
230
|
child.stderr.on('data', (chunk: Buffer) => {
|
|
221
231
|
stderr += chunk.toString('utf8');
|
|
@@ -253,7 +263,7 @@ export async function driveFirstRunMenu(
|
|
|
253
263
|
stderr,
|
|
254
264
|
status,
|
|
255
265
|
timedOut,
|
|
256
|
-
menuRenderCount: Math.min(seen, stdout
|
|
266
|
+
menuRenderCount: Math.min(seen, countFirstRunMenuRenders(stdout)),
|
|
257
267
|
answersSent,
|
|
258
268
|
finalPhrase: stdout.includes(FIRST_RUN_SETUP_HINT) ? FIRST_RUN_SETUP_HINT : null,
|
|
259
269
|
readyRecorded,
|