elanous 0.2.41 → 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/{GiOLWmt4MqDZePubBjA4Q → Om5xS9jpjSXJCeTNGYEi4}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{2fe2c302.41b517f88d6fe502.js → 0966f8a1.745fcd44f64a87ea.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{385e4574.e9886ab32759eda3.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/{6874.d5cf7eb8edb2cabe.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/{5744.b9415e18ad623100.js → 1961.a81b12872c3e93a9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1970cf59.2d4d8ce5d6c81853.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1971-8890f3962ba7ee0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2073-ba274e00e4f9efb4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5471.1e611302ed3a7c53.js → 2144.25b292396712196d.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{3230-49298c3b73ef2268.js → 2268-53861f339e0b65a2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9834.63ab2bbc3153172e.js → 2312.0c8b61e22d3136d7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1800.f7ff51dc4978a958.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/{9048.212083de42d25be3.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/3095.dc44586a5f83b86d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2263.e09b6edea33bad2d.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/{addc2b32.8c4ff8f0aefe987d.js → 3557ac4a.c8931684475018ad.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/360.ae9f9f4c33c395e8.js +79 -0
- package/apps/pwa/out/_next/static/chunks/3638.80412ea63aae8f3f.js +286 -0
- package/apps/pwa/out/_next/static/chunks/{a0a01613.6d1cca322238d7fe.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/4199.ce86b281fd0a60b7.js +1 -0
- 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/{530.d26346e18089640a.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/4894.fec2ca9e99caefa2.js +1 -0
- 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/{1219.7e17964e0e7cd8e5.js → 5564.9e72532188f57586.js} +3 -3
- 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/5628.6ddb2d5ffba4ff4c.js +309 -0
- package/apps/pwa/out/_next/static/chunks/5730.43d7ccc09988e646.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1178.1aa9cad0e7695427.js → 5789.2da35c258292e1e5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{4133.2056bb4d78f621af.js → 5824.da9527b15a3221e5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5866.366966af47fdde5d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4527.a69f2894d1bc9f4a.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/{9507.7026657a2f47eb64.js → 6540.c7bef57ad8f90a87.js} +16 -16
- 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/{5574.f35accf4f132b29d.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/7483.427a2fe2049e388d.js +148 -0
- package/apps/pwa/out/_next/static/chunks/7502-be74718178e13e56.js +1 -0
- 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/{5947-135e26537d80a6b9.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/{2743.5d3f76948be32b34.js → 868.6e953be05bcf6dca.js} +2 -2
- 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/{5964-7e21164a8f2cf0ce.js → 8861-cc1fa1c7b920fa8e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8967-7dfebf710c9dec9d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5159.115f1c2ca471386c.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/923.2034d10ae91e9c20.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9312.bc1b89c5d4368033.js +1 -0
- package/apps/pwa/out/_next/static/chunks/943.39ae5e82f4f1893f.js +1 -0
- 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/{b2271e54.c1de3347976e90b0.js → aa57532f.510551854ff239b1.js} +1 -1
- 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-9ee28f7df07428ea.js +1 -0
- 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-40f9e19149024298.js → page-79a8b5fee4c20871.js} +1 -1
- 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-a142dfb0331a05f5.js → page-ca2d09128c585ca4.js} +1 -1
- 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/{53aeb4ee-51c92f8d683f5220.js → c7945435-b44d4dbe90ba0dcb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{2fdf2931.b431eee4fb468bc3.js → cb0f8df8.09a4a6be97e3fc5f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{c0c1a699.0ba79f97005965d4.js → d96660fb.cbc21a2a88539dbb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/ea514caa.05a24f78d9dffe5f.js +122 -0
- package/apps/pwa/out/_next/static/chunks/{83184dcd-0ee6247ff41eb3f2.js → fb7d20d5-6892502b6ee39ca6.js} +1 -1
- 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/{b9d8151e48998417.css → 62c858ad53854f47.css} +1 -1
- 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 +24 -25
- 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 +23 -23
- 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 +24 -25
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +24 -25
- 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/docs/goal-context/04-mock-scenarios.md +13 -0
- package/graphs/catalog/catalog.yaml +1 -1
- package/graphs/heal/heal-loop.yaml +1 -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/overlays/stop-heal-ladder.yaml +113 -0
- package/graphs/profiles/local.yaml +5 -0
- package/graphs/profiles/pod.yaml +4 -0
- package/graphs/units/verbs/recipes.yaml +11 -11
- package/graphs/work/research-report.yaml +10 -2
- 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/heal/run-role.ts +99 -5
- package/scripts/hooks/codex-notify.sh +32 -0
- package/scripts/install.sh +10 -38
- package/scripts/land-global-checks.ts +6 -1
- package/scripts/landing-heal/land-plan.ts +57 -0
- package/scripts/lib/decompose-ab.ts +1 -0
- package/scripts/lib/fixtures/tui-regress/help-insufficient-commands.txt +15 -0
- package/scripts/lib/fixtures/tui-regress/help-live.txt +42 -0
- package/scripts/lib/fixtures/tui-regress/help-missing-keys.txt +21 -0
- package/scripts/lib/fixtures/tui-regress/help-original.txt +51 -0
- package/scripts/lib/fixtures/tui-regress/help-shifted-input.txt +26 -0
- package/scripts/lib/tui-regress-checks.ts +33 -13
- 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-baseline-receipt.ts +47 -9
- package/scripts/release-loop/gate-image-pin.ts +81 -0
- package/scripts/release-loop/gate-method.ts +139 -0
- package/scripts/release-loop/gate-node-sim.ts +207 -0
- package/scripts/release-loop/gate-node.ts +463 -64
- package/scripts/release-loop/gate-pod-image-sticky-plan.ts +99 -0
- package/scripts/release-loop/gate-radius-live.ts +97 -13
- package/scripts/release-loop/gate-shard-dispatch.ts +43 -0
- package/scripts/release-loop/gate-traffic-mode.ts +151 -3
- package/scripts/release-loop/gate-train-receipts.ts +122 -0
- package/scripts/release-loop/node-verdict.ts +38 -25
- package/scripts/release-loop/preflight.ts +362 -8
- package/scripts/release-loop/resume-release.ts +83 -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/ux-sim.ts +18 -1
- package/scripts/video-pipeline.ts +9 -1
- package/scripts/warm-pool-provider-config.ts +286 -0
- package/skills/omni-crawl/SKILL.md +5 -2
- package/skills/omni-crawl/scripts/main.ts +84 -23
- 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 +27 -9
- package/src/acp/event-router.ts +20 -1
- package/src/acp/server.ts +6 -0
- package/src/agent/registry.ts +2 -0
- package/src/agent/task-notification.ts +25 -5
- package/src/agent/types.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 +63 -4
- 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 +833 -0
- package/src/agent-mission/tool-install.ts +200 -3
- package/src/agent-substrate/context-strategy.ts +4 -4
- package/src/agent-substrate/self-review-cli.ts +178 -13
- package/src/agents/general-purpose.md +1 -1
- package/src/auto-research/research-turn.ts +211 -53
- package/src/autopilot/pr-manager.ts +69 -10
- package/src/autopilot/pty-control-loop.ts +2 -0
- 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/capture/tui-self-report.ts +22 -6
- package/src/chat/index.ts +1 -1
- 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/fixtures/review-loop-breaker/opwaiver-32646-1694ccc7a170.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/opwaiver-32853-bd8f73595c83.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/opwaiver-33097-1cc85900413c.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/opwaiver-33106-972f31e4a3ca.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/opwaiver-33113-3ab51f05968f.json +1 -0
- package/src/cli/fixtures/review-loop-breaker/pr-33097-1cc85900413c.json +1 -0
- 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 +75 -5
- package/src/cli/pr-land-overlap-evidence.ts +113 -2
- package/src/cli/pr-land-pod-shadow-job.ts +202 -4
- package/src/cli/pr-land-pod-shadow.ts +9 -2
- package/src/cli/release-checklist-read-cli.ts +57 -19
- package/src/cli/release-cli.ts +23 -3
- package/src/cli/research-cli.ts +13 -5
- 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 +61 -9
- package/src/cli/tui-test-cli.ts +186 -0
- package/src/compact/auto.ts +8 -1
- 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/control-plane/ledger.ts +52 -2
- package/src/control-plane/server.ts +16 -2
- 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 +606 -95
- package/src/core-turn/run-goal-loop.ts +18 -0
- package/src/core-turn/types.ts +4 -0
- package/src/dashboard/chat/acp-chat.ts +10 -0
- package/src/dashboard/classic-sidetab-mission-job.ts +161 -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 +347 -0
- package/src/dashboard/index.ts +517 -18
- package/src/dashboard/input/agent-wake.ts +23 -1
- package/src/dashboard/input/chat-main-acp-dispatch.ts +23 -0
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +17 -0
- package/src/dashboard/mission-cli-consumer.ts +165 -0
- package/src/dashboard/plugin-wizard-runtime.ts +50 -0
- package/src/dashboard/plugin-wizard-tool.ts +55 -0
- package/src/dashboard/seat-boot-preamble.ts +171 -1
- package/src/dashboard/side-basic-runtime.ts +54 -1
- package/src/dashboard/sidetab-runtime.ts +90 -1
- package/src/dashboard/skill-catalog-preamble.ts +101 -0
- package/src/dashboard/skill-detection-runtime.ts +55 -15
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +15 -0
- package/src/dashboard/terminal-popup-runtime.ts +6 -3
- package/src/dashboard/turn-preamble.ts +53 -15
- package/src/dashboard/turn-prompt-runtime.ts +4 -2
- 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-cli.ts +23 -7
- package/src/graph-runner/graph-run-api.ts +3 -1
- package/src/graph-runner/graph-tick.ts +10 -2
- package/src/graph-runner/runner.ts +86 -18
- package/src/graph-wizard/mission-compose.ts +407 -12
- package/src/grok/agent-search.ts +14 -4
- package/src/grok/credential.ts +28 -11
- 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/harness-pod-dispatch.ts +81 -15
- package/src/harness/harness-stop.ts +155 -11
- 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 +159 -13
- package/src/instance/spawn-elanous.ts +6 -4
- 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 +168 -9
- package/src/loops/orchestrator/coordinator-shadow.ts +226 -0
- package/src/loops/orchestrator/tick.ts +13 -0
- package/src/maturity/feature-maturity.ts +4 -4
- package/src/msg/msg-sse-server.ts +3 -3
- package/src/msg/msg-store.ts +177 -19
- package/src/native-tool-catalog.ts +38 -4
- package/src/nexus/api/harness-traversal.ts +11 -0
- 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 +133 -2
- package/src/pty-shell/pty-control-ipc.ts +4 -1
- package/src/pty-shell/tui-run-state.ts +188 -2
- package/src/registry/catalog-server.ts +232 -0
- package/src/registry/loader.ts +45 -1
- package/src/registry/types.ts +1 -2
- package/src/release-loop/checklist-target-path-hint.ts +13 -0
- package/src/release-loop/checklist.ts +9 -1
- package/src/repl/index.ts +43 -2
- package/src/research/axis-fanout.ts +136 -16
- package/src/research/bloom-exemplars.ts +3 -1
- package/src/research/gap-followup.ts +13 -1
- package/src/research/plugin-discovery.ts +36 -14
- package/src/research-bridge/invoke.ts +22 -5
- package/src/research-bridge/types.ts +2 -0
- package/src/self-dev/ask-launch-flow.ts +72 -1
- package/src/self-dev/decompose.ts +119 -5
- 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-text.ts +5 -6
- package/src/self-dev/launch-preflight.ts +58 -0
- package/src/self-dev/orchestrate.ts +13 -3
- package/src/self-dev/review-provider-fallback.ts +9 -2
- package/src/self-dev/run-supervisor.ts +42 -4
- package/src/self-dev/run-types.ts +4 -0
- 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 +118 -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 +684 -7
- package/src/self-implement/graph-overlay-yaml.ts +37 -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/headless-elanous-driver.ts +31 -2
- package/src/self-implement/heal-intake.ts +112 -4
- package/src/self-implement/heal-triage.ts +20 -0
- package/src/self-implement/host-regate.ts +27 -4
- package/src/self-implement/merge-train.ts +5 -0
- package/src/self-implement/off-diff-evidence.ts +249 -5
- package/src/self-implement/orchestrator.ts +365 -25
- package/src/self-implement/regate-detail.ts +38 -1
- package/src/self-implement/rework-child-provider.ts +25 -0
- package/src/self-implement/run-chart.ts +122 -0
- package/src/self-implement/run-ledger.ts +162 -11
- package/src/self-implement/run-stop.ts +188 -4
- package/src/self-implement/runtime-overlay-run-steps.ts +95 -0
- package/src/self-implement/stop-autoheal.ts +13 -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 +40 -4
- 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 +135 -5
- package/src/session-runtime/retry-policy.ts +1 -1
- package/src/session-runtime/tier-flip.ts +3 -3
- 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/model.ts +19 -5
- package/src/sidetab-core/visible-agent-mission.ts +262 -0
- package/src/skills/name-match.ts +20 -0
- package/src/skills/tools/agent.ts +53 -6
- package/src/skills/tools/omni-search.ts +173 -13
- package/src/task-agent/parent-host.ts +10 -0
- package/src/task-agent/pod-distributor-entry.ts +3 -0
- package/src/task-agent/repair-outcomes.ts +65 -0
- package/src/task-agent/task-hand.ts +47 -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-distributor.ts +48 -0
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +92 -1
- package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +38 -1
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +113 -14
- package/src/task-orchestrator/surfaces/pod-si-warm-entry.ts +33 -6
- package/src/task-orchestrator/surfaces/pod-source-bundle.ts +45 -9
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +178 -16
- package/src/task-orchestrator/surfaces/pod-source-spec.ts +3 -3
- package/src/task-orchestrator/surfaces/pod-warm-switch.ts +2 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +237 -41
- package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +80 -3
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +337 -51
- 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/tokens.ts +35 -2
- package/src/tool-hints/gate.ts +1 -0
- package/src/tool-runtime/agent-runtime.ts +2 -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/elanous-skills-list-runtime.ts +5 -1
- package/src/tool-runtime/graph-mcp-runtimes.ts +240 -0
- package/src/tool-runtime/index.ts +6 -0
- package/src/tool-runtime/skill-exec-runtime.ts +33 -13
- package/src/tool-runtime/types.ts +4 -0
- package/src/tui/entry.ts +38 -5
- package/src/tui/sidetab/attach.ts +177 -1
- package/src/tui/sidetab/herdr-portal.ts +225 -0
- package/src/tui-client/local-chat-turn.ts +26 -13
- package/src/tui.ts +22 -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-kubectl.ts +37 -3
- package/src/ux-sim/fake-linear-device.ts +31 -0
- package/src/ux-sim/fault-pool-cap.ts +11 -6
- 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 +93 -0
- package/src/ux-sim/mock-scenario-catalog.ts +274 -0
- package/src/ux-sim/onboarding-first-run-device.ts +31 -21
- package/src/ux-sim/scenario.ts +185 -48
- 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/voice/voice-tts-singleton.ts +18 -3
- package/src/web-search/exa.ts +77 -0
- package/src/web-search/grok.ts +5 -9
- 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/1115.434ae2ecb0ad986d.js +0 -149
- package/apps/pwa/out/_next/static/chunks/1121.667cec0bcdbb3fdb.js +0 -36
- package/apps/pwa/out/_next/static/chunks/1197-54da59d250a6e476.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1245.1cfd13b26dbd71d6.js +0 -287
- package/apps/pwa/out/_next/static/chunks/1494-f93046ff5c5a124d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1609.2b312797599b8e45.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1661.0dd330f3d89f73f3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/167-0c121e4b47e0f9da.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1700.cdc2bf8cc685e221.js +0 -90
- package/apps/pwa/out/_next/static/chunks/1703-78e46acad29f3cfc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1765.679b29625c8e88d4.js +0 -77
- package/apps/pwa/out/_next/static/chunks/1971-7efb628c471dc5a0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1999-8de7b7bb36801913.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2073.689dcb2680113d76.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2198-557d49184104d165.js +0 -1
- package/apps/pwa/out/_next/static/chunks/221-440ce67fa9f5c839.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2427-8ed8e98624cbd664.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2457-725c5827bc003795.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2491-2718b15a5ccb75a5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2527-5c636a43c7cc5dde.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2692-1027cb16fe4ccf49.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2773.0e80b9d325fb5635.js +0 -32
- package/apps/pwa/out/_next/static/chunks/2873-0f3cb56c8e3528ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3097.864e92bdaa2f4d15.js +0 -79
- package/apps/pwa/out/_next/static/chunks/3136-d6870ba63300a93e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3173-0289113d434e83b7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/325-dd9208a1a0ab7ce4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3283.528f430dd043fb4e.js +0 -74
- package/apps/pwa/out/_next/static/chunks/3295.cc8cb13b8f0dae1a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3688-86e3b88abf18cb3b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3804-7220467a5473a8df.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3808.3e1e247ce7bdf889.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3927.b5473ad109da44c5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3934-98ea94832e194796.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4156.ba4de4a3664f04b4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4297-239ca82f293faab0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4320-dcc5a7734126f4c9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4434.94b4c552a2d91e69.js +0 -148
- package/apps/pwa/out/_next/static/chunks/4579.03e4092f73950965.js +0 -226
- package/apps/pwa/out/_next/static/chunks/4667.97e31aa38c95c475.js +0 -309
- package/apps/pwa/out/_next/static/chunks/4702.4a4adc1f16d7c93b.js +0 -64
- package/apps/pwa/out/_next/static/chunks/4815.481501c57b3568d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/487-d16e698ef14662d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4888-7a38bf522c9cc6fe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5034-30e429d6bb086881.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5040-35c494e60dadd97d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/50c6ab1e.81a96e419350909d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5154.4b6a836179356f30.js +0 -94
- package/apps/pwa/out/_next/static/chunks/5228-a8200df486278f2d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5379.97af106d09566f69.js +0 -8
- package/apps/pwa/out/_next/static/chunks/5479-b6372e762719f92f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5534-699c5cbcbc96c5d7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5701.9c4e8f250312eeee.js +0 -24
- package/apps/pwa/out/_next/static/chunks/5892.2526d962339662d8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5937.c2df9e3447e1f667.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5941.8210cc93c9202c0a.js +0 -286
- package/apps/pwa/out/_next/static/chunks/5975.4004f820ae3cecd5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6142-7ccd48795d7abd55.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6160.bf9177b8c1bfb243.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6398.71ba0690c8027555.js +0 -27
- package/apps/pwa/out/_next/static/chunks/6492.2bd5c10edc1a064e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6552.a3840aa7da35ad68.js +0 -62
- package/apps/pwa/out/_next/static/chunks/6736.1e36d3ac5fa5e41d.js +0 -24
- package/apps/pwa/out/_next/static/chunks/6900.3ccbe069bdd4556a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/71327eb4.add50b365f94bf3a.js +0 -122
- package/apps/pwa/out/_next/static/chunks/7136.deca3e3a2ddaa374.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7139-ee9f8ed2677a40b3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7191.fdc955f7d96064a4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7423-e0aa5d9e2962120e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7453.afc1ea7e05d56a8c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7503-5e6a3d7fe67e4a0c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7761-476fd7bf768abd34.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7975.eafb12097a0a9e62.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8050-9b364bdef8f71927.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8152.64e253c35cccfaae.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8190.620f0231b3924bcb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8448.45b6b1f1a99eeb35.js +0 -104
- package/apps/pwa/out/_next/static/chunks/8464-e24f10451b658aac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8477.e4c944bb3aa5d2f3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8710.ca385257d5ca422e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8830.627ccf294ec2465c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8880.64c445592f04acaf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8981.c706964c8ba27aff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9053.bd0fffaff8d3f836.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9161-c66e723d7ec9d682.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9185.1ecdf9b65c0bb684.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9356.fccd5f58086b4ff5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9446.dc0406109371d329.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9506.dcf25d467a42627e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9541.eb8e2f8480c7feca.js +0 -93
- package/apps/pwa/out/_next/static/chunks/9577.ed7582186efa5482.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9579.4a8169600fff2058.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9642-ff2e039eb62e3b92.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9659-8f2323348113ad80.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9724.4c5623af2db43153.js +0 -34
- package/apps/pwa/out/_next/static/chunks/9869.81a1e24ca682d5a0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-8d9d76ea322d855c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-ed2c4e59f9f1fe21.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-2dc99e03c5d76ca0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-b5a3a788330e920f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-14949db884bfa672.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-ea76c85b36388a97.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-01716d20af62d325.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-62baf6881a64b1e9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-f89ba590c2af8afa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-22f8b0f78d9637e5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-817f9d7e6820be80.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-ffb9bc0d2650249a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-f6d0e64873c0f629.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-8bfa0d4ba23a209d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-f5060462249e32c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-8d9d76ea322d855c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-b2049f8b1ef79117.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-1446c5fa93907f11.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-b48a7a07c5204156.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-e974b8c4ca47614c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-8a919b869bd28594.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-d31b8de6bfcd72ed.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-64765f817909db29.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-d128c8569a36ee9b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-b2679d357e9b9270.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-6fabec98a9e7b269.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-048f30149dcf1349.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-9113181d6b5a2725.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-1e7a755a13227611.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-3c8f8b67a203cf07.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-18032f5437215062.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-da3b739192fd0ee3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-d332545571bd6fd1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-5237aa5b3f3b8ec5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-d16e56c3989c147e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-6b6593600869e2cd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-8d9d76ea322d855c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-29e8b8a8396b55cb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-b3414d856a1a7e2f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c3affa52b7ce961b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f21dddf9f95b6fab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-f5a30a24745bf088.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-8c8569a09b4d4e34.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-2ce32722c0243483.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-4767b0d9c0a98c6c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-116ee1339c387a75.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-35e8c50ca4ef7ffc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-52e17113356bb891.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-7458ae05ed2ac1a0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-ad6c9dd524ad6ef8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-2ddd1f2b44d6aa59.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-e3d82bdc358d20c5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-71d5aa3896e1655f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-03ffc54e00438546.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-56bb89af5a611d0b.js +0 -1
- package/apps/pwa/out/_next/static/css/be9019f696217521.css +0 -1
- package/apps/pwa/out/_next/static/css/d0a48dc099ed86cf.css +0 -1
- /package/apps/pwa/out/_next/static/{GiOLWmt4MqDZePubBjA4Q → Om5xS9jpjSXJCeTNGYEi4}/_ssgManifest.js +0 -0
|
@@ -106,11 +106,12 @@ export function formatAutoMergeSuccessMessage(input: {
|
|
|
106
106
|
import { GoalRunStore, insertGoalRunRecord, type GoalPriorRuns } from './goal-run-store.js';
|
|
107
107
|
import { writeGoalRunRecordFragment } from './goal-execution-records.js';
|
|
108
108
|
import { getUserConfig } from '../user-config.js';
|
|
109
|
-
import { appendRunLedgerEntry, loadRunLedger, parseRunShardIdentity, queryRunChain, type RunChainShardSibling, type RunLedgerEntry, type RunLedgerWriter, type RunOriginData, type RunShardIdentity } from './run-ledger.js';
|
|
110
|
-
import { classifyMergeHoldStop, classifyTerminalHarnessFailure, forgetRunStop, isRunStopClass, readRunStopRecord, recordRunStop, runStopRecorded } from './run-stop.js';
|
|
109
|
+
import { appendRunLedgerEntries, appendRunLedgerEntry, loadRunLedger, parseRunShardIdentity, pathSignatureOf, queryRunChain, runLedgerDir, type RunChainShardSibling, type RunLedgerBatchWriter, type RunLedgerEntry, type RunLedgerWriter, type RunOriginData, type RunShardIdentity } from './run-ledger.js';
|
|
110
|
+
import { buildRunStopTerminalEvidence, classifyMergeHoldStop, classifyTerminalHarnessFailure, forgetRunStop, isRunStopClass, readRunStopRecord, recordRunStop, runStopRecorded } from './run-stop.js';
|
|
111
111
|
import { autohealFromStop, parseAutohealMode, pickAutohealAction, type AutohealActions, type AutohealResult } from './stop-autoheal.js';
|
|
112
112
|
import { operationalAutohealActions } from './stop-autoheal-operational.js';
|
|
113
|
-
import { recordParentNeedsOwnerVisit } from './doctor-visit.js';
|
|
113
|
+
import { recordParentNeedsOwnerVisit, runDoctorHandoff } from './doctor-visit.js';
|
|
114
|
+
import { readRunChart, recordRunChartDecision, RUN_DOCTOR_HANDOFF_INPUT_PREFIX } from './run-chart.js';
|
|
114
115
|
import { emitSessionEvent, type SessionEventInput } from '../context-bus/session-events.js';
|
|
115
116
|
import { decideLineageSupersede, lineageSupersedeCloseComment, type LineageSupersedeOpenDraft } from './lineage-supersede.js';
|
|
116
117
|
import { basename, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
@@ -227,7 +228,8 @@ import { formatGateFailedId, type PremiseReviewCard, type PremiseReviewInput } f
|
|
|
227
228
|
import { runWorkflowToCompletion } from '../workflow-runtime/executor.js';
|
|
228
229
|
import { mapReworkVerdict, supervisionObservationFields } from './supervision-vocabulary.js';
|
|
229
230
|
import { resolveRunOutcome } from './run-outcome.js';
|
|
230
|
-
import { authorLimitationCountFromGoal, authoredSignalExecution, harvestEvidenceLines, harvestedEvidenceObservation, MAX_HARVESTED_EVIDENCE_CHARS, parseOffDiffEvidence, judgeTddEvidence, requiredEvidenceFromGoal, createRequiredEvidenceBudget, coverRequiredEvidence, settleUncoveredEvidence, formatUncoveredEvidenceFeedback, type OffDiffEvidenceParse } from './off-diff-evidence.js';
|
|
231
|
+
import { authorLimitationCountFromGoal, authoredSignalExecution, harvestEvidenceLines, harvestedEvidenceObservation, MAX_HARVESTED_EVIDENCE_CHARS, parseOffDiffEvidence, judgeTddEvidence, receiveObservedTddRed, receiveObservedTddGreen, runTddBaseHeadTest, requiredEvidenceFromGoal, createRequiredEvidenceBudget, coverRequiredEvidence, settleUncoveredEvidence, formatUncoveredEvidenceFeedback, type OffDiffEvidenceParse } from './off-diff-evidence.js';
|
|
232
|
+
import type { TddRecordTag } from './tdd-evidence-tags.js';
|
|
231
233
|
import { resolveEvidenceHeadCommit } from './evidence-command-budget.js';
|
|
232
234
|
import { pressDecisionSignals, type DecisionSignalPressResult } from './decision-signal-press.js';
|
|
233
235
|
import { inspectDecisionObservations, inspectDecisionSignalKinds, inspectDecisionSignalObservations } from '../../scripts/ask-marker-check.js';
|
|
@@ -319,6 +321,7 @@ import { createArtifactStore } from '../artifact/index.js';
|
|
|
319
321
|
import { mapStageToRunStatus, type SelfImplementStage } from './run-status-mapping.js';
|
|
320
322
|
import type { LifecycleScreenComparison } from './lifecycle-screen-scoreboard.js';
|
|
321
323
|
import { buildRuntimeOverlayState } from './graph-overlay-condition.js';
|
|
324
|
+
import { runtimeOverlayRunSteps } from './runtime-overlay-run-steps.js';
|
|
322
325
|
import { activeTemplate, decideTemplate, graphAuthorityFields, nodeNameForStage, overlayDecisionObservation, resolveGraphAuthorityForUserConfig, routeGate, visitBudgetOf } from './graph-authority.js';
|
|
323
326
|
import type { GraphTemplate } from './graph-templates.js';
|
|
324
327
|
import { defaultOverlaysDir, loadGraphOverlays, type GraphOverlaySpec } from './graph-overlay-yaml.js';
|
|
@@ -356,6 +359,9 @@ import {
|
|
|
356
359
|
} from '../ask-user-question/tool.js';
|
|
357
360
|
import { acquireClarificationResolverLease, decideClarificationResolverInstall } from './clarification-resolver-lease.js';
|
|
358
361
|
import { inspectCodexRotation } from '../oauth/codex-account-store.js';
|
|
362
|
+
import { resolveGrokCredential } from '../grok/credential.js';
|
|
363
|
+
import { resolveChildLlmPreference } from './child-llm-preference.js';
|
|
364
|
+
import { reselectChildForRework } from './rework-child-provider.js';
|
|
359
365
|
import { resolveDefaultProvider } from '../llm.js';
|
|
360
366
|
import { createWidgetAskUserResolver } from '../expression/widget/adapters/ask-user-resolver.js';
|
|
361
367
|
import { createNodeReadlineHost } from '../expression/widget/readline-host.js';
|
|
@@ -1064,6 +1070,8 @@ export type ImplementTerminalStatus = {
|
|
|
1064
1070
|
export interface SelfImplementSeams {
|
|
1065
1071
|
/** Run-observer ledger sink. Tests inject an in-memory sink to avoid touching user state. */
|
|
1066
1072
|
writeRunLedger?: RunLedgerWriter;
|
|
1073
|
+
/** Atomic sink for one accepted runtime graph overlay's structural event batch. */
|
|
1074
|
+
writeRunLedgerBatch?: RunLedgerBatchWriter;
|
|
1067
1075
|
checkUnwiredExports?: typeof findUnwiredExports;
|
|
1068
1076
|
/** STOP-AUTOHEAL — heal action seams (live mode only runs actions given here; missing = needs-owner). */
|
|
1069
1077
|
stopAutohealActions?: AutohealActions;
|
|
@@ -1077,6 +1085,8 @@ export interface SelfImplementSeams {
|
|
|
1077
1085
|
emitContextEvent?: (input: SessionEventInput) => void;
|
|
1078
1086
|
/** Registers this run as an ephemeral loop-agent asset; failures are observed but never affect execution. */
|
|
1079
1087
|
registerLoopAgent?: (input: LoopAgentInput) => void;
|
|
1088
|
+
/** Executes a persisted run-doctor supervisor handoff; injectable to verify the parent delivery route. */
|
|
1089
|
+
runDoctorHandoff?: typeof runDoctorHandoff;
|
|
1080
1090
|
/** Wraps implementation and gate promises with their effective wall-clock timeout; tests observe the actual stage budgets. */
|
|
1081
1091
|
withStepTimeout?: <T>(promise: Promise<T>, ms: number, step: keyof StepTimeouts) => Promise<T>;
|
|
1082
1092
|
/** Samples the one-minute machine load at the end of a gate observation. */
|
|
@@ -1222,6 +1232,8 @@ export interface SelfImplementSeams {
|
|
|
1222
1232
|
headCommit?: (cwd: string) => string | undefined;
|
|
1223
1233
|
/** Test seam for required evidence command execution; production uses its bounded shell runner. */
|
|
1224
1234
|
evidenceCommandRunner?: (command: string, cwd: string) => Pick<ReturnType<typeof spawnSync>, 'status' | 'stdout' | 'stderr' | 'error'>;
|
|
1235
|
+
/** Replays the goal's changed Bun test on base and head when child RED output is absent. */
|
|
1236
|
+
runTddBaseHeadTest?: typeof runTddBaseHeadTest;
|
|
1225
1237
|
/** `commit` pins the pushed state; without it the worktree HEAD is pushed. */
|
|
1226
1238
|
preserveBlockedBranch?: (ctx: { cwd: string; branch: string; title: string; commit?: string }) => boolean | Promise<boolean>;
|
|
1227
1239
|
/** DRAFT-NOT-ARCHIVE — `tools.selfImplement.draftOnStop` 읽기 seam. 생략하면 user-config(실패·부재 = 'always' · 종전). */
|
|
@@ -2208,6 +2220,8 @@ export interface SelfImplementOptions {
|
|
|
2208
2220
|
runId?: string;
|
|
2209
2221
|
/** Authored goal document's stable identity, carried into self-implement observations when present. */
|
|
2210
2222
|
goalId?: string;
|
|
2223
|
+
/** Stable heal-cell identity propagated across supervisor reauthor retries. */
|
|
2224
|
+
healCellKey?: string;
|
|
2211
2225
|
/** Optional opaque ID for joining this request with correlated execution records. */
|
|
2212
2226
|
correlationId?: string;
|
|
2213
2227
|
/** Optional opaque ID for the parent correlation in a nested request. */
|
|
@@ -2398,7 +2412,9 @@ export interface SelfImplementResult {
|
|
|
2398
2412
|
/** Additive hard-cap disposition; outcome remains the stable public terminal contract. */
|
|
2399
2413
|
salvage?: 'launched' | 'parked';
|
|
2400
2414
|
/** Rework stopped on exclusively baseline/flaky/precondition failures; do not retry this goal against the same base. */
|
|
2401
|
-
terminationReason?: 'blocked-by-baseline' | 'goal-only-rework-exhausted';
|
|
2415
|
+
terminationReason?: 'blocked-by-baseline' | 'goal-only-rework-exhausted' | 'tdd-evidence-missing';
|
|
2416
|
+
/** Structured TDD failure survives child JSON/result truncation and parent-ledger mapping. */
|
|
2417
|
+
tddEvidenceFailure?: { reason: 'tdd-evidence-missing'; round: number; missing: readonly TddRecordTag[] };
|
|
2402
2418
|
sessionId?: string;
|
|
2403
2419
|
worktreePath?: string;
|
|
2404
2420
|
branch?: string;
|
|
@@ -2887,6 +2903,8 @@ type BlockedDraftPrState = {
|
|
|
2887
2903
|
childSummaryArtifact?: ChildSummaryArtifactRef;
|
|
2888
2904
|
terminalStatus?: ImplementTerminalStatus;
|
|
2889
2905
|
planRevision?: ReworkPlanRevision;
|
|
2906
|
+
stopStage?: string;
|
|
2907
|
+
stopClass?: ReturnType<typeof classifyTerminalHarnessFailure>;
|
|
2890
2908
|
/** Classifier output for this unfinished run. Omitted means the cause was not classified. */
|
|
2891
2909
|
abandonedClassification?: AbandonedClassificationResult;
|
|
2892
2910
|
};
|
|
@@ -2901,29 +2919,39 @@ export type BlockedDraftClassificationRecord = {
|
|
|
2901
2919
|
readonly classification: string;
|
|
2902
2920
|
readonly classificationBasis: string;
|
|
2903
2921
|
readonly worktreeClean: boolean | null;
|
|
2922
|
+
readonly stop: { readonly class: ReturnType<typeof classifyTerminalHarnessFailure>; readonly stage: string };
|
|
2904
2923
|
};
|
|
2905
2924
|
|
|
2906
2925
|
export function blockedDraftClassificationRecord(
|
|
2907
2926
|
classification: AbandonedClassificationResult | undefined,
|
|
2927
|
+
stop: { readonly stage?: string; readonly class?: ReturnType<typeof classifyTerminalHarnessFailure> } = {},
|
|
2908
2928
|
): BlockedDraftClassificationRecord {
|
|
2929
|
+
const stage = typeof stop.stage === 'string' && stop.stage.trim() ? stop.stage : 'unknown';
|
|
2930
|
+
const stopClass = stop.class ?? classifyTerminalHarnessFailure({
|
|
2931
|
+
stage,
|
|
2932
|
+
...(classification ? { abandonedClassification: classification.classification } : {}),
|
|
2933
|
+
});
|
|
2909
2934
|
if (!classification) {
|
|
2910
2935
|
return {
|
|
2911
2936
|
classification: BLOCKED_DRAFT_UNCLASSIFIED_CLASSIFICATION,
|
|
2912
2937
|
classificationBasis: BLOCKED_DRAFT_UNCLASSIFIED_CLASSIFICATION,
|
|
2913
2938
|
worktreeClean: null,
|
|
2939
|
+
stop: { class: stopClass, stage },
|
|
2914
2940
|
};
|
|
2915
2941
|
}
|
|
2916
2942
|
return {
|
|
2917
2943
|
classification: classification.classification,
|
|
2918
2944
|
classificationBasis: classification.classificationBasis,
|
|
2919
2945
|
worktreeClean: classification.worktreeClean ?? null,
|
|
2946
|
+
stop: { class: stopClass, stage },
|
|
2920
2947
|
};
|
|
2921
2948
|
}
|
|
2922
2949
|
|
|
2923
2950
|
export function formatBlockedDraftClassificationSection(
|
|
2924
2951
|
classification: AbandonedClassificationResult | undefined,
|
|
2952
|
+
stop: { readonly stage?: string; readonly class?: ReturnType<typeof classifyTerminalHarnessFailure> } = {},
|
|
2925
2953
|
): string[] {
|
|
2926
|
-
const record = blockedDraftClassificationRecord(classification);
|
|
2954
|
+
const record = blockedDraftClassificationRecord(classification, stop);
|
|
2927
2955
|
const human = record.classification === BLOCKED_DRAFT_UNCLASSIFIED_CLASSIFICATION
|
|
2928
2956
|
? `${record.classification} (분류를 못 함)`
|
|
2929
2957
|
: record.classification;
|
|
@@ -2934,6 +2962,8 @@ export function formatBlockedDraftClassificationSection(
|
|
|
2934
2962
|
`- classification: ${record.classification}`,
|
|
2935
2963
|
`- classificationBasis: ${record.classificationBasis}`,
|
|
2936
2964
|
`- worktreeClean: ${worktreeCleanText}`,
|
|
2965
|
+
`- stop.class: ${record.stop.class}`,
|
|
2966
|
+
`- stop.stage: ${record.stop.stage}`,
|
|
2937
2967
|
'',
|
|
2938
2968
|
'```json',
|
|
2939
2969
|
JSON.stringify(record),
|
|
@@ -2959,7 +2989,7 @@ function blockedDraftPrBody(feature: string, implSummary: string, state: Blocked
|
|
|
2959
2989
|
...(state.childSummaryArtifact ? [`- child summary artifact: ${state.childSummaryArtifact.path}`] : []),
|
|
2960
2990
|
...(state.terminalStatus ? [`- child terminal status: reached=${state.terminalStatus.reached}; changed=${state.terminalStatus.changed}; toolCalls=${state.terminalStatus.toolCalls}; timedOut=${state.terminalStatus.timedOut}`] : []),
|
|
2961
2991
|
'',
|
|
2962
|
-
...formatBlockedDraftClassificationSection(state.abandonedClassification),
|
|
2992
|
+
...formatBlockedDraftClassificationSection(state.abandonedClassification, { stage: state.stopStage, class: state.stopClass }),
|
|
2963
2993
|
'',
|
|
2964
2994
|
'## 미배달 감독 수리 지시',
|
|
2965
2995
|
...(state.undeliveredSupervisorInputs.length
|
|
@@ -3095,10 +3125,12 @@ export function assembleBlockedDraftPrBody(
|
|
|
3095
3125
|
persist?: SelfImplementSeams['persistPrBodyArtifact'],
|
|
3096
3126
|
): { body: string; truncated: boolean; originalChars: number } {
|
|
3097
3127
|
const raw = blockedDraftPrBody(feature, implSummary, state, goalFile);
|
|
3098
|
-
const classificationRecord = blockedDraftClassificationRecord(state.abandonedClassification);
|
|
3128
|
+
const classificationRecord = blockedDraftClassificationRecord(state.abandonedClassification, { stage: state.stopStage, class: state.stopClass });
|
|
3099
3129
|
const essentialSuffix = [
|
|
3100
3130
|
`- reason: ${state.reason}`,
|
|
3101
3131
|
`- classification: ${classificationRecord.classification}`,
|
|
3132
|
+
`- stop.class: ${classificationRecord.stop.class}`,
|
|
3133
|
+
`- stop.stage: ${classificationRecord.stop.stage}`,
|
|
3102
3134
|
JSON.stringify(classificationRecord),
|
|
3103
3135
|
...(state.reasonTruncated ? ['- reason truncated: true'] : []),
|
|
3104
3136
|
...(state.terminalStatus ? [`- child terminal status: reached=${state.terminalStatus.reached}; changed=${state.terminalStatus.changed}; toolCalls=${state.terminalStatus.toolCalls}; timedOut=${state.terminalStatus.timedOut}`] : []),
|
|
@@ -3580,6 +3612,9 @@ async function autohealRecordedStop(stopEntry: RunLedgerEntry, s: SelfImplementS
|
|
|
3580
3612
|
try {
|
|
3581
3613
|
const record = readRunStopRecord(stopEntry);
|
|
3582
3614
|
if (!record) return;
|
|
3615
|
+
const chartDir = runLedgerDir();
|
|
3616
|
+
const chartBefore = readRunChart(stopEntry.runId, 'macrophage', chartDir);
|
|
3617
|
+
const chartStopKey = JSON.stringify([stopEntry.timestamp, record.site ?? '', record.class, record.cause, record.evidenceRef]);
|
|
3583
3618
|
try { debug.log('harness.heal', 'symptom', { runId: stopEntry.runId, class: record.class, cause: record.cause, evidenceRef: record.evidenceRef }); } catch { /* observation is fail-soft */ }
|
|
3584
3619
|
const pick = pickAutohealAction(record.class);
|
|
3585
3620
|
try { debug.log('harness.heal', 'prescription', { runId: stopEntry.runId, class: record.class, action: pick.action, source: pick.source, ...(pick.overlayId ? { overlayId: pick.overlayId } : {}) }); } catch { /* observation is fail-soft */ }
|
|
@@ -3596,10 +3631,13 @@ async function autohealRecordedStop(stopEntry: RunLedgerEntry, s: SelfImplementS
|
|
|
3596
3631
|
...(s?.writeRunLedger ? { writeLedger: s.writeRunLedger } : {}),
|
|
3597
3632
|
});
|
|
3598
3633
|
try { debug.log('harness.heal', 'outcome', { runId: stopEntry.runId, class: result.class, action: result.action, mode: result.mode, outcome: result.outcome, ...(result.reason ? { reason: result.reason } : {}), ...(result.detail ? { detail: result.detail } : {}) }); } catch { /* observation is fail-soft */ }
|
|
3634
|
+
recordRunChartDecision({ runId: stopEntry.runId, device: 'macrophage', stopKey: chartStopKey,
|
|
3635
|
+
observed: `${record.class}: ${record.cause}`, verdict: result.action, action: result.outcome,
|
|
3636
|
+
handoff: result.action === 'needs-owner' ? 'outer-supervisor' : null,
|
|
3637
|
+
why: result.reason ?? result.detail ?? record.cause, readStopKeys: chartBefore.map((cell) => cell.stopKey), dir: chartDir });
|
|
3599
3638
|
if (result.action === 'needs-owner') {
|
|
3600
3639
|
try {
|
|
3601
|
-
const
|
|
3602
|
-
const visit = recordParentNeedsOwnerVisit({ runId: stopEntry.runId, stopKey, evidence: result.reason ?? record.cause });
|
|
3640
|
+
const visit = recordParentNeedsOwnerVisit({ runId: stopEntry.runId, stopKey: chartStopKey, evidence: result.reason ?? record.cause });
|
|
3603
3641
|
if (visit.status === 'missing-ledger') {
|
|
3604
3642
|
debug.log('run-doctor', 'visit-failed', { runId: stopEntry.runId, from: 'parent', symptom: 'needs-owner', error: 'run-ledger-missing' });
|
|
3605
3643
|
}
|
|
@@ -3626,11 +3664,23 @@ async function dispatchTerminalHarnessHeal(input: {
|
|
|
3626
3664
|
if (runStopRecorded(runId)) return;
|
|
3627
3665
|
const stopClass = mergeHeld ? classifyMergeHoldStop(result.mergeReason) : classifyTerminalHarnessFailure({
|
|
3628
3666
|
stage: result.stage,
|
|
3667
|
+
cause: result.detail,
|
|
3629
3668
|
mergeReason: result.mergeReason,
|
|
3630
3669
|
abandonedClassification: result.abandonedClassification?.classification,
|
|
3631
3670
|
providerErrorCategory: result.providerErrors?.category,
|
|
3632
3671
|
supervisorVerdict: result.supervisorVerdict,
|
|
3633
3672
|
});
|
|
3673
|
+
let priorLedger: RunLedgerEntry[] = [];
|
|
3674
|
+
try { priorLedger = loadRunLedger(runId) ?? []; } catch { /* terminal observation must not change the run result */ }
|
|
3675
|
+
const terminalEvidence = buildRunStopTerminalEvidence({
|
|
3676
|
+
stage: result.stage,
|
|
3677
|
+
node: result.node,
|
|
3678
|
+
outcome: result.outcome,
|
|
3679
|
+
detail: result.detail,
|
|
3680
|
+
terminationReason: result.terminationReason,
|
|
3681
|
+
providerErrorCategory: result.providerErrors?.category,
|
|
3682
|
+
entries: priorLedger,
|
|
3683
|
+
});
|
|
3634
3684
|
let stopEntry: RunLedgerEntry | undefined;
|
|
3635
3685
|
try {
|
|
3636
3686
|
stopEntry = recordRunStop({
|
|
@@ -3639,9 +3689,11 @@ async function dispatchTerminalHarnessHeal(input: {
|
|
|
3639
3689
|
shardIdentity,
|
|
3640
3690
|
site: mergeHeld ? 'merge-hold' : `terminal-${result.stage}`,
|
|
3641
3691
|
class: stopClass,
|
|
3642
|
-
|
|
3692
|
+
// Never copy free-form provider/child text into the durable stop summary.
|
|
3693
|
+
cause: mergeHeld ? `merge held: ${result.mergeReason}` : `terminal failure: ${result.stage}; ${terminalEvidence.reasonCode}`,
|
|
3643
3694
|
evidenceRef: result.prUrl ?? `run-ledger:${runId}:${result.stage}`,
|
|
3644
3695
|
nextMove: `Existing heal ladder: ${stopClass}; failure disposition remains until its prescribed action resolves`,
|
|
3696
|
+
terminalEvidence,
|
|
3645
3697
|
}, seams.writeRunLedger ?? appendRunLedgerEntry);
|
|
3646
3698
|
} catch { /* stop observation cannot change the run outcome */ }
|
|
3647
3699
|
if (stopEntry) await autohealRecordedStop(stopEntry, seams);
|
|
@@ -4175,6 +4227,49 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4175
4227
|
unjoinedNodes: unjoined,
|
|
4176
4228
|
}, { category: 'graph.path' });
|
|
4177
4229
|
}
|
|
4230
|
+
if (runGraphTemplate?.graphId === 'self-implement') {
|
|
4231
|
+
const profileIds = new Set<string>();
|
|
4232
|
+
let journeyEvidenceStatus: 'read' | 'missing' | 'read-error' = 'missing';
|
|
4233
|
+
let journeyEvidenceError: string | undefined;
|
|
4234
|
+
const journeySteps: Array<{ from: string; to: string; skipped?: string[] }> = [];
|
|
4235
|
+
try {
|
|
4236
|
+
// `recordJourneyEdge` appends graph.path synchronously to the canonical run ledger.
|
|
4237
|
+
// Reading that same append boundary avoids a potentially lagging debug LogStore mirror.
|
|
4238
|
+
const entries = loadRunLedger(runId, runLedgerDir());
|
|
4239
|
+
if (entries !== null) {
|
|
4240
|
+
journeyEvidenceStatus = 'read';
|
|
4241
|
+
for (const entry of entries) {
|
|
4242
|
+
if (entry.event !== 'graph.path') continue;
|
|
4243
|
+
const data = entry.data;
|
|
4244
|
+
if (Array.isArray(data.profileIds)) for (const id of data.profileIds) if (typeof id === 'string') profileIds.add(id);
|
|
4245
|
+
if (data.event !== 'edge-taken' || typeof data.from !== 'string' || typeof data.taken !== 'string') continue;
|
|
4246
|
+
const skipped = Array.isArray(data.skippedNodes)
|
|
4247
|
+
? data.skippedNodes.flatMap((item) => item && typeof item === 'object'
|
|
4248
|
+
&& typeof (item as { node?: unknown }).node === 'string' ? [(item as { node: string }).node] : [])
|
|
4249
|
+
: [];
|
|
4250
|
+
journeySteps.push({ from: data.from, to: data.taken, ...(skipped.length > 0 ? { skipped } : {}) });
|
|
4251
|
+
}
|
|
4252
|
+
}
|
|
4253
|
+
} catch (error) {
|
|
4254
|
+
journeyEvidenceStatus = 'read-error';
|
|
4255
|
+
journeyEvidenceError = error instanceof Error ? error.message : String(error);
|
|
4256
|
+
}
|
|
4257
|
+
const pathBasis = 'self-implement-pipeline-and-journey-v1';
|
|
4258
|
+
const pipelineNodes = traversedNodes.map(String);
|
|
4259
|
+
const pipelineSteps = pipelineNodes.slice(1).map((to, index) => ({ from: pipelineNodes[index]!, to }));
|
|
4260
|
+
const pathSteps = [...pipelineSteps, ...journeySteps];
|
|
4261
|
+
const visitedNodes = [
|
|
4262
|
+
...pipelineNodes,
|
|
4263
|
+
...journeySteps.flatMap((step) => [step.from, ...(step.skipped ?? []), step.to]),
|
|
4264
|
+
];
|
|
4265
|
+
const pathSignature = pathSignatureOf(pathSteps);
|
|
4266
|
+
observeOuter('path-signature', {
|
|
4267
|
+
...graphIdentityOf(runGraphTemplate), ...journeyJoinFields(), pathBasis,
|
|
4268
|
+
profileIds: [...profileIds].sort(), pathSignature, pathSteps, visitedNodes,
|
|
4269
|
+
journeyEdgeCount: journeySteps.length,
|
|
4270
|
+
journeyEvidenceStatus, ...(journeyEvidenceError ? { journeyEvidenceError } : {}),
|
|
4271
|
+
}, { category: 'graph.path' });
|
|
4272
|
+
}
|
|
4178
4273
|
try {
|
|
4179
4274
|
const checked = terminalNode
|
|
4180
4275
|
? (opts.seams.checkPipelineTraversal ?? checkPipelineTraversal)(traversedNodes, terminalNode)
|
|
@@ -4661,6 +4756,10 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4661
4756
|
summary: reworkCap
|
|
4662
4757
|
? reworkCapFailureSummary(opts.feature, reworkCap)
|
|
4663
4758
|
: opts.feature.split(/\r?\n/, 1)[0]?.trim() || `Harness run ${runId} failed`,
|
|
4759
|
+
goalText: opts.feature,
|
|
4760
|
+
...(opts.goalId ? { goalId: opts.goalId } : {}),
|
|
4761
|
+
...(opts.goalFile ? { goalFile: opts.goalFile } : {}),
|
|
4762
|
+
...(opts.healCellKey ? { cellKey: opts.healCellKey } : {}),
|
|
4664
4763
|
at: new Date().toISOString(),
|
|
4665
4764
|
});
|
|
4666
4765
|
}
|
|
@@ -4865,6 +4964,7 @@ export function attachAbandonedClassification(
|
|
|
4865
4964
|
...(credentialFailure ? { credentialFailure: true } : {}),
|
|
4866
4965
|
...(providerError ? { providerError: true } : {}),
|
|
4867
4966
|
...(providerError && result.providerErrors?.category ? { providerErrorCategory: result.providerErrors.category } : {}),
|
|
4967
|
+
...(result.terminationReason === 'tdd-evidence-missing' ? { terminationReason: result.terminationReason } : {}),
|
|
4868
4968
|
worktreePorcelain: worktree.worktreePorcelain,
|
|
4869
4969
|
...(worktree.gitResidue ? { gitResidue: worktree.gitResidue } : {}),
|
|
4870
4970
|
...(result.completionDisposition ? { completionDisposition: result.completionDisposition } : {}),
|
|
@@ -4899,6 +4999,7 @@ export function observeRunOutcome(
|
|
|
4899
4999
|
worktreePath: SelfImplementResult['worktreePath'] | undefined;
|
|
4900
5000
|
review: SelfImplementResult['review'] | undefined;
|
|
4901
5001
|
completionDisposition: SelfImplementResult['completionDisposition'] | undefined;
|
|
5002
|
+
terminationReason?: SelfImplementResult['terminationReason'];
|
|
4902
5003
|
supervisorVerdict: SelfImplementResult['supervisorVerdict'] | undefined;
|
|
4903
5004
|
goalCauseObserved?: SelfImplementResult['goalCauseObserved'];
|
|
4904
5005
|
mergeApprovalReceived: SelfImplementResult['mergeApprovalReceived'] | undefined;
|
|
@@ -4940,6 +5041,7 @@ export function observeRunOutcome(
|
|
|
4940
5041
|
...(result.quotaExhaustionAssessment?.exhausted ? { quotaExhausted: true } : {}),
|
|
4941
5042
|
...(result.quotaExhaustionAssessment?.accountAvailability ? { quotaAccountAvailability: result.quotaExhaustionAssessment.accountAvailability } : {}),
|
|
4942
5043
|
...(result.providerErrors?.category ? { providerError: true, providerErrorCategory: result.providerErrors.category } : {}),
|
|
5044
|
+
...(result.terminationReason === 'tdd-evidence-missing' ? { terminationReason: result.terminationReason } : {}),
|
|
4943
5045
|
stage: result.stage,
|
|
4944
5046
|
reviewResultObserved: result.review !== undefined,
|
|
4945
5047
|
mustFixReported: (result.review?.mustFix.length ?? 0) > 0,
|
|
@@ -5287,6 +5389,7 @@ async function runSelfImplementInner(
|
|
|
5287
5389
|
if (graphAuthority.enabled) onGraphTemplateResolved(graphTemplate);
|
|
5288
5390
|
// ⛔ 선택을 «전부» 싣는다 — 얹힌 것만 실으면 「왜 안 얹혔나」를 사후에 못 묻는다.
|
|
5289
5391
|
let reviewRepeat: number | undefined;
|
|
5392
|
+
const recordedRuntimeStructuralSteps = new Set<string>();
|
|
5290
5393
|
/** ⭐ ③ «다이나믹» — 라운드마다 runtime 오버레이를 다시 고른다.
|
|
5291
5394
|
* ⛔ **매번 «기준 선언»에서 다시 얹는다** — 이전 라운드 결과 위에 겹쳐 얹으면
|
|
5292
5395
|
* 「이 걸음을 무엇이 만들었나」가 «누적»이 되어 사후에 못 푼다.
|
|
@@ -5307,6 +5410,7 @@ async function runSelfImplementInner(
|
|
|
5307
5410
|
...(stopClass === undefined ? {} : { stopClass }),
|
|
5308
5411
|
...(reviewRepeat === undefined ? {} : { reviewRepeat }),
|
|
5309
5412
|
});
|
|
5413
|
+
const beforeRuntimeGraph = graphTemplate;
|
|
5310
5414
|
const decision = decideTemplate({
|
|
5311
5415
|
goalType: graphGoalType,
|
|
5312
5416
|
authority: graphAuthority,
|
|
@@ -5315,7 +5419,41 @@ async function runSelfImplementInner(
|
|
|
5315
5419
|
stage: 'runtime',
|
|
5316
5420
|
...(variantSpec ? { specs: { [variantSpec.graphId]: variantSpec } } : {}),
|
|
5317
5421
|
});
|
|
5318
|
-
if (decision.appliedIds.length > 0)
|
|
5422
|
+
if (decision.appliedIds.length > 0) {
|
|
5423
|
+
graphTemplate = decision.template;
|
|
5424
|
+
const structuralEvents = runtimeOverlayRunSteps({
|
|
5425
|
+
runId: runIdentity.runId,
|
|
5426
|
+
timestamp: new Date().toISOString(),
|
|
5427
|
+
before: beforeRuntimeGraph,
|
|
5428
|
+
after: graphTemplate,
|
|
5429
|
+
overlayIds: decision.appliedIds,
|
|
5430
|
+
round,
|
|
5431
|
+
});
|
|
5432
|
+
const pendingStructuralEvents = structuralEvents.map((entry) => ({
|
|
5433
|
+
entry,
|
|
5434
|
+
key: entry.event === 'node-added'
|
|
5435
|
+
? `${entry.event}:${entry.data.node}`
|
|
5436
|
+
: `${entry.event}:${entry.data.from}:${entry.data.outcome}:${entry.data.was}:${entry.data.to}`,
|
|
5437
|
+
})).filter(({ key }) => !recordedRuntimeStructuralSteps.has(key));
|
|
5438
|
+
if (pendingStructuralEvents.length > 0) {
|
|
5439
|
+
try {
|
|
5440
|
+
const batch = pendingStructuralEvents.map(({ entry }) => entry);
|
|
5441
|
+
if (opts.seams.writeRunLedgerBatch) opts.seams.writeRunLedgerBatch(batch);
|
|
5442
|
+
else if (opts.seams.writeRunLedger) for (const entry of batch) opts.seams.writeRunLedger(entry);
|
|
5443
|
+
else appendRunLedgerEntries(batch);
|
|
5444
|
+
for (const { key } of pendingStructuralEvents) recordedRuntimeStructuralSteps.add(key);
|
|
5445
|
+
} catch (error) {
|
|
5446
|
+
const first = pendingStructuralEvents[0]!.entry;
|
|
5447
|
+
observe('graph-overlay-step-write-failed', {
|
|
5448
|
+
runId: runIdentity.runId,
|
|
5449
|
+
round,
|
|
5450
|
+
event: first.event,
|
|
5451
|
+
events: pendingStructuralEvents.map(({ entry }) => entry.event),
|
|
5452
|
+
error: error instanceof Error ? error.message : String(error),
|
|
5453
|
+
});
|
|
5454
|
+
}
|
|
5455
|
+
}
|
|
5456
|
+
}
|
|
5319
5457
|
// ⭐ SELFIMPL-NODE-SEAMS-BACK — 같은 NodeContext 가 라운드로 이어진다: 체크포인트를 옮기고,
|
|
5320
5458
|
// 부품이 도는 중에 다른 판으로 바뀌었으면 그 사실을 값으로 낸다(걸음과 신원이 갈리는 것을 막는다).
|
|
5321
5459
|
if (nodeContext !== undefined) {
|
|
@@ -5690,8 +5828,8 @@ async function runSelfImplementInner(
|
|
|
5690
5828
|
// 거짓 표시한다 · 리뷰 4R). 수확본이 비면 **요약에서 수확**한다 — 요약 원문을 통째로 싣지 않는다.
|
|
5691
5829
|
const harvestedForPr = (): string | undefined => {
|
|
5692
5830
|
if (!impl) return undefined;
|
|
5693
|
-
const fromChild = impl.evidenceTranscript?.trim() ? impl.evidenceTranscript : undefined;
|
|
5694
|
-
const picked = fromChild
|
|
5831
|
+
const fromChild = impl.evidenceTranscript?.trim() ? harvestEvidenceLines(impl.evidenceTranscript) : undefined;
|
|
5832
|
+
const picked = fromChild?.trim() ? fromChild : harvestEvidenceLines(impl.summary);
|
|
5695
5833
|
return picked.trim() ? picked : undefined;
|
|
5696
5834
|
};
|
|
5697
5835
|
let offDiffEvidence: OffDiffEvidenceParse = { items: [], discardedMissingVerify: 0, discardedEmptyClaim: 0, missingResult: 0, orphanResult: 0, truncatedResult: 0, anchoredEvidence: 0 };
|
|
@@ -6112,6 +6250,7 @@ async function runSelfImplementInner(
|
|
|
6112
6250
|
};
|
|
6113
6251
|
let preservationBase = wt.resolvedBase;
|
|
6114
6252
|
const runProviderName = opts.childLlm?.provider ?? (s.currentProviderName?.() ?? currentProviderName());
|
|
6253
|
+
let activeChildLlm = opts.childLlm;
|
|
6115
6254
|
let cachedQuotaExhaustionAssessment: QuotaExhaustionAssessment | undefined;
|
|
6116
6255
|
const quotaExhaustionAssessmentForRun = (): QuotaExhaustionAssessment => {
|
|
6117
6256
|
cachedQuotaExhaustionAssessment ??= readQuotaExhausted(s.inspectCodexRotation, runProviderName);
|
|
@@ -6161,6 +6300,7 @@ async function runSelfImplementInner(
|
|
|
6161
6300
|
};
|
|
6162
6301
|
let blockedDraftNoChanges = false;
|
|
6163
6302
|
let blockedDraftPrFailure: string | undefined;
|
|
6303
|
+
let blockedDraftPrFailureKind: 'blocked-draft-pr-guard' | undefined;
|
|
6164
6304
|
let repairLink: { originalPr: number; salvageRef: string } | undefined;
|
|
6165
6305
|
const reviewBlockedResult = (pr: { url: string; number: number } | undefined) => ({
|
|
6166
6306
|
stage: blockedDraftNoChanges && podReviewBlockedDraft ? 'no-changes' as const : podReviewBlockedDraft && !pr ? 'aborted' as const : 'review-blocked' as const,
|
|
@@ -6231,14 +6371,26 @@ async function runSelfImplementInner(
|
|
|
6231
6371
|
observe('blocked-draft-decision-signal-failed', { stage, error: decisionSignalObservation.error }, { level: 'warn' });
|
|
6232
6372
|
}
|
|
6233
6373
|
const abandonedClassification = classifyUnfinishedRun(stage, verdict, decomposition);
|
|
6234
|
-
const
|
|
6374
|
+
const stopClass = classifyTerminalHarnessFailure({
|
|
6375
|
+
stage,
|
|
6376
|
+
abandonedClassification: abandonedClassification.classification,
|
|
6377
|
+
...(verdict ? { supervisorVerdict: verdict } : {}),
|
|
6378
|
+
});
|
|
6379
|
+
const classificationRecord = blockedDraftClassificationRecord(abandonedClassification, { stage, class: stopClass });
|
|
6235
6380
|
observe('blocked-draft-classification', {
|
|
6236
6381
|
stage,
|
|
6237
6382
|
...classificationRecord,
|
|
6238
6383
|
}, { level: 'warn' });
|
|
6384
|
+
observe('draft-stop-classified', {
|
|
6385
|
+
stage,
|
|
6386
|
+
stop: classificationRecord.stop,
|
|
6387
|
+
classification: classificationRecord.classification,
|
|
6388
|
+
classificationBasis: classificationRecord.classificationBasis,
|
|
6389
|
+
}, { level: 'warn' });
|
|
6239
6390
|
const observation = {
|
|
6240
6391
|
branch: wt.branch,
|
|
6241
6392
|
stage,
|
|
6393
|
+
stopClass: classificationRecord.stop.class,
|
|
6242
6394
|
verdict: verdict ?? null,
|
|
6243
6395
|
reason: reason.slice(0, 240),
|
|
6244
6396
|
rounds: round,
|
|
@@ -6281,6 +6433,8 @@ async function runSelfImplementInner(
|
|
|
6281
6433
|
reason,
|
|
6282
6434
|
rounds: round,
|
|
6283
6435
|
undeliveredSupervisorInputs: undeliveredSupervisorInputSnapshot(),
|
|
6436
|
+
stopStage: stage,
|
|
6437
|
+
stopClass,
|
|
6284
6438
|
abandonedClassification,
|
|
6285
6439
|
...(decomposition ? { decomposition } : {}),
|
|
6286
6440
|
...(harvestedForPr() ? { evidence: harvestedForPr() as string } : {}),
|
|
@@ -6552,6 +6706,9 @@ async function runSelfImplementInner(
|
|
|
6552
6706
|
...(artifactPath ? { prBodyArtifactPath: artifactPath } : {}),
|
|
6553
6707
|
...(artifactError ? { prBodyArtifactError: artifactError } : {}),
|
|
6554
6708
|
}, { level: 'warn' });
|
|
6709
|
+
blockedDraftPrFailureKind = /self-implement PR guard 실패/.test(prError) && /(?:same-cell|goal-only)/.test(prError)
|
|
6710
|
+
? 'blocked-draft-pr-guard' : undefined;
|
|
6711
|
+
blockedDraftPrFailure = `draft PR 생성 실패: ${prError}`;
|
|
6555
6712
|
// STOP-RECORD: a failed blocked-draft PR open (e.g. same-branch rerun with a PR already open) left no stop reason.
|
|
6556
6713
|
let draftStopEntry: RunLedgerEntry | undefined;
|
|
6557
6714
|
try {
|
|
@@ -7240,7 +7397,38 @@ async function runSelfImplementInner(
|
|
|
7240
7397
|
if (fabricObservation) observe('rework-budget-fabric-shadow', fabricObservation);
|
|
7241
7398
|
}
|
|
7242
7399
|
} catch (error) {
|
|
7243
|
-
if (judgmentStarted)
|
|
7400
|
+
if (judgmentStarted) {
|
|
7401
|
+
const failureKind = classifyReviewProviderFailure(safeErrorDescription(error));
|
|
7402
|
+
if (failureKind === 'credentials-unavailable') {
|
|
7403
|
+
const blockedStage = isReviewRework(reworkKind) ? 'review-blocked' : 'gate-failed';
|
|
7404
|
+
const reason = 'rework skipped: provider credentials unavailable';
|
|
7405
|
+
observe('rework-skipped-provider-unavailable', { round, kind: reworkKind, reason: failureKind }, { level: 'warn' });
|
|
7406
|
+
finalizeSupervisorDeliveries('rework-provider-credentials-unavailable');
|
|
7407
|
+
if (blockedStage === 'review-blocked') recordPendingReviewTriage('follow-up', 'review-blocked', effectiveMax);
|
|
7408
|
+
const pr = await preserveBlockedArtifacts({
|
|
7409
|
+
stage: blockedStage,
|
|
7410
|
+
reason,
|
|
7411
|
+
gate,
|
|
7412
|
+
failureKind,
|
|
7413
|
+
salvageStatusExpected: false,
|
|
7414
|
+
});
|
|
7415
|
+
const common = {
|
|
7416
|
+
ok: false as const,
|
|
7417
|
+
node: 'rework' as const,
|
|
7418
|
+
...resolveRunOutcome({ termination: 'abandoned' }),
|
|
7419
|
+
sessionId,
|
|
7420
|
+
worktreePath: wt.path,
|
|
7421
|
+
branch: wt.branch,
|
|
7422
|
+
gate,
|
|
7423
|
+
...(review ? { review } : {}),
|
|
7424
|
+
quotaExhaustionAssessment: quotaExhaustionAssessmentForRun(),
|
|
7425
|
+
};
|
|
7426
|
+
return blockedStage === 'review-blocked'
|
|
7427
|
+
? { ...common, ...reviewBlockedResult(pr), detail: reason }
|
|
7428
|
+
: { ...common, stage: 'gate-failed' as const, ...(pr ? { prUrl: pr.url, prNumber: pr.number } : {}), detail: reason };
|
|
7429
|
+
}
|
|
7430
|
+
throw error;
|
|
7431
|
+
}
|
|
7244
7432
|
consecutiveUnresolvedBudget = 0;
|
|
7245
7433
|
}
|
|
7246
7434
|
} else if (round > 0) {
|
|
@@ -7513,6 +7701,29 @@ async function runSelfImplementInner(
|
|
|
7513
7701
|
let supervisorInputClosed = false;
|
|
7514
7702
|
const closeSupervisorInput = (): void => { supervisorInputClosed = true; };
|
|
7515
7703
|
try {
|
|
7704
|
+
if (round > 0 && activeChildLlm?.provider === 'grok') {
|
|
7705
|
+
const { readGrokQuotaForLaunch, defaultChildLlmModel } = await import('../self-dev/dev-cli.js');
|
|
7706
|
+
const grokQuota = readGrokQuotaForLaunch();
|
|
7707
|
+
const grokCredential = resolveGrokCredential() ? 'available' as const : 'unavailable' as const;
|
|
7708
|
+
let codexRotation: ReturnType<typeof inspectCodexRotation> | undefined;
|
|
7709
|
+
try { codexRotation = (s.inspectCodexRotation ?? inspectCodexRotation)(); } catch { codexRotation = undefined; }
|
|
7710
|
+
const preference = resolveChildLlmPreference(getUserConfig());
|
|
7711
|
+
const alternateSlot = preference.chain.find((slot) => slot.provider === 'openai-codex' && slot.provider !== activeChildLlm!.provider);
|
|
7712
|
+
const hasCodexCredential = (codexRotation?.knownAccountCount ?? 0) > 0;
|
|
7713
|
+
const codexQuota = readQuotaExhausted(s.inspectCodexRotation, 'openai-codex');
|
|
7714
|
+
const alternate = hasCodexCredential ? {
|
|
7715
|
+
provider: 'openai-codex', model: alternateSlot?.model ?? defaultChildLlmModel('openai-codex'), source: 'config' as const,
|
|
7716
|
+
} : undefined;
|
|
7717
|
+
const decision = reselectChildForRework({ current: activeChildLlm, grokQuota, grokCredential,
|
|
7718
|
+
...(alternate ? { alternate } : {}), alternateCredential: hasCodexCredential ? 'available' : 'unavailable',
|
|
7719
|
+
alternateQuotaExhausted: codexQuota.exhausted });
|
|
7720
|
+
if (decision.action === 'reselect') {
|
|
7721
|
+
activeChildLlm = decision.selection;
|
|
7722
|
+
observe('rework-child-model-reselected', { round, previousProvider: decision.previous.provider, previousModel: decision.previous.model,
|
|
7723
|
+
provider: activeChildLlm.provider, model: activeChildLlm.model, reason: decision.reason, quota: grokQuota,
|
|
7724
|
+
grokCredential, alternateQuotaExhausted: codexQuota.exhausted ?? null });
|
|
7725
|
+
}
|
|
7726
|
+
}
|
|
7516
7727
|
implementPromise = s.implement({
|
|
7517
7728
|
sessionId, cwd: wt.path, feature, runId, shardIdentity, signal: implementAbortController.signal,
|
|
7518
7729
|
...(harnessSeededPaths.length ? { harnessSeededPaths } : {}),
|
|
@@ -7525,6 +7736,31 @@ async function runSelfImplementInner(
|
|
|
7525
7736
|
updateDelivery?.('not-delivered', 'empty-supervisor-input');
|
|
7526
7737
|
return;
|
|
7527
7738
|
}
|
|
7739
|
+
if (normalized.startsWith(RUN_DOCTOR_HANDOFF_INPUT_PREFIX)) {
|
|
7740
|
+
const runIdMatch = /(?:^|\s)runId=([^\s]+)/u.exec(normalized);
|
|
7741
|
+
const stopKeyMatch = /(?:^|\s)stopKey=([^\s]+)/u.exec(normalized);
|
|
7742
|
+
if (!runIdMatch?.[1] || runIdMatch[1] !== runId || !stopKeyMatch?.[1]) {
|
|
7743
|
+
updateDelivery?.('not-delivered', 'invalid-run-doctor-handoff');
|
|
7744
|
+
return;
|
|
7745
|
+
}
|
|
7746
|
+
void (s.runDoctorHandoff ?? runDoctorHandoff)({ runId, stopKey: stopKeyMatch[1], dir: runLedgerDir(elanousStateRoot() || undefined),
|
|
7747
|
+
dispatch: (action, handoff) => {
|
|
7748
|
+
if (action !== 'reauthor-from-materialized') return { outcome: 'needs-human', detail: `prescription executor not wired: ${action}` };
|
|
7749
|
+
const accepted = recordFailureEvent({ source: 'harness-run', kind: 'run-supervisor-wait-streak', ref: runId,
|
|
7750
|
+
summary: `[implement aborted] run-supervisor wait streak ${String(handoff.waitCount ?? 'unknown')} · doctor reauthor handoff`,
|
|
7751
|
+
goalText: feature, ...(opts.goalId ? { goalId: opts.goalId } : {}), ...(opts.goalFile ? { goalFile: opts.goalFile } : {}),
|
|
7752
|
+
...(opts.healCellKey ? { cellKey: opts.healCellKey } : {}), at: new Date().toISOString() });
|
|
7753
|
+
return { outcome: accepted.folded ? 'heal-event-already-present' : 'heal-graph-requested',
|
|
7754
|
+
detail: accepted.folded ? 'same-run heal event already recorded' : 'PR1 heal intake accepted the materialized reauthor action' };
|
|
7755
|
+
},
|
|
7756
|
+
}).then((result) => {
|
|
7757
|
+
updateDelivery?.(result.status === 'acted' || result.status === 'already-acted' ? 'delivered' : 'not-delivered',
|
|
7758
|
+
result.status === 'needs-human' ? result.outcome : result.status === 'missing-handoff' ? 'run-chart-handoff-missing' : undefined);
|
|
7759
|
+
}).catch((error: unknown) => {
|
|
7760
|
+
updateDelivery?.('not-delivered', error instanceof Error ? error.message.slice(0, 120) : String(error).slice(0, 120));
|
|
7761
|
+
});
|
|
7762
|
+
return;
|
|
7763
|
+
}
|
|
7528
7764
|
if (supervisorInputClosed) {
|
|
7529
7765
|
recordUndeliveredSupervisorInput(normalized, 'late-supervisor-input');
|
|
7530
7766
|
updateDelivery?.('not-delivered', 'late-supervisor-input');
|
|
@@ -7540,7 +7776,7 @@ async function runSelfImplementInner(
|
|
|
7540
7776
|
supervisorDeliveryUpdates.push({ text: normalized, update: updateDelivery });
|
|
7541
7777
|
},
|
|
7542
7778
|
...(escalateTier !== 'none' ? { escalateTier } : {}),
|
|
7543
|
-
...(
|
|
7779
|
+
...(activeChildLlm ? { childLlm: activeChildLlm } : {}),
|
|
7544
7780
|
...(opts.documentReferences ? { documentReferences: opts.documentReferences } : {}),
|
|
7545
7781
|
});
|
|
7546
7782
|
} catch (error) {
|
|
@@ -7615,7 +7851,7 @@ async function runSelfImplementInner(
|
|
|
7615
7851
|
...(harnessSeededPaths.length ? { harnessSeededPaths } : {}),
|
|
7616
7852
|
onSurfaceProgress: line => progress('implementing', line.trimEnd()),
|
|
7617
7853
|
roundContext: { round: retryRound, effectiveMax, previousRoundFailure: retryNote },
|
|
7618
|
-
...(
|
|
7854
|
+
...(activeChildLlm ? { childLlm: activeChildLlm } : {}),
|
|
7619
7855
|
...(opts.documentReferences ? { documentReferences: opts.documentReferences } : {}),
|
|
7620
7856
|
}), T.implement, 'implement');
|
|
7621
7857
|
} catch (error) {
|
|
@@ -7686,7 +7922,61 @@ async function runSelfImplementInner(
|
|
|
7686
7922
|
// ② 첫 조각 커밋의 피처 시험·구현 전 실행 RED 기록과 구현 뒤 같은 명령 GREEN 기록이
|
|
7687
7923
|
// 없으면 수리 라운드 1회(완료 경계·기존 동작은 보존), 그래도 없으면 fail-closed.
|
|
7688
7924
|
// ③ 관측 원장에 tdd-red/tdd-green 이벤트를 남긴다.
|
|
7689
|
-
let
|
|
7925
|
+
let tddTranscript = [impl.evidenceTranscript, impl.summary].filter((part): part is string => Boolean(part?.trim())).join('\n');
|
|
7926
|
+
let tddJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddTranscript));
|
|
7927
|
+
const runHarnessBaseTddWhenRedMissing = (input: {
|
|
7928
|
+
readonly round: number;
|
|
7929
|
+
readonly goal: string;
|
|
7930
|
+
readonly transcript: string;
|
|
7931
|
+
readonly judgment: ReturnType<typeof judgeTddEvidence>;
|
|
7932
|
+
readonly implementation: typeof impl;
|
|
7933
|
+
}): { readonly transcript: string; readonly judgment: ReturnType<typeof judgeTddEvidence> } => {
|
|
7934
|
+
if (!input.judgment.planned || input.judgment.red.observed || !input.implementation.ok
|
|
7935
|
+
|| input.implementation.terminalStatus?.reached !== true) {
|
|
7936
|
+
return { transcript: input.transcript, judgment: input.judgment };
|
|
7937
|
+
}
|
|
7938
|
+
if (!wt.resolvedBase) {
|
|
7939
|
+
observe('tdd-base-test', { round: input.round, status: 'unmeasured', reason: 'base-commit-unavailable' }, { level: 'warn' });
|
|
7940
|
+
return { transcript: input.transcript, judgment: input.judgment };
|
|
7941
|
+
}
|
|
7942
|
+
const result = (s.runTddBaseHeadTest ?? runTddBaseHeadTest)({ cwd: wt.path, baseSha: wt.resolvedBase, goal: input.goal });
|
|
7943
|
+
observe('tdd-base-test', {
|
|
7944
|
+
round: input.round, status: result.accepted ? 'red-green' : 'unmeasured', reason: result.reason,
|
|
7945
|
+
baseSha: wt.resolvedBase, command: result.command, baseResult: result.baseResult ?? null, headResult: result.headResult ?? null,
|
|
7946
|
+
}, result.accepted ? {} : { level: 'warn' });
|
|
7947
|
+
if (!result.accepted || !result.transcript) return { transcript: input.transcript, judgment: input.judgment };
|
|
7948
|
+
const transcript = `${result.transcript}\n${input.transcript}`;
|
|
7949
|
+
return { transcript, judgment: judgeTddEvidence(input.goal, parseOffDiffEvidence(transcript)) };
|
|
7950
|
+
};
|
|
7951
|
+
const baseTdd = runHarnessBaseTddWhenRedMissing({ round, goal: roundGoal, transcript: tddTranscript, judgment: tddJudgment, implementation: impl });
|
|
7952
|
+
tddTranscript = baseTdd.transcript;
|
|
7953
|
+
tddJudgment = baseTdd.judgment;
|
|
7954
|
+
const receivedTddRed = receiveObservedTddRed({
|
|
7955
|
+
goal: roundGoal, judgment: tddJudgment, transcript: tddTranscript,
|
|
7956
|
+
resultParsed: impl.ok && impl.terminalStatus?.reached === true,
|
|
7957
|
+
});
|
|
7958
|
+
debug.log('self-implement.tdd-evidence', 'red-receive', {
|
|
7959
|
+
round, source: 'child-tool-output', accepted: receivedTddRed.accepted, reason: receivedTddRed.reason,
|
|
7960
|
+
observedTestCommand: receivedTddRed.command ?? null, observedTestResult: receivedTddRed.result ?? null,
|
|
7961
|
+
});
|
|
7962
|
+
if (receivedTddRed.accepted) {
|
|
7963
|
+
tddTranscript = receivedTddRed.transcript;
|
|
7964
|
+
tddJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddTranscript));
|
|
7965
|
+
}
|
|
7966
|
+
const receivedTddGreen = receiveObservedTddGreen({
|
|
7967
|
+
goal: roundGoal, judgment: tddJudgment, transcript: tddTranscript,
|
|
7968
|
+
resultParsed: impl.ok && impl.terminalStatus?.reached === true,
|
|
7969
|
+
});
|
|
7970
|
+
debug.log('self-implement.tdd-evidence', 'green-receive', {
|
|
7971
|
+
round, source: 'child-tool-output', accepted: receivedTddGreen.accepted, reason: receivedTddGreen.reason,
|
|
7972
|
+
taggedGreenPresent: tddJudgment.green.observed, observedTestCommand: receivedTddGreen.command ?? null,
|
|
7973
|
+
observedTestResult: receivedTddGreen.result ?? null,
|
|
7974
|
+
});
|
|
7975
|
+
if (receivedTddGreen.accepted) {
|
|
7976
|
+
tddTranscript = receivedTddGreen.transcript;
|
|
7977
|
+
tddJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddTranscript));
|
|
7978
|
+
}
|
|
7979
|
+
let tddEvidenceFailure: SelfImplementResult['tddEvidenceFailure'];
|
|
7690
7980
|
if (tddJudgment.needsRepair && impl.ok && round < effectiveMax && opts.goalFile
|
|
7691
7981
|
&& !hasCurrentProviderError() && !hasCurrentCredentialFailure()) {
|
|
7692
7982
|
let goalDocument: string | undefined;
|
|
@@ -7716,21 +8006,62 @@ async function runSelfImplementInner(
|
|
|
7716
8006
|
...(harnessSeededPaths.length ? { harnessSeededPaths } : {}),
|
|
7717
8007
|
onSurfaceProgress: (line) => progress('implementing', line.trimEnd()),
|
|
7718
8008
|
roundContext: { round: tddRetryRound, effectiveMax, previousRoundFailure: tddRetryNote },
|
|
7719
|
-
...(
|
|
8009
|
+
...(activeChildLlm ? { childLlm: activeChildLlm } : {}),
|
|
7720
8010
|
...(opts.documentReferences ? { documentReferences: opts.documentReferences } : {}),
|
|
7721
8011
|
}), T.implement, 'implement');
|
|
7722
8012
|
} catch (error) {
|
|
7723
8013
|
tddRetryAbort.abort();
|
|
7724
8014
|
tddRetryImpl = { ...beforeTddRetry, ok: false, summary: `[구현 재작업 · tdd-evidence-missing] 수리 라운드 실패 — ${safeErrorDescription(error)}` };
|
|
7725
8015
|
}
|
|
7726
|
-
|
|
8016
|
+
let tddRetryTranscript = [tddRetryImpl.evidenceTranscript, tddRetryImpl.summary]
|
|
8017
|
+
.filter((part): part is string => Boolean(part?.trim())).join('\n');
|
|
8018
|
+
let tddRetryJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddRetryTranscript));
|
|
8019
|
+
const retryBaseTdd = runHarnessBaseTddWhenRedMissing({
|
|
8020
|
+
round: tddRetryRound, goal: roundGoal, transcript: tddRetryTranscript, judgment: tddRetryJudgment, implementation: tddRetryImpl,
|
|
8021
|
+
});
|
|
8022
|
+
tddRetryTranscript = retryBaseTdd.transcript;
|
|
8023
|
+
tddRetryJudgment = retryBaseTdd.judgment;
|
|
8024
|
+
const retryTddRed = receiveObservedTddRed({
|
|
8025
|
+
goal: roundGoal, judgment: tddRetryJudgment, transcript: tddRetryTranscript,
|
|
8026
|
+
resultParsed: tddRetryImpl.ok && tddRetryImpl.terminalStatus?.reached === true,
|
|
8027
|
+
});
|
|
8028
|
+
debug.log('self-implement.tdd-evidence', 'red-receive', {
|
|
8029
|
+
round: tddRetryRound, source: 'child-tool-output', accepted: retryTddRed.accepted, reason: retryTddRed.reason,
|
|
8030
|
+
observedTestCommand: retryTddRed.command ?? null, observedTestResult: retryTddRed.result ?? null,
|
|
8031
|
+
});
|
|
8032
|
+
if (retryTddRed.accepted) {
|
|
8033
|
+
tddRetryTranscript = retryTddRed.transcript;
|
|
8034
|
+
tddRetryJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddRetryTranscript));
|
|
8035
|
+
}
|
|
8036
|
+
const retryTddGreen = receiveObservedTddGreen({
|
|
8037
|
+
goal: roundGoal, judgment: tddRetryJudgment, transcript: tddRetryTranscript,
|
|
8038
|
+
resultParsed: tddRetryImpl.ok && tddRetryImpl.terminalStatus?.reached === true,
|
|
8039
|
+
});
|
|
8040
|
+
debug.log('self-implement.tdd-evidence', 'green-receive', {
|
|
8041
|
+
round: tddRetryRound, source: 'child-tool-output', accepted: retryTddGreen.accepted, reason: retryTddGreen.reason,
|
|
8042
|
+
taggedGreenPresent: tddRetryJudgment.green.observed, observedTestCommand: retryTddGreen.command ?? null,
|
|
8043
|
+
observedTestResult: retryTddGreen.result ?? null,
|
|
8044
|
+
});
|
|
8045
|
+
if (retryTddGreen.accepted) {
|
|
8046
|
+
tddRetryTranscript = retryTddGreen.transcript;
|
|
8047
|
+
tddRetryJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddRetryTranscript));
|
|
8048
|
+
}
|
|
7727
8049
|
if (tddRetryImpl.ok && !tddRetryJudgment.needsRepair) {
|
|
7728
|
-
observe('implementation-tdd-rework', { status: 'succeeded', round: tddRetryRound, missing: [] });
|
|
8050
|
+
observe('implementation-tdd-rework', { status: 'succeeded', round: tddRetryRound, missing: [...tddRetryJudgment.missing] });
|
|
7729
8051
|
tddJudgment = tddRetryJudgment;
|
|
7730
8052
|
impl = tddRetryImpl;
|
|
7731
8053
|
round = tddRetryRound;
|
|
7732
8054
|
} else {
|
|
7733
8055
|
observe('implementation-tdd-rework', { status: 'exhausted', round: tddRetryRound, missing: [...tddRetryJudgment.missing] }, { level: 'warn' });
|
|
8056
|
+
// Only an initially successful implementation can enter this one retry. Goal-only exhaustion
|
|
8057
|
+
// has impl.ok=false before this point, so these two terminal reason codes cannot compete.
|
|
8058
|
+
if (tddRetryJudgment.missing.length > 0) {
|
|
8059
|
+
tddEvidenceFailure = {
|
|
8060
|
+
reason: 'tdd-evidence-missing',
|
|
8061
|
+
round: tddRetryRound,
|
|
8062
|
+
missing: [...tddRetryJudgment.missing],
|
|
8063
|
+
};
|
|
8064
|
+
}
|
|
7734
8065
|
impl = { ...beforeTddRetry, ok: false, summary: `[구현 재작업 · tdd-evidence-missing] RED/GREEN 기록 결손 — ${beforeTddRetry.summary}` };
|
|
7735
8066
|
}
|
|
7736
8067
|
}
|
|
@@ -7821,7 +8152,7 @@ async function runSelfImplementInner(
|
|
|
7821
8152
|
// 창 밖으로 밀려 파서에 도달조차 못 하던 자리다. 미주입 seam 은 종전대로 요약에서 판다(무회귀).
|
|
7822
8153
|
// ⛔ `??` 가 아니라 **빈 문자열도 폴백**이다 — 수확본이 비면 *"수확했다"* 가 아니라 *"없다"* 이고,
|
|
7823
8154
|
// `??` 로 두면 관측이 `harvested` 라 **거짓을 말한다**(리뷰 3R).
|
|
7824
|
-
const harvested = impl.evidenceTranscript?.trim() ? impl.evidenceTranscript : undefined;
|
|
8155
|
+
const harvested = impl.evidenceTranscript?.trim() ? harvestEvidenceLines(impl.evidenceTranscript) : undefined;
|
|
7825
8156
|
const childEvidenceSource = harvested ?? impl.summary;
|
|
7826
8157
|
let diffEvidence = '';
|
|
7827
8158
|
let roundObservationMeasurementBasis: ObservationMeasurementBasis | undefined;
|
|
@@ -7911,8 +8242,13 @@ async function runSelfImplementInner(
|
|
|
7911
8242
|
}, { compact: { stringMax: Math.max(MAX_HARVESTED_EVIDENCE_CHARS, harvestObs.harvestedEvidence?.length ?? 0) } });
|
|
7912
8243
|
if (impl.ok) completionDisposition = finishedChildCommitMissing || finishedChildCommitted ? undefined : impl.completionDisposition;
|
|
7913
8244
|
const effectiveDisposition = impl.ok ? completionDisposition : impl.completionDisposition;
|
|
7914
|
-
|
|
8245
|
+
let materializedPaths: readonly string[] | undefined;
|
|
8246
|
+
try { materializedPaths = (s.changedFilesForGateRoute ?? changedFiles)(wt.path); } catch { /* unknown diff is not path evidence */ }
|
|
8247
|
+
observe('implemented', { ok: impl.ok, round, ...(materializedPaths ? { materializedPaths: [...materializedPaths] } : {}),
|
|
8248
|
+
...(effectiveDisposition ? { completionDisposition: effectiveDisposition } : {}) });
|
|
7915
8249
|
progress('implemented', impl.ok ? (round === 0 ? '구현 완료' : `rework ${round} 완료`) : impl.completionDisposition ? '변경 없이 완료 검증' : '구현 실패(worktree 보존)');
|
|
8250
|
+
// TDD exhaustion marks impl failed above; this return precedes finished-child commit and gate handling,
|
|
8251
|
+
// so those success-only terminal paths cannot swallow the structured report-deficit facts.
|
|
7916
8252
|
if (!impl.ok) {
|
|
7917
8253
|
finalizeSupervisorDeliveries('next-round-implement-not-ok');
|
|
7918
8254
|
const abort = buildImplementAbortRecord(impl.summary, impl.terminalStatus);
|
|
@@ -7936,7 +8272,11 @@ async function runSelfImplementInner(
|
|
|
7936
8272
|
salvageStatusExpected: false,
|
|
7937
8273
|
...(abort.terminalStatus ? { terminalStatus: abort.terminalStatus } : {}),
|
|
7938
8274
|
});
|
|
7939
|
-
return { ok: false, stage: 'aborted', node: 'implement', ...resolveRunOutcome({ termination: 'abandoned' }),
|
|
8275
|
+
return { ok: false, stage: 'aborted', node: 'implement', ...resolveRunOutcome({ termination: 'abandoned' }),
|
|
8276
|
+
...(tddEvidenceFailure ? { terminationReason: tddEvidenceFailure.reason, tddEvidenceFailure }
|
|
8277
|
+
: goalOnlyReworkExhausted ? { terminationReason: 'goal-only-rework-exhausted' as const } : {}),
|
|
8278
|
+
sessionId, worktreePath: wt.path, branch: wt.branch, quotaExhaustionAssessment: quotaExhaustionAssessmentForRun(), ...(impl.completionDisposition ? { completionDisposition: impl.completionDisposition } : {}), ...(pr ? { prUrl: pr.url, prNumber: pr.number } : {}), detail: blockedDraftPrFailure ?? impl.summary,
|
|
8279
|
+
...(blockedDraftPrFailureKind ? { detailKind: blockedDraftPrFailureKind } : {}) };
|
|
7940
8280
|
}
|
|
7941
8281
|
|
|
7942
8282
|
if (finishedChildCommitMissing) {
|