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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { streamLLM } from '../llm.js';
|
|
2
2
|
import { invokeResearchAxes } from '../research-bridge/index.js';
|
|
3
|
+
import { RESEARCH_TURN_DEADLINE_STOP_ERROR } from '../core-turn/research-policy.js';
|
|
3
4
|
import { invokeResearch } from '../research-bridge/invoke.js';
|
|
4
5
|
import type { AxisFanoutResult } from '../research/axis-fanout.js';
|
|
5
6
|
import { routeResearchOutput } from '../research/output-router.js';
|
|
@@ -18,9 +19,12 @@ import { attachResearchEvidence, buildResearchQuestionLadderPrompt,
|
|
|
18
19
|
|
|
19
20
|
export interface ResearchQuestionLadderRunOptions {
|
|
20
21
|
signal?: AbortSignal;
|
|
22
|
+
admitToolCall?: (toolName: string) => boolean;
|
|
23
|
+
allowPartialOnAbort?: boolean;
|
|
24
|
+
allowOutputSkill?: boolean;
|
|
21
25
|
generateContract?: (prompt: string, signal?: AbortSignal) => Promise<string>;
|
|
22
26
|
generate?: (prompt: string, signal?: AbortSignal) => Promise<string>;
|
|
23
|
-
invokeAxes?: (questions: SixLevelResearchQuestionLadder['questions'], signal?: AbortSignal) => Promise<AxisFanoutResult>;
|
|
27
|
+
invokeAxes?: (questions: SixLevelResearchQuestionLadder['questions'], signal?: AbortSignal, admitToolCall?: (toolName: string) => boolean) => Promise<AxisFanoutResult>;
|
|
24
28
|
routeOutput?: typeof routeResearchOutput;
|
|
25
29
|
invokeOutputSkill?: (skill: string, args: string, signal?: AbortSignal) => Promise<{ ok: boolean; output: string; error?: string }>;
|
|
26
30
|
/** Test seam for the bounded Bloom 4/5 evidence-gap follow-up. */
|
|
@@ -37,6 +41,14 @@ export interface ResearchGroundingResult {
|
|
|
37
41
|
error?: string;
|
|
38
42
|
}
|
|
39
43
|
|
|
44
|
+
function invokeProductionResearchAxes(
|
|
45
|
+
questions: SixLevelResearchQuestionLadder['questions'],
|
|
46
|
+
signal?: AbortSignal,
|
|
47
|
+
admitToolCall?: (toolName: string) => boolean,
|
|
48
|
+
): Promise<AxisFanoutResult> {
|
|
49
|
+
return invokeResearchAxes(questions, { signal, admitToolCall });
|
|
50
|
+
}
|
|
51
|
+
|
|
40
52
|
export interface ResearchQuestionLadderRunResult {
|
|
41
53
|
ok: boolean;
|
|
42
54
|
ladder: SixLevelResearchQuestionLadder;
|
|
@@ -73,6 +85,15 @@ export interface WorkingBackwardsCompletionBoundary {
|
|
|
73
85
|
complete: boolean;
|
|
74
86
|
}
|
|
75
87
|
|
|
88
|
+
function partialResearchOutput(request: string, ladder: SixLevelResearchQuestionLadder, note: string): string {
|
|
89
|
+
const evidence = ladder.evidence.map(item => `- [${item.outcome}] ${item.sourceKind} · ${item.source}: ${item.content}`);
|
|
90
|
+
return [
|
|
91
|
+
`# Partial research: ${request}`,
|
|
92
|
+
`Research stopped at its wall-clock limit (${note}). Synthesize only the evidence listed here and state remaining uncertainty.`,
|
|
93
|
+
...(evidence.length ? ['', '## Evidence collected before stopping', ...evidence] : ['', 'No source evidence was collected before the deadline.']),
|
|
94
|
+
].join('\n');
|
|
95
|
+
}
|
|
96
|
+
|
|
76
97
|
/**
|
|
77
98
|
* Working Backwards 완료 경계 — 출력 계약(buildWorkingBackwardsContractPrompt → parse…Contract)의
|
|
78
99
|
* 슬롯 중 채워지지 않은 칸을 찾고 각 칸을 채울 노드 계획을 낸다. questions 없이 부르면 모든 슬롯이
|
|
@@ -212,9 +233,20 @@ export async function runResearchQuestionLadder(
|
|
|
212
233
|
contractRaw = await (options.generateContract ?? ((prompt, signal) => defaultGenerate(prompt, 'research-working-backwards-contract', signal)))(
|
|
213
234
|
buildWorkingBackwardsContractPrompt(request), options.signal,
|
|
214
235
|
);
|
|
215
|
-
if (options.signal?.aborted)
|
|
236
|
+
if (options.signal?.aborted) {
|
|
237
|
+
return options.allowPartialOnAbort
|
|
238
|
+
? { ok: false, ladder: initial, output: partialResearchOutput(request, initial, 'before question generation'), error: RESEARCH_TURN_DEADLINE_STOP_ERROR }
|
|
239
|
+
: { ok: false, ladder: initial, output: '', error: 'research aborted' };
|
|
240
|
+
}
|
|
216
241
|
} catch (error) {
|
|
217
242
|
const reason = errorText(error);
|
|
243
|
+
if (options.signal?.aborted) {
|
|
244
|
+
return {
|
|
245
|
+
ok: false, ladder: initial,
|
|
246
|
+
output: options.allowPartialOnAbort ? partialResearchOutput(request, initial, 'output-contract generation') : '',
|
|
247
|
+
error: RESEARCH_TURN_DEADLINE_STOP_ERROR,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
218
250
|
debug.log('research.lens', 'working-backwards-contract-failed', { reason }, { level: 'warn' });
|
|
219
251
|
return { ok: false, ladder: initial, output: '', error: `output contract generation failed: ${reason}` };
|
|
220
252
|
}
|
|
@@ -247,18 +279,31 @@ export async function runResearchQuestionLadder(
|
|
|
247
279
|
const sectionIds = outputContract.sections.map((section) => section.id);
|
|
248
280
|
// Keep the premium exemplar bank outside the TUI's static import closure.
|
|
249
281
|
const { getBloomExemplarContext } = await import('../research/bloom-exemplars.js');
|
|
282
|
+
const { buildResearchBloom45Directive } = await import('../core-turn/deep-turn-bloom.js');
|
|
283
|
+
const bloom45Directive = await buildResearchBloom45Directive();
|
|
250
284
|
const exemplar = getBloomExemplarContext(request, options.bloomExemplarPackPath);
|
|
251
285
|
debug.log('research.turn', 'bloom-exemplars-selected', {
|
|
252
286
|
domain: exemplar.domain, domainSignal: exemplar.domainSignal,
|
|
253
287
|
source: exemplar.source, count: exemplar.count, levels: exemplar.levels,
|
|
254
288
|
});
|
|
255
289
|
raw = await (options.generate ?? ((prompt, signal) => defaultGenerate(prompt, 'research-question-ladder', signal)))(
|
|
256
|
-
`${buildResearchQuestionLadderPrompt(request, sectionIds)}\n\n${exemplar.context ? `${exemplar.context}\n\n` : ''}${ladderContext}${retroGroundingContext(request)}`,
|
|
290
|
+
`${buildResearchQuestionLadderPrompt(request, sectionIds)}\n\n${bloom45Directive}\n\n${exemplar.context ? `${exemplar.context}\n\n` : ''}${ladderContext}${retroGroundingContext(request)}`,
|
|
257
291
|
options.signal,
|
|
258
292
|
);
|
|
259
|
-
if (options.signal?.aborted)
|
|
293
|
+
if (options.signal?.aborted) {
|
|
294
|
+
return options.allowPartialOnAbort
|
|
295
|
+
? { ok: false, ladder: initial, outputContract, output: partialResearchOutput(request, initial, 'before axis searches'), error: RESEARCH_TURN_DEADLINE_STOP_ERROR }
|
|
296
|
+
: { ok: false, ladder: initial, outputContract, output: '', error: 'research aborted' };
|
|
297
|
+
}
|
|
260
298
|
debug.log('research.turn', 'bloom-generated', { questionCount: 6 });
|
|
261
299
|
} catch (error) {
|
|
300
|
+
if (options.signal?.aborted) {
|
|
301
|
+
return {
|
|
302
|
+
ok: false, ladder: initial, outputContract,
|
|
303
|
+
output: options.allowPartialOnAbort ? partialResearchOutput(request, initial, 'question generation') : '',
|
|
304
|
+
error: RESEARCH_TURN_DEADLINE_STOP_ERROR,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
262
307
|
debug.log('research.turn', 'bloom-failed', { reason: errorText(error) }, { level: 'warn' });
|
|
263
308
|
return { ok: false, ladder: initial, outputContract, output: '', error: `question generation failed: ${errorText(error)}` };
|
|
264
309
|
}
|
|
@@ -280,11 +325,16 @@ export async function runResearchQuestionLadder(
|
|
|
280
325
|
|
|
281
326
|
const ladder = parsed.value;
|
|
282
327
|
debug.log('research.turn', 'bloom-ladder-validated', { questionCount: ladder.questions.length });
|
|
328
|
+
debug.log('research.turn', 'deep-bloom-applied', {
|
|
329
|
+
levels: [4, 5], trigger: 'research-intent',
|
|
330
|
+
stage: 'research-ladder',
|
|
331
|
+
questionCount: ladder.questions.filter((question) => question.level === 4 || question.level === 5).length,
|
|
332
|
+
});
|
|
283
333
|
const observedAt = new Date().toISOString();
|
|
284
334
|
let fanout: AxisFanoutResult;
|
|
285
335
|
try {
|
|
286
|
-
fanout = await (options.invokeAxes ??
|
|
287
|
-
if (options.signal?.aborted) return { ok: false, ladder, outputContract, output: '', error: 'research aborted' };
|
|
336
|
+
fanout = await (options.invokeAxes ?? invokeProductionResearchAxes)(ladder.questions, options.signal, options.admitToolCall);
|
|
337
|
+
if (options.signal?.aborted && !options.allowPartialOnAbort) return { ok: false, ladder, outputContract, output: '', error: 'research aborted' };
|
|
288
338
|
debug.log('research.turn', 'axis-evidence-collected', {
|
|
289
339
|
axisCount: fanout.axes.length,
|
|
290
340
|
evidenceCount: fanout.axes.reduce((count, axis) => count + axis.evidence.length, 0),
|
|
@@ -334,6 +384,10 @@ export async function runResearchQuestionLadder(
|
|
|
334
384
|
debug.log('research.turn', 'completion-boundary-stop', {
|
|
335
385
|
stage: 'axis-fanout', reason: 'every output-contract section slot is filled',
|
|
336
386
|
});
|
|
387
|
+
debug.log('research.stop', 'stage', {
|
|
388
|
+
stage: 'axis-fanout', reason: 'completion-boundary-satisfied',
|
|
389
|
+
evidenceCount: ladder.evidence.length,
|
|
390
|
+
});
|
|
337
391
|
}
|
|
338
392
|
if (!finalBoundary.complete && !options.signal?.aborted) {
|
|
339
393
|
const followupStartedAt = performance.now();
|
|
@@ -373,6 +427,10 @@ export async function runResearchQuestionLadder(
|
|
|
373
427
|
classifications: followupPlan.classifications.length,
|
|
374
428
|
timeBudgetMs: followupPlan.timeBudgetMs,
|
|
375
429
|
});
|
|
430
|
+
debug.log('research.stop', 'stage', {
|
|
431
|
+
stage: 'gap-followup', reason: 'no-runnable-followup-calls',
|
|
432
|
+
classifications: followupPlan.classifications.length,
|
|
433
|
+
});
|
|
376
434
|
} else {
|
|
377
435
|
const executionStartedAt = performance.now();
|
|
378
436
|
debug.log('research.turn', 'gap-followup-started', {
|
|
@@ -411,6 +469,10 @@ export async function runResearchQuestionLadder(
|
|
|
411
469
|
debug.log('research.turn', 'completion-boundary-stop', {
|
|
412
470
|
stage: 'gap-followup', reason: 'every output-contract section slot is filled',
|
|
413
471
|
});
|
|
472
|
+
debug.log('research.stop', 'stage', {
|
|
473
|
+
stage: 'gap-followup', reason: 'completion-boundary-satisfied',
|
|
474
|
+
evidenceCount: ladder.evidence.length,
|
|
475
|
+
});
|
|
414
476
|
}
|
|
415
477
|
} catch (error) {
|
|
416
478
|
debug.log('research.turn', 'gap-followup-failed', {
|
|
@@ -420,13 +482,30 @@ export async function runResearchQuestionLadder(
|
|
|
420
482
|
}
|
|
421
483
|
}
|
|
422
484
|
}
|
|
423
|
-
if (options.signal?.aborted) return { ok: false, ladder, outputContract, output: '', error: 'research aborted' };
|
|
485
|
+
if (options.signal?.aborted && !options.allowPartialOnAbort) return { ok: false, ladder, outputContract, output: '', error: 'research aborted' };
|
|
424
486
|
|
|
425
487
|
const outputContractSectionIndex = sections.findIndex((section) => section.startsWith('## Output contract\n'));
|
|
426
488
|
if (outputContractSectionIndex < 0) throw new Error('output contract section is missing from research output');
|
|
427
489
|
sections.splice(outputContractSectionIndex + 1, 0,
|
|
428
490
|
formatWorkingBackwardsSkeleton(outputContract, finalBoundary, evidenceRejected));
|
|
429
491
|
|
|
492
|
+
// The axis fanout is the last stage allowed to spend the research budget.
|
|
493
|
+
// Once it returns after an abort, keep whatever evidence it collected and
|
|
494
|
+
// return it directly; no post-deadline router/skill stage may discard it or
|
|
495
|
+
// attempt more model work with the already-aborted signal.
|
|
496
|
+
if (options.signal?.aborted && options.allowPartialOnAbort) {
|
|
497
|
+
const partialOutput = sections.join('\n\n');
|
|
498
|
+
saveRetroRecord(request, ladder, ladder.evidence);
|
|
499
|
+
debug.log('research.stop', 'stopped', {
|
|
500
|
+
reason: 'wall-clock-budget', stage: 'after-axis-evidence',
|
|
501
|
+
evidenceCount: ladder.evidence.length,
|
|
502
|
+
});
|
|
503
|
+
return {
|
|
504
|
+
ok: false, ladder, outputContract, output: partialOutput,
|
|
505
|
+
error: RESEARCH_TURN_DEADLINE_STOP_ERROR,
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
|
|
430
509
|
const incompleteQuestions = ladder.questions.filter((question) =>
|
|
431
510
|
!ladder.evidence.some((item) => item.questionId === question.id && item.outcome === 'complete')).length;
|
|
432
511
|
const allOk = !evidenceRejected && incompleteQuestions === 0;
|
|
@@ -459,7 +538,13 @@ export async function runResearchQuestionLadder(
|
|
|
459
538
|
});
|
|
460
539
|
let routedOutput = '';
|
|
461
540
|
const hasCompleteEvidence = ladder.evidence.some((item) => item.outcome === 'complete');
|
|
462
|
-
if (route?.skillCallPlan &&
|
|
541
|
+
if (route?.skillCallPlan && options.allowOutputSkill === false) {
|
|
542
|
+
debug.log('research.turn', 'output-skill-skipped', {
|
|
543
|
+
skill: route.skillCallPlan.skill,
|
|
544
|
+
reason: 'research turn tool allowlist excludes skill execution',
|
|
545
|
+
evidenceCount: ladder.evidence.length,
|
|
546
|
+
});
|
|
547
|
+
} else if (route?.skillCallPlan && !hasCompleteEvidence) {
|
|
463
548
|
debug.log('research.turn', 'output-skill-skipped', {
|
|
464
549
|
skill: route.skillCallPlan.skill,
|
|
465
550
|
reason: 'no-complete-evidence',
|
|
@@ -500,11 +585,11 @@ export async function runResearchQuestionLadder(
|
|
|
500
585
|
}
|
|
501
586
|
saveRetroRecord(request, ladder, ladder.evidence);
|
|
502
587
|
return {
|
|
503
|
-
ok: allOk,
|
|
588
|
+
ok: allOk && !options.signal?.aborted,
|
|
504
589
|
ladder,
|
|
505
590
|
outputContract,
|
|
506
591
|
output: output + routedOutput,
|
|
507
|
-
...(allOk ? {
|
|
592
|
+
...(!allOk || options.signal?.aborted ? { error: options.signal?.aborted ? RESEARCH_TURN_DEADLINE_STOP_ERROR : `${incompleteQuestions} of ${ladder.questions.length} question searches were incomplete` } : {}),
|
|
508
593
|
};
|
|
509
594
|
}
|
|
510
595
|
|
|
@@ -548,10 +548,37 @@ function reuseSameCellPr(run: CmdRunner, input: UpsertPrInput, target: NonNullab
|
|
|
548
548
|
return fail('PR changed before superseding draft');
|
|
549
549
|
const newRef = `refs/heads/${input.branch}`;
|
|
550
550
|
if (!run('git', ['-C', cwd, 'check-ref-format', '--branch', input.branch]).ok) return fail('new run branch name invalid');
|
|
551
|
-
const newRemote = run('git', ['-C', cwd, 'ls-remote', '--heads', 'origin', newRef]);
|
|
552
|
-
if (!newRemote.ok || newRemote.out.trim()) return fail('new run branch already exists or remote unreadable');
|
|
553
551
|
const localHead = run('git', ['-C', cwd, 'rev-parse', 'HEAD']);
|
|
554
|
-
|
|
552
|
+
const localHeadSha = localHead.out.trim();
|
|
553
|
+
if (!localHead.ok || !/^[0-9a-f]{40}$/i.test(localHeadSha)) return fail('new run head unreadable');
|
|
554
|
+
const newRemote = run('git', ['-C', cwd, 'ls-remote', '--heads', 'origin', newRef]);
|
|
555
|
+
if (!newRemote.ok) return fail('new run branch already exists or remote unreadable');
|
|
556
|
+
let retryBranchAlreadyExists = false;
|
|
557
|
+
if (newRemote.out.trim()) {
|
|
558
|
+
if (newRemote.out.trim() !== `${localHeadSha}\t${newRef}`) return fail('new run branch already exists or remote unreadable');
|
|
559
|
+
const existingDrafts = run('gh', ['pr', 'list', '--head', input.branch, '--state', 'open', '--json', 'url'], { cwd });
|
|
560
|
+
let existingRows: Array<{ url?: unknown }>;
|
|
561
|
+
try { existingRows = JSON.parse(existingDrafts.out) as Array<{ url?: unknown }>; }
|
|
562
|
+
catch { return fail('existing retry draft listing malformed'); }
|
|
563
|
+
if (!existingDrafts.ok) return fail('existing retry draft lookup failed');
|
|
564
|
+
if (!existingRows.length) retryBranchAlreadyExists = true;
|
|
565
|
+
else {
|
|
566
|
+
if (existingRows.length !== 1 || typeof existingRows[0]?.url !== 'string') return fail('existing retry draft lookup ambiguous');
|
|
567
|
+
const existingUrl = existingRows[0].url;
|
|
568
|
+
const existingView = run('gh', ['pr', 'view', existingUrl, '--json', 'state,isDraft,headRefOid,headRefName,body,url'], { cwd });
|
|
569
|
+
let existingFields: Record<string, unknown>;
|
|
570
|
+
try { existingFields = JSON.parse(existingView.out) as Record<string, unknown>; }
|
|
571
|
+
catch { return fail('existing retry draft identity malformed'); }
|
|
572
|
+
if (!existingView.ok || existingFields.state !== 'OPEN' || existingFields.isDraft !== true
|
|
573
|
+
|| existingFields.headRefOid !== localHeadSha || existingFields.headRefName !== input.branch
|
|
574
|
+
|| existingFields.url !== existingUrl || typeof existingFields.body !== 'string'
|
|
575
|
+
|| cellIdFromBody(existingFields.body) !== cellIdFromBody(input.body)
|
|
576
|
+
|| cardIdFromBody(existingFields.body) !== cardIdFromBody(input.body))
|
|
577
|
+
return fail('existing retry draft identity mismatch');
|
|
578
|
+
return { ok: true, url: existingUrl, reused: true };
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
if (!retryBranchAlreadyExists) {
|
|
555
582
|
// Upload the commit through a unique scratch ref. GitHub's create-ref API then
|
|
556
583
|
// atomically refuses a concurrent writer of the intended branch name.
|
|
557
584
|
const runKey = input.runId ? runSuffixKey(input.runId) : null;
|
|
@@ -590,6 +617,7 @@ function reuseSameCellPr(run: CmdRunner, input: UpsertPrInput, target: NonNullab
|
|
|
590
617
|
: { ok: false, out: '', err: 'repository identity unavailable' };
|
|
591
618
|
reapScratchRef(createdRef.ok ? 'branch-created' : 'create-refused');
|
|
592
619
|
if (!createdRef.ok) return fail(`new run branch create refused: ${(createdRef.err || createdRef.out).slice(0, 220)}`);
|
|
620
|
+
}
|
|
593
621
|
const stateLabels = new Set(labelsForAxis('state').map(label => label.name));
|
|
594
622
|
const labels = [...new Set([...(input.labels ?? []).filter(label => !stateLabels.has(label as typeof PR_LABEL_NAMES.running)),
|
|
595
623
|
PR_LABEL_NAMES.running, ...(input.seat ? [`seat:${input.seat}`] : [])])];
|
|
@@ -30,7 +30,7 @@ import { debug } from '../../debug/log.js';
|
|
|
30
30
|
import { globalAgentRegistry, type AgentRegistry } from '../../agent/registry.js';
|
|
31
31
|
import type { TaskNotificationQueue } from '../../agent/task-notification.js';
|
|
32
32
|
import { effectiveInstanceRoot } from '../../instance/resolve.js';
|
|
33
|
-
import { writeAuthoredGoal } from '../../self-implement/goal-author.js';
|
|
33
|
+
import { resolveGoalAuthorReviewerPrecheckEnabled, writeAuthoredGoal } from '../../self-implement/goal-author.js';
|
|
34
34
|
import { selfAnswerOrAssumeGoalDocumentClarifications, type GoalClarificationSelfResolver } from '../../self-implement/goal-author-clarification.js';
|
|
35
35
|
import { writeGoalDocumentAtomic } from '../../self-implement/goal-document-write.js';
|
|
36
36
|
import { DecisionLedger } from '../../decisions/decision-ledger.js';
|
|
@@ -220,6 +220,7 @@ type SelfImplementGoalAuthor = (ask: string, cwd: string, deps?: {
|
|
|
220
220
|
goalTitle?: string;
|
|
221
221
|
decomposeSteps?: (objective: string, opts?: { context?: string }) => Promise<readonly string[]>;
|
|
222
222
|
onProgress?: (phase: import('../../self-implement/goal-author.js').GoalAuthorPhase, event: 'start' | 'end') => void;
|
|
223
|
+
reviewerPrecheckEnabled?: boolean;
|
|
223
224
|
}) => Promise<{ path: string }>;
|
|
224
225
|
|
|
225
226
|
const GOAL_ORIGINAL_TEXT_LIMIT = null;
|
|
@@ -328,6 +329,7 @@ export async function dispatchSelfImplement(
|
|
|
328
329
|
const recentStepCounts = readRecentStepCountsFailOpen(recentStepCountReader);
|
|
329
330
|
goalFile = (await authorGoal(goalSourceText, ctx.cwd, {
|
|
330
331
|
goalTitle: feature,
|
|
332
|
+
reviewerPrecheckEnabled: resolveGoalAuthorReviewerPrecheckEnabled(),
|
|
331
333
|
decomposeSteps: createDecomposeSteps(ctx.signal, {
|
|
332
334
|
repositoryRoot: ctx.cwd,
|
|
333
335
|
...(adversarialReview !== undefined ? { adversarialReview } : {}),
|
|
@@ -40,8 +40,7 @@ export function buildWebSearchTool(): LLMToolSpec {
|
|
|
40
40
|
return {
|
|
41
41
|
name: 'WebSearch',
|
|
42
42
|
description:
|
|
43
|
-
'Search the public web via
|
|
44
|
-
'Firecrawl / etc.). When no key is available, falls back to keyless DuckDuckGo. ' +
|
|
43
|
+
'Search the public web via Exa then Firecrawl; X/Twitter intent may use Grok. ' +
|
|
45
44
|
'Returns a ranked list of URLs + titles + snippets. ' +
|
|
46
45
|
'For fact questions, answer directly from the snippets and URLs; read the full body only when insufficient. ' +
|
|
47
46
|
'Pair with a follow-up Read or external WebFetch when the model needs ' +
|
|
@@ -32,6 +32,10 @@ export interface BriefItem {
|
|
|
32
32
|
deadline: string | null;
|
|
33
33
|
evidence: string | null;
|
|
34
34
|
source: string;
|
|
35
|
+
/** Existing Linear issue identifier; this is the secretary contract key. */
|
|
36
|
+
issue_ref?: string | null;
|
|
37
|
+
/** Parent Linear issue UUID used by the Linear comment projector. */
|
|
38
|
+
linearIssueId?: string | null;
|
|
35
39
|
created_at: string;
|
|
36
40
|
sent_at: string | null;
|
|
37
41
|
}
|
|
@@ -43,6 +47,9 @@ export interface AddBriefItem {
|
|
|
43
47
|
deadline?: string | null;
|
|
44
48
|
evidence?: string | null;
|
|
45
49
|
source: string;
|
|
50
|
+
/** Reuses the Linear secretary issue identifier; no intake-specific key is created. */
|
|
51
|
+
issueRef?: string | null;
|
|
52
|
+
linearIssueId?: string;
|
|
46
53
|
createdAt?: string;
|
|
47
54
|
/** Optional normalized claim identity and time window for repeat observations. */
|
|
48
55
|
dedupeKey?: string;
|
|
@@ -185,6 +192,7 @@ function itemLine(item: BriefItem): string {
|
|
|
185
192
|
const extra = [
|
|
186
193
|
item.deadline ? `마감: ${item.deadline}` : '',
|
|
187
194
|
item.evidence ? `근거: ${item.evidence}` : '',
|
|
195
|
+
item.issue_ref ? `관련 이슈: ${item.issue_ref}` : '',
|
|
188
196
|
`출처: ${item.source}`,
|
|
189
197
|
].filter(Boolean).join(' · ');
|
|
190
198
|
return `- [${item.priority}] ${item.text} (${extra})`;
|
|
@@ -207,6 +215,7 @@ function migrateLegacyItems(db: Database, log: (category: string, event: string,
|
|
|
207
215
|
deadline TEXT,
|
|
208
216
|
evidence TEXT,
|
|
209
217
|
source TEXT NOT NULL,
|
|
218
|
+
linear_issue_id TEXT,
|
|
210
219
|
created_at TEXT NOT NULL,
|
|
211
220
|
sent_at TEXT
|
|
212
221
|
)`);
|
|
@@ -222,6 +231,12 @@ function migrateLegacyItems(db: Database, log: (category: string, event: string,
|
|
|
222
231
|
log('briefing.items', 'migrated-legacy', { rows: (db.query('SELECT COUNT(*) AS n FROM items_v1').get() as { n: number }).n });
|
|
223
232
|
}
|
|
224
233
|
|
|
234
|
+
function briefItem(row: BriefItem): BriefItem {
|
|
235
|
+
if (row.issue_ref != null) return row;
|
|
236
|
+
const { issue_ref: _issueRef, ...legacy } = row;
|
|
237
|
+
return legacy;
|
|
238
|
+
}
|
|
239
|
+
|
|
225
240
|
/** Append-only briefing item ledger at `<state>/briefing/items.sqlite`. */
|
|
226
241
|
export class BriefItemsLedger {
|
|
227
242
|
readonly path: string;
|
|
@@ -251,6 +266,8 @@ export class BriefItemsLedger {
|
|
|
251
266
|
deadline TEXT,
|
|
252
267
|
evidence TEXT,
|
|
253
268
|
source TEXT NOT NULL,
|
|
269
|
+
issue_ref TEXT,
|
|
270
|
+
linear_issue_id TEXT,
|
|
254
271
|
created_at TEXT NOT NULL,
|
|
255
272
|
sent_at TEXT
|
|
256
273
|
);
|
|
@@ -284,8 +301,11 @@ export class BriefItemsLedger {
|
|
|
284
301
|
update_id TEXT NOT NULL,
|
|
285
302
|
PRIMARY KEY (bot_id, chat_id, update_id)
|
|
286
303
|
);`);
|
|
287
|
-
|
|
288
|
-
|
|
304
|
+
const columns = db.query("SELECT name FROM pragma_table_info('items')").all() as { name: string }[];
|
|
305
|
+
if (!columns.some(column => column.name === 'dedupe_key')) db.exec('ALTER TABLE items ADD COLUMN dedupe_key TEXT');
|
|
306
|
+
if (!columns.some(column => column.name === 'issue_ref')) db.exec('ALTER TABLE items ADD COLUMN issue_ref TEXT');
|
|
307
|
+
if (!columns.some(column => column.name === 'linear_issue_id')) {
|
|
308
|
+
db.exec('ALTER TABLE items ADD COLUMN linear_issue_id TEXT');
|
|
289
309
|
}
|
|
290
310
|
db.exec('CREATE INDEX IF NOT EXISTS items_dedupe ON items(source, dedupe_key, created_at)');
|
|
291
311
|
return work(db);
|
|
@@ -301,6 +321,9 @@ export class BriefItemsLedger {
|
|
|
301
321
|
if (!(BRIEF_DOMAINS as readonly string[]).includes(input.domain)) throw new BriefItemsInputError('invalid domain');
|
|
302
322
|
if (!(BRIEF_PRIORITIES as readonly string[]).includes(input.priority)) throw new BriefItemsInputError('invalid priority');
|
|
303
323
|
const source = required(input.source, 'source');
|
|
324
|
+
if (input.linearIssueId !== undefined && !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(input.linearIssueId)) {
|
|
325
|
+
throw new BriefItemsInputError('invalid Linear issue UUID');
|
|
326
|
+
}
|
|
304
327
|
const deadline = optional(input.deadline, 'deadline');
|
|
305
328
|
// Every field that reaches the composed Markdown is one line, so no stored item can forge a heading or entry (ACP must-fix).
|
|
306
329
|
for (const [field, value] of [['source', source], ['evidence', input.evidence ?? null], ['deadline', deadline]] as const) {
|
|
@@ -311,6 +334,8 @@ export class BriefItemsLedger {
|
|
|
311
334
|
if (!format.test(deadline) || !Number.isFinite(Date.parse(deadline))) throw new BriefItemsInputError('invalid deadline');
|
|
312
335
|
}
|
|
313
336
|
const evidence = optional(input.evidence, 'evidence');
|
|
337
|
+
const issueRef = optional(input.issueRef, 'issueRef');
|
|
338
|
+
if (issueRef !== null && /[\r\n]/.test(issueRef)) throw new BriefItemsInputError('issueRef must be a single line');
|
|
314
339
|
const createdAt = input.createdAt ?? this.now().toISOString();
|
|
315
340
|
if (!Number.isFinite(Date.parse(createdAt))) throw new BriefItemsInputError('invalid createdAt');
|
|
316
341
|
const dedupeKey = input.dedupeKey === undefined ? null : normalizeClaim(required(input.dedupeKey, 'dedupeKey'));
|
|
@@ -319,7 +344,7 @@ export class BriefItemsLedger {
|
|
|
319
344
|
throw new BriefItemsInputError('invalid dedupe window');
|
|
320
345
|
}
|
|
321
346
|
const selected = this.using(db => {
|
|
322
|
-
const select = 'SELECT id, text, domain, priority, deadline, evidence, source, created_at, (SELECT MIN(sent_at) FROM sends WHERE sends.item_id = items.id) AS sent_at FROM items WHERE id = ?';
|
|
347
|
+
const select = 'SELECT id, text, domain, priority, deadline, evidence, source, issue_ref, linear_issue_id AS linearIssueId, created_at, (SELECT MIN(sent_at) FROM sends WHERE sends.item_id = items.id) AS sent_at FROM items WHERE id = ?';
|
|
323
348
|
db.exec('BEGIN IMMEDIATE');
|
|
324
349
|
try {
|
|
325
350
|
if (dedupeKey !== null && windowMs !== undefined) {
|
|
@@ -329,15 +354,15 @@ export class BriefItemsLedger {
|
|
|
329
354
|
AND julianday(created_at) <= julianday(?) ORDER BY id DESC LIMIT 1`)
|
|
330
355
|
.get(source, dedupeKey, createdAt, windowMs, createdAt) as { id: number } | null;
|
|
331
356
|
if (existing) {
|
|
332
|
-
const item = db.query(select).get(existing.id) as BriefItem;
|
|
357
|
+
const item = briefItem(db.query(select).get(existing.id) as BriefItem);
|
|
333
358
|
db.exec('COMMIT');
|
|
334
359
|
return { item, added: false };
|
|
335
360
|
}
|
|
336
361
|
}
|
|
337
362
|
const result = db.query(
|
|
338
|
-
'INSERT INTO items (text, domain, priority, deadline, evidence, source, created_at, sent_at, dedupe_key) VALUES (?, ?, ?, ?, ?, ?, ?, NULL, ?)',
|
|
339
|
-
).run(text, input.domain, input.priority, deadline, evidence, source, createdAt, dedupeKey);
|
|
340
|
-
const item = db.query(select).get(result.lastInsertRowid) as BriefItem;
|
|
363
|
+
'INSERT INTO items (text, domain, priority, deadline, evidence, source, issue_ref, linear_issue_id, created_at, sent_at, dedupe_key) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NULL, ?)',
|
|
364
|
+
).run(text, input.domain, input.priority, deadline, evidence, source, issueRef, input.linearIssueId ?? null, createdAt, dedupeKey);
|
|
365
|
+
const item = briefItem(db.query(select).get(result.lastInsertRowid) as BriefItem);
|
|
341
366
|
db.exec('COMMIT');
|
|
342
367
|
return { item, added: true };
|
|
343
368
|
} catch (cause) {
|
|
@@ -434,9 +459,13 @@ export class BriefItemsLedger {
|
|
|
434
459
|
|
|
435
460
|
/** Insertion order. Optional domain filter. Item text is the stored original. */
|
|
436
461
|
list(filters: { domain?: BriefDomain } = {}): BriefItem[] {
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
462
|
+
const rows = this.using(db => {
|
|
463
|
+
const select = 'SELECT id, text, domain, priority, deadline, evidence, source, issue_ref, linear_issue_id AS linearIssueId, created_at, (SELECT MIN(sent_at) FROM sends WHERE sends.item_id = items.id) AS sent_at FROM items';
|
|
464
|
+
return filters.domain === undefined
|
|
465
|
+
? db.query(`${select} ORDER BY id`).all()
|
|
466
|
+
: db.query(`${select} WHERE domain = ? ORDER BY id`).all(filters.domain);
|
|
467
|
+
}) as BriefItem[];
|
|
468
|
+
return rows.map(briefItem);
|
|
440
469
|
}
|
|
441
470
|
|
|
442
471
|
/**
|
|
@@ -450,7 +479,7 @@ export class BriefItemsLedger {
|
|
|
450
479
|
}
|
|
451
480
|
|
|
452
481
|
private itemsFromDb(db: Database): BriefItem[] {
|
|
453
|
-
return db.query('SELECT id, text, domain, priority, deadline, evidence, source, created_at, (SELECT MIN(sent_at) FROM sends WHERE sends.item_id = items.id) AS sent_at FROM items ORDER BY id').all() as BriefItem[];
|
|
482
|
+
return (db.query('SELECT id, text, domain, priority, deadline, evidence, source, issue_ref, linear_issue_id AS linearIssueId, created_at, (SELECT MIN(sent_at) FROM sends WHERE sends.item_id = items.id) AS sent_at FROM items ORDER BY id').all() as BriefItem[]).map(briefItem);
|
|
454
483
|
}
|
|
455
484
|
|
|
456
485
|
private pageFromDb(db: Database, slot: BriefSendSlot): { markdown: string; ids: number[] } {
|
|
@@ -562,3 +591,18 @@ export class BriefItemsLedger {
|
|
|
562
591
|
return this.using(db => db.transaction(() => this.markSentInDb(db, ids, slot))());
|
|
563
592
|
}
|
|
564
593
|
}
|
|
594
|
+
|
|
595
|
+
export interface IntakeDailyBrief {
|
|
596
|
+
orchestrationId: string;
|
|
597
|
+
markdown: string;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
function orchestrationId(): string {
|
|
601
|
+
return globalThis.crypto?.randomUUID?.() ?? `intake-brief-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/** Graph entrypoint for the daily 08:30 briefing; requirement-funnel items stay ephemeral. */
|
|
605
|
+
export function composeIntakeDailyBrief(options: BriefItemsOptions = {}): IntakeDailyBrief {
|
|
606
|
+
const ledger = new BriefItemsLedger(options);
|
|
607
|
+
return { orchestrationId: orchestrationId(), markdown: ledger.compose('08:30') };
|
|
608
|
+
}
|
package/src/cli/agent-cli.ts
CHANGED
|
@@ -540,7 +540,7 @@ export async function runChatTurnCli(opts: {
|
|
|
540
540
|
tools = built;
|
|
541
541
|
dispatchTool = (name, args) => built.dispatch(name, args, { signal: toolAbort.signal });
|
|
542
542
|
enabledToolNames = built.specs.map(s => s.name);
|
|
543
|
-
process.
|
|
543
|
+
process.on('SIGINT', abortToolsOnSigint);
|
|
544
544
|
}
|
|
545
545
|
// Wire the universal preamble (project anchor + project tree +
|
|
546
546
|
// family addendum + session-specific guidance) into every CLI system
|
|
@@ -600,6 +600,7 @@ export async function runChatTurnCli(opts: {
|
|
|
600
600
|
userConfig: opts.cfg,
|
|
601
601
|
sessionId: session.id,
|
|
602
602
|
userText: opts.userText,
|
|
603
|
+
...(opts.surface === 'ask' ? { utteranceSurface: 'ask' as const } : {}),
|
|
603
604
|
systemPrompt: agentSystemPrompt,
|
|
604
605
|
onDelta: (d) => {
|
|
605
606
|
replyChunks.push(d);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import { refreshServerCatalog } from '../registry/catalog-server.js';
|
|
3
|
+
import { reloadCatalog } from '../registry/loader.js';
|
|
4
|
+
|
|
5
|
+
export interface CatalogCliDeps {
|
|
6
|
+
refresh?: typeof refreshServerCatalog;
|
|
7
|
+
reload?: typeof reloadCatalog;
|
|
8
|
+
write?: (line: string) => void;
|
|
9
|
+
setExitCode?: (code: number) => void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function registerCatalogCommands(program: Command, deps: CatalogCliDeps = {}): void {
|
|
13
|
+
const catalog = program.command('catalog').description('서명된 LLM 모델 카탈로그 관리');
|
|
14
|
+
catalog.command('refresh')
|
|
15
|
+
.description('서버 카탈로그를 서명·판 검증 후 로컬 캐시에 갱신')
|
|
16
|
+
.option('--json', '구조화 결과')
|
|
17
|
+
.option('--url <url>', '카탈로그 서버 주소 재정의(검증된 서명만 수용)')
|
|
18
|
+
.action(async (opts: { json?: boolean; url?: string }) => {
|
|
19
|
+
const result = await (deps.refresh ?? refreshServerCatalog)(opts.url ? { url: opts.url } : {});
|
|
20
|
+
const write = deps.write ?? ((line: string) => console.log(line));
|
|
21
|
+
if (result.ok) {
|
|
22
|
+
(deps.reload ?? reloadCatalog)();
|
|
23
|
+
const output = { outcome: 'updated', catalogVersion: result.payload.catalogVersion };
|
|
24
|
+
write(opts.json ? JSON.stringify(output) : `카탈로그 갱신 완료 · v${output.catalogVersion}`);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const output = { outcome: 'failed', reason: result.reason };
|
|
28
|
+
write(opts.json ? JSON.stringify(output) : `카탈로그 갱신 실패 · ${output.reason}`);
|
|
29
|
+
(deps.setExitCode ?? ((code: number) => { process.exitCode = code; }))(1);
|
|
30
|
+
});
|
|
31
|
+
}
|
package/src/cli/connector-cli.ts
CHANGED
|
@@ -28,6 +28,7 @@ export interface ConnectorCliDeps {
|
|
|
28
28
|
log?: typeof debug.log;
|
|
29
29
|
bearerToken?: string;
|
|
30
30
|
readKey?: () => Promise<string>;
|
|
31
|
+
stateDir?: string;
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
async function setLinearSecret(id: string, deps: ConnectorCliDeps): Promise<number> {
|
|
@@ -202,3 +203,18 @@ export async function runLinearSync(opts: ConnectorSyncOptions, deps: ConnectorC
|
|
|
202
203
|
const events = await fetchLinearIssues({ apiKey: key, teamKey: opts.team, labelOrPrefix: opts.prefix, fetch: deps.fetch ?? fetch, ledger: deps.ledger });
|
|
203
204
|
return applyLinearEvents(events, opts, deps);
|
|
204
205
|
}
|
|
206
|
+
|
|
207
|
+
export async function runLinearDailyProgress(opts: { send?: boolean; json?: boolean; version?: string }, deps: ConnectorCliDeps = {}): Promise<number> {
|
|
208
|
+
const { syncLinearDailyProgress } = await import('../connectors/linear-daily-progress.js');
|
|
209
|
+
const result = await syncLinearDailyProgress({
|
|
210
|
+
dryRun: !opts.send,
|
|
211
|
+
...(opts.version ? { version: opts.version } : {}),
|
|
212
|
+
...(deps.stateDir ? { stateDir: deps.stateDir } : {}),
|
|
213
|
+
...(deps.getSecret ? { getSecret: deps.getSecret } : {}),
|
|
214
|
+
...(deps.fetch ? { fetch: deps.fetch } : {}),
|
|
215
|
+
...(deps.log ? { log: deps.log } : {}),
|
|
216
|
+
});
|
|
217
|
+
(deps.output ?? console.log)(opts.json ? JSON.stringify(result) :
|
|
218
|
+
`connector linear daily-summary: ${result.dryRun ? 'dry-run' : 'send'} · planned ${result.plan.length} · posted ${result.posted} · duplicate ${result.skipped} · failed ${result.failed}`);
|
|
219
|
+
return result.failed ? 1 : 0;
|
|
220
|
+
}
|
package/src/cli/doctor-fix.ts
CHANGED
|
@@ -442,8 +442,8 @@ export function nodePtyRebuildPlan(deps: DoctorFixDeps): { versionDir: string; p
|
|
|
442
442
|
try {
|
|
443
443
|
const versionDir = (deps.realpath ?? realpathSync)(join(readiness.installPrefix, 'current'));
|
|
444
444
|
const packageDir = join(versionDir, 'node_modules', 'elanous');
|
|
445
|
-
const pkg = JSON.parse((deps.readFile ?? ((path: string) => readFileSync(path, 'utf8')))(join(packageDir, 'package.json'))) as { dependencies?: Record<string, string>; optionalDependencies?: Record<string, string> };
|
|
446
|
-
const version = pkg.optionalDependencies?.['node-pty'] ?? pkg.dependencies?.['node-pty'];
|
|
445
|
+
const pkg = JSON.parse((deps.readFile ?? ((path: string) => readFileSync(path, 'utf8')))(join(packageDir, 'package.json'))) as { dependencies?: Record<string, string>; optionalDependencies?: Record<string, string>; peerDependencies?: Record<string, string>; elanousOptionalIntegrations?: Record<string, string> };
|
|
446
|
+
const version = pkg.elanousOptionalIntegrations?.['node-pty'] ?? pkg.optionalDependencies?.['node-pty'] ?? pkg.dependencies?.['node-pty'] ?? pkg.peerDependencies?.['node-pty'];
|
|
447
447
|
if (!version) return undefined;
|
|
448
448
|
// RFC #20265 A2 amzn2: node-pty 는 C++20(gcc10) · node-gyp 는 Python 3.8+ 를 요구한다.
|
|
449
449
|
const env: Record<string, string> = readiness.distro === 'amzn2' ? { CC: 'gcc10-gcc', CXX: 'gcc10-g++', PYTHON: 'python3.8' } : {};
|