elanous 0.2.40 → 0.2.41
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/README.md +7 -7
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/{HjeK7zONHfR7op1hKXp4k → GiOLWmt4MqDZePubBjA4Q}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/1115.434ae2ecb0ad986d.js +149 -0
- package/apps/pwa/out/_next/static/chunks/1121.667cec0bcdbb3fdb.js +36 -0
- package/apps/pwa/out/_next/static/chunks/{9184.45afbf44fec87574.js → 1178.1aa9cad0e7695427.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{2829-734fe8bf2eee7347.js → 1197-54da59d250a6e476.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{6749.0744ce6eb08d40e9.js → 1219.7e17964e0e7cd8e5.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/1245.1cfd13b26dbd71d6.js +287 -0
- package/apps/pwa/out/_next/static/chunks/1494-f93046ff5c5a124d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1609.2b312797599b8e45.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1661.0dd330f3d89f73f3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/167-0c121e4b47e0f9da.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1700.cdc2bf8cc685e221.js +90 -0
- package/apps/pwa/out/_next/static/chunks/1703-78e46acad29f3cfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1765.679b29625c8e88d4.js +77 -0
- package/apps/pwa/out/_next/static/chunks/{2226.2cf61ec781827219.js → 1800.f7ff51dc4978a958.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1971-7efb628c471dc5a0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1999-8de7b7bb36801913.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9175.2de5209a5ce6f68a.js → 2073.689dcb2680113d76.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2198-557d49184104d165.js +1 -0
- package/apps/pwa/out/_next/static/chunks/221-440ce67fa9f5c839.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5383.bdfa5d886e39a826.js → 2263.e09b6edea33bad2d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2427-8ed8e98624cbd664.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2457-725c5827bc003795.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2491-2718b15a5ccb75a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2527-5c636a43c7cc5dde.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2692-1027cb16fe4ccf49.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9069.657590a84afb8fac.js → 2743.5d3f76948be32b34.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{6624.981ef7caeb680560.js → 2773.0e80b9d325fb5635.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/2873-0f3cb56c8e3528ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4864a2ca.1c1c280a7772c5e5.js → 2fdf2931.b431eee4fb468bc3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9189505a.980427ac048c8c60.js → 2fe2c302.41b517f88d6fe502.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9992.07ce73c10bd5e6a1.js → 3097.864e92bdaa2f4d15.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3136-d6870ba63300a93e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3173-0289113d434e83b7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3230-49298c3b73ef2268.js +1 -0
- package/apps/pwa/out/_next/static/chunks/325-dd9208a1a0ab7ce4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3283.528f430dd043fb4e.js +74 -0
- package/apps/pwa/out/_next/static/chunks/3295.cc8cb13b8f0dae1a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3688-86e3b88abf18cb3b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3804-7220467a5473a8df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3808.3e1e247ce7bdf889.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{b84cad00.594027ebe0531fe2.js → 385e4574.e9886ab32759eda3.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/3927.b5473ad109da44c5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3934-98ea94832e194796.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4133.2056bb4d78f621af.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8086.1ab9103c41be884f.js → 4156.ba4de4a3664f04b4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4297-239ca82f293faab0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4320-dcc5a7734126f4c9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4434.94b4c552a2d91e69.js +148 -0
- package/apps/pwa/out/_next/static/chunks/{1281.d81877e35b9068f4.js → 4527.a69f2894d1bc9f4a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4579.03e4092f73950965.js +226 -0
- package/apps/pwa/out/_next/static/chunks/{8357.1aaa713b052a78b1.js → 4667.97e31aa38c95c475.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/{5436.fdf6fa8ae3e9588d.js → 4702.4a4adc1f16d7c93b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4815.481501c57b3568d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/487-d16e698ef14662d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4888-7a38bf522c9cc6fe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5034-30e429d6bb086881.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5040-35c494e60dadd97d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/50c6ab1e.81a96e419350909d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5154.4b6a836179356f30.js +94 -0
- package/apps/pwa/out/_next/static/chunks/{4769.9fd582071301f382.js → 5159.115f1c2ca471386c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5228-a8200df486278f2d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/530.d26346e18089640a.js +115 -0
- package/apps/pwa/out/_next/static/chunks/5379.97af106d09566f69.js +8 -0
- package/apps/pwa/out/_next/static/chunks/{d8de0de2-dd0f4ac8e5ab1832.js → 53aeb4ee-51c92f8d683f5220.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{6257.c0037b8949239f5e.js → 5471.1e611302ed3a7c53.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/5479-b6372e762719f92f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5534-699c5cbcbc96c5d7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2566.beaffc3a5e1fcd2e.js → 5574.f35accf4f132b29d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5701.9c4e8f250312eeee.js +24 -0
- package/apps/pwa/out/_next/static/chunks/{2066.a77257c8c350770a.js → 5744.b9415e18ad623100.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5892.2526d962339662d8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4351.0f37a6db2b34d50b.js → 5937.c2df9e3447e1f667.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5941.8210cc93c9202c0a.js +286 -0
- package/apps/pwa/out/_next/static/chunks/{6051-0ae955eedb10adb9.js → 5947-135e26537d80a6b9.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{3746-f80a78f220bf37b5.js → 5964-7e21164a8f2cf0ce.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5975.4004f820ae3cecd5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6142-7ccd48795d7abd55.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6160.bf9177b8c1bfb243.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6398.71ba0690c8027555.js +27 -0
- package/apps/pwa/out/_next/static/chunks/6492.2bd5c10edc1a064e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6552.a3840aa7da35ad68.js +62 -0
- package/apps/pwa/out/_next/static/chunks/6736.1e36d3ac5fa5e41d.js +24 -0
- package/apps/pwa/out/_next/static/chunks/{2047.8f23e210995d4548.js → 6874.d5cf7eb8edb2cabe.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/6900.3ccbe069bdd4556a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/71327eb4.add50b365f94bf3a.js +122 -0
- package/apps/pwa/out/_next/static/chunks/7136.deca3e3a2ddaa374.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7139-ee9f8ed2677a40b3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7191.fdc955f7d96064a4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7423-e0aa5d9e2962120e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7453.afc1ea7e05d56a8c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7503-5e6a3d7fe67e4a0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7761-476fd7bf768abd34.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7975.eafb12097a0a9e62.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8272-025653884f9645d2.js → 8050-9b364bdef8f71927.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8152.64e253c35cccfaae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8190.620f0231b3924bcb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/83184dcd-0ee6247ff41eb3f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8448.45b6b1f1a99eeb35.js +104 -0
- package/apps/pwa/out/_next/static/chunks/{2281-b8cede695c6c650e.js → 8464-e24f10451b658aac.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8477.e4c944bb3aa5d2f3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8710.ca385257d5ca422e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8830.627ccf294ec2465c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5622.94893f5aea7185d0.js → 8880.64c445592f04acaf.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1452.162bb2d9d699e82a.js → 8981.c706964c8ba27aff.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{470.51a72a2348306455.js → 9048.212083de42d25be3.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/9053.bd0fffaff8d3f836.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9161-c66e723d7ec9d682.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9185.1ecdf9b65c0bb684.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9356.fccd5f58086b4ff5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9446.dc0406109371d329.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9506.dcf25d467a42627e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2177.df8547f9d7215c4e.js → 9507.7026657a2f47eb64.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/9541.eb8e2f8480c7feca.js +93 -0
- package/apps/pwa/out/_next/static/chunks/9577.ed7582186efa5482.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7515.1ad6efe157fa4448.js → 9579.4a8169600fff2058.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9642-ff2e039eb62e3b92.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9659-8f2323348113ad80.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9724.4c5623af2db43153.js +34 -0
- package/apps/pwa/out/_next/static/chunks/{2499.02fbfd18126c10c0.js → 9834.63ab2bbc3153172e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9869.81a1e24ca682d5a0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{409c787b.e48c5bec8ec10456.js → a0a01613.6d1cca322238d7fe.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{6cc1d1d6.9a98dd4622f1afc6.js → addc2b32.8c4ff8f0aefe987d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-8d9d76ea322d855c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-ed2c4e59f9f1fe21.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-2dc99e03c5d76ca0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-b5a3a788330e920f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-ba957ff875a026a0.js → page-14949db884bfa672.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-ea76c85b36388a97.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-01716d20af62d325.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-62baf6881a64b1e9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-f89ba590c2af8afa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-22f8b0f78d9637e5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-817f9d7e6820be80.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-ffb9bc0d2650249a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-f6d0e64873c0f629.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-8bfa0d4ba23a209d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-f5060462249e32c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-8d9d76ea322d855c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-b2049f8b1ef79117.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-1446c5fa93907f11.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-b48a7a07c5204156.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-e974b8c4ca47614c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-8a919b869bd28594.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-d31b8de6bfcd72ed.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-64765f817909db29.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-d128c8569a36ee9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-b2679d357e9b9270.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-6fabec98a9e7b269.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-048f30149dcf1349.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-9113181d6b5a2725.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-40f9e19149024298.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-1e7a755a13227611.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-3c8f8b67a203cf07.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-18032f5437215062.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-da3b739192fd0ee3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-d332545571bd6fd1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-5237aa5b3f3b8ec5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-a142dfb0331a05f5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-d16e56c3989c147e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-6b6593600869e2cd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-8d9d76ea322d855c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-29e8b8a8396b55cb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-b3414d856a1a7e2f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c3affa52b7ce961b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f21dddf9f95b6fab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-f5a30a24745bf088.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-8c8569a09b4d4e34.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-2ce32722c0243483.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-4767b0d9c0a98c6c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-116ee1339c387a75.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-35e8c50ca4ef7ffc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-52e17113356bb891.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-7458ae05ed2ac1a0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{c696986b.5dc8bb1143af16d1.js → b2271e54.c1de3347976e90b0.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{ca3702f8.2913182e73889fa2.js → c0c1a699.0ba79f97005965d4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/framework-ad6c9dd524ad6ef8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-2ddd1f2b44d6aa59.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-e3d82bdc358d20c5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-71d5aa3896e1655f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-03ffc54e00438546.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-56bb89af5a611d0b.js +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +22 -22
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +22 -22
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +22 -22
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +21 -21
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +21 -21
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +22 -22
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +21 -21
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +22 -22
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +22 -22
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +21 -21
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +22 -22
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +22 -22
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +22 -22
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +22 -22
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +21 -21
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +21 -21
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +22 -22
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +22 -22
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +22 -22
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +21 -21
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +21 -21
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +21 -21
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +22 -22
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +22 -22
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +21 -21
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +21 -21
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +21 -21
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +21 -21
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +22 -22
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +22 -22
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +21 -21
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +22 -22
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +22 -22
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +22 -22
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +22 -22
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +22 -22
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +21 -21
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +22 -22
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +22 -22
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +22 -22
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +22 -22
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +22 -22
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +22 -22
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +22 -22
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +22 -22
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +22 -22
- package/bin/elanous.mjs +6 -1
- package/catalog/models/openai/gpt-6.1-sol.yaml +16 -0
- package/catalog/models/openai/gpt-6.1-terra.yaml +16 -0
- package/graphs/demo/persona-teacher/lesson-pack.yaml +16 -0
- package/graphs/demo/persona-teacher/recipes.yaml +17 -0
- package/graphs/demo/persona-teacher/weekly-lesson.yaml +36 -0
- package/graphs/overlays/stop-heal-ladder.yaml +23 -2
- package/graphs/release/release-loop.yaml +3 -1
- package/graphs/units/gate/gate.yaml +20 -0
- package/graphs/units/git/git.yaml +26 -0
- package/graphs/units/implement/implement.yaml +19 -0
- package/graphs/units/landing/landing.yaml +18 -0
- package/graphs/units/review/review.yaml +20 -0
- package/graphs/units/verbs/recipes.yaml +3 -0
- package/graphs/units/verbs/research.yaml +20 -0
- package/graphs/work/research-report.yaml +11 -1
- package/package.json +1 -1
- package/scripts/disk-steward.ts +46 -0
- package/scripts/fleet/node-setup.sh +50 -0
- package/scripts/graph-units/verbs/research.ts +55 -0
- package/scripts/llm-cost-ledger.ts +179 -8
- package/scripts/measure-nl-routing-corpus.ts +10 -2
- package/scripts/persona-teacher/weekly-lesson-node.ts +172 -0
- package/scripts/public-copy-lint.ts +163 -19
- package/scripts/ratchets/train-side-invariants.sh +0 -1
- package/scripts/release-loop/gate-autoheal.ts +117 -0
- package/scripts/release-loop/gate-baseline-receipt.ts +8 -1
- package/scripts/release-loop/gate-diff.ts +22 -3
- package/scripts/release-loop/gate-node.ts +205 -17
- package/scripts/release-loop/gate-shard-load-flaky.ts +256 -0
- package/scripts/release-loop/gate-triage-node.ts +70 -10
- package/scripts/release-loop/resume-release.ts +247 -15
- package/scripts/release-loop/traffic-node.ts +6 -3
- package/scripts/release-loop/unattended-release.ts +4 -2
- package/scripts/shadow-authoring-probe.ts +20 -0
- package/scripts/ux-sim.ts +19 -2
- package/src/acp/core-turn-bridge.ts +86 -4
- package/src/agent-substrate/self-review-cli.ts +91 -29
- package/src/auto-research/research-turn.ts +10 -1
- package/src/autopilot/discovery/wiki-claim-proposer.ts +22 -1
- package/src/boot/daemon-tools/self-implement.ts +46 -9
- package/src/budget/shadow-arms.ts +52 -0
- package/src/chat/pickers/state.ts +7 -1
- package/src/cli/log-event-names.ts +5 -0
- package/src/cli/mcp-login.ts +8 -18
- package/src/cli/msg-cli.ts +57 -1
- package/src/cli/pr-land-heavy-remote.ts +15 -9
- package/src/cli/release-cli.ts +27 -1
- package/src/cli/sim-cli.ts +7 -1
- package/src/cli/tasks-cli.ts +5 -4
- package/src/codex/models.ts +30 -15
- package/src/core-turn/run-core-turn.ts +3 -0
- package/src/core-turn/run-goal-loop.ts +88 -2
- package/src/dashboard/acp-boot.ts +72 -3
- package/src/dashboard/index.ts +6 -0
- package/src/dashboard/turn-preamble.ts +12 -1
- package/src/disk-steward/judge.ts +73 -0
- package/src/disk-steward/ledger.ts +122 -0
- package/src/disk-steward/steward.ts +373 -0
- package/src/domains/guardian-tick.ts +191 -2
- package/src/graph-runner/graph-cli.ts +21 -0
- package/src/graph-runner/in-process-registry.ts +37 -0
- package/src/graph-runner/runner.ts +33 -3
- package/src/grounding/ref-index.ts +19 -0
- package/src/grounding/sources-cli.ts +9 -1
- package/src/harness/harness-cli-command.ts +267 -14
- package/src/harness/harness-incidents.ts +312 -7
- package/src/harness/harness-space.ts +15 -1
- package/src/harness/progress-worker-entry.ts +59 -0
- package/src/harness/progress-worker-runtime.ts +11 -0
- package/src/index.ts +18 -2
- package/src/instance/dev-project.ts +25 -0
- package/src/intelligence-map/model-alias.ts +6 -5
- package/src/intelligence-map/model-catalog.ts +59 -2
- package/src/llm/model-defaults.ts +4 -4
- package/src/llm.ts +42 -11
- package/src/loops/orchestrator/tick.ts +48 -0
- package/src/mcp/mcp-oauth.ts +3 -1
- package/src/model-tier/llm-tier-map.ts +9 -9
- package/src/model-tier/turn-tier.ts +1 -1
- package/src/msg/msg-mirror-github.ts +80 -0
- package/src/msg/msg-mirror-policy.ts +61 -0
- package/src/msg/msg-mirror-runner.ts +219 -0
- package/src/msg/msg-mirror-state.ts +33 -0
- package/src/msg/msg-store.ts +11 -0
- package/src/output-truncation.ts +41 -12
- package/src/project/project-store.ts +48 -1
- package/src/release-loop/gate-host-reservation.ts +144 -0
- package/src/release-loop/release-schedule.ts +90 -1
- package/src/research/bloom-exemplars.ts +135 -0
- package/src/self-dev/ask-launch-flow.ts +39 -25
- package/src/self-dev/dev-cli.ts +17 -17
- package/src/self-dev/graph-front-nodes.ts +23 -0
- package/src/self-dev/launch-preflight.ts +9 -4
- package/src/self-dev/orchestrate.ts +15 -0
- package/src/self-dev/run-supervisor.ts +185 -3
- package/src/self-dev/run-types.ts +3 -0
- package/src/self-implement/gate-artifacts.ts +13 -0
- package/src/self-implement/gate-cli.ts +54 -24
- package/src/self-implement/gate-remote.ts +23 -5
- package/src/self-implement/goal-author-clarification.ts +31 -12
- package/src/self-implement/goal-author.ts +77 -5
- package/src/self-implement/graph-stage-units.ts +172 -0
- package/src/self-implement/graph-templates.ts +162 -1
- package/src/self-implement/graph-variant.ts +37 -4
- package/src/self-implement/host-regate.ts +4 -4
- package/src/self-implement/knowhow-pack.ts +38 -0
- package/src/self-implement/orchestrator.ts +235 -21
- package/src/self-implement/run-ledger.ts +64 -6
- package/src/self-implement/run-stop.ts +21 -2
- package/src/self-implement/running-runs.ts +35 -12
- package/src/self-implement/self-implement-cli.ts +36 -4
- package/src/self-implement/stop-autoheal-operational.ts +43 -0
- package/src/self-implement/stop-autoheal.ts +15 -6
- package/src/session/chat.ts +31 -54
- package/src/session/request-size-guard.ts +123 -0
- package/src/sidetab-core/model.ts +136 -0
- package/src/task-agent/parent-host.ts +14 -1
- package/src/task-agent/task-hand.ts +4 -1
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +43 -0
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +29 -4
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +116 -16
- package/src/task-orchestrator/surfaces/self-implement.ts +18 -0
- package/src/tui/entry.ts +10 -3
- package/src/tui/sidetab/list.ts +45 -0
- package/src/tui/sidetab/nl-tool.ts +2 -136
- package/src/tui/sidetab/peek.ts +52 -0
- package/src/tui-client/dashboard-session.ts +3 -0
- package/src/user-config.ts +11 -5
- package/src/ux-sim/fault-needs-human-reason-repair.ts +107 -0
- package/src/ux-sim/fault-pod-child-result.ts +42 -0
- package/src/ux-sim/release-sim-rig.ts +262 -0
- package/src/ux-sim/seminar-rehearsal.ts +109 -0
- package/src/ux-sim/subagent-tools-device.ts +2 -2
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/1060.014f1f01a17aec26.js +0 -115
- package/apps/pwa/out/_next/static/chunks/1350.59f40e39e02d91b1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1415.79821ec7ae99acdb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/147.f92f63bbc5e85fa5.js +0 -286
- package/apps/pwa/out/_next/static/chunks/1537-6bb97b5214928ea9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1661.fb425a1d8a065b72.js +0 -149
- package/apps/pwa/out/_next/static/chunks/1671-1c22b40b50b208f2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1758.0204d3f48783c49d.js +0 -90
- package/apps/pwa/out/_next/static/chunks/1806.027bf78b6a94d340.js +0 -104
- package/apps/pwa/out/_next/static/chunks/2061-7f2bbc53ae96c88b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2096-a938496bc996dcbd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2200-9a453b8f99687d49.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2522.f2766b76d22c8bdf.js +0 -34
- package/apps/pwa/out/_next/static/chunks/261.0d471e8aded799f3.js +0 -226
- package/apps/pwa/out/_next/static/chunks/2615.3c9738153de3ef3f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2727.e703d99ac414916d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2752.7904b8df0254d0ae.js +0 -27
- package/apps/pwa/out/_next/static/chunks/2762-5051a862dfa40e99.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2767-31784bfedf8e245d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2774-719820e3f5b2a3eb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2812-f016aa0dda149287.js +0 -1
- package/apps/pwa/out/_next/static/chunks/311-32dcac79970985e8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3175-f93f7495cd28253c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3184.8da993f5502d2140.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3231-d7c981db0ff8bdcc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3250.151309c5176d6b4b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3330.7443183b7e6fdbdf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3517.a5aa1797a9dbf2ee.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3567-45f676877ed9e8a5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3819.8a1de79b2e8c7298.js +0 -24
- package/apps/pwa/out/_next/static/chunks/39.9b37b0be4c128a83.js +0 -77
- package/apps/pwa/out/_next/static/chunks/3b355b3d.6f73c98bf6f9c749.js +0 -122
- package/apps/pwa/out/_next/static/chunks/4023.a19045970a9ce16a.js +0 -36
- package/apps/pwa/out/_next/static/chunks/413-24c8284bda08241d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4135.e45d6ebc29e20647.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4283.65502f5d0e6ff6c0.js +0 -287
- package/apps/pwa/out/_next/static/chunks/4305-4e28fa92a7b34a5b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4335-50efa61fd7613142.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4720.ecbd1693fa151068.js +0 -1
- package/apps/pwa/out/_next/static/chunks/483.725e4a61be922788.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4969-4b209d7307410c00.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5068-c7f53862f83c0917.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5315.bc96711c24dfefe2.js +0 -74
- package/apps/pwa/out/_next/static/chunks/5542.efbf14f16baed4dd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5644.8f401a25601d05fc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5658.35f70eb9871a54bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5721.7bdc0e904c76ab51.js +0 -8
- package/apps/pwa/out/_next/static/chunks/5790-eef0ca20884a6bdf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5802.ef0d8598ca68fe84.js +0 -62
- package/apps/pwa/out/_next/static/chunks/5890.fb974729788dcb71.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5924.5ef25cddd36d5dbf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5979-e59c099ebf8d1f35.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6020.714cfeada2315e2e.js +0 -94
- package/apps/pwa/out/_next/static/chunks/6027-dfe0349d8c50f698.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6178.bc4730c86cf74536.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6273.d808b0dcb3c2b155.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6292.6ef1df64fa6a4c8a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/647-af8dd920ba46533c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6541-170dc5c59e135c0c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6742-a1ad4a94ba7bc37a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6836-493dc55c39187949.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6856-53ac421c06039a18.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6908.06008c67f6380ea9.js +0 -148
- package/apps/pwa/out/_next/static/chunks/6915.096931864206f522.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6925.5e181fb7dcf90193.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7203-800e11037adc41eb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7219-15bdd9a80661af8e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7279.6170f591105936bb.js +0 -93
- package/apps/pwa/out/_next/static/chunks/7349-373165c7fbdcc3df.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7514-a533ba0ca1cae4f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7521.d919cc1fab80c1d9.js +0 -24
- package/apps/pwa/out/_next/static/chunks/7538.90e97bbdf9178cff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7611.85f045bf232053ac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7825-39203196a12579b2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7869.5e1a9a12fd70d6c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8099.1cccf31c1baa7e1c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8179-e61fffbdb70f1152.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8265.bdeb991b34db6a06.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8638-e42615f2166165b5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8639-92c11d069792429e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8691.54e22831d5e8ccf8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8d173e38.18a2f7b4e1848bdb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9125-ae588d88a0293b93.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9311.f9f641a46a508611.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9371-a6fee8378ebfa3ee.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9421-3aa9ff4fa7f63d8a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-76394dc618d322c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-1b948637c37b3abd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-c63400f1bcf3e47c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-95d0957267819586.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-bb6fd0714879cb87.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-8f9038520d2acbef.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-d4b48397e05fce2c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-72d5744245dc0c27.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-37625dc8300fa43a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-fbef9d160272dbc1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-58424168df84928e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-72c12ba430ac57c0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-d53f3e9ed806d7e0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-4d2fbd45feee0829.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-76394dc618d322c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-8783dc0ed7590a2c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-3706cb390606e930.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-9b0a86598e0111fd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-4edb8df90f4537ce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-83d27757e2b8060a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-47398b9ba1cc5e1b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-fb86f55cfe2e681d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-e22345fc8fd47b1b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-fca2e59a81744d9e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-6e96bda63100b31e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-4d17ad8e0db8cea4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-121f92766c33beaa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-43f14212c545f92d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ccec2023e7a974ec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-b04f33f548b89a94.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-c8792823c0917021.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-8c0e32782ceef4cb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-94bd3922eb230ce8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-bca565887bafa03c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-ac1dffafe649fc6c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-52374edb5e23e455.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ad4ebca120d43ca7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-76394dc618d322c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-718b89ce4b4ae4e4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-204eca33eeeaddec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-e58ba9bcdb9ac0f9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-98f6dd50bafd7734.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-139d722de1dcd6c1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-5a4bdd72bff27057.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-6f6ab17d44f984ce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-aabb7bd15fb72da9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-e4322319164a4436.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-e9efc0c8f32e2371.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-ccde99f07aaf71f7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-80464aced9614390.js +0 -1
- package/apps/pwa/out/_next/static/chunks/d5d3cefc-373c4eb722ed848b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-002b472a66935d31.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-49b88d47292c0476.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-fff2549cb10a133f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-32abbbba3f3b76b7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-9d9cfef60c60dd7a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-cc7f483fa294034a.js +0 -1
- package/scripts/ratchets/next-tui-entry-budget.ts +0 -124
- /package/apps/pwa/out/_next/static/{HjeK7zONHfR7op1hKXp4k → GiOLWmt4MqDZePubBjA4Q}/_ssgManifest.js +0 -0
|
@@ -107,8 +107,9 @@ import { GoalRunStore, insertGoalRunRecord, type GoalPriorRuns } from './goal-ru
|
|
|
107
107
|
import { writeGoalRunRecordFragment } from './goal-execution-records.js';
|
|
108
108
|
import { getUserConfig } from '../user-config.js';
|
|
109
109
|
import { appendRunLedgerEntry, loadRunLedger, parseRunShardIdentity, queryRunChain, type RunChainShardSibling, type RunLedgerEntry, type RunLedgerWriter, type RunOriginData, type RunShardIdentity } from './run-ledger.js';
|
|
110
|
-
import { classifyMergeHoldStop, forgetRunStop, isRunStopClass, readRunStopRecord, recordRunStop, runStopRecorded } from './run-stop.js';
|
|
111
|
-
import { autohealFromStop, parseAutohealMode, type AutohealActions, type AutohealResult } from './stop-autoheal.js';
|
|
110
|
+
import { classifyMergeHoldStop, classifyTerminalHarnessFailure, forgetRunStop, isRunStopClass, readRunStopRecord, recordRunStop, runStopRecorded } from './run-stop.js';
|
|
111
|
+
import { autohealFromStop, parseAutohealMode, pickAutohealAction, type AutohealActions, type AutohealResult } from './stop-autoheal.js';
|
|
112
|
+
import { operationalAutohealActions } from './stop-autoheal-operational.js';
|
|
112
113
|
import { recordParentNeedsOwnerVisit } from './doctor-visit.js';
|
|
113
114
|
import { emitSessionEvent, type SessionEventInput } from '../context-bus/session-events.js';
|
|
114
115
|
import { decideLineageSupersede, lineageSupersedeCloseComment, type LineageSupersedeOpenDraft } from './lineage-supersede.js';
|
|
@@ -136,7 +137,7 @@ import { boundaryGlobs, boundaryViolations } from './goal-boundary.js';
|
|
|
136
137
|
import { askAtExecution, type ExecutionClarificationResult } from './execution-clarification.js';
|
|
137
138
|
import { decideScopeExpansion, renderScopeExpansionSection, SCOPE_EXPANSION_CAP, type ScopeExpansion, type ScopeStopReason } from './scope-adjacency.js';
|
|
138
139
|
import { targetScopedGoalText } from './goal-text-path-scope.js';
|
|
139
|
-
import { selectKnowhowPack } from './knowhow-pack.js';
|
|
140
|
+
import { selectKnowhowPack, selectHealKnowhowPack } from './knowhow-pack.js';
|
|
140
141
|
import { declaredNewFilePaths } from './goal-new-paths.js';
|
|
141
142
|
import { dropStaleReverts, type RevertGuardResult } from './revert-guard.js';
|
|
142
143
|
import type { SelfDevGoalType } from '../self-dev/orchestrate.js';
|
|
@@ -321,7 +322,14 @@ import { buildRuntimeOverlayState } from './graph-overlay-condition.js';
|
|
|
321
322
|
import { activeTemplate, decideTemplate, graphAuthorityFields, nodeNameForStage, overlayDecisionObservation, resolveGraphAuthorityForUserConfig, routeGate, visitBudgetOf } from './graph-authority.js';
|
|
322
323
|
import type { GraphTemplate } from './graph-templates.js';
|
|
323
324
|
import { defaultOverlaysDir, loadGraphOverlays, type GraphOverlaySpec } from './graph-overlay-yaml.js';
|
|
324
|
-
import { graphIdentityOf, measureL0Coverage, pipelineNodeEntryPayload } from './graph-templates.js';
|
|
325
|
+
import { defaultGraphsDir, graphIdentityOf, measureL0Coverage, pipelineNodeEntryPayload } from './graph-templates.js';
|
|
326
|
+
import {
|
|
327
|
+
buildStageNodeContext,
|
|
328
|
+
resolveGraphStageUnits,
|
|
329
|
+
stageNodeContextObservation,
|
|
330
|
+
stageUnitDrift,
|
|
331
|
+
type StageNodeContext,
|
|
332
|
+
} from './graph-stage-units.js';
|
|
325
333
|
import { AMBIGUOUS_STAGES, checkPipelineTraversal, nodesForStage, pipelineGraphIdentity, TERMINAL_STAGES_BY_NODE, type PipelineNodeId, type PipelineTraversalCheck } from './pipeline-shape.js';
|
|
326
334
|
import { appendGateWorktreeFreshnessEvidence, gateEvidenceNote } from '../harness/review-adapter.js';
|
|
327
335
|
import { diffHeaderPaths } from '../agent-substrate/self-review-cli.js';
|
|
@@ -1061,6 +1069,8 @@ export interface SelfImplementSeams {
|
|
|
1061
1069
|
stopAutohealActions?: AutohealActions;
|
|
1062
1070
|
/** STOP-AUTOHEAL — one-attempt guard reader. Default: real run ledger, or none when `writeRunLedger` is injected. */
|
|
1063
1071
|
stopAutohealLoadLedger?: (runId: string) => readonly RunLedgerEntry[] | null;
|
|
1072
|
+
/** Supervisor heal delivery history reader; defaults to the run ledger unless a test injects a writer. */
|
|
1073
|
+
healPackLoadLedger?: (runId: string) => readonly RunLedgerEntry[] | null;
|
|
1064
1074
|
/** STOP-AUTOHEAL — observes each dispatcher result (tests). */
|
|
1065
1075
|
onStopAutoheal?: (result: AutohealResult) => void;
|
|
1066
1076
|
/** Optional context-journal sink for isolated runs. */
|
|
@@ -1083,7 +1093,7 @@ export interface SelfImplementSeams {
|
|
|
1083
1093
|
* store, the orchestrator must not claim the child had zero provider failures.
|
|
1084
1094
|
*/
|
|
1085
1095
|
queryChildProviderErrors?: (input: { runId: string; sinceMs: number; untilMs: number }) => Promise<
|
|
1086
|
-
| { status: 'found'; providerErrorCount: number; credentialFailureCount: number; lastProviderError?: { provider?: string; message?: string }; lastCredentialFailure?: { provider?: string; message?: string } }
|
|
1096
|
+
| { status: 'found'; providerErrorCount: number; credentialFailureCount: number; lastProviderError?: { provider?: string; model?: string; message?: string; observedAt?: string }; lastCredentialFailure?: { provider?: string; model?: string; message?: string; observedAt?: string } }
|
|
1087
1097
|
| { status: 'none' }
|
|
1088
1098
|
| { status: 'unavailable'; reason?: string }
|
|
1089
1099
|
>;
|
|
@@ -3014,8 +3024,8 @@ export function queryStructuredChildProviderErrors(
|
|
|
3014
3024
|
});
|
|
3015
3025
|
if (rows.length === 0) return { status: 'none' };
|
|
3016
3026
|
let credentialFailureCount = 0;
|
|
3017
|
-
let lastProviderError: { provider?: string; message?: string } | undefined;
|
|
3018
|
-
let lastCredentialFailure: { provider?: string; message?: string } | undefined;
|
|
3027
|
+
let lastProviderError: { provider?: string; model?: string; message?: string; observedAt?: string } | undefined;
|
|
3028
|
+
let lastCredentialFailure: { provider?: string; model?: string; message?: string; observedAt?: string } | undefined;
|
|
3019
3029
|
for (const row of rows) {
|
|
3020
3030
|
let data: Record<string, unknown> | undefined;
|
|
3021
3031
|
try {
|
|
@@ -3024,7 +3034,9 @@ export function queryStructuredChildProviderErrors(
|
|
|
3024
3034
|
} catch { /* malformed payload is still a structured router-error record */ }
|
|
3025
3035
|
const detail = {
|
|
3026
3036
|
...(typeof data?.provider === 'string' ? { provider: data.provider } : {}),
|
|
3037
|
+
...(typeof data?.model === 'string' ? { model: data.model } : {}),
|
|
3027
3038
|
...(typeof data?.message === 'string' ? { message: data.message } : {}),
|
|
3039
|
+
...(typeof row.ts === 'string' ? { observedAt: row.ts } : {}),
|
|
3028
3040
|
};
|
|
3029
3041
|
lastProviderError = detail;
|
|
3030
3042
|
if (data?.authRejected === true) {
|
|
@@ -3568,15 +3580,22 @@ async function autohealRecordedStop(stopEntry: RunLedgerEntry, s: SelfImplementS
|
|
|
3568
3580
|
try {
|
|
3569
3581
|
const record = readRunStopRecord(stopEntry);
|
|
3570
3582
|
if (!record) return;
|
|
3583
|
+
try { debug.log('harness.heal', 'symptom', { runId: stopEntry.runId, class: record.class, cause: record.cause, evidenceRef: record.evidenceRef }); } catch { /* observation is fail-soft */ }
|
|
3584
|
+
const pick = pickAutohealAction(record.class);
|
|
3585
|
+
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 */ }
|
|
3571
3586
|
const mode = parseAutohealMode((await import('../user-config.js')).getUserConfig().tools.selfImplement.autoheal?.mode);
|
|
3572
3587
|
const loadLedger = s?.stopAutohealLoadLedger ?? (s?.writeRunLedger ? () => null : undefined);
|
|
3588
|
+
// A test ledger must never trigger a production host gate. Explicit seams override operational hands.
|
|
3589
|
+
const actions = s?.writeRunLedger ? s.stopAutohealActions
|
|
3590
|
+
: { ...operationalAutohealActions({ repoRoot: process.cwd() }), ...s?.stopAutohealActions };
|
|
3573
3591
|
const result = await autohealFromStop({ runId: stopEntry.runId, ...(stopEntry.goalId ? { goalId: stopEntry.goalId } : {}), record }, {
|
|
3574
3592
|
mode,
|
|
3575
3593
|
knowhowCandidateDir: join(effectiveInstanceRoot(), 'self-implement', 'knowhow-candidates'),
|
|
3576
|
-
...(
|
|
3594
|
+
...(actions ? { actions } : {}),
|
|
3577
3595
|
...(loadLedger ? { loadLedger } : {}),
|
|
3578
3596
|
...(s?.writeRunLedger ? { writeLedger: s.writeRunLedger } : {}),
|
|
3579
3597
|
});
|
|
3598
|
+
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 */ }
|
|
3580
3599
|
if (result.action === 'needs-owner') {
|
|
3581
3600
|
try {
|
|
3582
3601
|
const stopKey = JSON.stringify([stopEntry.timestamp, record.site ?? '', record.class, record.cause, record.evidenceRef]);
|
|
@@ -3594,6 +3613,40 @@ async function autohealRecordedStop(stopEntry: RunLedgerEntry, s: SelfImplementS
|
|
|
3594
3613
|
}
|
|
3595
3614
|
}
|
|
3596
3615
|
|
|
3616
|
+
async function dispatchTerminalHarnessHeal(input: {
|
|
3617
|
+
result: SelfImplementResult;
|
|
3618
|
+
runId: string;
|
|
3619
|
+
goalId?: string;
|
|
3620
|
+
shardIdentity: RunShardIdentity;
|
|
3621
|
+
seams: SelfImplementSeams;
|
|
3622
|
+
}): Promise<void> {
|
|
3623
|
+
const { result, runId, goalId, shardIdentity, seams } = input;
|
|
3624
|
+
const mergeHeld = Boolean(result.mergeReason && result.mergeReason !== 'auto');
|
|
3625
|
+
if (result.outcome !== 'abandoned' && result.outcome !== 'budget-exhausted' && result.stage !== 'timed-out' && !mergeHeld) return;
|
|
3626
|
+
if (runStopRecorded(runId)) return;
|
|
3627
|
+
const stopClass = mergeHeld ? classifyMergeHoldStop(result.mergeReason) : classifyTerminalHarnessFailure({
|
|
3628
|
+
stage: result.stage,
|
|
3629
|
+
mergeReason: result.mergeReason,
|
|
3630
|
+
abandonedClassification: result.abandonedClassification?.classification,
|
|
3631
|
+
providerErrorCategory: result.providerErrors?.category,
|
|
3632
|
+
supervisorVerdict: result.supervisorVerdict,
|
|
3633
|
+
});
|
|
3634
|
+
let stopEntry: RunLedgerEntry | undefined;
|
|
3635
|
+
try {
|
|
3636
|
+
stopEntry = recordRunStop({
|
|
3637
|
+
runId,
|
|
3638
|
+
...(goalId ? { goalId } : {}),
|
|
3639
|
+
shardIdentity,
|
|
3640
|
+
site: mergeHeld ? 'merge-hold' : `terminal-${result.stage}`,
|
|
3641
|
+
class: stopClass,
|
|
3642
|
+
cause: mergeHeld ? `merge held: ${result.mergeReason}` : result.detail ?? `terminal failure: ${result.stage}`,
|
|
3643
|
+
evidenceRef: result.prUrl ?? `run-ledger:${runId}:${result.stage}`,
|
|
3644
|
+
nextMove: `Existing heal ladder: ${stopClass}; failure disposition remains until its prescribed action resolves`,
|
|
3645
|
+
}, seams.writeRunLedger ?? appendRunLedgerEntry);
|
|
3646
|
+
} catch { /* stop observation cannot change the run outcome */ }
|
|
3647
|
+
if (stopEntry) await autohealRecordedStop(stopEntry, seams);
|
|
3648
|
+
}
|
|
3649
|
+
|
|
3597
3650
|
export function measureReviewRework(counts: readonly number[], findings: readonly (readonly RecurrenceFinding[])[]): ReviewRework {
|
|
3598
3651
|
const deltas = counts.slice(1).map((count, index) => Math.sign(count - counts[index]!));
|
|
3599
3652
|
const directions = deltas.filter((delta) => delta !== 0);
|
|
@@ -3761,17 +3814,20 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
3761
3814
|
let lastCredentialFailureSeq = 0;
|
|
3762
3815
|
let lastFailedGateSeq = 0;
|
|
3763
3816
|
let lastMustFixReviewSeq = 0;
|
|
3817
|
+
let providerErrorAtLastGate: string | undefined;
|
|
3764
3818
|
const recordFailureVerdict = async (kind: 'gate' | 'review'): Promise<void> => {
|
|
3765
3819
|
// Capture child errors at the verdict boundary, not when terminal reporting eventually reads them.
|
|
3766
3820
|
await mergeChildProviderErrors();
|
|
3821
|
+
providerErrorAtLastGate = lastProviderErrorSeq > Math.max(lastFailedGateSeq, lastMustFixReviewSeq)
|
|
3822
|
+
? lastProviderError?.message : undefined;
|
|
3767
3823
|
if (kind === 'gate') lastFailedGateSeq = ++failureSequence;
|
|
3768
3824
|
else lastMustFixReviewSeq = ++failureSequence;
|
|
3769
3825
|
};
|
|
3770
3826
|
const latestVerdictSeq = (): number => Math.max(lastFailedGateSeq, lastMustFixReviewSeq);
|
|
3771
3827
|
const hasCurrentProviderError = (): boolean => providerErrorCount > 0 && lastProviderErrorSeq > latestVerdictSeq();
|
|
3772
3828
|
const hasCurrentCredentialFailure = (): boolean => credentialFailureCount > 0 && lastCredentialFailureSeq > latestVerdictSeq();
|
|
3773
|
-
let lastProviderError: { provider?: string; message?: string } | undefined;
|
|
3774
|
-
let lastCredentialFailure: { provider?: string; message?: string } | undefined;
|
|
3829
|
+
let lastProviderError: { provider?: string; model?: string; message?: string; observedAt?: string } | undefined;
|
|
3830
|
+
let lastCredentialFailure: { provider?: string; model?: string; message?: string; observedAt?: string } | undefined;
|
|
3775
3831
|
let childProviderErrorQueryStatus: 'found' | 'none' | 'unavailable' | 'not-configured' = 'not-configured';
|
|
3776
3832
|
let queriedProviderErrorCount = 0;
|
|
3777
3833
|
let queriedCredentialFailureCount = 0;
|
|
@@ -3808,18 +3864,43 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
3808
3864
|
childProviderErrorQueryStatus = 'unavailable';
|
|
3809
3865
|
}
|
|
3810
3866
|
};
|
|
3867
|
+
const observeFailureClassificationInputs = (result: SelfImplementResult): void => {
|
|
3868
|
+
if (!isAbandonedClassificationOutcome(result.outcome)) return;
|
|
3869
|
+
observeOuter('failure-classification-inputs', {
|
|
3870
|
+
stage: result.stage,
|
|
3871
|
+
node: result.node,
|
|
3872
|
+
outcome: result.outcome,
|
|
3873
|
+
classification: result.abandonedClassification?.classification ?? null,
|
|
3874
|
+
classificationBasis: result.abandonedClassification?.classificationBasis ?? null,
|
|
3875
|
+
childProviderErrorQueryStatus,
|
|
3876
|
+
providerErrorCount,
|
|
3877
|
+
credentialFailureCount,
|
|
3878
|
+
queriedProviderErrorCount,
|
|
3879
|
+
queriedCredentialFailureCount,
|
|
3880
|
+
lastProviderError: lastProviderError ? { provider: lastProviderError.provider ?? null, model: lastProviderError.model ?? null, observedAt: lastProviderError.observedAt ?? null } : null,
|
|
3881
|
+
lastCredentialFailure: lastCredentialFailure ? { provider: lastCredentialFailure.provider ?? null, model: lastCredentialFailure.model ?? null, observedAt: lastCredentialFailure.observedAt ?? null } : null,
|
|
3882
|
+
lastProviderErrorSeq,
|
|
3883
|
+
lastCredentialFailureSeq,
|
|
3884
|
+
lastFailedGateSeq,
|
|
3885
|
+
lastMustFixReviewSeq,
|
|
3886
|
+
currentProviderError: hasCurrentProviderError(),
|
|
3887
|
+
currentCredentialFailure: hasCurrentCredentialFailure(),
|
|
3888
|
+
});
|
|
3889
|
+
};
|
|
3811
3890
|
const unregisterProviderErrorSink = debug.registerSink({
|
|
3812
3891
|
name: `self-implement-provider-error-${runId}`,
|
|
3813
3892
|
emit(record) {
|
|
3814
3893
|
if (record.category !== 'llm.router.error') return;
|
|
3815
3894
|
const data = record.data;
|
|
3816
3895
|
if (!data || typeof data !== 'object') return;
|
|
3817
|
-
const { provider, message } = data as Record<string, unknown>;
|
|
3896
|
+
const { provider, model, message } = data as Record<string, unknown>;
|
|
3818
3897
|
providerErrorCount++;
|
|
3819
3898
|
lastProviderErrorSeq = ++failureSequence;
|
|
3820
3899
|
lastProviderError = {
|
|
3821
3900
|
...(typeof provider === 'string' ? { provider } : {}),
|
|
3901
|
+
...(typeof model === 'string' ? { model } : {}),
|
|
3822
3902
|
...(typeof message === 'string' ? { message } : {}),
|
|
3903
|
+
...(typeof record.ts === 'string' ? { observedAt: record.ts } : {}),
|
|
3823
3904
|
};
|
|
3824
3905
|
// ⛔⭐⭐⭐ 자격 거부는 「프로바이더 오류」의 부분집합이지만 ***사람이 할 다음 행동이 다르다***
|
|
3825
3906
|
// (2026-08-14 실측 · `[T]` 83차): grok 자식 «둘»이 401 로 죽었는데 부모가 남긴 것은
|
|
@@ -4108,6 +4189,7 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4108
4189
|
}
|
|
4109
4190
|
};
|
|
4110
4191
|
let terminalResult: SelfImplementResult | undefined;
|
|
4192
|
+
let uncaughtTerminalStop: SelfImplementResult | undefined;
|
|
4111
4193
|
let reviewReflectRejectedCount: number | undefined;
|
|
4112
4194
|
const attachReviewReflectionOutcome = <T extends Omit<SelfImplementResult, 'runId'>>(result: T): T & Pick<SelfImplementResult, 'completionStatus' | 'reviewReflectRejectedCount'> => ({
|
|
4113
4195
|
...result,
|
|
@@ -4287,6 +4369,11 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4287
4369
|
(sessionId) => { terminalSessionId = sessionId; },
|
|
4288
4370
|
(contract) => { runContract = contract; },
|
|
4289
4371
|
recordFailureVerdict,
|
|
4372
|
+
() => {
|
|
4373
|
+
const error = providerErrorAtLastGate;
|
|
4374
|
+
providerErrorAtLastGate = undefined;
|
|
4375
|
+
return error;
|
|
4376
|
+
},
|
|
4290
4377
|
() => providerErrorCount > 0,
|
|
4291
4378
|
() => credentialFailureCount > 0,
|
|
4292
4379
|
hasCurrentProviderError,
|
|
@@ -4307,6 +4394,7 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4307
4394
|
opts.seams.inspectCodexRotation,
|
|
4308
4395
|
runProviderName,
|
|
4309
4396
|
);
|
|
4397
|
+
observeFailureClassificationInputs(addressedResult);
|
|
4310
4398
|
if (isAbandonedClassificationOutcome(addressedResult.outcome)) logQuotaProvider(addressedResult.quotaExhaustionAssessment);
|
|
4311
4399
|
observeOuter('child-provider-error-query', { status: childProviderErrorQueryStatus });
|
|
4312
4400
|
if (lastProviderError) {
|
|
@@ -4318,20 +4406,24 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4318
4406
|
}
|
|
4319
4407
|
terminalResult = withEvidenceCoverage(withMeasuredRework(addressedResult));
|
|
4320
4408
|
// runSelfImplement is the terminal caller: retain every existing PR/ledger/log observation and append one stop fact.
|
|
4321
|
-
|
|
4409
|
+
const envDeficitStop = addressedResult.stage === 'gate-failed' && addressedResult.harvestable === true
|
|
4410
|
+
&& addressedResult.detail?.includes(GATE_ENV_DEFICIT_HARVESTABLE_MARK) === true;
|
|
4411
|
+
if ((addressedResult.stage === 'aborted' || envDeficitStop || (addressedResult.mergeReason && addressedResult.mergeReason !== 'auto')) && !runStopRecorded(runId)) {
|
|
4322
4412
|
const reason = addressedResult.mergeReason;
|
|
4323
4413
|
const aborted = addressedResult.stage === 'aborted';
|
|
4324
4414
|
let stopEntry: RunLedgerEntry | undefined;
|
|
4325
4415
|
try {
|
|
4326
4416
|
stopEntry = recordRunStop({ runId, ...(opts.goalId ? { goalId: opts.goalId } : {}), shardIdentity,
|
|
4327
|
-
site: aborted ? 'implement-aborted' : 'merge-hold',
|
|
4328
|
-
class:
|
|
4417
|
+
site: envDeficitStop ? 'gate-env-deficit' : aborted ? 'implement-aborted' : 'merge-hold',
|
|
4418
|
+
class: envDeficitStop ? 'env-unrelated' : aborted ? 'unclassified' : classifyMergeHoldStop(reason),
|
|
4419
|
+
cause: envDeficitStop ? addressedResult.detail ?? 'gate environment deficit' : aborted ? 'implement aborted' : `merge held: ${reason}`,
|
|
4329
4420
|
evidenceRef: addressedResult.prUrl ?? `run-ledger:${runId}:${aborted ? 'implemented' : 'merge-decision'}`,
|
|
4330
|
-
nextMove: aborted ? 'Inspect preserved worktree and child summary' : 'Review merge decision and PR before landing',
|
|
4421
|
+
nextMove: envDeficitStop ? 'Measure the preserved PR head in a clean checkout' : aborted ? 'Inspect preserved worktree and child summary' : 'Review merge decision and PR before landing',
|
|
4331
4422
|
}, opts.seams.writeRunLedger ?? appendRunLedgerEntry);
|
|
4332
4423
|
} catch { /* stop observation cannot change the run outcome */ }
|
|
4333
4424
|
if (stopEntry) await autohealRecordedStop(stopEntry, opts.seams);
|
|
4334
4425
|
}
|
|
4426
|
+
await dispatchTerminalHarnessHeal({ result: addressedResult, runId, ...(opts.goalId ? { goalId: opts.goalId } : {}), shardIdentity, seams: opts.seams });
|
|
4335
4427
|
observeDeclaredScopeDiff(observeOuter, {
|
|
4336
4428
|
goalFile: opts.goalFile,
|
|
4337
4429
|
changedFiles: opts.goalFile && addressedResult.worktreePath
|
|
@@ -4420,6 +4512,7 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4420
4512
|
terminalNode = result.node;
|
|
4421
4513
|
await mergeChildProviderErrors();
|
|
4422
4514
|
const addressedResult = attachAbandonedClassification(attachReviewReflectionOutcome({ ...result, ...providerErrorsForResult() }), opts.goalFile, hasCurrentProviderError(), hasCurrentCredentialFailure(), opts.seams.inspectCodexRotation, runProviderName);
|
|
4515
|
+
observeFailureClassificationInputs(addressedResult);
|
|
4423
4516
|
logQuotaProvider(addressedResult.quotaExhaustionAssessment);
|
|
4424
4517
|
observeOuter('child-provider-error-query', { status: childProviderErrorQueryStatus });
|
|
4425
4518
|
if (lastProviderError) {
|
|
@@ -4429,6 +4522,7 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4429
4522
|
observeOuter('credential-failure-observed', { count: credentialFailureCount, ...lastCredentialFailure });
|
|
4430
4523
|
}
|
|
4431
4524
|
terminalResult = withMeasuredRework(addressedResult); // ⛔ 이 분기(StepTimeoutError)는 스코프가 달라 달성 근사값은 «없다»(0 으로 채우지 않는다)
|
|
4525
|
+
await dispatchTerminalHarnessHeal({ result: addressedResult, runId, ...(opts.goalId ? { goalId: opts.goalId } : {}), shardIdentity, seams: opts.seams });
|
|
4432
4526
|
observeDeclaredScopeDiff(observeOuter, {
|
|
4433
4527
|
goalFile: opts.goalFile,
|
|
4434
4528
|
changedFiles: opts.goalFile && addressedResult.worktreePath
|
|
@@ -4489,9 +4583,12 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4489
4583
|
...terminalDetail(terminalSessionId),
|
|
4490
4584
|
},
|
|
4491
4585
|
});
|
|
4586
|
+
uncaughtTerminalStop = { runId, ok: false, stage: 'aborted', node: terminalNode ?? 'implement', outcome: 'abandoned', detail: safeErrorDescription(e) };
|
|
4492
4587
|
throw e;
|
|
4493
4588
|
} finally {
|
|
4494
4589
|
if (loopRegistered) registerRunLoop('ended');
|
|
4590
|
+
// Persist the outer-exception stop and its prescription before the crashed run-status below.
|
|
4591
|
+
if (uncaughtTerminalStop) await dispatchTerminalHarnessHeal({ result: uncaughtTerminalStop, runId, ...(opts.goalId ? { goalId: opts.goalId } : {}), shardIdentity, seams: opts.seams });
|
|
4495
4592
|
const terminalStage = terminalResult?.stage ?? 'crashed';
|
|
4496
4593
|
// A blocked draft may be opened on the first failed attempt, before the
|
|
4497
4594
|
// normal outcome observer has written its terminal status. Persist the
|
|
@@ -4952,6 +5049,38 @@ function reworkCapFailureSummary(feature: string, decision: ReworkCapHealDecisio
|
|
|
4952
5049
|
return `${title} [${decision.defectClass} → ${decision.nextAction}] ${evidence}`;
|
|
4953
5050
|
}
|
|
4954
5051
|
|
|
5052
|
+
/** ⭐ SELFIMPL-NODE-SEAMS-BACK — 등록 부품(구현·gate·리뷰·git·착지)을 graphs/units 에서 해석하고
|
|
5053
|
+
* 합성 선언을 평탄화해 «하나의 NodeContext» 로 묶는다. ⛔ 실패는 값(reason)으로 낸다 — 실행을 막지 않는다. */
|
|
5054
|
+
export function resolveRunStageNodeContext(input: {
|
|
5055
|
+
readonly graphId: string;
|
|
5056
|
+
readonly graphVersion: string;
|
|
5057
|
+
readonly graphsDir: string;
|
|
5058
|
+
readonly runId: string;
|
|
5059
|
+
readonly attempts?: number;
|
|
5060
|
+
readonly round?: number;
|
|
5061
|
+
readonly goalId?: string;
|
|
5062
|
+
readonly goalType?: string;
|
|
5063
|
+
}): { readonly nodeContext?: StageNodeContext; readonly reason?: string } {
|
|
5064
|
+
const resolution = resolveGraphStageUnits(input.graphId, input.graphsDir);
|
|
5065
|
+
if (resolution.units.length === 0) {
|
|
5066
|
+
return { reason: resolution.reason ?? 'no-unit-resolved' };
|
|
5067
|
+
}
|
|
5068
|
+
return {
|
|
5069
|
+
nodeContext: buildStageNodeContext({
|
|
5070
|
+
resolution,
|
|
5071
|
+
graphId: input.graphId,
|
|
5072
|
+
graphVersion: input.graphVersion,
|
|
5073
|
+
runId: input.runId,
|
|
5074
|
+
...(input.attempts === undefined ? {} : { attempts: input.attempts }),
|
|
5075
|
+
...(input.round === undefined ? {} : { round: input.round }),
|
|
5076
|
+
...(input.goalId === undefined ? {} : { goalId: input.goalId }),
|
|
5077
|
+
...(input.goalType === undefined ? {} : { goalType: input.goalType }),
|
|
5078
|
+
}),
|
|
5079
|
+
...(resolution.reason === undefined ? {} : { reason: resolution.reason }),
|
|
5080
|
+
};
|
|
5081
|
+
}
|
|
5082
|
+
|
|
5083
|
+
/** 라운드마다 같은 부품이 «그 파일·그 판»인지 — 도는 중에 바뀌면 걸음과 신원이 갈린다. */
|
|
4955
5084
|
async function runSelfImplementInner(
|
|
4956
5085
|
opts: SelfImplementOptions,
|
|
4957
5086
|
identity?: { runId: string; source: ReturnType<typeof resolveRunIdentity>['source'] },
|
|
@@ -4988,13 +5117,14 @@ async function runSelfImplementInner(
|
|
|
4988
5117
|
hasCredentialFailure: () => boolean = () => false,
|
|
4989
5118
|
providerErrorCategory: () => NonNullable<SelfImplementResult['providerErrors']>['category'] | undefined = () => undefined,
|
|
4990
5119
|
onReviewReflectRejected: (rejectedCount: number) => void = () => {},
|
|
4991
|
-
observe
|
|
5120
|
+
observe?: ReturnType<typeof makeRunObserver>,
|
|
4992
5121
|
/** ⭐ 「이 런이 «실제로» 어느 두뇌로 돌았나」를 원장까지 나른다 — ⛔ 기록 «시점»에 다시 읽지 않는다
|
|
4993
5122
|
* (그러면 「런이 끝날 무렵의 provider」가 되어 `F45` 를 그대로 밟는다). 시작 시점 값을 넘긴다. */
|
|
4994
5123
|
onActiveProvider: (active: { provider?: string; model?: string; auth?: string }) => void = () => {},
|
|
4995
5124
|
onSessionCreated: (sessionId: string) => void = () => {},
|
|
4996
5125
|
onRunContractResolved: (contract: RunContract) => void = () => {},
|
|
4997
5126
|
onFailureVerdict: (kind: 'gate' | 'review') => Promise<void> = async () => {},
|
|
5127
|
+
providerErrorAtLastGate: () => string | undefined = () => undefined,
|
|
4998
5128
|
hasObservedProviderError: () => boolean = hasProviderError,
|
|
4999
5129
|
hasObservedCredentialFailure: () => boolean = hasCredentialFailure,
|
|
5000
5130
|
hasCurrentProviderError: () => boolean = hasProviderError,
|
|
@@ -5005,7 +5135,23 @@ async function runSelfImplementInner(
|
|
|
5005
5135
|
onPrAttributed: (number: number) => void = () => {},
|
|
5006
5136
|
onPrAttributionMismatch: () => void = () => {},
|
|
5007
5137
|
): Promise<Omit<SelfImplementResult, 'runId'>> {
|
|
5138
|
+
const runIdentity = identity ?? resolveRunIdentity({ explicit: opts.runId });
|
|
5139
|
+
observe ??= makeRunObserver(runIdentity.runId, opts.goalId, debug.log.bind(debug), opts.seams.writeRunLedger, shardIdentity);
|
|
5008
5140
|
const s = opts.seams;
|
|
5141
|
+
const deliveredHealPacks = new Set<string>();
|
|
5142
|
+
const healRunId = identity?.runId ?? resolveRunIdentity({ explicit: opts.runId }).runId;
|
|
5143
|
+
try {
|
|
5144
|
+
const entries = (s.healPackLoadLedger ?? (s.writeRunLedger ? () => null : loadRunLedger))(healRunId);
|
|
5145
|
+
for (const entry of entries ?? []) {
|
|
5146
|
+
if (entry.runId !== healRunId || entry.event !== 'supervisor-heal-pack'
|
|
5147
|
+
|| !['matched', 'already-delivered'].includes(String(entry.data?.decision))) continue;
|
|
5148
|
+
const { signature, packIds } = entry.data;
|
|
5149
|
+
if (typeof signature !== 'string' || !Array.isArray(packIds)) continue;
|
|
5150
|
+
for (const id of packIds) {
|
|
5151
|
+
if (typeof id === 'string') deliveredHealPacks.add(`${healRunId}:${signature}:${id}`);
|
|
5152
|
+
}
|
|
5153
|
+
}
|
|
5154
|
+
} catch { /* An unavailable history contributes no invented deliveries. */ }
|
|
5009
5155
|
const pipelineStartedAtMs = Date.now();
|
|
5010
5156
|
// Graph authority is always ON; retain the resolved event with default provenance.
|
|
5011
5157
|
// For research documents, its declared docs-only routing intentionally skips the gate.
|
|
@@ -5046,9 +5192,16 @@ async function runSelfImplementInner(
|
|
|
5046
5192
|
: undefined;
|
|
5047
5193
|
if (launch && !launch.ok) throw new Error(`graph variant rejected: ${JSON.stringify(launch.rejections)}`);
|
|
5048
5194
|
const sourceSpec = launch?.ok ? launch.template : baseSpec;
|
|
5195
|
+
// ⭐ unit 선언 근거 — 이 런이 읽은 «대상 경로»(단위 선언) 원문의 내용 해시만 남긴다.
|
|
5196
|
+
// ⛔ 본문은 로그에도 원장에도 복제하지 않는다(goalContentHash 와 같은 해시-only 예비).
|
|
5197
|
+
// ⛔ 읽지 못한 경로(신설 파일 등)는 해시를 지어내지 않고 근거에서 뺀다.
|
|
5198
|
+
const unitDeclarations = declaredPremiseScopePaths(opts.feature).flatMap(path => {
|
|
5199
|
+
try { return [{ path, content: readFileSync(resolve(process.cwd(), path), 'utf8') }]; } catch { return []; }
|
|
5200
|
+
});
|
|
5049
5201
|
// ⭐ 최초 변형 선택 — 골 종류(graphGoalType)·대상 경로 수(declaredPremiseScopePaths) 두 입력만으로
|
|
5050
5202
|
// 결정론적으로 id·선택 이유를 유도해 검증 결과에 싣는다(종류를 못 읽었으면 지어내지 않는다).
|
|
5051
5203
|
const variant = createGraphVariant({ template: sourceSpec, goal: `g_${variantRunId.replace(/[^a-z0-9_-]/gi, '_')}`, plan: opts.graphVariantPlan,
|
|
5204
|
+
...(unitDeclarations.length === 0 ? {} : { unitDeclarations }),
|
|
5052
5205
|
...(graphGoalType === undefined ? {} : { goalAnalysis: { goalType: graphGoalType, targetPathCount: declaredPremiseScopePaths(opts.feature).length } }) });
|
|
5053
5206
|
if (!variant.ok) throw new Error(`graph variant rejected: ${JSON.stringify(variant.rejections)}`);
|
|
5054
5207
|
variantSpec = variant.template;
|
|
@@ -5056,6 +5209,9 @@ async function runSelfImplementInner(
|
|
|
5056
5209
|
const graphFile = saveRunGraphVariant(variantRunId, stringify({
|
|
5057
5210
|
graph_id: variantSpec.graphId, version: variantSpec.version,
|
|
5058
5211
|
...(variant.selection === undefined ? {} : { variant_id: variant.selection.variantId, reason: variant.selection.reason }),
|
|
5212
|
+
// 추가 키 — 한 런이 어느 unit 선언 «버전»을 읽었는지. 경로·내용 해시뿐이고 본문은 없다.
|
|
5213
|
+
...(variant.selection?.unitDeclarations === undefined ? {}
|
|
5214
|
+
: { unit_declarations: variant.selection.unitDeclarations.map(entry => ({ path: entry.path, content_hash: entry.contentHash })) }),
|
|
5059
5215
|
entry_node: variantSpec.entryNode, terminal_nodes: variantSpec.terminalNodes,
|
|
5060
5216
|
...(variantSpec.journeyStages ? { journey_stages: variantSpec.journeyStages } : {}),
|
|
5061
5217
|
...(variantSpec.runContract ? { run_contract: variantSpec.runContract } : {}),
|
|
@@ -5080,13 +5236,15 @@ async function runSelfImplementInner(
|
|
|
5080
5236
|
// ⭐ 저장·diff — 방금 원장 옆에 쓴 선택(id·이유)을 다시 읽어 «같은지» 확인한다(다르면 이 런의 그래프 신원이 거짓).
|
|
5081
5237
|
if (variant.selection !== undefined) {
|
|
5082
5238
|
const persisted = loadRunGraphVariant(variantRunId);
|
|
5083
|
-
if (persisted === null || persisted.variantId !== variant.selection.variantId || persisted.reason !== variant.selection.reason
|
|
5239
|
+
if (persisted === null || persisted.variantId !== variant.selection.variantId || persisted.reason !== variant.selection.reason
|
|
5240
|
+
|| JSON.stringify(persisted.unitDeclarations ?? null) !== JSON.stringify(variant.selection.unitDeclarations ?? null)) {
|
|
5084
5241
|
throw new Error(`graph variant rejected: persisted selection mismatch: ${JSON.stringify(persisted)}`);
|
|
5085
5242
|
}
|
|
5086
5243
|
}
|
|
5087
5244
|
observe('graph-variant-applied', { graphId: variant.template.graphId, overlayId: variant.overlay.overlayId,
|
|
5088
5245
|
graphFile, patches: variant.patches,
|
|
5089
|
-
...(variant.selection === undefined ? {} : { variantId: variant.selection.variantId, variantReason: variant.selection.reason })
|
|
5246
|
+
...(variant.selection === undefined ? {} : { variantId: variant.selection.variantId, variantReason: variant.selection.reason }),
|
|
5247
|
+
...(variant.selection?.unitDeclarations === undefined ? {} : { unitDeclarations: variant.selection.unitDeclarations }) });
|
|
5090
5248
|
}
|
|
5091
5249
|
/** 단계 이름 → 그 템플릿의 노드 이름. */
|
|
5092
5250
|
const node = (stage: PipelineNodeId): PipelineNodeId => nodeNameForStage(stage, graphTemplate) as PipelineNodeId;
|
|
@@ -5103,6 +5261,28 @@ async function runSelfImplementInner(
|
|
|
5103
5261
|
onRunContractResolved(runContract);
|
|
5104
5262
|
observe('graph-run-contract-resolved', { ...graphIdentityOf(graphTemplate), ...runContract, ...runContractAtNode(runContract) });
|
|
5105
5263
|
}
|
|
5264
|
+
// ⭐ SELFIMPL-NODE-SEAMS-BACK — 등록 부품을 «생산 진입점»에서 해석·평탄화해 하나의 NodeContext 로 만든다.
|
|
5265
|
+
// ⛔ 이 줄이 없으면 부품은 선언만 있고 걸음에서 안 불린다. 실패는 값으로 남기고 실행은 안 막는다.
|
|
5266
|
+
let nodeContext: StageNodeContext | undefined;
|
|
5267
|
+
{
|
|
5268
|
+
const unitResolution = resolveRunStageNodeContext({
|
|
5269
|
+
graphId: graphTemplate.graphId,
|
|
5270
|
+
graphVersion: graphTemplate.version,
|
|
5271
|
+
graphsDir: defaultGraphsDir(),
|
|
5272
|
+
runId: runIdentity.runId,
|
|
5273
|
+
...(typeof attemptOrdinal === 'number' ? { attempts: attemptOrdinal } : {}),
|
|
5274
|
+
...(opts.goalId === undefined ? {} : { goalId: opts.goalId }),
|
|
5275
|
+
...(graphGoalType === undefined ? {} : { goalType: graphGoalType }),
|
|
5276
|
+
});
|
|
5277
|
+
nodeContext = unitResolution.nodeContext;
|
|
5278
|
+
if (nodeContext === undefined) {
|
|
5279
|
+
if (graphTemplate.graphId === 'self-implement') {
|
|
5280
|
+
observe('graph-stage-units-unresolved', { ...graphIdentityOf(graphTemplate), reason: unitResolution.reason ?? 'no-unit-resolved' });
|
|
5281
|
+
}
|
|
5282
|
+
} else {
|
|
5283
|
+
observe('graph-stage-units-resolved', stageNodeContextObservation(nodeContext));
|
|
5284
|
+
}
|
|
5285
|
+
}
|
|
5106
5286
|
// ⛔ 승격이 꺼져 있으면 «심지 않는다» — 그러면 예산 관측도 안 난다(운영 원장이 오늘과 같다).
|
|
5107
5287
|
if (graphAuthority.enabled) onGraphTemplateResolved(graphTemplate);
|
|
5108
5288
|
// ⛔ 선택을 «전부» 싣는다 — 얹힌 것만 실으면 「왜 안 얹혔나」를 사후에 못 묻는다.
|
|
@@ -5116,7 +5296,7 @@ async function runSelfImplementInner(
|
|
|
5116
5296
|
// ⛔ 「지금 아는 것」만 준다 — 없는 값을 0 으로 지어내지 않는다(key-absent 가 그것을 말한다).
|
|
5117
5297
|
let stopClass: import('./run-stop.js').RunStopClass | undefined;
|
|
5118
5298
|
try {
|
|
5119
|
-
const { runId } =
|
|
5299
|
+
const { runId } = runIdentity;
|
|
5120
5300
|
const entries = loadRunLedger(runId);
|
|
5121
5301
|
const lastStop = entries?.slice().reverse().find((entry) => entry.event === 'stop');
|
|
5122
5302
|
if (lastStop && isRunStopClass(lastStop.data.class)) stopClass = readRunStopRecord(lastStop)?.class;
|
|
@@ -5136,6 +5316,16 @@ async function runSelfImplementInner(
|
|
|
5136
5316
|
...(variantSpec ? { specs: { [variantSpec.graphId]: variantSpec } } : {}),
|
|
5137
5317
|
});
|
|
5138
5318
|
if (decision.appliedIds.length > 0) graphTemplate = decision.template;
|
|
5319
|
+
// ⭐ SELFIMPL-NODE-SEAMS-BACK — 같은 NodeContext 가 라운드로 이어진다: 체크포인트를 옮기고,
|
|
5320
|
+
// 부품이 도는 중에 다른 판으로 바뀌었으면 그 사실을 값으로 낸다(걸음과 신원이 갈리는 것을 막는다).
|
|
5321
|
+
if (nodeContext !== undefined) {
|
|
5322
|
+
nodeContext = { ...nodeContext, checkpoint: { ...nodeContext.checkpoint, round } };
|
|
5323
|
+
const drift = stageUnitDrift(nodeContext.grounding.units, defaultGraphsDir());
|
|
5324
|
+
observe('graph-stage-units-drift', {
|
|
5325
|
+
graphId: nodeContext.goal.graphId, graphVersion: nodeContext.goal.graphVersion,
|
|
5326
|
+
round, missing: drift.missing, changed: drift.changed,
|
|
5327
|
+
});
|
|
5328
|
+
}
|
|
5139
5329
|
// ⛔⭐ 승격이 켜져 있으면 «언제나» 낸다 — 후보가 0이어도 낸다.
|
|
5140
5330
|
// 🩸 안 내면 「얹을 게 없었다」와 「이 배선이 «안 돌았다»」가 원장에서 «같은 값»(0건)이 된다.
|
|
5141
5331
|
// ⇒ `considered` 가 그 둘을 가른다: 배선이 돌면 이 줄이 있고, 그 수가 «본 오버레이 수»다.
|
|
@@ -5174,7 +5364,7 @@ async function runSelfImplementInner(
|
|
|
5174
5364
|
roundClassifications.push(classification);
|
|
5175
5365
|
onRoundClassification(classification);
|
|
5176
5366
|
};
|
|
5177
|
-
const { runId, source: runIdSource } =
|
|
5367
|
+
const { runId, source: runIdSource } = runIdentity;
|
|
5178
5368
|
const branch = opts.branchName ?? plannedSelfImplBranch(opts.feature, opts.goalId, runId);
|
|
5179
5369
|
try {
|
|
5180
5370
|
debug.log('run-identity', 'own', {
|
|
@@ -7278,6 +7468,30 @@ async function runSelfImplementInner(
|
|
|
7278
7468
|
}
|
|
7279
7469
|
throw error;
|
|
7280
7470
|
}
|
|
7471
|
+
// Only the preceding round's observed error or gate evidence can authorize a remedy.
|
|
7472
|
+
let healInput = '';
|
|
7473
|
+
if (round > 0) {
|
|
7474
|
+
const failure = reworkKind === 'gate' && gate?.passed === false ? gate : undefined;
|
|
7475
|
+
const failures = failure?.baselineFailures;
|
|
7476
|
+
const facts = failure?.reflectGateFacts;
|
|
7477
|
+
const providerMessage = providerErrorAtLastGate();
|
|
7478
|
+
const signature = providerMessage && /\b1310\b.*\blimit\b|\blimit\b.*\b1310\b/i.test(providerMessage) ? 'provider-1310'
|
|
7479
|
+
: failure && facts?.introduced === 0 && facts.preexisting !== undefined && facts.preexisting > 0
|
|
7480
|
+
&& facts.unknown === 0 && failures?.length && failures.every(item => item.attribution === 'preexisting')
|
|
7481
|
+
? 'preexisting'
|
|
7482
|
+
: failure && failures?.some(item => item.timeoutVariability === 'may-vary'
|
|
7483
|
+
&& /\b(?:order|time)[ -]dependent\b/i.test(`${item.name} ${item.diagnostic ?? ''}`))
|
|
7484
|
+
? 'order-time-dependent' : 'unknown';
|
|
7485
|
+
const pack = signature === 'unknown' ? { text: '', ids: [], bytes: 0 } : selectHealKnowhowPack(wt.path, signature);
|
|
7486
|
+
const freshIds = pack.ids.filter(id => !deliveredHealPacks.has(`${healRunId}:${signature}:${id}`));
|
|
7487
|
+
const decision = !pack.ids.length ? 'unknown' : freshIds.length ? 'matched' : 'already-delivered';
|
|
7488
|
+
if (decision === 'matched') {
|
|
7489
|
+
for (const id of freshIds) deliveredHealPacks.add(`${healRunId}:${signature}:${id}`);
|
|
7490
|
+
healInput = `[SUPERVISOR-HEAL-PACK signature=${signature} ids=${freshIds.join(',')}]\n${pack.text.split('\n').slice(1).filter(line => freshIds.some(id => line.startsWith(`${id}:`))).join('\n')}`;
|
|
7491
|
+
}
|
|
7492
|
+
observe('supervisor-heal-pack', { runId: healRunId, round, signature, packIds: decision === 'matched' ? freshIds : decision === 'already-delivered' ? pack.ids : [], decision,
|
|
7493
|
+
...(decision === 'unknown' ? { missingEvidence: signature === 'unknown' ? 'observed-signature-unavailable' : 'matching-active-pack-unavailable' } : {}) });
|
|
7494
|
+
}
|
|
7281
7495
|
const implementAbortController = new AbortController();
|
|
7282
7496
|
const abortImplementation = (): void => implementAbortController.abort(opts.signal?.reason);
|
|
7283
7497
|
if (opts.signal?.aborted) abortImplementation();
|
|
@@ -7304,7 +7518,7 @@ async function runSelfImplementInner(
|
|
|
7304
7518
|
...(harnessSeededPaths.length ? { harnessSeededPaths } : {}),
|
|
7305
7519
|
onSurfaceProgress: (line) => progress('implementing', line.trimEnd()),
|
|
7306
7520
|
onLifecycleScreenClassification: recordRoundClassification,
|
|
7307
|
-
...(round > 0 ? { roundContext: { round, effectiveMax, previousRoundFailure: reworkPromptNote, ...(landedSiblings ? { landedSiblings } : {}) } } : {}),
|
|
7521
|
+
...(round > 0 ? { roundContext: { round, effectiveMax, previousRoundFailure: healInput ? `${reworkPromptNote}\n\n${healInput}` : reworkPromptNote, ...(landedSiblings ? { landedSiblings } : {}) } } : {}),
|
|
7308
7522
|
onSupervisorInput: (text, updateDelivery) => {
|
|
7309
7523
|
const normalized = text.trim();
|
|
7310
7524
|
if (!normalized) {
|