elanous 0.2.42 → 0.2.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/{X1ucLw10Cds_h614NoEnh → Om5xS9jpjSXJCeTNGYEi4}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{7a98bc80.fa935989e829f9c2.js → 0966f8a1.745fcd44f64a87ea.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{73d2eb0e.4966ad55293c801a.js → 0ad6802e.ae7afb63fdcb4491.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/114.2b90424d1a3ce84c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1151-5c2bb8f002ca2dd6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1200.6a37c202f9f17e9a.js +226 -0
- package/apps/pwa/out/_next/static/chunks/1261-a616d5728e02e624.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1313-19f737e0222c4444.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1357.3bbef3976c37f94a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1362-20adddfaf662b0fa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3507.97e1977bc4d5fb0a.js → 1406.a1dc2ab6f8449374.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1737-9491fc6ab29b9ec6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1803-4f91a8e7dcaf042c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1961.a81b12872c3e93a9.js +23 -0
- package/apps/pwa/out/_next/static/chunks/{53c73f84.373b6160adfa89a4.js → 1970cf59.2d4d8ce5d6c81853.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1971-8890f3962ba7ee0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9211-330b6736a63d4cb3.js → 2073-ba274e00e4f9efb4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{7411.9b4b8b747dc7b802.js → 2144.25b292396712196d.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/2268-53861f339e0b65a2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2312.0c8b61e22d3136d7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6632.0eac1c554f8f2ef3.js → 2573.387a707f6f9d720c.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/273.f156eee28f11af77.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2873.d2140e5a82546401.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1262.e804feb8fd1acb8c.js → 3072.01338851ca21a6f7.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3091.a5a4143dea33d197.js +90 -0
- package/apps/pwa/out/_next/static/chunks/{2456.b6de0e1c05f28843.js → 3095.dc44586a5f83b86d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3207.a756c95e9ec8c3c8.js → 3113.d7472bbc27d580c7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3228-9650b6447b6fa288.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3402.44b565b314f2263c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3557ac4a.c8931684475018ad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8505.fd803c6c33b54cc3.js → 360.ae9f9f4c33c395e8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3638.80412ea63aae8f3f.js +286 -0
- package/apps/pwa/out/_next/static/chunks/{b450776b.3db34d8d965f82d3.js → 363bfab3.9623b9f89363541f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3694.e0099884345f0198.js +64 -0
- package/apps/pwa/out/_next/static/chunks/3744.54f87db52acfd1ab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3903.3ef4656c67572764.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3935.16701e33f8982dc9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3955.6922286237f2ac2b.js +24 -0
- package/apps/pwa/out/_next/static/chunks/3969.272ee7f9fd6c62e5.js +34 -0
- package/apps/pwa/out/_next/static/chunks/{8138.6c10b2a356d52fca.js → 4199.ce86b281fd0a60b7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4311-6dd3144002cc0c2d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4426-2b230fad00c88930.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2690.0521c738b7749931.js → 4445.7990c76b3751a918.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4447-14c5161fa59166c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4856-b0b8075bba8c53f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4870-de370d65e73c0bb5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4885-2c989165c4b29fad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1945.7b54990d578c119b.js → 4894.fec2ca9e99caefa2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5093.8f04b7f8cb899a95.js +94 -0
- package/apps/pwa/out/_next/static/chunks/5122-2bb177cebf89e19a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5154.5f56dc3902e3d275.js +36 -0
- package/apps/pwa/out/_next/static/chunks/529.64ff7257180b2ac9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5394.5dabeb0c62293a28.js +93 -0
- package/apps/pwa/out/_next/static/chunks/5461.08bf2404ff38ec85.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5474-22e08a85583209b2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9427.96aa912ddb5801e0.js → 5564.9e72532188f57586.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/5567-265df39ed8fe9dcb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5570-a94ae19811cb2046.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5574-b47c9ef2dceff1fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4043.6b91203436c9c86b.js → 5628.6ddb2d5ffba4ff4c.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/{1319.b9b815ae0f181e06.js → 5730.43d7ccc09988e646.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3482.a9ae9d2ad6a5bd97.js → 5789.2da35c258292e1e5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5824.da9527b15a3221e5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5866.366966af47fdde5d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1487.2f67b79444062da6.js → 5930.8b4df3b46c32b05a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5963-c4d8469c52a0828b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6001.ec4049ceb3c43418.js +27 -0
- package/apps/pwa/out/_next/static/chunks/6120-471f03db1e299c0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6175-41479e643aca1878.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6291.a2de4f9787637075.js +104 -0
- package/apps/pwa/out/_next/static/chunks/6400-6699907c3537436a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6428.1f4327d6ae5fdf9a.js +287 -0
- package/apps/pwa/out/_next/static/chunks/644.02cb026fa44bcd0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6466-6c87d60d3dd174fb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3347.f846266b5e5f3ede.js → 6540.c7bef57ad8f90a87.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/6773.d4264665ab31bec0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6822.3c789f1a8443e774.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8262.ddc03e06b733f184.js → 6944.309f4e3ea54d1537.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7261-8ff69d3b2ee671fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7266.084c6bbc70035140.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7271.5c0100e7320aa856.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7429-bf5731358c8f2f68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7464.01f7a0ae1215fbe7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7479.0fcad5f37eb64f0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4770.769c9cd9c7034eba.js → 7483.427a2fe2049e388d.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{1147-5196d19c222051b3.js → 7502-be74718178e13e56.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7530.0889722b19572065.js +24 -0
- package/apps/pwa/out/_next/static/chunks/7645.5b2ee3ad45c55ea3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7788.7d1c79f1a8e18946.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7900.096f455c7c1efc53.js +77 -0
- package/apps/pwa/out/_next/static/chunks/7910-6f139bcafd238b9f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7966.f71c8958d1637548.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8673-bab689a55f7e13b9.js → 8062-7cd0bcc7f01455ba.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/8073.f6cf2f2c71aafbd0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8201.190b94088980f430.js +74 -0
- package/apps/pwa/out/_next/static/chunks/8205.282ca4bb62d54a0a.js +62 -0
- package/apps/pwa/out/_next/static/chunks/8313-dfa1021bb58a46d6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/837-81336ebaca8198a8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8447.7963352ef5f71b76.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8574-868e8129525ef6d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8588.d1c6a2903727ce87.js +149 -0
- package/apps/pwa/out/_next/static/chunks/8637.90f92d5c8db4732c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/868.6e953be05bcf6dca.js +41 -0
- package/apps/pwa/out/_next/static/chunks/8706-e1fe0309343a2273.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8749-06384cdfc4520add.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9656-374232558fd528d0.js → 8861-cc1fa1c7b920fa8e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{5440-4236de26c5ea5856.js → 8967-7dfebf710c9dec9d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1063.2fb8a9dc55c731f2.js → 8986.8e2e4efbfa655c59.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8997-3c564dbb3b58b055.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4320.583cbab64db6be02.js → 923.2034d10ae91e9c20.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9312.bc1b89c5d4368033.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1574.878c18ecc97b1bd4.js → 943.39ae5e82f4f1893f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9469.0500480de55fb205.js +32 -0
- package/apps/pwa/out/_next/static/chunks/9770.5f75bc6088b16109.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9810-2543267050e58b82.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9870.8419702475254745.js +8 -0
- package/apps/pwa/out/_next/static/chunks/9941-376d1b74d51b01a4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9958.385434ab04241758.js +1 -0
- package/apps/pwa/out/_next/static/chunks/aa57532f.510551854ff239b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-deea1450b17cb8dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-70985b904f8650ef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-a2e15e33e56a4353.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-fc72ce2db12d6ca9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-be03e41f9436ebd9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-35a35999382da3f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-3ff5b1e6ca88b848.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-a65101300a0ee5c1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-3aca5b6d67dba511.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-45b8ab0a71e61314.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-53046e282d4cda8e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-17809e60e8354c17.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-fd2442d347bf5898.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-e9d720d6fc082e21.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-6b8b4267bab0a677.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-deea1450b17cb8dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-8bcf6233ac7c17af.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-7cc25591cfc2126f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-053e871f35c9beba.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-eff819f0c2d5e084.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-4d7e9d8db5274a87.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-2b2d8f5aa5f69ad4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-0b8f92c5062e68b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1bd9d0fdac2ced3d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-0f291d3c8fd55a3a.js → page-9ee28f7df07428ea.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-44b7a1ff468c6648.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-cbc6523711dc1b65.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-fdad47899c2695be.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-79a8b5fee4c20871.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-03e8ac9606aeaffb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-4cd55c55ec287e2f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-db17b4305404161e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-30041d848350fd02.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-c540da022dbf86b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9399efc538da057f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-ca2d09128c585ca4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-0e2635aecd343038.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ef7f4399b6b7726e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-deea1450b17cb8dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-caf530535b875468.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-eaa20c1543a5fd8e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c541eb1b75120f61.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-ab5e213eda9479f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-0a815f34367b6db6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-e858ba0ed9393b68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-1638ee9dd6e0582f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-4cf5a399109391f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b4396321238798ec.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-cb72bfd21006781a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-6135d0242afbc434.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-a1dccf907eddb856.js +1 -0
- package/apps/pwa/out/_next/static/chunks/c7945435-b44d4dbe90ba0dcb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3d0154af.5331fec737ffe8c3.js → cb0f8df8.09a4a6be97e3fc5f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{e8543907.5b040a5f22a0b0e5.js → d96660fb.cbc21a2a88539dbb.js} +7 -7
- package/apps/pwa/out/_next/static/chunks/{50061469.0326382241ef3b2d.js → ea514caa.05a24f78d9dffe5f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/fb7d20d5-6892502b6ee39ca6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/framework-e8a911e19b1be41f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-7022f418fabba021.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-e5f15df755756a1e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-4525f91e36940c9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-140f0e519c085b0f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-8f22ef63dcb865b1.js +1 -0
- package/apps/pwa/out/_next/static/css/d1f8bb401740a549.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +23 -23
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +23 -23
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +23 -23
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +22 -22
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +22 -22
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +23 -23
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +22 -22
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +23 -23
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +23 -23
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +22 -22
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +23 -23
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +23 -23
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +23 -23
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +23 -23
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +22 -22
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +22 -22
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +23 -23
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +23 -23
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +23 -23
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +22 -22
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +22 -22
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +22 -22
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +23 -23
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +23 -23
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +22 -22
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +22 -22
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +22 -22
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +22 -22
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +23 -23
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +23 -23
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +22 -22
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +23 -23
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +23 -23
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +23 -23
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +23 -23
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +23 -23
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +22 -22
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +23 -23
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +23 -23
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +23 -23
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +23 -23
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +23 -23
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +23 -23
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +23 -23
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +23 -23
- package/catalog/external-commands.yaml +5 -3
- package/catalog/meta/catalogVersion.yaml +2 -1
- package/catalog/signing/catalog-signing-public.pem +3 -0
- package/graphs/intake/intake-daily.yaml +16 -0
- package/graphs/intake/news-sources.yaml +1 -0
- package/graphs/intake/recipes.yaml +7 -0
- package/graphs/overlays/examples/research-runtime-empty-terminal.yaml +28 -0
- package/graphs/profiles/local.yaml +5 -0
- package/graphs/profiles/pod.yaml +4 -0
- package/package.json +6 -2
- package/plugins/demo-absorption-briefing/plugin.json +18 -0
- package/plugins/demo-absorption-briefing/skills/demo-absorption-briefing/SKILL.md +8 -0
- package/plugins/demo-browser-hand/plugin.json +13 -0
- package/plugins/demo-browser-hand/skills/demo-browser-hand/SKILL.md +8 -0
- package/plugins/demo-linear-secretary/plugin.json +15 -0
- package/plugins/demo-linear-secretary/skills/demo-linear-secretary/SKILL.md +8 -0
- package/plugins/demo-plugin-wizard/plugin.json +11 -0
- package/plugins/demo-plugin-wizard/skills/demo-plugin-wizard/SKILL.md +8 -0
- package/plugins/demo-research/plugin.json +16 -0
- package/plugins/demo-research/skills/demo-research/SKILL.md +8 -0
- package/plugins/demo-video-briefing/plugin.json +15 -0
- package/plugins/demo-video-briefing/skills/demo-video-briefing/SKILL.md +8 -0
- package/scripts/build-signed-catalog.ts +48 -0
- package/scripts/ci-typecheck-main-delta.sh +88 -0
- package/scripts/codex-fallback-live-probe.ts +1 -1
- package/scripts/demo/demo1104-parallel-scenes.ts +301 -0
- package/scripts/demo/demo1104-stage.config.ts +21 -0
- package/scripts/demo/demo1104-stage.ts +316 -0
- package/scripts/goal-method-audit.ts +17 -1
- package/scripts/graph-units/land-enqueue.ts +90 -0
- package/scripts/hooks/codex-notify.sh +32 -0
- package/scripts/install.sh +10 -38
- package/scripts/landing-heal/land-plan.ts +57 -0
- package/scripts/release-loop/auto-approve-node.ts +1 -1
- package/scripts/release-loop/gate-autoheal-sim-evidence.ts +60 -0
- package/scripts/release-loop/gate-method.ts +139 -0
- package/scripts/release-loop/gate-node.ts +180 -20
- package/scripts/release-loop/gate-traffic-mode.ts +151 -3
- package/scripts/release-loop/node-verdict.ts +38 -25
- package/scripts/release-loop/preflight.ts +362 -8
- package/scripts/release-loop/unattended-release.ts +20 -9
- package/scripts/rhythm/daily.ts +36 -4
- package/scripts/rhythm/linear-progress-sync.ts +298 -0
- package/scripts/video-pipeline.ts +9 -1
- package/scripts/warm-pool-provider-config.ts +29 -6
- package/src/acp/agent-manager.ts +1 -0
- package/src/acp/codex-app-server-agent.ts +33 -0
- package/src/acp/codex-app-server-client.ts +153 -16
- package/src/acp/core-turn-bridge.ts +17 -12
- package/src/acp/event-router.ts +20 -1
- package/src/acp/server.ts +6 -0
- package/src/agent-mission/browser-roundtrip-coordinator.ts +85 -0
- package/src/agent-mission/claude-headless.ts +4 -1
- package/src/agent-mission/codex-exec.ts +105 -0
- package/src/agent-mission/driver.ts +192 -11
- package/src/agent-mission/grok-auth-status.ts +47 -0
- package/src/agent-mission/hand-hooks.ts +101 -0
- package/src/agent-mission/mission-cli.ts +56 -21
- package/src/agent-mission/mission-hand-reply.ts +118 -0
- package/src/agent-mission/mission-line.ts +180 -0
- package/src/agent-mission/mission-out.ts +256 -18
- package/src/agent-mission/tool-install.ts +122 -11
- package/src/agents/general-purpose.md +1 -1
- package/src/auto-research/research-turn.ts +95 -10
- package/src/autopilot/pr-manager.ts +31 -3
- package/src/boot/daemon-tools/self-implement.ts +3 -1
- package/src/boot/daemon-tools/web-search.ts +1 -2
- package/src/briefing/brief-items.ts +55 -11
- package/src/cli/agent-cli.ts +2 -1
- package/src/cli/catalog-cli.ts +31 -0
- package/src/cli/connector-cli.ts +16 -0
- package/src/cli/doctor-fix.ts +2 -2
- package/src/cli/intake-source-cli.ts +44 -8
- package/src/cli/msg-cli.ts +32 -3
- package/src/cli/pr-cli.ts +21 -1
- package/src/cli/pr-land-heavy-remote.ts +44 -6
- package/src/cli/pr-land-overlap-evidence.ts +13 -1
- package/src/cli/pr-land-pod-shadow-job.ts +143 -5
- package/src/cli/pr-land-pod-shadow.ts +9 -2
- package/src/cli/release-checklist-read-cli.ts +44 -16
- package/src/cli/release-cli.ts +23 -3
- package/src/cli/research-cli.ts +9 -0
- package/src/cli/setup-cli.ts +166 -6
- package/src/cli/setup-keys.ts +187 -0
- package/src/cli/task-plugin-wizard-host.ts +114 -0
- package/src/cli/tasks-cli.ts +54 -9
- package/src/cli/tui-test-cli.ts +186 -0
- package/src/config.ts +4 -2
- package/src/connectors/linear-daily-progress.ts +228 -0
- package/src/connectors/linear-projector.ts +34 -12
- package/src/connectors/linear.ts +151 -7
- package/src/core-turn/deep-turn-bloom.ts +67 -0
- package/src/core-turn/research-policy.ts +37 -0
- package/src/core-turn/run-core-turn.ts +320 -30
- package/src/core-turn/types.ts +2 -0
- package/src/dashboard/chat/acp-chat.ts +10 -0
- package/src/dashboard/classic-sidetab-mission-job.ts +103 -0
- package/src/dashboard/classic-sidetab-mission-pair.ts +81 -0
- package/src/dashboard/classic-sidetab-mission-trio.ts +219 -0
- package/src/dashboard/classic-sidetab-mission.ts +167 -5
- package/src/dashboard/index.ts +378 -13
- package/src/dashboard/input/chat-main-acp-dispatch.ts +23 -0
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +8 -0
- package/src/dashboard/mission-cli-consumer.ts +20 -8
- package/src/dashboard/plugin-wizard-runtime.ts +50 -0
- package/src/dashboard/plugin-wizard-tool.ts +55 -0
- package/src/dashboard/sidetab-runtime.ts +1 -1
- package/src/dashboard/terminal-popup-runtime.ts +6 -3
- package/src/decisions/linear-progress-summary.ts +78 -0
- package/src/decisions/linear-progress-sync.ts +152 -0
- package/src/domains/outbound-alert.ts +49 -11
- package/src/domains/telegram-kind-route.ts +16 -9
- package/src/graph-runner/arg-allowance.ts +13 -0
- package/src/graph-runner/graph-run-api.ts +3 -1
- package/src/graph-runner/runner.ts +85 -17
- package/src/graph-wizard/mission-compose.ts +407 -12
- package/src/harness/dispatch-backpressure.ts +54 -1
- package/src/harness/dispatch-shadow-compare.ts +74 -0
- package/src/harness/harness-cli-command.ts +11 -1
- package/src/harness/skill-exec.ts +21 -9
- package/src/harness/skill-select.ts +1 -1
- package/src/hooks/error-report-cloud.ts +101 -0
- package/src/hooks/receiver.ts +29 -2
- package/src/index.ts +127 -10
- package/src/intake-plane/actions.ts +354 -0
- package/src/intake-plane/adapters/telegram-ambient.ts +34 -18
- package/src/intake-plane/intake-sources.ts +78 -8
- package/src/intake-plane/items.ts +14 -4
- package/src/intake-plane/linear-mission-sync.ts +80 -0
- package/src/intake-plane/linear-secretary-runtime.ts +178 -0
- package/src/intake-plane/linear-wish.ts +227 -1
- package/src/life/life-cli.ts +168 -0
- package/src/life/life-kinds.ts +160 -0
- package/src/live-supply/budget-consumer.ts +78 -0
- package/src/live-supply/read.ts +3 -0
- package/src/live-supply/snapshot.ts +45 -0
- package/src/llm/provider-credentials.ts +8 -2
- package/src/llm.ts +2 -1
- package/src/maturity/feature-maturity.ts +3 -3
- package/src/msg/msg-sse-server.ts +3 -3
- package/src/msg/msg-store.ts +177 -19
- package/src/native-tool-catalog.ts +36 -2
- package/src/nexus/api/http-server.ts +37 -1
- package/src/nexus/api/mcp-public-allowlist.ts +2 -0
- package/src/nexus/index.ts +7 -2
- package/src/nexus/outbound/format.ts +9 -0
- package/src/nexus/outbound/router.ts +98 -13
- package/src/nexus/setup-status.ts +9 -0
- package/src/nexus/state/state.ts +3 -0
- package/src/oauth/codex-account-store.ts +20 -7
- package/src/oauth/codex-owner-mirror.ts +44 -0
- package/src/oauth/codex.ts +17 -2
- package/src/oauth/fallback-chain.ts +47 -17
- package/src/onboarding/first-run-doctor.ts +8 -1
- package/src/onboarding/first-run.ts +85 -26
- package/src/onboarding/key-setup.ts +103 -0
- package/src/onboarding/menu-answer.ts +13 -0
- package/src/onboarding/secret-prompt.ts +37 -0
- package/src/plugins/install/plugin-install.ts +59 -0
- package/src/pr-tool/census.ts +130 -0
- package/src/pty-shell/pty-control-ipc.ts +4 -1
- package/src/registry/catalog-server.ts +232 -0
- package/src/registry/loader.ts +45 -1
- package/src/registry/types.ts +1 -2
- package/src/research/axis-fanout.ts +43 -28
- package/src/self-dev/ask-launch-flow.ts +72 -1
- package/src/self-dev/dev-cli.ts +4 -1
- package/src/self-dev/dev-pipeline.ts +5 -0
- package/src/self-dev/draft-residue.ts +64 -5
- package/src/self-dev/graph-front-nodes.ts +2 -1
- package/src/self-dev/graph-journey-route.ts +76 -21
- package/src/self-dev/launch-preflight.ts +58 -0
- package/src/self-dev/orchestrate.ts +1 -1
- package/src/self-dev/shard-aggregate.ts +4 -0
- package/src/self-dev/shard-run.ts +36 -15
- package/src/self-implement/abandoned-classification.ts +12 -3
- package/src/self-implement/budget-gate.ts +7 -0
- package/src/self-implement/child-llm-preference.ts +10 -1
- package/src/self-implement/doctor-visit.ts +30 -8
- package/src/self-implement/elanous-tui-spawn.ts +3 -0
- package/src/self-implement/fixtures/tdd-green-missing-passing-child-transcript.txt +2 -0
- package/src/self-implement/gate-artifacts.ts +2 -1
- package/src/self-implement/goal-author-cli.ts +4 -2
- package/src/self-implement/goal-author.ts +358 -4
- package/src/self-implement/graph-overlay-yaml.ts +30 -4
- package/src/self-implement/graph-overlay.ts +3 -1
- package/src/self-implement/graph-profile-yaml.ts +107 -0
- package/src/self-implement/graph-yaml.ts +26 -3
- package/src/self-implement/off-diff-evidence.ts +249 -5
- package/src/self-implement/orchestrator.ts +240 -15
- package/src/self-implement/run-chart.ts +6 -3
- package/src/self-implement/run-ledger.ts +51 -1
- package/src/self-implement/runtime-overlay-run-steps.ts +95 -0
- package/src/self-implement/tdd-evidence-tags.ts +9 -0
- package/src/self-implement/train-gate-receipt.ts +166 -0
- package/src/self-implement/train-gate-remote.ts +62 -18
- package/src/session/chat.ts +4 -2
- package/src/session/session-fanout.ts +2 -0
- package/src/session/streaming/acp-stream-sink.ts +2 -1
- package/src/session/streaming/chunk-producer.ts +6 -0
- package/src/session/streaming/stream-compositor.ts +3 -2
- package/src/session-runtime/index.ts +37 -1
- package/src/session-runtime/retry-policy.ts +1 -1
- package/src/setup/llm-env-detect.ts +3 -0
- package/src/setup/service-key-catalog.ts +46 -0
- package/src/setup/service-keys.ts +241 -0
- package/src/sidetab-core/visible-agent-mission.ts +98 -22
- package/src/skills/tools/agent.ts +23 -4
- package/src/skills/tools/omni-search.ts +123 -25
- package/src/task-agent/parent-host.ts +10 -0
- package/src/task-agent/repair-outcomes.ts +65 -0
- package/src/task-agent/task-hand.ts +20 -7
- package/src/task-orchestrator/dispatcher.ts +14 -1
- package/src/task-orchestrator/linear-capture-events.ts +55 -0
- package/src/task-orchestrator/store.ts +16 -5
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +4 -0
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +92 -1
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +113 -14
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +23 -11
- package/src/task-orchestrator/surfaces/pod-warm-switch.ts +2 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +35 -9
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +172 -6
- package/src/task-orchestrator/surfaces/self-implement.ts +27 -3
- package/src/task-orchestrator/surfaces/warm-reuse-evidence.ts +169 -0
- package/src/task-orchestrator/types.ts +14 -0
- package/src/telegram.ts +14 -16
- package/src/terminal/coding-agent.ts +14 -5
- package/src/terminal/session-registry.ts +1 -1
- package/src/tool-hints/gate.ts +1 -0
- package/src/tool-runtime/agent-runtime.ts +1 -0
- package/src/tool-runtime/browser-hand-runtime.ts +381 -0
- package/src/tool-runtime/browser-runtime.ts +2 -1
- package/src/tool-runtime/elanous-linear-issue-runtime.ts +76 -0
- package/src/tool-runtime/elanous-linear-secretary-runtime.ts +57 -0
- package/src/tool-runtime/graph-mcp-runtimes.ts +240 -0
- package/src/tool-runtime/index.ts +6 -0
- package/src/tool-runtime/types.ts +3 -0
- package/src/tui/entry.ts +24 -1
- package/src/tui/sidetab/attach.ts +140 -11
- package/src/tui/sidetab/herdr-portal.ts +225 -0
- package/src/user-config.ts +34 -9
- package/src/user-intent/types.ts +4 -3
- package/src/ux-sim/browser-hand.ts +165 -0
- package/src/ux-sim/draft-inventory-builder.ts +198 -0
- package/src/ux-sim/fake-browser-page.ts +81 -0
- package/src/ux-sim/fake-linear-device.ts +31 -0
- package/src/ux-sim/graph-engine-sim.ts +47 -0
- package/src/ux-sim/linear-secretary.ts +216 -0
- package/src/ux-sim/mock-scenario-catalog.json +75 -23
- package/src/ux-sim/mock-scenario-catalog.ts +120 -2
- package/src/ux-sim/onboarding-first-run-device.ts +31 -21
- package/src/ux-sim/scenario.ts +70 -26
- package/src/ux-sim/service-key-setup.ts +50 -0
- package/src/ux-sim/term-slash-device.ts +74 -0
- package/src/ux-sim/turn-throw-sim.ts +31 -0
- package/src/version/packed-revision.json +1 -1
- package/src/web-search/exa.ts +77 -0
- package/src/web-search/index.ts +30 -9
- package/src/web-search/provider.ts +4 -1
- package/src/web-search/x-intent.ts +5 -0
- package/apps/pwa/out/_next/static/chunks/0244e5b5.6fc7670f8223d82d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1121.13ba7a8aff19df81.js +0 -36
- package/apps/pwa/out/_next/static/chunks/1345-31427b833438f521.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1455-530ca16c7e71baff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1586.fafc33a9a5835cb7.js +0 -32
- package/apps/pwa/out/_next/static/chunks/1744.855fd60ae4c4a8c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/193.21a47a3e07ef6860.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2004.e839fda7ea5a738a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2044-dd681a5c08779ff8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2101.2248decb38829b03.js +0 -286
- package/apps/pwa/out/_next/static/chunks/2160.a097e7b138ae1c55.js +0 -23
- package/apps/pwa/out/_next/static/chunks/2300.41ea70ac1bef1446.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2357-07b5eeb5fb12628d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2364.28652020695a6db3.js +0 -34
- package/apps/pwa/out/_next/static/chunks/2526.c3e50ac1fec064bd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2549-cda50b716ff4250c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2550-5f1e88f615568045.js +0 -1
- package/apps/pwa/out/_next/static/chunks/261-319078c954e40d66.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2974.595d1e29d040cb6a.js +0 -64
- package/apps/pwa/out/_next/static/chunks/3285.89ee2f298682f5e5.js +0 -93
- package/apps/pwa/out/_next/static/chunks/3447.06edc7b092021417.js +0 -41
- package/apps/pwa/out/_next/static/chunks/3510-9ca392698bfe4391.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3541.772e5ce425aaa611.js +0 -24
- package/apps/pwa/out/_next/static/chunks/3741.9cf76acaa2ee5298.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3837.a210d7d0db8d8abd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3898-955c896f394217a6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3947-ef57acea76eaa8d2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4037-3b82ebc7d78afdc7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/405.9022d4a478202b67.js +0 -77
- package/apps/pwa/out/_next/static/chunks/417-fb2cc9a9910e5968.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4276.336d76d858fcdf1b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4302.6ced9aa4535de947.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4768-8eac183fd291ca53.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4895.65605ec3e6504e89.js +0 -74
- package/apps/pwa/out/_next/static/chunks/5112.4b9f300124fab7b3.js +0 -149
- package/apps/pwa/out/_next/static/chunks/5335.375ee922bcd5bc83.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5342.023a2e729689b320.js +0 -27
- package/apps/pwa/out/_next/static/chunks/5431-72a1dbde59400691.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5486-b318c165f645d8ba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5506-c7d2ec25c62a7c94.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5570-c66ecbea26b4e3b1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5696.ffca5aa259d8451e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5793-8c584aea2aa87560.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5848-6de6b8c173351a90.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5885.0a3e52c8faccec98.js +0 -287
- package/apps/pwa/out/_next/static/chunks/5999.94e3c83040200f31.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5a7901d6-2d8d9b5587cf9042.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6131.348b7d6bdcd267ce.js +0 -226
- package/apps/pwa/out/_next/static/chunks/6164.86133a0172611184.js +0 -90
- package/apps/pwa/out/_next/static/chunks/6377.bc7df239edbff244.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6515.e07e8b2b8a707a87.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6522-c005514f87d18982.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6642.648adb1767f39ecf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6848.138805a09d001d09.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7049-c09e2b7a253a24f3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7072.1e00447d9fa39972.js +0 -104
- package/apps/pwa/out/_next/static/chunks/7106.64201c539c5e220c.js +0 -94
- package/apps/pwa/out/_next/static/chunks/7151-1f742b455986530e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7199.18d6b25e001154ce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7279-c199ea83f34338fa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/728b938d.ffaa7ad583d60e58.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7309.171c3de54e0322f1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/733.7a1ab3342e03306f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7504.d5cf1e7cd89b1b08.js +0 -24
- package/apps/pwa/out/_next/static/chunks/7573-0fd4af62d65d4598.js +0 -1
- package/apps/pwa/out/_next/static/chunks/759.6f8267df4689c401.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7825-668b046f72f14483.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7852-1538768b6eb19388.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7868.cff810430bb63c91.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8084-dfcc796874ab4e07.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8266.6bf9b131b2584678.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8403.7b81d5e64074a725.js +0 -8
- package/apps/pwa/out/_next/static/chunks/8470.1998cbd0866a7eac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8546-6f03f8ea34dd61d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8687-246fda8433d3477c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/898-280022fb082936bc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9098-50eefc1844212e3d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9249.976f1e69a9d80754.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9255-cf88fceda5666645.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9306-e523ba58bb8adc42.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9324.a9866d717ba62cb6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9325.a8510e8aa87c8143.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9353-12bfff0c130104cf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9415.69e4a21c60c7d2db.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9479-154a697d4b6e4e98.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9540-65aa6ccc31b3fd78.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9633.ce5bddc56784da72.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9832.f4a98c878ecf2c0a.js +0 -62
- package/apps/pwa/out/_next/static/chunks/9865.f094440645f02d98.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9a852a62-6192a6ea9346ced3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-e772b4710df5d936.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-4361368e6a76b967.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-802f349fdd65248d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-7f35513988a2a495.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-798121656540e33e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-20a089490affe98c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-e5e4ec786d70e604.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-d12fe5d0801430e4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-d8cf21022fecc026.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-21ce565c9c57ee97.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-b56563025f619c9b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-52f14dd133da8348.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-c0ed7fdcdba76633.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-af8c3020cb520f15.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-72eda67af9f5e35c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-e772b4710df5d936.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-67a6620d31f0a46f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-f059363aa0880ec2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-f9f917d6a57f69fb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-d3ae55eee2f0826c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-0e3d7b9421b79dac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-ba738f7e233eb211.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-33438b98c74fd599.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-0b34d5fd990d793a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-3fced192be5279c1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-04cb3cf182a7c1ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-6ccbd2ab23a21542.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-aa0518c48a5f4e56.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-4b32226d341ad7d7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-3224fd8f6383b61f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-efbc97459f2914e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-2fe487d88cd5d97c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-48861dd1a858bab7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-197d5d4d21d228ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-a763ba89fbdd9c27.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-7edb253510b1c136.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-0c875702c61965ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-e772b4710df5d936.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-e425c951151095f7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-9c90e0aec4e27f77.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-733e09a02e727d42.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-4f899e14c34d77a1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-bf067887b3307423.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-7af10868ff87d04e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-efe5304057aa11c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-76bcd29aaa8a26c3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-4cfd88e2273ce50f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-0a1ddb47efba0a32.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-2a176c707152c892.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-efe03031b8797fbf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-d0d2d673bfd8a8a9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-4c9fceb2baa09cb7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-b0ab8d8fc9a97556.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-7e2cc62a2e5cec96.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-22324935f753ec5e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-9dc1bfa25334998a.js +0 -1
- package/apps/pwa/out/_next/static/css/be9019f696217521.css +0 -1
- /package/apps/pwa/out/_next/static/{X1ucLw10Cds_h614NoEnh → Om5xS9jpjSXJCeTNGYEi4}/_ssgManifest.js +0 -0
package/src/registry/loader.ts
CHANGED
|
@@ -31,6 +31,8 @@ import type {
|
|
|
31
31
|
} from './types.js';
|
|
32
32
|
import { PROVIDER_CAPABILITIES_NONE } from './types.js';
|
|
33
33
|
import { readDiscoveryCache, type DiscoverySnapshot } from './discovery/cache.js';
|
|
34
|
+
import { debug } from '../debug/log.js';
|
|
35
|
+
import { readVerifiedCatalogCache, scheduleServerCatalogRefresh } from './catalog-server.js';
|
|
34
36
|
|
|
35
37
|
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
36
38
|
|
|
@@ -85,6 +87,15 @@ function listYamlFiles(dir: string): string[] {
|
|
|
85
87
|
.map((e) => join(dir, e));
|
|
86
88
|
}
|
|
87
89
|
|
|
90
|
+
function readCatalogVersion(builtinDir: string): number {
|
|
91
|
+
const path = join(builtinDir, 'meta', 'catalogVersion.yaml');
|
|
92
|
+
if (!existsSync(path)) return 1;
|
|
93
|
+
const raw = safeReadYaml(path) as { catalogVersion?: unknown } | null;
|
|
94
|
+
return Number.isSafeInteger(raw?.catalogVersion) && (raw?.catalogVersion as number) >= 1
|
|
95
|
+
? raw?.catalogVersion as number
|
|
96
|
+
: 1;
|
|
97
|
+
}
|
|
98
|
+
|
|
88
99
|
// ── Provider parse + validate ─────────────────────────────────────────
|
|
89
100
|
|
|
90
101
|
function parseProvider(raw: unknown, source: string): ProviderRegistration | null {
|
|
@@ -282,11 +293,13 @@ let cachedCatalog: Catalog | null = null;
|
|
|
282
293
|
|
|
283
294
|
function buildCatalog(): Catalog {
|
|
284
295
|
const builtinDir = resolveBuiltinCatalogDir();
|
|
296
|
+
const catalogVersion = readCatalogVersion(builtinDir);
|
|
285
297
|
const globalDir = resolveGlobalCatalogDir();
|
|
286
298
|
|
|
287
299
|
const providers = new Map<string, ProviderRegistration>();
|
|
288
300
|
const models = new Map<string, ModelSpec>();
|
|
289
301
|
const patterns = new Map<string, ModelPatternFallback>();
|
|
302
|
+
const sourceLayers = ['package'];
|
|
290
303
|
let fileCount = 0;
|
|
291
304
|
|
|
292
305
|
// --- builtin tier ---
|
|
@@ -326,12 +339,36 @@ function buildCatalog(): Catalog {
|
|
|
326
339
|
}
|
|
327
340
|
}
|
|
328
341
|
|
|
342
|
+
// --- signed server catalog; package YAML remains available if cache is absent/stale-invalid ---
|
|
343
|
+
// Keep isolated tests hermetic; an explicit cache path opts a test into the signed-server layer.
|
|
344
|
+
const serverCatalog = isolatedCatalogTestUniverse() && !process.env.ELANOUS_CATALOG_SERVER_CACHE?.trim()
|
|
345
|
+
? null
|
|
346
|
+
: readVerifiedCatalogCache();
|
|
347
|
+
if (serverCatalog) {
|
|
348
|
+
sourceLayers.push('server-cache');
|
|
349
|
+
for (const raw of serverCatalog.payload.providers) {
|
|
350
|
+
const provider = parseProvider(raw, 'signed-server-catalog');
|
|
351
|
+
if (!provider) continue;
|
|
352
|
+
const base = providers.get(provider.id);
|
|
353
|
+
providers.set(provider.id, base ? mergeProviders(base, provider) : provider);
|
|
354
|
+
fileCount++;
|
|
355
|
+
}
|
|
356
|
+
for (const raw of serverCatalog.payload.models) {
|
|
357
|
+
const model = parseModel(raw, 'signed-server-catalog');
|
|
358
|
+
if (!model) continue;
|
|
359
|
+
models.set(model.id, model);
|
|
360
|
+
fileCount++;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
329
364
|
// --- global tier overlay ---
|
|
330
365
|
const globalProviderDir = join(globalDir, 'providers');
|
|
366
|
+
let hasUserOverlay = false;
|
|
331
367
|
for (const path of listYamlFiles(globalProviderDir)) {
|
|
332
368
|
const raw = safeReadYaml(path);
|
|
333
369
|
const overlay = parseProvider(raw, path);
|
|
334
370
|
if (!overlay) continue;
|
|
371
|
+
hasUserOverlay = true;
|
|
335
372
|
fileCount++;
|
|
336
373
|
const base = providers.get(overlay.id);
|
|
337
374
|
providers.set(overlay.id, base ? mergeProviders(base, overlay) : overlay);
|
|
@@ -359,6 +396,7 @@ function buildCatalog(): Catalog {
|
|
|
359
396
|
}
|
|
360
397
|
const model = parseModel(raw, path);
|
|
361
398
|
if (model) {
|
|
399
|
+
hasUserOverlay = true;
|
|
362
400
|
// global wins on dup id (RFC §6.4 — single-value fields replace).
|
|
363
401
|
models.set(model.id, model);
|
|
364
402
|
fileCount++;
|
|
@@ -370,9 +408,14 @@ function buildCatalog(): Catalog {
|
|
|
370
408
|
// --- discovery fold (대표 2026-09-23 «파생한다») ---
|
|
371
409
|
const folded = foldDiscoveredModels(providers, models, loadFoldSnapshot());
|
|
372
410
|
for (const m of folded) models.set(m.id, m);
|
|
411
|
+
if (hasUserOverlay) sourceLayers.push('user');
|
|
412
|
+
if (folded.length > 0) sourceLayers.push('live-discovery');
|
|
413
|
+
debug.log('registry.catalog', 'catalog.source', {
|
|
414
|
+
source: 'merged', layers: sourceLayers, ...(serverCatalog ? { stale: serverCatalog.stale } : {}),
|
|
415
|
+
});
|
|
373
416
|
|
|
374
417
|
return {
|
|
375
|
-
catalogVersion
|
|
418
|
+
catalogVersion,
|
|
376
419
|
providers,
|
|
377
420
|
models,
|
|
378
421
|
patterns,
|
|
@@ -435,6 +478,7 @@ export function foldDiscoveredModels(
|
|
|
435
478
|
export function getCatalog(): Catalog {
|
|
436
479
|
if (cachedCatalog) return cachedCatalog;
|
|
437
480
|
cachedCatalog = buildCatalog();
|
|
481
|
+
scheduleServerCatalogRefresh(() => { cachedCatalog = buildCatalog(); });
|
|
438
482
|
return cachedCatalog;
|
|
439
483
|
}
|
|
440
484
|
|
package/src/registry/types.ts
CHANGED
|
@@ -196,8 +196,7 @@ export interface ModelPatternFallback {
|
|
|
196
196
|
// ── Top-level catalog (loader output) ─────────────────────────────────
|
|
197
197
|
|
|
198
198
|
export interface Catalog {
|
|
199
|
-
/**
|
|
200
|
-
* shape changes in a non-backwards-compat way. */
|
|
199
|
+
/** Catalog release version from catalog/meta/catalogVersion.yaml. */
|
|
201
200
|
catalogVersion: number;
|
|
202
201
|
/** Indexed by provider id. */
|
|
203
202
|
providers: Map<string, ProviderRegistration>;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
// Research-only native fanout. The caller supplies Bloom's question ladder;
|
|
2
2
|
// each axis gets its own direct tool call and evidence stays attributed to it.
|
|
3
3
|
import type { BloomResearchQuestion, ResearchEvidenceEnvelope } from '../auto-research/question-ladder-contract.js';
|
|
4
|
-
import {
|
|
4
|
+
import { getAvailableResearchWebSearchProviders } from '../web-search/index.js';
|
|
5
5
|
import type { WebSearchHit, WebSearchProvider } from '../web-search/provider.js';
|
|
6
6
|
import { debug } from '../debug/log.js';
|
|
7
7
|
|
|
8
|
-
const RESEARCH_SEARCH_ENGINES = ['
|
|
9
|
-
const
|
|
8
|
+
const RESEARCH_SEARCH_ENGINES = ['exa', 'firecrawl'] as const;
|
|
9
|
+
const RESEARCH_WEB_FALLBACK_IDS = ['exa', 'firecrawl'] as const;
|
|
10
|
+
const RESEARCH_EXA_TIMEOUT_MS = 4_500;
|
|
10
11
|
// Leave scheduler/logging headroom under the user-visible 15s aggregate cap.
|
|
11
12
|
export const RESEARCH_SEARCH_BUDGET_MS = 14_500;
|
|
12
13
|
const ENGINE_BREAKER_FAILURE_LIMIT = 2;
|
|
@@ -33,11 +34,16 @@ export interface AxisSearchResult {
|
|
|
33
34
|
hits: AxisSearchHit[];
|
|
34
35
|
errors: string[];
|
|
35
36
|
}
|
|
36
|
-
export
|
|
37
|
+
export interface AxisSearchContext {
|
|
38
|
+
questionPrompt?: string;
|
|
39
|
+
requestedWindow?: string;
|
|
40
|
+
}
|
|
41
|
+
export type AxisSearch = (query: string, signal?: AbortSignal, context?: AxisSearchContext) => Promise<AxisSearchHit[] | AxisSearchResult>;
|
|
37
42
|
|
|
38
43
|
export interface AxisFanoutDeps {
|
|
39
44
|
search?: AxisSearch;
|
|
40
45
|
signal?: AbortSignal;
|
|
46
|
+
admitToolCall?: (toolName: 'OmniSearch') => boolean;
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
interface ProviderHealth {
|
|
@@ -45,20 +51,16 @@ interface ProviderHealth {
|
|
|
45
51
|
open: boolean;
|
|
46
52
|
}
|
|
47
53
|
|
|
48
|
-
/** Build one bounded searcher per research prepass.
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
54
|
+
/** Build one bounded searcher per research prepass. Research uses only the
|
|
55
|
+
* sequential Exa → Firecrawl fallback; Grok is reserved for explicit X intent.
|
|
56
|
+
* Per-engine serialization lets a timeout open that engine's
|
|
57
|
+
* breaker before queued Bloom axes start. */
|
|
52
58
|
export function createResearchAxisSearcher(
|
|
53
|
-
availableProviders: readonly WebSearchProvider[] =
|
|
59
|
+
availableProviders: readonly WebSearchProvider[] = getAvailableResearchWebSearchProviders(),
|
|
54
60
|
now: () => number = Date.now,
|
|
55
61
|
): AxisSearch {
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
const allowed = [
|
|
59
|
-
...(grok ? [grok] : []),
|
|
60
|
-
...availableProviders.filter(provider => provider.id === 'firecrawl'),
|
|
61
|
-
];
|
|
62
|
+
const webFallback = RESEARCH_WEB_FALLBACK_IDS.flatMap(id => availableProviders.filter(provider => provider.id === id));
|
|
63
|
+
const allowed = [...webFallback];
|
|
62
64
|
const health = new Map(allowed.map(provider => [provider.id, { failures: 0, open: false }]));
|
|
63
65
|
const deadline = now() + RESEARCH_SEARCH_BUDGET_MS;
|
|
64
66
|
const tails = new Map<string, Promise<void>>();
|
|
@@ -81,23 +83,18 @@ export function createResearchAxisSearcher(
|
|
|
81
83
|
return async (query, signal) => {
|
|
82
84
|
const hits: AxisSearchHit[] = [];
|
|
83
85
|
const errors: string[] = [];
|
|
84
|
-
const
|
|
85
|
-
if (selected.length === 0) return { hits, errors: ['no healthy Grok/Firecrawl research provider'] };
|
|
86
|
-
|
|
87
|
-
await Promise.all(selected.map(provider => enqueue(provider.id, async () => {
|
|
86
|
+
const execute = async (provider: WebSearchProvider): Promise<boolean> => enqueue(provider.id, async () => {
|
|
88
87
|
const state = health.get(provider.id)!;
|
|
89
|
-
if (state.open) return;
|
|
88
|
+
if (state.open) return false;
|
|
90
89
|
const remainingMs = deadline - now();
|
|
91
90
|
if (remainingMs <= 0) {
|
|
92
91
|
state.open = true;
|
|
93
92
|
errors.push(`${provider.id}: research search budget exhausted`);
|
|
94
|
-
return;
|
|
93
|
+
return false;
|
|
95
94
|
}
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
? Math.min(RESEARCH_GROK_TIMEOUT_MS, remainingMs)
|
|
100
|
-
: Math.max(1, Math.floor(remainingMs / activeCount));
|
|
95
|
+
const timeoutMs = provider.id === 'exa'
|
|
96
|
+
? Math.min(RESEARCH_EXA_TIMEOUT_MS, remainingMs)
|
|
97
|
+
: remainingMs;
|
|
101
98
|
const startedAt = now();
|
|
102
99
|
try {
|
|
103
100
|
const controller = new AbortController();
|
|
@@ -131,6 +128,7 @@ export function createResearchAxisSearcher(
|
|
|
131
128
|
provider: provider.id, queryLength: query.length, hits: result.hits.length,
|
|
132
129
|
durationMs: now() - startedAt, breakerOpen: state.open,
|
|
133
130
|
});
|
|
131
|
+
return result.hits.length > 0;
|
|
134
132
|
} catch (error) {
|
|
135
133
|
const message = error instanceof Error ? error.message : String(error);
|
|
136
134
|
const timeout = error instanceof Error && /timeout|timed out|abort/i.test(`${error.name} ${error.message}`);
|
|
@@ -142,8 +140,16 @@ export function createResearchAxisSearcher(
|
|
|
142
140
|
provider: provider.id, queryLength: query.length, durationMs: now() - startedAt,
|
|
143
141
|
timeout, quota, failures: state.failures, breakerOpen: state.open,
|
|
144
142
|
}, { level: 'warn' });
|
|
143
|
+
return false;
|
|
145
144
|
}
|
|
146
|
-
})
|
|
145
|
+
});
|
|
146
|
+
const runWebFallback = async (): Promise<void> => {
|
|
147
|
+
for (const provider of webFallback) {
|
|
148
|
+
if (!health.get(provider.id)?.open && await execute(provider)) return;
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
await runWebFallback();
|
|
152
|
+
if (hits.length === 0 && errors.length === 0) errors.push('no healthy Exa/Firecrawl research provider');
|
|
147
153
|
return { hits, errors };
|
|
148
154
|
};
|
|
149
155
|
}
|
|
@@ -195,7 +201,16 @@ export async function fanOutAxisEvidence(
|
|
|
195
201
|
throw new Error('research axis question IDs must be unique');
|
|
196
202
|
}
|
|
197
203
|
const search = deps.search ?? createResearchAxisSearcher();
|
|
198
|
-
const settled = await Promise.allSettled(plan.map(call =>
|
|
204
|
+
const settled = await Promise.allSettled(plan.map(call => {
|
|
205
|
+
if (deps.admitToolCall && !deps.admitToolCall('OmniSearch')) {
|
|
206
|
+
return Promise.resolve({ hits: [], errors: ['research tool budget reached'] } satisfies AxisSearchResult);
|
|
207
|
+
}
|
|
208
|
+
const question = questions.find(candidate => candidate.id === call.questionId)!;
|
|
209
|
+
return search(call.query, deps.signal, {
|
|
210
|
+
questionPrompt: question.prompt,
|
|
211
|
+
requestedWindow: question.requestedWindow,
|
|
212
|
+
});
|
|
213
|
+
}));
|
|
199
214
|
const axes: AxisEvidenceGroup[] = questions.map(question => ({ questionId: question.id, evidence: [] }));
|
|
200
215
|
const groups = new Map(axes.map(axis => [axis.questionId, axis]));
|
|
201
216
|
const byQuestion = new Map(questions.map(question => [question.id, question]));
|
|
@@ -29,8 +29,10 @@ import {
|
|
|
29
29
|
renderConcurrentAuthoringNotice,
|
|
30
30
|
renderLaunchPreflight,
|
|
31
31
|
renderRepeatedBlockNotice,
|
|
32
|
+
renderSiblingContextLines,
|
|
32
33
|
siblingTestPath,
|
|
33
34
|
type AskPreflightDeps,
|
|
35
|
+
type SiblingContextCard,
|
|
34
36
|
type LaunchPreflightResult,
|
|
35
37
|
type PriorBlockSample,
|
|
36
38
|
type RecentAuthoringSample,
|
|
@@ -245,6 +247,8 @@ export interface AskLaunchFlowInput {
|
|
|
245
247
|
readonly goalType?: import('../self-implement/goal-author.js').GoalType;
|
|
246
248
|
/** 런 식별자가 이미 있으면 앞단 관측을 그 키로 잇는다. 없으면 관측은 runId 없이 남는다. */
|
|
247
249
|
readonly runId?: string;
|
|
250
|
+
/** CARD-TARGET-PATHS가 제공한 같은-경로 카드 관측. 발사 판정에는 쓰지 않는다. */
|
|
251
|
+
readonly cardsTouchingPaths?: readonly SiblingContextCard[];
|
|
248
252
|
/** Explicit harness choice; false is distinct from omission. */
|
|
249
253
|
readonly selfResolveClarifications?: boolean;
|
|
250
254
|
}
|
|
@@ -258,6 +262,18 @@ export type AskLaunchFlowResult =
|
|
|
258
262
|
/** ⑴ 저작에서 접지 예산(AUTHOR-TIMEBOX)을 넘겨 NOT-GROUNDED 로 끝났다 — 발사하지 «않는다». */
|
|
259
263
|
| { readonly kind: 'stopped-by-timebox'; readonly goalFile: string };
|
|
260
264
|
|
|
265
|
+
/**
|
|
266
|
+
* A harness entry can be named inside a request whose operative instruction is
|
|
267
|
+
* explicitly read-only. Require both a read-only marker and a no-write marker;
|
|
268
|
+
* either alone is too broad (for example, implementing a read-only feature).
|
|
269
|
+
*/
|
|
270
|
+
function isExplicitReadOnlyNoWriteRequest(text: string): boolean {
|
|
271
|
+
const normalized = text.normalize('NFKC').toLowerCase();
|
|
272
|
+
const readOnly = /(?:read[\s-]*only|readonly|읽기\s*전용|읽기만|파일\s*존재\s*여부만|상태만\s*확인)/u.test(normalized);
|
|
273
|
+
const noWrite = /(?:수정하지\s*마|변경하지\s*마|변경\s*금지|파일을?\s*만들지\s*마|쓰지\s*마|편집하지\s*마|no\s+(?:file\s+)?changes?|do\s+not\s+(?:edit|modify|write|create)|don't\s+(?:edit|modify|write|create)|without\s+(?:editing|modifying|writing)|\bcommit\b.{0,24}(?:하지\s*마|금지)|\bpush\b.{0,24}(?:하지\s*마|금지)|\bpr\b.{0,24}(?:하지\s*마|금지))/u.test(normalized);
|
|
274
|
+
return readOnly && noWrite;
|
|
275
|
+
}
|
|
276
|
+
|
|
261
277
|
/** ⑴ AUTHOR-TIMEBOX NOT-GROUNDED — 결과 줄을 쓰고 흐름을 끊는 값. */
|
|
262
278
|
export type AskLaunchFlowTimeboxStop = Extract<AskLaunchFlowResult, { kind: 'stopped-by-timebox' }>;
|
|
263
279
|
|
|
@@ -858,9 +874,23 @@ export async function runAskLaunchFlow(
|
|
|
858
874
|
// ⛔ 이 목록은 «광고»다 — 실제 단계와 어긋나면 조회하는 사람이 없는 단계를 찾거나 있는 단계를 안 찾는다.
|
|
859
875
|
// ⛔ 분해 단계는 «두 이름 중 하나»로 난다 — 켜졌으면 `…-decomposition`, 꺼졌으면 `…-decomposition-skipped`.
|
|
860
876
|
// ⭐ 뒤엣것을 빼 두면 조회하는 사람이 「분해 관측이 0건이다」를 보고 «없어졌다»로 읽는다(실은 꺼진 것이다).
|
|
861
|
-
steps: ['ask-start', 'ask-pre-preflight', 'ask-authored', 'ask-launching-tree', 'ask-preflight', 'ask-launch-decomposition', 'ask-launch-decomposition-skipped', 'ask-launch'],
|
|
877
|
+
steps: ['ask-start', 'ask-readonly-no-launch', 'ask-pre-preflight', 'ask-authored', 'ask-launching-tree', 'ask-preflight', 'ask-launch-decomposition', 'ask-launch-decomposition-skipped', 'ask-launch'],
|
|
862
878
|
}, 'info');
|
|
863
879
|
|
|
880
|
+
if (isExplicitReadOnlyNoWriteRequest(input.askText)) {
|
|
881
|
+
deps.log('ask-readonly-no-launch', {
|
|
882
|
+
entrance: entrance.id,
|
|
883
|
+
surface: entrance.surface,
|
|
884
|
+
inputSource: input.inputSource,
|
|
885
|
+
runId: input.runId ?? process.env.ELANOUS_RUN_ID ?? null,
|
|
886
|
+
authoringSkipped: true,
|
|
887
|
+
launchSkipped: true,
|
|
888
|
+
completionModeSelected: false,
|
|
889
|
+
}, 'info');
|
|
890
|
+
deps.print('[ask] 읽기 전용·변경 금지 요청으로 판정해 구현·자동 병합을 시작하지 않았습니다. TUI 읽기 도구로 결과만 확인하세요.');
|
|
891
|
+
return { kind: 'stopped-before-authoring' };
|
|
892
|
+
}
|
|
893
|
+
|
|
864
894
|
const launchPreflight = await runPrePreflight(input, deps);
|
|
865
895
|
if (launchPreflight === false) return { kind: 'stopped-before-authoring' };
|
|
866
896
|
|
|
@@ -1036,6 +1066,47 @@ export async function runAskLaunchFlow(
|
|
|
1036
1066
|
const preflight = decision.result;
|
|
1037
1067
|
deps.print(renderLaunchPreflight(preflight, input.forceRequested && decision.shouldLaunch && preflight.blockers.length > 0, 'before-launch'));
|
|
1038
1068
|
observeLaunchPreflight(deps, 'before-launch', decision);
|
|
1069
|
+
let siblingCards = input.cardsTouchingPaths;
|
|
1070
|
+
let siblingCardsUnmeasured = false;
|
|
1071
|
+
if (siblingCards === undefined && preflight.paths.length > 0) {
|
|
1072
|
+
try {
|
|
1073
|
+
// CARD-TARGET-PATHS is a read-only signal: production entrances use the shared task-card store when
|
|
1074
|
+
// no caller supplied a precomputed snapshot. The launch decision never depends on these matches.
|
|
1075
|
+
const taskHand = await import('../task-agent/task-hand.js');
|
|
1076
|
+
const state = taskHand.readTaskAgentState<{ tasks?: Record<string, import('../task-agent/task-hand.js').TaskCard> }>(taskHand.taskAgentStatePath());
|
|
1077
|
+
siblingCards = taskHand.cardsTouchingPaths(Object.values(state.tasks ?? {}), preflight.paths)
|
|
1078
|
+
.map(({ card, runId, paths }) => ({ cardId: card.id, ...(runId ? { runId } : {}), overlapPaths: paths }));
|
|
1079
|
+
} catch (error) {
|
|
1080
|
+
siblingCardsUnmeasured = true;
|
|
1081
|
+
try { debug.log('self-dev.ask', 'sibling-context-cards-unmeasured', { reason: error instanceof Error ? error.message : String(error) }); }
|
|
1082
|
+
catch { /* supplemental card context remains fail-soft */ }
|
|
1083
|
+
siblingCards = [];
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
const siblingContextLines = renderSiblingContextLines(preflight, siblingCards);
|
|
1087
|
+
const recentLanded = preflight.warnings.filter((warning) => warning.kind === 'recent-change' && preflight.paths.includes(warning.name)).length;
|
|
1088
|
+
const siblingContextObservation = {
|
|
1089
|
+
liveRuns: preflight.warnings.filter((warning) => warning.kind === 'live-run').length,
|
|
1090
|
+
openPrs: preflight.warnings.filter((warning) => warning.kind === 'open-pr' || warning.kind === 'sibling-pr').length,
|
|
1091
|
+
recentLanded,
|
|
1092
|
+
unmeasured: siblingCardsUnmeasured || preflight.liveRuns.state === 'unknown' || preflight.openPrs.state === 'unknown' || preflight.recentChanges.state === 'unknown' || preflight.unreadableRuns > 0,
|
|
1093
|
+
};
|
|
1094
|
+
try { debug.log('self-dev.ask', 'sibling-context', siblingContextObservation); }
|
|
1095
|
+
catch { /* sibling context observation must not change launch */ }
|
|
1096
|
+
if (!sanitizeFailed && existsSync(goalFile)) {
|
|
1097
|
+
try {
|
|
1098
|
+
const document = deps.readFile(goalFile);
|
|
1099
|
+
const firstSection = document.search(/^## /mu);
|
|
1100
|
+
const header = siblingContextLines.join('\n');
|
|
1101
|
+
const beforeFirstSection = firstSection < 0 ? document : document.slice(0, firstSection).trimEnd();
|
|
1102
|
+
const contextualized = firstSection < 0
|
|
1103
|
+
? `${header}\n\n${document}`
|
|
1104
|
+
: `${beforeFirstSection ? `${beforeFirstSection}\n` : ''}${header}\n형제가 같은 파일을 고친다 — 국소 변경만 · 무관 포맷 금지 · 자기 의도를 시험으로 고정\n\n${document.slice(firstSection)}`;
|
|
1105
|
+
(deps.writeGoalDocument ?? deps.writeFile)(goalFile, contextualized);
|
|
1106
|
+
} catch (error) {
|
|
1107
|
+
deps.print(`[ask] 형제 맥락 기록 못 남김 (${error instanceof Error ? error.message : String(error)})`);
|
|
1108
|
+
}
|
|
1109
|
+
}
|
|
1039
1110
|
// ⛔ 자식 격리 worktree를 만들기 전, 이 흐름을 호출한 작업 트리에서만 센다.
|
|
1040
1111
|
// 이 관측은 발사 판정의 입력이 아니다 — 의도적으로 옛 판에서 쏘는 경우도 있다.
|
|
1041
1112
|
const invokerBehindDefaultBranch = deps.measureInvokerBehindDefaultBranch?.()
|
package/src/self-dev/dev-cli.ts
CHANGED
|
@@ -67,6 +67,7 @@ import { BEDROCK_DEFAULT_MODEL, BEDROCK_MODELS, findBedrockModel, resolveBedrock
|
|
|
67
67
|
import { ZAI_CODING_DEFAULT_MODEL, ZAI_CODING_MODELS } from '../llm/zai-coding-plan.js';
|
|
68
68
|
import { isVerifiedOpenGatewayModel, OPENGATEWAY_DEFAULT_MODEL, OPENGATEWAY_VERIFIED_MODELS } from '../llm/opengateway-models.js';
|
|
69
69
|
import { DEV_PLAN_REPLACEMENT } from './cli-help-text.js';
|
|
70
|
+
import { DEFAULT_TUI_TEST_READY_TIMEOUT_MS } from '../self-implement/elanous-tui-spawn.js';
|
|
70
71
|
export { DEV_PLAN_REPLACEMENT, formatDevPlanOptionHelp } from './cli-help-text.js';
|
|
71
72
|
|
|
72
73
|
/** dev CLI 옵션(commander) — `--no-*` 는 false 로 도착. input/executor 는 액션이 빌드해 별도 전달. */
|
|
@@ -2187,7 +2188,9 @@ export function buildDevCliSpec(
|
|
|
2187
2188
|
...spec,
|
|
2188
2189
|
elanous: {
|
|
2189
2190
|
...(opts.hold ? { hold: true } : {}),
|
|
2190
|
-
...(opts.readyTimeoutMs !== undefined
|
|
2191
|
+
...(opts.readyTimeoutMs !== undefined
|
|
2192
|
+
? { readyTimeoutMs: parsePositiveInt(opts.readyTimeoutMs, '--ready-timeout-ms') }
|
|
2193
|
+
: opts.hold ? { readyTimeoutMs: DEFAULT_TUI_TEST_READY_TIMEOUT_MS } : {}),
|
|
2191
2194
|
...(opts.json ? { json: true } : {}),
|
|
2192
2195
|
...(opts.goal !== undefined ? { goal: opts.goal } : {}),
|
|
2193
2196
|
...(opts.maxSteps !== undefined ? { maxSteps: parsePositiveInt(opts.maxSteps, '--max-steps') } : {}),
|
|
@@ -68,6 +68,8 @@ export interface DevMissionOpts {
|
|
|
68
68
|
resources?: 'on' | 'off';
|
|
69
69
|
backendExplicit?: string;
|
|
70
70
|
headless?: boolean;
|
|
71
|
+
/** Optional second user turn resumed in the same Claude/Codex CLI session. */
|
|
72
|
+
followUp?: string;
|
|
71
73
|
evidence?: EvidenceMode;
|
|
72
74
|
maxRounds?: number;
|
|
73
75
|
commit?: boolean;
|
|
@@ -643,6 +645,7 @@ export function toAgentMissionSpec(
|
|
|
643
645
|
evidence: m.evidence ?? { kind: 'tsc' }, // 기본 tsc(mission 옵션 미지정 시)
|
|
644
646
|
agent: resolveBackend(plan.executor.backend),
|
|
645
647
|
...(m.headless === true ? { headless: true } : {}),
|
|
648
|
+
...(m.followUp !== undefined ? { followUp: m.followUp } : {}),
|
|
646
649
|
...(m.chain ? { chain: m.chain } : {}),
|
|
647
650
|
...(m.plugin ? { plugin: m.plugin } : {}),
|
|
648
651
|
...(m.resources !== undefined ? { resources: m.resources } : {}),
|
|
@@ -670,6 +673,7 @@ export function buildAgentMissionDevSpec(o: {
|
|
|
670
673
|
branch: string;
|
|
671
674
|
base?: string;
|
|
672
675
|
headless?: boolean;
|
|
676
|
+
followUp?: string;
|
|
673
677
|
chain?: readonly ('codex' | 'claude' | 'elanous')[];
|
|
674
678
|
plugin?: { plugin: string; marketplace: string };
|
|
675
679
|
resources?: 'on' | 'off';
|
|
@@ -691,6 +695,7 @@ export function buildAgentMissionDevSpec(o: {
|
|
|
691
695
|
mission: {
|
|
692
696
|
evidence: o.evidence,
|
|
693
697
|
...(o.headless === true ? { headless: true } : {}),
|
|
698
|
+
...(o.followUp !== undefined ? { followUp: o.followUp } : {}),
|
|
694
699
|
...(o.chain ? { chain: o.chain } : {}),
|
|
695
700
|
...(o.plugin ? { plugin: o.plugin } : {}),
|
|
696
701
|
...(o.resources !== undefined ? { resources: o.resources } : {}),
|
|
@@ -3,7 +3,7 @@ import { readdirSync, readFileSync, existsSync } from 'node:fs';
|
|
|
3
3
|
import { gunzipSync } from 'node:zlib';
|
|
4
4
|
import { basename, dirname, join } from 'node:path';
|
|
5
5
|
import { findGitDir } from '../git-fs/locate.js';
|
|
6
|
-
import { debug } from '../debug/log.js';
|
|
6
|
+
import { debug, redactSecretText } from '../debug/log.js';
|
|
7
7
|
import { PR_LABELS, PR_LABEL_NAMES } from '../github/pr-labels.js';
|
|
8
8
|
import { appendRunLedgerEntry, listRunLedgers, loadRunLedger, runLedgerDir, type RunLedgerEntry } from '../self-implement/run-ledger.js';
|
|
9
9
|
import { queryRunningRuns } from '../self-implement/running-runs.js';
|
|
@@ -161,9 +161,42 @@ const GH_MAX_BUFFER = 64 * 1024 * 1024;
|
|
|
161
161
|
* several times larger than this projection, so the listing asks gh to project each page down to these fields. */
|
|
162
162
|
const OPEN_DRAFT_FIELDS = '[.[] | {number, title, headRefName: .head.ref, createdAt: .created_at, body, labels: [.labels[] | {name}], draft}]';
|
|
163
163
|
|
|
164
|
+
interface GhFailureEvidence {
|
|
165
|
+
args: readonly string[];
|
|
166
|
+
status: number | null;
|
|
167
|
+
signal: NodeJS.Signals | null;
|
|
168
|
+
errorCode?: string;
|
|
169
|
+
stderr: string;
|
|
170
|
+
capturedStderrBytes: number;
|
|
171
|
+
stdoutBytes: number;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
class GhCommandError extends Error {
|
|
175
|
+
constructor(message: string, readonly evidence: GhFailureEvidence) {
|
|
176
|
+
super(message);
|
|
177
|
+
this.name = 'GhCommandError';
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function executionSha(): string | undefined {
|
|
182
|
+
const sha = process.env.ELANOUS_EXECUTION_SHA?.trim();
|
|
183
|
+
return sha && /^[a-f0-9]{40}$/i.test(sha) ? sha : undefined;
|
|
184
|
+
}
|
|
185
|
+
|
|
164
186
|
function gh(args: string[]): string {
|
|
165
|
-
const
|
|
166
|
-
|
|
187
|
+
const cwd = findGitDir(process.cwd())?.root ?? process.cwd();
|
|
188
|
+
const result = spawnSync('gh', args, { cwd, encoding: 'utf8', timeout: 60_000, maxBuffer: GH_MAX_BUFFER });
|
|
189
|
+
if (result.status !== 0) {
|
|
190
|
+
const spawnError = result.error as NodeJS.ErrnoException | undefined;
|
|
191
|
+
const stderr = result.stderr ?? '';
|
|
192
|
+
const reason = (stderr || spawnError?.message || `gh exited ${result.status}`).trim().slice(0, 200);
|
|
193
|
+
throw new GhCommandError(reason, {
|
|
194
|
+
args: [...args], status: result.status, signal: result.signal,
|
|
195
|
+
...(spawnError?.code ? { errorCode: spawnError.code } : {}),
|
|
196
|
+
stderr: redactSecretText(stderr).replace(/[\r\n\t\x00-\x1f\x7f]+/g, ' ').slice(0, 4_000), capturedStderrBytes: Buffer.byteLength(stderr),
|
|
197
|
+
stdoutBytes: Buffer.byteLength(result.stdout ?? ''),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
167
200
|
return result.stdout.trim();
|
|
168
201
|
}
|
|
169
202
|
function ghPr(row: { number: number; title: string; headRefName: string; headRefOid?: string; isDraft?: boolean; createdAt: string; body: string; labels: Array<{ name: string }>; comments?: Array<{ body: string }>; state?: string }): ResiduePr {
|
|
@@ -233,8 +266,9 @@ export function defaultAdapters(sources: ResidueRunStatusSources = defaultRunSta
|
|
|
233
266
|
},
|
|
234
267
|
listOpenDrafts: (repository) => {
|
|
235
268
|
const rows: ResiduePr[] = [];
|
|
269
|
+
let page = 0;
|
|
236
270
|
try {
|
|
237
|
-
for (
|
|
271
|
+
for (page = 1; page <= 100; page++) {
|
|
238
272
|
const result = JSON.parse(gh(['api', `repos/${repository}/pulls?state=open&per_page=100&page=${page}`, '--jq', OPEN_DRAFT_FIELDS])) as Array<{
|
|
239
273
|
number: number; title: string; headRefName: string; createdAt: string; body: string;
|
|
240
274
|
labels: Array<{ name: string }>; draft: boolean;
|
|
@@ -246,7 +280,32 @@ export function defaultAdapters(sources: ResidueRunStatusSources = defaultRunSta
|
|
|
246
280
|
throw new Error('Open PR inventory exceeded pagination limit');
|
|
247
281
|
} catch (error) {
|
|
248
282
|
// «못 셌음»: a failed (or truncated) listing is unmeasurable — it must never surface as a counted zero.
|
|
249
|
-
|
|
283
|
+
const ghEvidence = error instanceof GhCommandError ? error.evidence : undefined;
|
|
284
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
285
|
+
const isEnobufs = ghEvidence?.errorCode === 'ENOBUFS' || /ENOBUFS/.test(reason);
|
|
286
|
+
const runSha = executionSha();
|
|
287
|
+
const responseBytes = !ghEvidence
|
|
288
|
+
? { status: 'unmeasured', complete: false,
|
|
289
|
+
reason: /pagination limit/.test(reason) ? 'pagination limit reached; aggregate page response bytes were not retained'
|
|
290
|
+
: 'the failed inventory response byte count was not retained' }
|
|
291
|
+
: isEnobufs || ghEvidence.errorCode || ghEvidence.status === null || ghEvidence.signal !== null
|
|
292
|
+
? { status: 'unmeasured', capturedBytes: ghEvidence.stdoutBytes, complete: false,
|
|
293
|
+
reason: isEnobufs ? 'spawnSync ENOBUFS truncates child output before the complete REST response length is known'
|
|
294
|
+
: ghEvidence.signal ? `child process was terminated by ${ghEvidence.signal}`
|
|
295
|
+
: ghEvidence.status === null ? 'child exit status is unavailable, so response completeness is unknown'
|
|
296
|
+
: 'the child process ended with an error before response completeness could be established' }
|
|
297
|
+
: { status: 'measured', bytes: ghEvidence.stdoutBytes, complete: true };
|
|
298
|
+
debug.log('draft.residue', 'list-open-drafts-unobserved', {
|
|
299
|
+
repository, reason: redactSecretText(reason), requestedPage: page <= 100 ? page : null,
|
|
300
|
+
paginationLimitExceeded: page > 100, request: ghEvidence?.args ?? null,
|
|
301
|
+
exitStatus: ghEvidence?.status ?? null, signal: ghEvidence?.signal ?? null,
|
|
302
|
+
errorCode: ghEvidence?.errorCode ?? null,
|
|
303
|
+
stderr: ghEvidence?.stderr ?? null, capturedStderrBytes: ghEvidence?.capturedStderrBytes ?? null,
|
|
304
|
+
responseBytes,
|
|
305
|
+
executionSha: runSha ? { status: 'measured', value: runSha } : {
|
|
306
|
+
status: 'unmeasured', reason: 'ELANOUS_EXECUTION_SHA is absent or invalid for this process invocation',
|
|
307
|
+
},
|
|
308
|
+
});
|
|
250
309
|
return undefined;
|
|
251
310
|
}
|
|
252
311
|
},
|
|
@@ -220,7 +220,8 @@ export function observeFrontNodeExit(exit: FrontNodeExit, data: FrontNodeExitDat
|
|
|
220
220
|
const graphRoute: JourneyRoute = { ...route, to: budget.to };
|
|
221
221
|
const taken = data.taken ?? budget.to ?? exit.outcome;
|
|
222
222
|
const reason = [budget.budgetReason, data.reason].filter((part): part is string => part !== undefined).join(' · ');
|
|
223
|
-
recordJourneyEdge(graphRoute, taken, reason.length > 0 ? reason : undefined
|
|
223
|
+
recordJourneyEdge(graphRoute, taken, reason.length > 0 ? reason : undefined,
|
|
224
|
+
data.runId === undefined ? {} : { runId: data.runId });
|
|
224
225
|
recorded = graphRoute;
|
|
225
226
|
const payload = {
|
|
226
227
|
graphId: 'self-implement',
|