elanous 0.2.28 → 0.2.31
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/{y1ltt7oCZxVpC6zVPhZ2O → LSXfY0u9QtfDbejY0Ukf_}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{ab4d57c2.e90bc2cb31949045.js → 0bb0ff36.b8d418980951e5ba.js} +7 -7
- package/apps/pwa/out/_next/static/chunks/1034-8b639cee57b8e4a8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1085-6c2d35526f11f840.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1220.1ff7d5cdc34b1ae5.js +27 -0
- package/apps/pwa/out/_next/static/chunks/1247.5884ec81b39fe2e7.js +287 -0
- package/apps/pwa/out/_next/static/chunks/1302.87681521a7a4661e.js +62 -0
- package/apps/pwa/out/_next/static/chunks/1324-59dae3002413623b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5492-e05e26a033ba80d2.js → 1335-6731f392c35216eb.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/1343-f40b5870ac1eda5a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/146-b6cd56be11dda017.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1654.32de4b324981a188.js +23 -0
- package/apps/pwa/out/_next/static/chunks/1834-50625904996a8fa8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1849.1ce38efa6c527d9a.js +149 -0
- package/apps/pwa/out/_next/static/chunks/1913.7cc6fb6055b1ed3f.js +41 -0
- package/apps/pwa/out/_next/static/chunks/2001.6c7e0fd02190886c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2030.41fae98c7e907304.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2099-08b2f2dfba742c9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2112-e4efc21a6505d5bc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2134.ecee03a550ee7250.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8578.dff22d988cc2b106.js → 2213.2ccbada92c33ea0f.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/2236.66061832181cb745.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2422.b0bd272e7020d7e6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2534.e85ae21ad0dac829.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5081.a240b63fad28663a.js → 2871.0bca6137343b3f76.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2898.fd781bc7cf01a7b7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2940-619bfd8ef337c611.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2846.d6a433b8663819a5.js → 2985.39ccdecd36848b12.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/3040.92ff9ffc9f971cb9.js +115 -0
- package/apps/pwa/out/_next/static/chunks/3144.6861096c7b4edef7.js +64 -0
- package/apps/pwa/out/_next/static/chunks/{f4dfbfc0.a69fb12f854882aa.js → 3267c0e6.d34854e7b3984a6e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3278.2e5d15b53a4091c8.js +2 -0
- package/apps/pwa/out/_next/static/chunks/3541-ce3a5424ed5ad7f1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3583.a05e88cc8d594628.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3771.e928edf2867d28c0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3143.257997a5f1ed79df.js → 3902.e1e71aaac850a045.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4063-03284b5de59965f3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{16e57f67.3ea19e893461e611.js → 409f1e57.d0649fc47691ebfe.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1146.80d15ea7c6e6ee95.js → 4111.2bfedbb233ad206b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1516.83dd2c1b86b4e507.js → 4174.92ed04922709ac9e.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/4300-c7ec4eeabbb5f3f7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4483.646d5065199e1b55.js +36 -0
- package/apps/pwa/out/_next/static/chunks/4519.28199ff26b2fd80d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4581.ef2443578054544f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4608-8d894e9cbe4f08bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4639.ae48a01d1bb50a93.js +286 -0
- package/apps/pwa/out/_next/static/chunks/4739.08742ac668aada67.js +77 -0
- package/apps/pwa/out/_next/static/chunks/4745.67d6f99c245af3f7.js +226 -0
- package/apps/pwa/out/_next/static/chunks/4882-16cef71d6a1a32be.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9938.b23e4d4dfa0114cd.js → 4999.c064a4000c2a9e94.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/5173-233188df2f42c626.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5260-69f35419bca263e7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5272.b92d1b72a15c25fe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1157.f08bf2b70915e176.js → 5304.04d24756f242a094.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{7752.5cbdd0b433c54af9.js → 5307.60f2209e809bd627.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5415-997980f828667736.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9917-9e26abc5f7772735.js → 5458-16cd7a2b51b74c8c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{6196.34d6b229079e9e28.js → 5525.86debf231e181813.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{4593.10f5b9bd702d4a6c.js → 5543.a438b8ab5a13ea47.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5572-42c9084f27ca761e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5661-80470aac963d9f36.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5723.421338408b5c30c4.js +74 -0
- package/apps/pwa/out/_next/static/chunks/5809.64c3664267c50bce.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6000.64bc21ac8627f2f5.js +94 -0
- package/apps/pwa/out/_next/static/chunks/6013.39459b9c68eabf5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/607-06466dff012b03ef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7483.ba01c6c209b81bba.js → 6092.a7f99e68b188ca66.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/60fb96c9.360b01d8d4927b7b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9974.e77b4ff4884557b3.js → 6157.0c9af021de4fb31b.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/6192.a190b989b81e9743.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3309.364573ceedbdfd5f.js → 6323.8672b4817a306928.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{94.4cfed21c0b781a06.js → 6433.fc573af22bbc9ab7.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/6444.7d1fdcb9b09ae71c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{949.1e7d45ccb71580aa.js → 6517.4147878ac06d584d.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/6532.e34302010b2f0b68.js +32 -0
- package/apps/pwa/out/_next/static/chunks/6544cb48.a87fe20ddf137be2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6546.74bc4ed82f19016d.js +104 -0
- package/apps/pwa/out/_next/static/chunks/6684-e7523ce7c2fad075.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6726.ebdc82feb161431e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6739.00fb6f892e5e392b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6745.934c4921bf15513a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2528.3868070ef1be69f9.js → 6767.ea607cf0c20a25af.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/6843.67bfd020da0926c5.js +93 -0
- package/apps/pwa/out/_next/static/chunks/6948.1062d4594652b5bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7138-eaf841fc1dc03463.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7174-cda29ee13d7790e7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7304-3c07583f4e405f4f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7371.80c05c653b08e907.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7391.ebae168025c91b6a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1743.563d3168e95825ef.js → 7502.ccd5b8065545edd0.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/7557.e325503a090a4310.js +8 -0
- package/apps/pwa/out/_next/static/chunks/7569-9ce9432c7f10989f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5408.377c8c543635b81f.js → 7862.30a8d6482bb238eb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7886-55854585fadeded1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7947-d0759430f8042240.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{65ebff95.081daeff622d238e.js → 7a1887c4.f36b88fba31da8fd.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{2697.76ca2ac3efef6f3b.js → 8018.a32663f04a6fc5f9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8097-92f87bd108322f66.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8215-1661812b6e9ad71f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8260-19c921a51ca8ec3e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8440.3a5cf5c85aa76db8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8519-4599be2249161e68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8547.b028b90c5c01ace6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8587-cbe02a953a7f4990.js +1 -0
- package/apps/pwa/out/_next/static/chunks/877-2b977259c4b15655.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9002.e5658224e3dc1b6f.js +24 -0
- package/apps/pwa/out/_next/static/chunks/9019-0a4b40c50c7314fb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9138.b6e80031afb1d973.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9188-d36e4fc869ddc166.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4204.a409ab6250c0f6a8.js → 9221.7d22eaf353a2d4e7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9230.44f5039e796e4ab4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5785-ea8d2c633b6688e3.js → 9279-d28c5b7754d010ae.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/939.336acce73e98482c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9398-6aed28f0a96d0d6f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9407.e49124dedf0f5e72.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9610.c07cce4bfcc14ed7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9667-ce78c2ce91050ff9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/997ce8a5-2ad501927003b41b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9311.24c8f5ea793253dd.js → 9989.3694300e5f000b14.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-339fabb3499da0e1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-bf3634a117322df7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-3535a4a69f1fafaa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-b9f51447f757fbf2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-fa46d4588e8442c2.js → page-2ebb8fd59b9461f9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-a2fc4e49a4fa4ba8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-5a503541353e60a8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-6025101384e361a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-f4b630cc8b5273cd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-a645f00a06483e9a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-61ac22cbab1ee4ec.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-e9bab7413b028b28.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-c992eafe028b642e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-e547e6ce55f1fb33.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-d27e1b9850fd54bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-339fabb3499da0e1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-805ac2e137b7a121.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-0fec29c7ba01894b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-339a07410cd6f36b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/{page-ced0bcfc6542b3fc.js → page-349f2752d8cd37ad.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-d5c6dcf31c25cecc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-2fd93ed8c9f16580.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-9b564dbff0fefc35.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-62f4475d3c38fb9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-814ba51385225776.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-397d479626e5a459.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-af1bba4e3251b728.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-3ad3be5e7d3fdce9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-f219ccdbc0bf27df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-4da93ad35d4a8d28.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-456666766e5ce6fc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-7404e377e8adb8c5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-14456240ed2a36ad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-3a658d5fa6d16a25.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-0157de6e85f8bb6b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/{page-cb249e81ed339318.js → page-0a07363b130182a1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-841d73d4ac44ed49.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-6f43a3d1146e6377.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-339fabb3499da0e1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-521ee23ac8c0abfa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-a9992ee285efaa83.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-3d48e85fa89ec04f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-d2ced71132fac9b2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-f08358bdf251adb9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-233c71cd5f68f0d7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-70151d78de2f375e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-dcac33a3e2cb72c0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-149dc1caba411bb9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-0448145ccd5c45c1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-9cb0c444903da65d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-17e504c396e0e389.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6def8a8e.c81f9ca41028eccf.js → b313b242.cb1265eea908db61.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{e87d89b9.2e71c0ae475d28a1.js → e5012ffe.f727e23c231f4342.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/ea695e3c-1f1d70d740cf3031.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{e117f801.e92bf10242653497.js → ebc7d829.264a0bcb6c750b50.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/framework-906af9bd029e166c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-a24847f9f684d469.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-7bdcd8aa7c8397d3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-6ba46a5066fc226d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-a8dc6d07591f2a25.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-f13df28c15c55eee.js +1 -0
- package/apps/pwa/out/_next/static/css/{72becfd42807b50d.css → 3f5fc6f96e2cf7b2.css} +1 -1
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +23 -23
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +23 -23
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +23 -23
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +22 -22
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +22 -22
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +23 -23
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +22 -22
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +23 -23
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +23 -23
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +22 -22
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +23 -23
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +23 -23
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +23 -23
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +23 -23
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +22 -22
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +22 -22
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +23 -23
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +23 -23
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +23 -23
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +22 -22
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +22 -22
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +22 -22
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +23 -23
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +23 -23
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +22 -22
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +22 -22
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +22 -22
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +22 -22
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +23 -23
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +23 -23
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +22 -22
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +23 -23
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +23 -23
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +23 -23
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +23 -23
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +23 -23
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +22 -22
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +23 -23
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +23 -23
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +23 -23
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +23 -23
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +23 -23
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +23 -23
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +23 -23
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +23 -23
- package/bin/elanous.mjs +7 -3
- package/graphs/context/nightly-condense.yaml +1 -0
- package/graphs/intake/intake-daily.yaml +8 -1
- package/graphs/intake/recipes.yaml +5 -0
- package/graphs/lecture/lecture-note.yaml +2 -2
- package/graphs/ops/harness-gc.yaml +1 -0
- package/graphs/release/recipes.yaml +3 -0
- package/graphs/release/release-loop.yaml +15 -7
- package/graphs/units/recipes.yaml +3 -0
- package/graphs/units/release-gate-recheck.yaml +15 -0
- package/package.json +2 -1
- package/plugins/agent-team/agents/research.md +1 -0
- package/scripts/check-native-tool-wiring.ts +3 -2
- package/scripts/ci-android-unit-tests.ts +16 -0
- package/scripts/ci-typecheck-changed.ts +40 -11
- package/scripts/coord-channel-watch.sh +45 -19
- package/scripts/coord-role-pack.ts +222 -0
- package/scripts/cron-run.ts +96 -3
- package/scripts/detect-test-interference.ts +38 -5
- package/scripts/gate-pr-cache.ts +65 -0
- package/scripts/gh-surface/capture.ts +126 -0
- package/scripts/gh-surface/gh +40 -0
- package/scripts/import-graph-scc.ts +38 -0
- package/scripts/install.ps1 +19 -0
- package/scripts/intake-social.ts +181 -0
- package/scripts/lecture-note/node.ts +71 -4
- package/scripts/lib/android-toolchain.ts +32 -0
- package/scripts/lib/deterministic-env.ts +62 -0
- package/scripts/lib/gate-test-env.ts +19 -0
- package/scripts/lib/morning-report-options.ts +41 -0
- package/scripts/measure-goal-grounding-corpus.ts +2 -1
- package/scripts/pr-land-extra-remote-gates.ts +49 -0
- package/scripts/ratchets/test-interference-patterns.allowlist.txt +257 -0
- package/scripts/ratchets/test-interference-patterns.ts +367 -0
- package/scripts/release-loop/cut-branch.ts +4 -3
- package/scripts/release-loop/export-check-node.ts +0 -1
- package/scripts/release-loop/fixtures/warm-failure-assertion/sample.junit.xml +8 -0
- package/scripts/release-loop/fixtures/warm-job-029/sample.json +1 -0
- package/scripts/release-loop/fixtures/warm-job-029/sample.junit.xml +10 -0
- package/scripts/release-loop/gate-batch-safe.ts +23 -0
- package/scripts/release-loop/gate-closure.ts +12 -8
- package/scripts/release-loop/gate-diff.ts +1 -1
- package/scripts/release-loop/gate-history.ts +422 -0
- package/scripts/release-loop/gate-host-mirror.ts +66 -0
- package/scripts/release-loop/gate-node.ts +806 -94
- package/scripts/release-loop/gate-partial.ts +106 -9
- package/scripts/release-loop/gate-pr-cache.ts +66 -0
- package/scripts/release-loop/gate-prewarm-plan.ts +66 -0
- package/scripts/release-loop/gate-r2-verdict.ts +189 -0
- package/scripts/release-loop/gate-recheck-plan-node.ts +52 -0
- package/scripts/release-loop/gate-triage-node.ts +190 -0
- package/scripts/release-loop/gate-warm-artifacts.ts +253 -0
- package/scripts/release-loop/import-graph-scc-run.ts +54 -0
- package/scripts/release-loop/import-graph-scc.ts +215 -0
- package/scripts/release-loop/node-verdict.ts +2 -0
- package/scripts/release-loop/probe-pod-host-dirs-live.ts +113 -0
- package/scripts/release-loop/resume-release.ts +33 -4
- package/scripts/release-loop/resume.ts +13 -5
- package/scripts/release-loop/spawn-lane.ts +51 -0
- package/scripts/release-loop/tui-node-checks.ts +23 -0
- package/scripts/release-loop/tui-sim-node.ts +3 -2
- package/scripts/release-loop/unattended-release.ts +16 -0
- package/scripts/release-loop/version-node.ts +62 -4
- package/scripts/test-deterministic.ts +46 -73
- package/scripts/train-reach-grouping.ts +48 -0
- package/scripts/tsc-incremental-cache.ts +86 -0
- package/scripts/tsc-incremental-diagnostics.ts +76 -0
- package/scripts/tsc-main-safety-net.ts +2 -2
- package/scripts/usage-rollup.ts +11 -3
- package/src/acp/client.ts +4 -1
- package/src/acp/core-turn-bridge.ts +145 -24
- package/src/acp/elanous-extensions.ts +2 -0
- package/src/acp/server.ts +2 -0
- package/src/ad-pipeline/run.ts +4 -2
- package/src/agent/ref-grounding.ts +18 -0
- package/src/agent/runner.ts +169 -3
- package/src/agent/subagent-callable.ts +3 -2
- package/src/agent-mission/review-loop.ts +6 -3
- package/src/agent-substrate/acp-implementer.ts +14 -2
- package/src/agent-substrate/pr-reviewer.ts +41 -21
- package/src/agent-substrate/self-review-cli.ts +30 -4
- package/src/autopilot/pr-manager.ts +62 -7
- package/src/briefing/brief-items.ts +24 -22
- package/src/budget/pty-usage-reemit.ts +7 -0
- package/src/budget/run-usage-rollup.ts +9 -0
- package/src/budget/usage-daily-store.ts +98 -0
- package/src/capture/tui-self-report.ts +37 -4
- package/src/chat/chat-cli.ts +10 -2
- package/src/chat/index.ts +107 -20
- package/src/chat/input-control-key.ts +5 -3
- package/src/chat/pickers/modal-runtime.ts +1 -0
- package/src/chat/pickers/modals.ts +3 -1
- package/src/chat/tool-interrupt-behavior.ts +38 -0
- package/src/chat/tool-render/dispatch.ts +5 -1
- package/src/chat/turn-typeahead.ts +191 -29
- package/src/cli/__fixtures__/agent-help-before/agent.txt +4 -2
- package/src/cli/agent-cli.ts +41 -13
- package/src/cli/config-audit.ts +123 -0
- package/src/cli/dashboard-name-flag.ts +48 -0
- package/src/cli/decisions-cli.ts +80 -6
- package/src/cli/doctor-cli.ts +80 -0
- package/src/cli/log-event-names.ts +19 -0
- package/src/cli/mcp-login.ts +21 -5
- package/src/cli/msg-cli.ts +133 -2
- package/src/cli/pr-cli.ts +546 -112
- package/src/cli/pr-land-heavy-remote.ts +233 -0
- package/src/cli/pr-land-overlap-evidence.ts +167 -14
- package/src/cli/pr-land-pod-shadow-job.ts +83 -0
- package/src/cli/pr-land-pod-shadow.ts +16 -3
- package/src/cli/pr-land-virtual-rebase.ts +108 -0
- package/src/cli/pty-takeover-cli.ts +125 -16
- package/src/cli/release-cli.ts +122 -14
- package/src/cli/remote-resolve.ts +2 -1
- package/src/cli/seat-cli.ts +164 -19
- package/src/cli/self-update.ts +5 -2
- package/src/cli/tasks-cli.ts +105 -21
- package/src/cli/usage-cli.ts +146 -12
- package/src/cli/usage-daily-cli.ts +84 -0
- package/src/context-bus/context-first.ts +13 -0
- package/src/context-bus/context-now.ts +95 -7
- package/src/context-bus/ops-events.ts +75 -0
- package/src/control-plane/lease-holder.ts +12 -8
- package/src/control-plane/ledger.ts +163 -4
- package/src/control-plane/server.ts +91 -11
- package/src/core-turn/auth-rejected-notice.ts +41 -0
- package/src/core-turn/run-core-turn.ts +14 -2
- package/src/core-turn/run-goal-loop.ts +239 -4
- package/src/core-turn/seat-turn-cap.ts +79 -0
- package/src/core-turn/short-question.ts +78 -13
- package/src/core-turn/types.ts +10 -0
- package/src/dashboard/acp-active-model.ts +40 -0
- package/src/dashboard/acp-boot.ts +3 -0
- package/src/dashboard/auto-compact-runtime.ts +2 -0
- package/src/dashboard/boot-banner.ts +80 -0
- package/src/dashboard/dashboard-status-lines.ts +11 -0
- package/src/dashboard/detail-viewer-runtime.ts +15 -2
- package/src/dashboard/event-loop-stall-monitor.ts +4 -0
- package/src/dashboard/goal-loop-thinking.ts +16 -0
- package/src/dashboard/hitl-boot.ts +9 -4
- package/src/dashboard/index.ts +448 -998
- package/src/dashboard/input/chat-main-entry-runtime.ts +2 -0
- package/src/dashboard/input/chat-main-log-actions.ts +4 -0
- package/src/dashboard/input/chat-main-log-command.ts +12 -1
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +176 -4
- package/src/dashboard/input/chat-main-session.ts +14 -3
- package/src/dashboard/input/chat-main-slash-command.ts +7 -0
- package/src/dashboard/input/chat-main-turn.ts +14 -4
- package/src/dashboard/input/compact-prepass-recovery.ts +130 -0
- package/src/dashboard/input/dashboard-chord-actions.ts +10 -1
- package/src/dashboard/input/dashboard-chord-runtime.ts +2 -0
- package/src/dashboard/input/external-input-host.ts +71 -0
- package/src/dashboard/input/internal-turn.ts +261 -0
- package/src/dashboard/input/log-fold-binding.ts +18 -0
- package/src/dashboard/input/mouse-wiring.ts +17 -4
- package/src/dashboard/input/seat-autowake.ts +318 -0
- package/src/dashboard/input/turn-steer-bridge.ts +164 -0
- package/src/dashboard/log-click-runtime.ts +5 -3
- package/src/dashboard/loop-scheduler.ts +72 -0
- package/src/dashboard/running-build-status.ts +74 -0
- package/src/dashboard/seat-boot-preamble.ts +131 -0
- package/src/dashboard/seat-local-instructions.ts +305 -0
- package/src/dashboard/skill-runtime.ts +2 -0
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +220 -1203
- package/src/dashboard/slash-runtime/help-from-registry.ts +2 -1
- package/src/dashboard/slash-runtime/index.ts +13 -0
- package/src/dashboard/slash-runtime/model-choices.ts +35 -0
- package/src/dashboard/term-slash-runtime.ts +15 -0
- package/src/dashboard/turn-busy-teardown.ts +50 -0
- package/src/dashboard/turn-preamble.ts +30 -2
- package/src/dashboard/turn-session-layers.ts +176 -0
- package/src/dashboard/turn-stream-formatter.ts +14 -6
- package/src/dashboard/turn-stream-presentation-applier.ts +8 -0
- package/src/decisions/decision-ledger.ts +45 -4
- package/src/discord-self-message.ts +4 -4
- package/src/domains/release-tool.ts +26 -10
- package/src/domains/surface-events.ts +4 -1
- package/src/domains/watch-default-scheduler.ts +8 -9
- package/src/field-note/transcribe.ts +17 -0
- package/src/fold-stack.ts +24 -1
- package/src/git-fs/dirty.ts +32 -4
- package/src/git-fs/index.ts +43 -1
- package/src/github/remote-call.ts +81 -0
- package/src/goals/registry.ts +46 -6
- package/src/goals/types.ts +7 -1
- package/src/graph-runner/runner.ts +2 -0
- package/src/grok/credential.ts +26 -0
- package/src/harness/harness-clean.ts +2 -1
- package/src/harness/harness-cli-command.ts +52 -5
- package/src/harness/harness-gc.ts +34 -6
- package/src/harness/harness-incidents.ts +57 -20
- package/src/harness/harness-pod-dispatch.ts +87 -10
- package/src/harness/harness-queue.ts +53 -4
- package/src/harness/harness-stop.ts +4 -3
- package/src/harness/harness-substrate-default.ts +78 -7
- package/src/harness/harness-worktree-auto.ts +2 -1
- package/src/harness/harness-worktrees.ts +3 -2
- package/src/hooks/dispatch.ts +2 -1
- package/src/index.ts +166 -26
- package/src/input/external-input-queue.ts +251 -0
- package/src/intake-plane/slash.ts +14 -3
- package/src/interactive-terminal-modal.ts +13 -0
- package/src/keybindings.ts +4 -1
- package/src/llm/route-decision.ts +25 -0
- package/src/llm/tool-loop-steered-rejection.ts +33 -0
- package/src/llm-stream-retry-display.ts +59 -0
- package/src/llm.ts +391 -74
- package/src/log-entry.ts +3 -3
- package/src/log-pane/search.ts +29 -4
- package/src/loops/agent-reply.ts +256 -0
- package/src/loops/budget.ts +37 -7
- package/src/loops/consensus.ts +348 -0
- package/src/loops/loop-cli.ts +3 -2
- package/src/loops/msg-address.ts +57 -0
- package/src/loops/msg-wake.ts +484 -0
- package/src/loops/observe.ts +19 -3
- package/src/loops/orchestrator/inbox.ts +60 -3
- package/src/loops/orchestrator/tick.ts +80 -6
- package/src/loops/orchestrator/traffic.ts +64 -1
- package/src/loops/registry.ts +72 -4
- package/src/market/signed-index.ts +14 -0
- package/src/mcp/mcp-oauth.ts +54 -5
- package/src/memory.ts +20 -5
- package/src/models/prompts.ts +28 -0
- package/src/msg/msg-sse-client.ts +223 -0
- package/src/msg/msg-store.ts +86 -2
- package/src/mss/logging/log-store.ts +225 -1
- package/src/native-tool-catalog.ts +125 -0
- package/src/nexus/DAEMON-THIN-inventory-2026-10-15.md +122 -0
- package/src/nexus/api/http-server.ts +59 -15
- package/src/nexus/api/loop-resources.ts +19 -3
- package/src/nexus/api/ops-api.ts +13 -0
- package/src/nexus/api/project-autopsy.ts +127 -0
- package/src/nexus/api/terminals.ts +3 -0
- package/src/nexus/api/workflow-approvals.ts +2 -0
- package/src/nexus/daemon-thin-inventory.md +37 -0
- package/src/nexus/index.ts +70 -0
- package/src/nexus/onboarding/first-boot-wizard.ts +56 -2
- package/src/nexus/state/state.ts +1 -0
- package/src/oauth/codex-account-store.ts +15 -3
- package/src/oauth/codex-billing-route.ts +31 -0
- package/src/oauth/store.ts +32 -7
- package/src/onboarding/first-run.ts +28 -3
- package/src/ops/overview-cache.ts +16 -4
- package/src/ops/overview-collect.ts +19 -2
- package/src/ops/resources.ts +82 -0
- package/src/panes/log-pane.ts +67 -8
- package/src/persona/presets.ts +44 -0
- package/src/plugins/maker/connector-maker.ts +41 -0
- package/src/plugins/maker/skill-maker.ts +42 -0
- package/src/plugins/maker/wizard-generate.ts +6 -4
- package/src/pr-tool/census.ts +288 -0
- package/src/preview/terminal.ts +14 -1
- package/src/prompt-cache/types.ts +2 -0
- package/src/prompt-enhance/enhance.ts +24 -8
- package/src/prompt-library/chat-conciseness.ts +13 -0
- package/src/prompt-library/universal-preamble.ts +283 -61
- package/src/pty-shell/pty-control-ipc.ts +4 -1
- package/src/pty-shell/pty-manifest.ts +77 -5
- package/src/pty-shell/registry.ts +19 -2
- package/src/pty-shell/tui-run-state.ts +253 -0
- package/src/release-loop/gate-host-reservation.ts +97 -0
- package/src/release-loop/landing-freeze.ts +5 -0
- package/src/release-loop/light-rc.ts +32 -4
- package/src/release-loop/placement.ts +92 -1
- package/src/release-loop/rehearsal-shard-plan.ts +149 -0
- package/src/release-loop/rehearsal.ts +73 -17
- package/src/render.ts +5 -1
- package/src/repl/index.ts +20 -2
- package/src/seat-loop/seat-knowhow.ts +282 -0
- package/src/seat-loop/seat-loop.ts +41 -2
- package/src/seat-loop/seat-report.ts +42 -2
- package/src/seat-loop/traffic-signal.ts +3 -0
- package/src/self-dev/ask-launch-flow.ts +24 -3
- package/src/self-dev/decompose-compose-graph.ts +28 -27
- package/src/self-dev/decompose-proposal.ts +53 -38
- package/src/self-dev/decompose.ts +17 -0
- package/src/self-dev/dev-pipeline.ts +31 -2
- package/src/self-dev/draft-residue.ts +24 -9
- package/src/self-dev/draft-sweep.ts +59 -4
- package/src/self-dev/external-call-zero.ts +77 -0
- package/src/self-dev/launch-preflight-text.ts +6 -0
- package/src/self-dev/launch-preflight.ts +25 -3
- package/src/self-dev/local-supervisor-judge.ts +185 -0
- package/src/self-dev/run-supervisor.ts +300 -24
- package/src/self-dev/run-types.ts +20 -0
- package/src/self-dev/shard-aggregate.ts +15 -2
- package/src/self-dev/shard-plan.ts +47 -0
- package/src/self-dev/shard-run.ts +135 -12
- package/src/self-dev/spawn-lane-files.ts +19 -0
- package/src/self-health/signatures.ts +132 -0
- package/src/self-implement/app-api-budget.ts +51 -11
- package/src/self-implement/config-gate.ts +2 -1
- package/src/self-implement/doctor-visit.ts +118 -0
- package/src/self-implement/expose-gate.ts +2 -1
- package/src/self-implement/gate-artifacts.ts +405 -0
- package/src/self-implement/gate-cli.ts +212 -18
- package/src/self-implement/gate-remote.ts +110 -25
- package/src/self-implement/gate-scenario.ts +85 -0
- package/src/self-implement/goal-author-decompose.ts +80 -16
- package/src/self-implement/goal-author.ts +270 -76
- package/src/self-implement/goal-authoring-grounding.ts +1 -1
- package/src/self-implement/goal-file-name.ts +65 -0
- package/src/self-implement/graph-authority.ts +38 -6
- package/src/self-implement/graph-overlay-condition.ts +92 -1
- package/src/self-implement/ground-goal.ts +2 -1
- package/src/self-implement/heal-triage.ts +79 -0
- package/src/self-implement/host-regate.ts +74 -2
- package/src/self-implement/orchestrator.ts +14 -123
- package/src/self-implement/pr-title.ts +123 -0
- package/src/self-implement/review-mustfix-class.ts +115 -0
- package/src/self-implement/run-checkpoint.ts +235 -0
- package/src/self-implement/run-ledger.ts +266 -17
- package/src/self-implement/run-stop.ts +4 -3
- package/src/self-implement/run-ttl.ts +28 -4
- package/src/self-implement/running-runs.ts +10 -6
- package/src/self-implement/seams.ts +2 -0
- package/src/self-implement/self-implement-runtime.ts +32 -0
- package/src/self-implement/shadow-stage.ts +7 -6
- package/src/self-implement/stop-autoheal.ts +2 -1
- package/src/self-implement/train-gate-remote.ts +37 -8
- package/src/self-implement/train-reach-grouping.ts +157 -0
- package/src/self-implement/train-scenario-layers.ts +133 -0
- package/src/self-implement/uncommitted-work.ts +2 -0
- package/src/session/pending-input.ts +81 -11
- package/src/session/session-start.ts +224 -0
- package/src/session-runtime/index.ts +7 -1
- package/src/session-runtime/parallel-dispatch.ts +22 -5
- package/src/skills/tools/dev-harness.ts +6 -4
- package/src/skills/tools/ops-ledger.ts +707 -0
- package/src/skills/tools/persistent-grounding.ts +47 -7
- package/src/skills/tools/shell.ts +117 -1
- package/src/status/bar.ts +32 -2
- package/src/status/status-provider-info.ts +58 -0
- package/src/steward/resync-tick.ts +114 -23
- package/src/steward/ta-repair-event-collect.ts +158 -0
- package/src/task-agent/card-evidence.ts +25 -1
- package/src/task-agent/green-sweep.ts +8 -3
- package/src/task-agent/judge.ts +76 -0
- package/src/task-agent/land-queue.ts +79 -0
- package/src/task-agent/live-moves.ts +30 -9
- package/src/task-agent/postland-card.ts +5 -0
- package/src/task-agent/prelaunch-already-done.ts +98 -0
- package/src/task-agent/real-launch-guard.ts +37 -0
- package/src/task-agent/rejudge-on-head.ts +93 -13
- package/src/task-agent/remote-rejudge-bind.ts +62 -13
- package/src/task-agent/repair-cycle.ts +58 -7
- package/src/task-agent/repair-worker.ts +7 -0
- package/src/task-agent/run-identity.ts +200 -0
- package/src/task-agent/shadow.ts +50 -3
- package/src/task-agent/task-hand.ts +158 -5
- package/src/task-agent/train-landing.ts +77 -0
- package/src/task-agent/work-order.ts +104 -0
- package/src/task-orchestrator/surfaces/kubectl-transient-retry.ts +51 -0
- package/src/task-orchestrator/surfaces/pod-command-job.ts +138 -22
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +88 -19
- package/src/task-orchestrator/surfaces/pod-host-acp-review.ts +2 -1
- package/src/task-orchestrator/surfaces/pod-image-source.ts +2 -1
- package/src/task-orchestrator/surfaces/pod-install-slots.ts +122 -15
- package/src/task-orchestrator/surfaces/pod-lease.ts +20 -6
- package/src/task-orchestrator/surfaces/pod-lifecycle-stages.ts +169 -0
- package/src/task-orchestrator/surfaces/pod-mirror-seed.ts +103 -0
- package/src/task-orchestrator/surfaces/pod-result-marker-wait.ts +33 -0
- package/src/task-orchestrator/surfaces/pod-reuse-cleanup.ts +63 -0
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +19 -3
- package/src/task-orchestrator/surfaces/pod-warm-switch.ts +141 -0
- package/src/task-orchestrator/surfaces/pod-warm-ta-shadow.ts +85 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-protocol.ts +153 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +208 -0
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +237 -46
- package/src/telegram.ts +2 -4
- package/src/terminal/session-registry.ts +6 -0
- package/src/thinking-line.ts +12 -3
- package/src/tool-runtime/index.ts +4 -0
- package/src/tool-runtime/ops-ledger-runtimes.ts +84 -0
- package/src/tool-runtime/ref-consult-runtime.ts +17 -2
- package/src/tool-runtime/run-shell-runtime.ts +4 -1
- package/src/tool-runtime/self-cognition-runtimes.ts +5 -1
- package/src/tui/input/pickers.ts +732 -0
- package/src/tui/slash/mission.ts +492 -0
- package/src/tui/slash/term.ts +877 -0
- package/src/tui-client/dashboard-session.ts +9 -0
- package/src/tui.ts +53 -0
- package/src/user-config/gemini-server-tools.ts +9 -0
- package/src/user-config.ts +106 -21
- package/src/util/spawn-sync-output.ts +7 -0
- package/src/ux-sim/fake-bin.ts +154 -0
- package/src/ux-sim/fake-clock.ts +36 -0
- package/src/ux-sim/fake-llm.ts +29 -0
- package/src/ux-sim/headless-tui.ts +72 -0
- package/src/ux-sim/in-process-cli.ts +176 -0
- package/src/ux-sim/temp-git-remote.ts +82 -0
- package/src/version/packed-revision.json +1 -1
- package/src/video-pipeline/recipes/vlog.ts +25 -7
- package/apps/pwa/out/_next/static/chunks/1027.a0f04663d24c2779.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1038.676007ae505822e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1113.a37eadf7f740d955.js +0 -1
- package/apps/pwa/out/_next/static/chunks/112-fa7c526c20ce1405.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1144.5fa1fa1d48dbcd12.js +0 -36
- package/apps/pwa/out/_next/static/chunks/119b405e.8fdd0e44d1ff37aa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1296.04560d98e73fbf51.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1314-f604ba013ec535b0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1454-29d1d773d5996a49.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1464.f3209af0d8ae4ff2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1729-d73dd25e564679d4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1843.5924c24295243261.js +0 -27
- package/apps/pwa/out/_next/static/chunks/1987.e28149724b92918b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2066-5ca18ffa5a4be68b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2240.d10a66695155fd93.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2391.e2cbc98d4abbb41a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2566-734cb83bbd405886.js +0 -1
- package/apps/pwa/out/_next/static/chunks/275.0e6bad414729bfa0.js +0 -32
- package/apps/pwa/out/_next/static/chunks/2803-33bdae771855a8d1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3259-86f3be56e43eaf6a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3280-e177c33bfbdcfb0a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3294-2b6a6d45a46a6c1c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3522.758840fc5e7fe630.js +0 -287
- package/apps/pwa/out/_next/static/chunks/3525-a7c989c1a661e880.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3694.b1a66387756458c0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/370.124f9e678a76fc01.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3797-9643105335e660fe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4084.15ecaf4240bd9e77.js +0 -286
- package/apps/pwa/out/_next/static/chunks/4089-b3382b8843114eee.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4293.928a8d573c16aab7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4402.f9238a3b18a7bd43.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4490-9b090b0f9427f902.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4548.13502d0ca3b4f862.js +0 -8
- package/apps/pwa/out/_next/static/chunks/4565-67e4c620597965c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4599-548bc96cda44a5a7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4625.206574e33a9e7ae8.js +0 -104
- package/apps/pwa/out/_next/static/chunks/4862-392c9a71f0d8dfb4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5054.2906d1b02542edc5.js +0 -149
- package/apps/pwa/out/_next/static/chunks/5102-c822bbbee5a022a4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5194-8c93f2e7e4b6f717.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5305-bacd7eca0b9a5848.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5311.9071ee3f44fd7ff5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5369.9f34353442daa421.js +0 -1
- package/apps/pwa/out/_next/static/chunks/589-49d730cb8138b397.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5904-264a6412ae3c9028.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5980.728531d5c566535c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/599-56f2c0a5cc4a7295.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6011.f525002e21bef0ac.js +0 -23
- package/apps/pwa/out/_next/static/chunks/6132.4381ab93683f1acf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6149.2e698635e454d8f6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6356-0afafc4230cf9767.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6406.64756073f7df35b8.js +0 -77
- package/apps/pwa/out/_next/static/chunks/6479-16e62aedafa0e310.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6599.b5246b46a2453329.js +0 -64
- package/apps/pwa/out/_next/static/chunks/6610.5c26eec011565acb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/666.37d18474edc1c552.js +0 -2
- package/apps/pwa/out/_next/static/chunks/6904.a0b5b1ed4f2d2c20.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7247-1f4aba94aba50d9f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7274-e71a7c5b7760cd02.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7290.1fcaeef3adb5d0d4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7477-2c64e42760f82f33.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7505-47002b76ff1aef6c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7600-11884ca4da68e5d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7607.40d8bb3689697ccb.js +0 -62
- package/apps/pwa/out/_next/static/chunks/7763.f51fcc19ca1414ec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7785.846140c859b1adf6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7807-a0fdac6393e0bf36.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7837-20a63b4b7e9342b1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/800.7815414cf280545d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8085-1e5fce59500a2cc2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8100.415f2105faa63e97.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8290.701aa42ed13aa767.js +0 -226
- package/apps/pwa/out/_next/static/chunks/83a80514-b897b64df43ce108.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8444.d9c74214a3145a43.js +0 -93
- package/apps/pwa/out/_next/static/chunks/8569.98c915534928c7f9.js +0 -24
- package/apps/pwa/out/_next/static/chunks/8591.b1c7f876e5ec7cfb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8715-f63756021d3ab989.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8879.776c2ec7732aa114.js +0 -115
- package/apps/pwa/out/_next/static/chunks/8881.ddca15b3c82c490c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8946.5da5c87f32a2e1a8.js +0 -41
- package/apps/pwa/out/_next/static/chunks/9117.080b9b75be90e14d.js +0 -74
- package/apps/pwa/out/_next/static/chunks/9167.f3ecb28f367d6e69.js +0 -94
- package/apps/pwa/out/_next/static/chunks/9224.66095370ee28c93b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9238-0682b013c83d6449.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9449.d3ed795da4befb1c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9638-d268329f2c6f4f8d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/973cbf1b.3bbcf2b41548eca7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9842-d6644eb53d3dc6bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9863.94ca3263e760696e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-d9babd8795f396a5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-5ab1e47978577c5e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-24453f6a302816b4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-6c131d30bb1cf871.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-dc0772b11861af51.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-66ad46ed0279feb9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-5159dc8752c6cd29.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-c5a2478861c08b87.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-f722a9dec084e08b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-256ffd365d32e100.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-e0de78ae7b99f01c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-cfbdc44b708d9801.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-4c741eb760f2f77c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-e9ba98f5f1440a21.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-d9babd8795f396a5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-dafc901bb1b72b5f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-2f6f303fa114ec24.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-1634081c5272006c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-bb1f05cd51c38944.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-646b50f63b6fe732.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-db069b48a59c8c00.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-f736324afa2117c1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-6f131b51193a36f9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-435f5e2faf02bc01.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-497e0eedf20e7890.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-a8d28fdf995e16ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-8966452228753c5e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fd5d18656cb432b6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-5663779cb1a37609.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-66a67eb19ebd976b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-3b492aa78cf3c4a6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-c71267e7681da982.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-a21d1e1797172692.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-781cfc5114e097da.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-478157214db6a023.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-d9babd8795f396a5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-86141f12cf090b7f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-7256c73bb1c36751.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-5c738ca7adef3de5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-0138c8091ec17224.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-cc2f24f16d85e735.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-979d318a534e92da.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-182d394f7e6e096b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-21050928a697ed7a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-44b9d807005a9030.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-601fb77340e63c9a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-75d3fb5d47af0edf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-11bf9e5725a72c22.js +0 -1
- package/apps/pwa/out/_next/static/chunks/dcf24383-2f82e35f2d827393.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-bf135b997155e90e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-5571537543bea91c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-25c51c7df7f3a442.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-e3b2c1f5d82abd65.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-083f2e23e9bc3641.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-e94d22b7a028217b.js +0 -1
- package/src/dashboard/bench-slash-runtime.ts +0 -40
- package/src/dashboard/input/search-modal-router.ts +0 -9
- package/src/dashboard/modals/pane-key-router.ts +0 -27
- package/src/dashboard/view-slash-runtime.ts +0 -48
- /package/apps/pwa/out/_next/static/{y1ltt7oCZxVpC6zVPhZ2O → LSXfY0u9QtfDbejY0Ukf_}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { RunStopClass } from './run-stop.js';
|
|
2
|
+
import type { RunContract } from './graph-run-contract.js';
|
|
3
|
+
import type { GateRoutingReason } from './graph-authority.js';
|
|
4
|
+
import { landingFreezeState, type LandingFreeze } from '../release-loop/landing-freeze.js';
|
|
5
|
+
import type { ActiveProviderInfo } from '../provider-summary.js';
|
|
6
|
+
import type { ResourceView } from '../control-plane/ledger.js';
|
|
7
|
+
import type { UserConfig } from '../user-config.js';
|
|
2
8
|
|
|
3
9
|
/** ⭐ RFC §5 «4단계» — `applies_when` 을 «코드»가 판정한다.
|
|
4
10
|
*
|
|
@@ -33,9 +39,29 @@ export function parseOverlayCondition(source: string): OverlayConditionParse {
|
|
|
33
39
|
return { ok: true, condition: { key: key!, operator: operator as OverlayConditionOperator, literal } };
|
|
34
40
|
}
|
|
35
41
|
|
|
42
|
+
/** L1 values are producer observations; an unobserved field is absent, never a default. */
|
|
43
|
+
export interface GraphRunState {
|
|
44
|
+
readonly attempts: number;
|
|
45
|
+
readonly goal_id?: string;
|
|
46
|
+
readonly stop_class?: RunStopClass;
|
|
47
|
+
readonly review_repeat?: number;
|
|
48
|
+
readonly sibling_overlap?: boolean;
|
|
49
|
+
readonly main_sync_conflict?: boolean;
|
|
50
|
+
readonly author_grade?: string;
|
|
51
|
+
readonly substrate?: 'local' | 'pod';
|
|
52
|
+
readonly freeze?: 'on' | 'off';
|
|
53
|
+
readonly docs_only?: boolean;
|
|
54
|
+
readonly provider?: string;
|
|
55
|
+
readonly quota?: 'ok' | 'low' | 'exhausted';
|
|
56
|
+
readonly machines?: number;
|
|
57
|
+
readonly seats?: 'on' | 'steward-only';
|
|
58
|
+
}
|
|
59
|
+
|
|
36
60
|
/** Inputs known at a runtime overlay decision. Every field except `attempts` may be unknown. */
|
|
37
61
|
export interface RuntimeOverlayStateInput {
|
|
38
62
|
readonly attempts: number;
|
|
63
|
+
/** Producer results captured for this decision; omitted in callers not yet wired to L1. */
|
|
64
|
+
readonly producers?: L1OverlayProducerReadings;
|
|
39
65
|
readonly goalId?: string;
|
|
40
66
|
readonly stopClass?: RunStopClass;
|
|
41
67
|
readonly reviewRepeat?: number;
|
|
@@ -44,10 +70,68 @@ export interface RuntimeOverlayStateInput {
|
|
|
44
70
|
readonly mainSyncConflict?: unknown;
|
|
45
71
|
/** Only a non-empty string is a measurement. */
|
|
46
72
|
readonly authorGrade?: unknown;
|
|
73
|
+
/** Pass resolved producer values, not configuration wishes or fallback guesses. */
|
|
74
|
+
readonly substrate?: unknown;
|
|
75
|
+
/** Derived from readLandingFreeze's validated, expiry-aware result. */
|
|
76
|
+
readonly freeze?: unknown;
|
|
77
|
+
readonly docsOnly?: unknown;
|
|
78
|
+
readonly provider?: unknown;
|
|
79
|
+
readonly quota?: unknown;
|
|
80
|
+
readonly machines?: unknown;
|
|
81
|
+
readonly seats?: unknown;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** Producer outputs supplied at the decision boundary; omission means the producer was not read. */
|
|
85
|
+
export interface L1OverlayProducerReadings {
|
|
86
|
+
readonly runContract?: Pick<RunContract, 'substrate'>;
|
|
87
|
+
readonly landingFreeze?: LandingFreeze | null;
|
|
88
|
+
/** routeGate's documents-only verdict is the known docs-only observation. */
|
|
89
|
+
readonly gateRoute?: { readonly reason: GateRoutingReason };
|
|
90
|
+
readonly activeProvider?: Pick<ActiveProviderInfo, 'provider'>;
|
|
91
|
+
/** Snapshot returned by assessQuotaExhaustion/readQuotaExhausted; only measured usage implies ok/low. */
|
|
92
|
+
readonly quotaAssessment?: { readonly exhausted: boolean | undefined; readonly accountAvailability: {
|
|
93
|
+
readonly currentUsedPercent?: number;
|
|
94
|
+
readonly thresholdPercent?: number;
|
|
95
|
+
} | undefined };
|
|
96
|
+
/** Result of listMachineResources (Nexus live membership), not fleet intent. */
|
|
97
|
+
readonly machineResources?: readonly Pick<ResourceView, 'machine' | 'expired'>[];
|
|
98
|
+
/** Resolved loop modes; do not pass an unreadable config as a default measurement. */
|
|
99
|
+
readonly seatConfig?: NonNullable<UserConfig['loops']>['seat'];
|
|
100
|
+
readonly stewardConfig?: NonNullable<UserConfig['loops']>['steward'];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Derive only observations from named producers. A missing producer never becomes false or zero. */
|
|
104
|
+
export function l1OverlayStateInput(readings: L1OverlayProducerReadings): Omit<RuntimeOverlayStateInput, 'attempts'> {
|
|
105
|
+
const quota = readings.quotaAssessment;
|
|
106
|
+
const currentUsed = quota?.accountAvailability?.currentUsedPercent;
|
|
107
|
+
const threshold = quota?.accountAvailability?.thresholdPercent;
|
|
108
|
+
const seat = readings.seatConfig;
|
|
109
|
+
return {
|
|
110
|
+
...(readings.runContract ? { substrate: readings.runContract.substrate } : {}),
|
|
111
|
+
...(readings.landingFreeze !== undefined ? { freeze: landingFreezeState(readings.landingFreeze) } : {}),
|
|
112
|
+
...(readings.gateRoute ? { docsOnly: readings.gateRoute.reason === 'documents-only' } : {}),
|
|
113
|
+
...(readings.activeProvider ? { provider: readings.activeProvider.provider } : {}),
|
|
114
|
+
...(quota?.exhausted === true ? { quota: 'exhausted' } :
|
|
115
|
+
quota?.exhausted === false && currentUsed !== undefined && threshold !== undefined
|
|
116
|
+
? { quota: currentUsed >= threshold ? 'low' : 'ok' } : {}),
|
|
117
|
+
...(readings.machineResources ? { machines: new Set(readings.machineResources.filter((row) => !row.expired).map((row) => row.machine)).size } : {}),
|
|
118
|
+
...(seat && readings.stewardConfig?.mode === 'live'
|
|
119
|
+
? { seats: seat.mode === 'on' || seat.mode === 'live-safe' ? 'on' : 'steward-only' }
|
|
120
|
+
: {}),
|
|
121
|
+
};
|
|
47
122
|
}
|
|
48
123
|
|
|
49
124
|
/** ⛔ 아는 값만 싣는다 — 모르면 키를 «뺀다». 0·false·빈 문자열을 지어내지 않는다. */
|
|
50
|
-
export function buildRuntimeOverlayState(input: RuntimeOverlayStateInput): Record<string, unknown> {
|
|
125
|
+
export function buildRuntimeOverlayState(input: RuntimeOverlayStateInput): GraphRunState & Record<string, unknown> {
|
|
126
|
+
const produced: Omit<RuntimeOverlayStateInput, 'attempts'> = input.producers === undefined ? {} : l1OverlayStateInput(input.producers);
|
|
127
|
+
// Once producers are supplied, even an omitted reading is unknown; direct legacy inputs cannot override it.
|
|
128
|
+
const substrate = input.producers === undefined ? input.substrate : produced.substrate;
|
|
129
|
+
const freeze = input.producers === undefined ? input.freeze : produced.freeze;
|
|
130
|
+
const docsOnly = input.producers === undefined ? input.docsOnly : produced.docsOnly;
|
|
131
|
+
const provider = input.producers === undefined ? input.provider : produced.provider;
|
|
132
|
+
const quota = input.producers === undefined ? input.quota : produced.quota;
|
|
133
|
+
const machines = input.producers === undefined ? input.machines : produced.machines;
|
|
134
|
+
const seats = input.producers === undefined ? input.seats : produced.seats;
|
|
51
135
|
return {
|
|
52
136
|
attempts: input.attempts,
|
|
53
137
|
...(input.goalId === undefined ? {} : { goal_id: input.goalId }),
|
|
@@ -56,6 +140,13 @@ export function buildRuntimeOverlayState(input: RuntimeOverlayStateInput): Recor
|
|
|
56
140
|
...(typeof input.siblingOverlap === 'boolean' ? { sibling_overlap: input.siblingOverlap } : {}),
|
|
57
141
|
...(typeof input.mainSyncConflict === 'boolean' ? { main_sync_conflict: input.mainSyncConflict } : {}),
|
|
58
142
|
...(typeof input.authorGrade === 'string' && input.authorGrade.length > 0 ? { author_grade: input.authorGrade } : {}),
|
|
143
|
+
...(substrate === 'local' || substrate === 'pod' ? { substrate } : {}),
|
|
144
|
+
...(freeze === 'on' || freeze === 'off' ? { freeze } : {}),
|
|
145
|
+
...(typeof docsOnly === 'boolean' ? { docs_only: docsOnly } : {}),
|
|
146
|
+
...(typeof provider === 'string' && provider.trim().length > 0 ? { provider } : {}),
|
|
147
|
+
...(quota === 'ok' || quota === 'low' || quota === 'exhausted' ? { quota } : {}),
|
|
148
|
+
...(typeof machines === 'number' && Number.isSafeInteger(machines) && machines >= 0 ? { machines } : {}),
|
|
149
|
+
...(seats === 'on' || seats === 'steward-only' ? { seats } : {}),
|
|
59
150
|
};
|
|
60
151
|
}
|
|
61
152
|
|
|
@@ -45,7 +45,8 @@ export async function groundGoalInCodebase(goalText: string, deps: GroundGoalDep
|
|
|
45
45
|
);
|
|
46
46
|
const persistentElapsedMs = performance.now() - persistentStartedAt;
|
|
47
47
|
if (!persistent?.files.length) {
|
|
48
|
-
safeObserve('empty', { cwd: deps.cwd, reason: persistent ? 'no-candidates' : 'failed-or-no-candidates',
|
|
48
|
+
safeObserve('empty', { cwd: deps.cwd, reason: persistent ? 'no-candidates' : 'failed-or-no-candidates',
|
|
49
|
+
persistentStopReason: persistent?.stopReason ?? null, candidates: 0 });
|
|
49
50
|
return '';
|
|
50
51
|
}
|
|
51
52
|
const renderingStartedAt = performance.now();
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
/** 결정론 트리아지 — 실패 서명과 이미 거친 역할만으로 다음 갈래를 고른다. */
|
|
2
2
|
|
|
3
|
+
import { defaultOverlaysDir, loadGraphOverlays, selectOverlays, type GraphOverlaySpec } from './graph-overlay-yaml.js';
|
|
4
|
+
import { GRAPH_SPECS } from './graph-templates.js';
|
|
5
|
+
|
|
3
6
|
export type HealTriageOutcome =
|
|
4
7
|
| 'environment-claimed'
|
|
5
8
|
| 'untestable'
|
|
@@ -271,3 +274,79 @@ export function triageFailure(signature: HealFailureSignature, history?: HealTri
|
|
|
271
274
|
evidence: ['observe-deeper 와 ground-external 을 둘 다 거쳤다', '더 올릴 해상도가 없다'],
|
|
272
275
|
};
|
|
273
276
|
}
|
|
277
|
+
|
|
278
|
+
/** ═══ 슈퍼바이저 고르기(0.2.32 칸 GRAPH-SUPERVISOR-PICK) — «선언된» 오버레이 중에서 고른다 ═══
|
|
279
|
+
*
|
|
280
|
+
* 능력표 ③b: 고르기만 한다. ⛔ 새 그래프 노드를 «짓지 않는다» — 후보를 읽고 선언된 조건을
|
|
281
|
+
* 판정해 overlayId 하나를 고를 뿐, 템플릿을 만들거나 노드를 더하지 않는다.
|
|
282
|
+
*
|
|
283
|
+
* 후보의 실체: `graphs/overlays/`(loadGraphOverlays) 선언 중 `stage: heal` 인 것만.
|
|
284
|
+
* 조건의 값은 코드가 낸다 — 선언의 appliesWhen 을 selectOverlays(선언 조건 판정 기계)로 판정한다.
|
|
285
|
+
* 결정론: 같은 입력·같은 선언이면 언제나 같은 답 — 조건이 맞는 후보 중 «선언 순서가 가장 앞»인 것.
|
|
286
|
+
*/
|
|
287
|
+
|
|
288
|
+
/** 선언된 heal 오버레이 후보를 읽는 자리 — 시험이 갈아 끼운다. */
|
|
289
|
+
export type DeclaredHealOverlayLoader = () => readonly GraphOverlaySpec[];
|
|
290
|
+
|
|
291
|
+
export type SupervisorOverlayPickOutcome =
|
|
292
|
+
| 'picked'
|
|
293
|
+
| 'no-declared-candidate'
|
|
294
|
+
| 'no-applicable-candidate';
|
|
295
|
+
|
|
296
|
+
export interface SupervisorOverlayPickInput {
|
|
297
|
+
/** 선언 조건(appliesWhen) 판정에 쓸 상태 — 예: `{ stop_class: 'pod-died' }`. */
|
|
298
|
+
readonly state: Readonly<Record<string, unknown>>;
|
|
299
|
+
/** 후보를 좁힐 그래프 id — 기본은 활성 self-implement 그래프. */
|
|
300
|
+
readonly graphId?: string;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/** 고르기 결과 — outcome+evidence 계약(triageFailure·classifyReworkCapExhaustion 과 같은 양식). */
|
|
304
|
+
export interface SupervisorOverlayPick {
|
|
305
|
+
readonly outcome: SupervisorOverlayPickOutcome;
|
|
306
|
+
/** outcome='picked' 일 때 고른 선언 오버레이. */
|
|
307
|
+
readonly overlayId?: string;
|
|
308
|
+
readonly evidence: readonly string[];
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/** `graphs/overlays/` 선언에서 `stage: heal` 인 것만 읽는다 — 고르기 후보의 실체. */
|
|
312
|
+
export function loadDeclaredHealOverlays(): readonly GraphOverlaySpec[] {
|
|
313
|
+
return loadGraphOverlays(defaultOverlaysDir()).overlays.filter((spec) => spec.stage === 'heal');
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* 선언된 heal 오버레이 후보 중 하나를 고른다. 조건이 맞는 후보가 여럿이면 선언 순서가
|
|
318
|
+
* 가장 앞인 것을 고른다(결정론). 던지지 않는다 — 못 고르는 이유는 evidence 가 말한다.
|
|
319
|
+
*/
|
|
320
|
+
export function pickSupervisorHealOverlay(
|
|
321
|
+
input: SupervisorOverlayPickInput,
|
|
322
|
+
load: DeclaredHealOverlayLoader = loadDeclaredHealOverlays,
|
|
323
|
+
): SupervisorOverlayPick {
|
|
324
|
+
let declared: readonly GraphOverlaySpec[];
|
|
325
|
+
try {
|
|
326
|
+
declared = load();
|
|
327
|
+
} catch (error) {
|
|
328
|
+
const why = error instanceof Error ? error.message : String(error);
|
|
329
|
+
return { outcome: 'no-declared-candidate', evidence: [`선언을 읽지 못했다: ${why}`] };
|
|
330
|
+
}
|
|
331
|
+
const healOnly = declared.filter((spec) => spec.stage === 'heal');
|
|
332
|
+
if (healOnly.length === 0) {
|
|
333
|
+
return { outcome: 'no-declared-candidate', evidence: ['선언된 heal 오버레이 후보가 없다'] };
|
|
334
|
+
}
|
|
335
|
+
const graphId = input.graphId ?? GRAPH_SPECS['self-implement']?.graphId;
|
|
336
|
+
if (!graphId) {
|
|
337
|
+
return { outcome: 'no-declared-candidate', evidence: ['활성 self-implement 그래프 선언이 없다'] };
|
|
338
|
+
}
|
|
339
|
+
let applied: readonly GraphOverlaySpec[];
|
|
340
|
+
try {
|
|
341
|
+
applied = selectOverlays(healOnly, { graphId, stage: 'heal', state: { ...input.state } }).applied;
|
|
342
|
+
} catch (error) {
|
|
343
|
+
const why = error instanceof Error ? error.message : String(error);
|
|
344
|
+
return { outcome: 'no-applicable-candidate', evidence: [`선언 조건 판정이 실패했다: ${why}`] };
|
|
345
|
+
}
|
|
346
|
+
const applicable = new Set(applied.map((spec) => spec.overlayId));
|
|
347
|
+
const first = healOnly.find((spec) => applicable.has(spec.overlayId));
|
|
348
|
+
if (!first) {
|
|
349
|
+
return { outcome: 'no-applicable-candidate', evidence: [`선언된 heal 후보 ${healOnly.length}개 중 조건이 맞는 것이 없다`] };
|
|
350
|
+
}
|
|
351
|
+
return { outcome: 'picked', overlayId: first.overlayId, evidence: [`선언된 heal 후보 ${healOnly.length}개 중 조건이 맞는 첫 선언: ${first.overlayId}`] };
|
|
352
|
+
}
|
|
@@ -11,6 +11,7 @@ import { releaseGitDiffPaths, releasePathHold, releasePathHoldShouldPost, releas
|
|
|
11
11
|
import { detectTestInterference, failedNamesFromStreams, parseFailureCount, runBunTest, type MeasuredRun } from '../../scripts/detect-test-interference.js';
|
|
12
12
|
import { MAX_INSPECTED_TEST_FILES, runTestInterferenceGate } from '../../scripts/ci-test-interference-gate.js';
|
|
13
13
|
import { pwaGraph, pwaReach } from '../../scripts/ci-pwa-build-gate.js';
|
|
14
|
+
import { changedPathPairs, changedTsFiles, readGitFile, requiredExportFieldsInChanges } from '../../scripts/ci-typecheck-changed.js';
|
|
14
15
|
import { classifyMergeFailure, clipRegateDetail, parseConflictFiles, type HostRegateFailure } from './regate-detail.js';
|
|
15
16
|
import { buildImporterTestIndex, isTestPath } from './importer-test-index.js';
|
|
16
17
|
|
|
@@ -55,6 +56,48 @@ export type HostRegateDeps = {
|
|
|
55
56
|
syncMergedChecklist?: typeof import('../release-loop/merged-pr-checklist.js').syncMergedPrChecklist;
|
|
56
57
|
};
|
|
57
58
|
|
|
59
|
+
/**
|
|
60
|
+
* REGATE-PWA-DEPS-FOR-TSC (#26698 → #27484 must-fix): the typecheck gate requires apps/pwa dependencies for
|
|
61
|
+
* `runsPwa || wholeRepository` — present .ts/.tsx under apps/pwa/ in its own changed set, or any of its
|
|
62
|
+
* whole-repository promotion triggers (필수 export 필드 추가 · exported 심볼 삭제 · exported 함수 매개변수 증가,
|
|
63
|
+
* in ANY changed file). Decide it with the gate's own collectors — changedTsFiles ⊕ changedPathPairs ⊕
|
|
64
|
+
* requiredExportFieldsInChanges — against the candidate worktree and the same TSC_BASE_REF the gate receives,
|
|
65
|
+
* so dependency provision and restoration can never be narrower than the real typecheck scope. Git observation
|
|
66
|
+
* goes through the regate's injectable `command` seam (hermetic tests); changedTsFiles composes whitespace-token
|
|
67
|
+
* command strings, so its shell runner just splits them into (bin, args).
|
|
68
|
+
*/
|
|
69
|
+
export function typecheckGateTouchesPwa(
|
|
70
|
+
worktree: string,
|
|
71
|
+
typecheckBase: string,
|
|
72
|
+
command: NonNullable<HostRegateDeps['command']>,
|
|
73
|
+
): boolean {
|
|
74
|
+
const git = (bin: string, args: readonly string[]): unknown => {
|
|
75
|
+
const r = command(bin, args, worktree);
|
|
76
|
+
if (r.status !== 0) throw Object.assign(new Error((r.stderr || r.stdout || `${bin} exited ${String(r.status)}`).trim()), { status: r.status });
|
|
77
|
+
return r.stdout;
|
|
78
|
+
};
|
|
79
|
+
const changed = changedTsFiles((cmd) => {
|
|
80
|
+
const [bin, ...args] = cmd.split(' ');
|
|
81
|
+
return git(bin, args) as string;
|
|
82
|
+
}, { ...process.env, TSC_BASE_REF: typecheckBase }, worktree);
|
|
83
|
+
// Collection failures make the gate exit(1) before its dependency requirement; an empty changed set makes it
|
|
84
|
+
// pass without running tsc — neither path can demand apps/pwa dependencies.
|
|
85
|
+
if ((changed.failures?.length ?? 0) > 0 || changed.files.size === 0) return false;
|
|
86
|
+
// runsPwa: a present .ts/.tsx under apps/pwa/ in the gate's own changed set.
|
|
87
|
+
if ([...changed.files].some((file) => file.startsWith('apps/pwa/'))) return true;
|
|
88
|
+
const triggers = requiredExportFieldsInChanges(
|
|
89
|
+
changed.files,
|
|
90
|
+
changed.base,
|
|
91
|
+
changedPathPairs(changed.base, git),
|
|
92
|
+
(ref, path) => readGitFile(ref, path, git),
|
|
93
|
+
(file) => readFileSync(join(worktree, file), 'utf8'),
|
|
94
|
+
);
|
|
95
|
+
// A judgement failure makes the gate exit(1) before its dependency requirement, like the collection failures above.
|
|
96
|
+
if (triggers.failure) return false;
|
|
97
|
+
// wholeRepository: any promotion trigger widens the inspection to the whole repository, apps/pwa included.
|
|
98
|
+
return triggers.fields.length > 0 || triggers.removedSymbols.length > 0 || triggers.parameterIncreases.length > 0;
|
|
99
|
+
}
|
|
100
|
+
|
|
58
101
|
const SPAWN_MAX_BUFFER = 256 * 1024 * 1024;
|
|
59
102
|
|
|
60
103
|
const defaultCommand: NonNullable<HostRegateDeps['command']> = (bin, args, cwd, env) => {
|
|
@@ -271,7 +314,10 @@ export async function runHostRegate(input: HostRegateInput, deps: HostRegateDeps
|
|
|
271
314
|
const result = (event: 'passed' | 'failed' | 'unmeasured', step?: string, detail?: string, facts: Omit<HostRegateFailure, 'step' | 'detail'> = {}): HostRegateResult => {
|
|
272
315
|
if (step) failures.push({ step, detail: clipRegateDetail(detail ?? 'unknown'), ...facts });
|
|
273
316
|
log(event, { pr: input.prNumber, files, os: process.platform, ...interferenceNote, ...(step ? { failedStep: step, detail: clipRegateDetail(detail ?? 'unknown'), ...facts } : {}) });
|
|
274
|
-
|
|
317
|
+
// TA-REGATE-UNMEASURED — noMerge(TA 재게이트) 도 status 를 싣는다: draft `pr-head` 거부 같은 «못 잼»을 «실패»와 가르게.
|
|
318
|
+
return { passed: event === 'passed', failures, os: process.platform,
|
|
319
|
+
...(input.verifyOnly || input.noMerge ? { status: event } : {}),
|
|
320
|
+
...(input.verifyOnly && verifiedBase ? { baseCommit: verifiedBase } : {}) };
|
|
275
321
|
};
|
|
276
322
|
const run = (bin: string, args: readonly string[], cwd: string, env?: NodeJS.ProcessEnv): string => {
|
|
277
323
|
const r = command(bin, args, cwd, env);
|
|
@@ -305,6 +351,11 @@ export async function runHostRegate(input: HostRegateInput, deps: HostRegateDeps
|
|
|
305
351
|
let stalePrBase: string | undefined;
|
|
306
352
|
const initialPrBase = baseCommit;
|
|
307
353
|
let buildPwa = false;
|
|
354
|
+
// REGATE-PWA-DEPS-FOR-TSC (#26698 → #27484 must-fix): the typecheck gate picks its own changed set and its own
|
|
355
|
+
// whole-repository promotion triggers — TSC_BASE_REF..HEAD — which can carry apps/pwa files that landed on
|
|
356
|
+
// main after this PR branched, and root-file export changes that widen the inspection to the whole repository.
|
|
357
|
+
// Set in the worktree phase below.
|
|
358
|
+
let typecheckTouchesPwa = false;
|
|
308
359
|
try {
|
|
309
360
|
let fetchedBase = fetchRef(`refs/heads/${baseRefName}`, 'base');
|
|
310
361
|
if (input.verifyOnly) { baseCommit = fetchedBase; verifiedBase = fetchedBase; }
|
|
@@ -406,7 +457,14 @@ export async function runHostRegate(input: HostRegateInput, deps: HostRegateDeps
|
|
|
406
457
|
const provide = (dir: string, marker: string): void => provideCheckoutDependencies(candidate, input.repoRoot, dir, marker, (cwd) => { run('bun', ['install', '--frozen-lockfile'], cwd); });
|
|
407
458
|
provide('', 'typescript');
|
|
408
459
|
buildPwa = needsPwaBuild(files, worktree);
|
|
409
|
-
|
|
460
|
+
// REGATE-PWA-DEPS-FOR-TSC (#26698 → #27484 must-fix): provide('apps/pwa') must also fire when the typecheck
|
|
461
|
+
// gate's own scope — the same TSC_BASE_REF..HEAD it receives below — holds present .ts/.tsx files under
|
|
462
|
+
// apps/pwa/ OR any of its whole-repository promotion triggers (필수 export 필드 추가 · exported 심볼 삭제 ·
|
|
463
|
+
// exported 함수 매개변수 증가, in ANY changed file), even when buildPwa never turns on: without app deps
|
|
464
|
+
// the gate fails such runs as «의존성 없음» for environment reasons, not code defects.
|
|
465
|
+
const typecheckBase = input.verifyOnly ? baseCommit : base;
|
|
466
|
+
typecheckTouchesPwa = typecheckGateTouchesPwa(worktree, typecheckBase, command);
|
|
467
|
+
if ((buildPwa || typecheckTouchesPwa) && existsSync(join(worktree, 'apps/pwa'))) provide('apps/pwa', 'next');
|
|
410
468
|
} catch (e) { return result('unmeasured', 'worktree', String(e)); }
|
|
411
469
|
try {
|
|
412
470
|
const interferenceOptions = { neighbors: !input.verifyOnly };
|
|
@@ -425,6 +483,20 @@ export async function runHostRegate(input: HostRegateInput, deps: HostRegateDeps
|
|
|
425
483
|
(bin, args, dir) => command(bin, args, dir));
|
|
426
484
|
if (!exposure.passed) return result('failed', 'expose', exposure.log);
|
|
427
485
|
}
|
|
486
|
+
// The checked checkout is shared with interference/exposure gates. Verify dependencies at the
|
|
487
|
+
// typecheck boundary as well: a missing PWA link here made #27414 fail as an unmeasured host regate.
|
|
488
|
+
if ((buildPwa || typecheckTouchesPwa) && !existsSync(join(worktree, 'apps/pwa/node_modules'))) {
|
|
489
|
+
let failure: string | null = null;
|
|
490
|
+
try {
|
|
491
|
+
if (existsSync(join(worktree, 'apps/pwa'))) {
|
|
492
|
+
provideCheckoutDependencies(worktree, input.repoRoot, 'apps/pwa', 'next', (cwd) => { run('bun', ['install', '--frozen-lockfile'], cwd); });
|
|
493
|
+
} else failure = 'apps/pwa absent before typecheck';
|
|
494
|
+
} catch (e) { failure = String(e); }
|
|
495
|
+
const ready = existsSync(join(worktree, 'apps/pwa/node_modules'));
|
|
496
|
+
if (!ready && !failure) failure = 'apps/pwa/node_modules absent after provision before typecheck';
|
|
497
|
+
try { debug.log('harness.host-regate', 'pwa-dependencies-before-typecheck', { pr: input.prNumber, restored: ready, failure }); } catch { /* observation must not block regate */ }
|
|
498
|
+
if (!ready) return result('unmeasured', 'dependencies', failure!);
|
|
499
|
+
}
|
|
428
500
|
// verifyOnly: 통합 후보는 «지금 main 끝»(baseCommit)에 얹은 것이다 — 옛 merge-base 로 비교하면 그사이 main 착지분
|
|
429
501
|
// 수백 파일이 «이 PR 의 변경»으로 잡혀 저장소 전체 검사로 승격된다(2026-09-28 #21239 실측: 456파일 · PWA 636건).
|
|
430
502
|
try { run('bun', ['scripts/ci-typecheck-changed.ts'], worktree, { ...process.env, TSC_BASE_REF: input.verifyOnly ? baseCommit : base }); }
|
|
@@ -86,7 +86,6 @@ import { LogStore, logsDbPath, type LogQuery, type LogStoreRow } from '../mss/lo
|
|
|
86
86
|
import { refreshCodexQuotaSignals } from '../budget/codex-quota-refresh.js';
|
|
87
87
|
import { inspectActiveProvider, type ActiveProviderInfo } from '../provider-summary.js';
|
|
88
88
|
import { recordHitlEvent } from '../self-dev/hitl-log.js';
|
|
89
|
-
import { parseAskProseTitle } from '../self-dev/launch-preflight.js';
|
|
90
89
|
import { classifyReviewProviderFailure } from '../self-dev/review-provider-fallback.js';
|
|
91
90
|
import { classifyError } from '../session-runtime/retry-policy.js';
|
|
92
91
|
import { decomposeSelfDevGoal, inferHotPaths, type SelfDevDecomposeOptions } from '../self-dev/decompose.js';
|
|
@@ -154,6 +153,8 @@ import { plannedSelfImplBranch } from '../harness/worktree-branch-prefix.js';
|
|
|
154
153
|
export { slugifyFeature } from '../harness/worktree-branch-prefix.js';
|
|
155
154
|
import { AUTO_REVIEW_LABEL, resolveAutoReviewLabels } from './context-capsule.js';
|
|
156
155
|
import { GOAL_TYPES, extractVerbatimOriginalAsk, leadingGoalMetadata, parseAskFile, parseGoalType, type GoalType } from './goal-author.js';
|
|
156
|
+
import { goalDocumentForReleaseNote, goalChecklistIds, prTitle } from './pr-title.js';
|
|
157
|
+
export { goalChecklistIds, prTitle } from './pr-title.js';
|
|
157
158
|
import { renderRoundSummaryCard, type RoundSummaryEntry } from './round-summary-card.js';
|
|
158
159
|
import { computeFlexSignals } from './flex-signals.js';
|
|
159
160
|
import { resolveAdaptiveMaxReworkDecision, resolveEscalateTier, resolveEscalateTarget, buildReworkFeature, failIndicator, isRepeatedUnverifiedOnlyGateFailure, unverifiedRepeatKey, appendReworkHistory, truncateReworkHistoryByItem, applyReworkBudgetDecision, parseContractConflictRelaxation, parseReworkBudgetDecision, resolveReworkBudgetCarry, stripReworkBudgetHeaders, countConsecutiveMustFixIds, mergeReworkNotes, resolveReworkKind, type ReworkPlanRevision, type ReworkNotePart } from './rework-policy.js';
|
|
@@ -862,8 +863,15 @@ export function isHarnessTempArtifact(file: string): boolean {
|
|
|
862
863
|
return /(^|\/)\.elanous-typecheck-scope-[^/]+\.json$/.test(file);
|
|
863
864
|
}
|
|
864
865
|
|
|
866
|
+
/** Only this run's GOAL document is a harness artifact; unrelated GOAL edits remain in scope accounting. */
|
|
867
|
+
export function isHarnessGeneratedGoal(file: string, goalDocumentPath?: string): boolean {
|
|
868
|
+
const ownGoal = goalDocumentPath?.replace(/\\/g, '/').match(/(?:^|\/)(docs\/goals\/GOAL-[^/]+\.(?:md|txt))$/)?.[1];
|
|
869
|
+
return !!ownGoal && normalizeDeclaredScopePath(file) === ownGoal;
|
|
870
|
+
}
|
|
871
|
+
|
|
865
872
|
export function detectDeclaredScopeDiff(input: {
|
|
866
873
|
goalDocument?: string | null;
|
|
874
|
+
goalDocumentPath?: string;
|
|
867
875
|
changedFiles?: readonly string[] | null;
|
|
868
876
|
nameCap?: number;
|
|
869
877
|
}): DeclaredScopeDiff {
|
|
@@ -879,7 +887,8 @@ export function detectDeclaredScopeDiff(input: {
|
|
|
879
887
|
return { status: 'unknown-changed-files', outsideCount: null, outsideNames: [], nameCapReached: false, unmadeCount: null, unmadeNames: [], declaredCount: null };
|
|
880
888
|
}
|
|
881
889
|
const outside = [...new Set(input.changedFiles.map(normalizeDeclaredScopePath).filter(Boolean))]
|
|
882
|
-
.filter((file) => !
|
|
890
|
+
.filter((file) => !isHarnessGeneratedGoal(file, input.goalDocumentPath)
|
|
891
|
+
&& !declared.paths.some((target) => changedFileIsInsideDeclaredTarget(file, target)));
|
|
883
892
|
// ⭐ 「선언했는데 «안 채워진»」 것 — `outside` 의 반대 방향이다.
|
|
884
893
|
const changed = [...new Set(input.changedFiles.map(normalizeDeclaredScopePath).filter(Boolean))];
|
|
885
894
|
const unmade = declared.paths.filter((target) => !changed.some((file) => changedFileIsInsideDeclaredTarget(file, target)));
|
|
@@ -914,6 +923,7 @@ function observeDeclaredScopeDiff(
|
|
|
914
923
|
}
|
|
915
924
|
const diff = detectDeclaredScopeDiff({
|
|
916
925
|
goalDocument,
|
|
926
|
+
goalDocumentPath: input.goalFile,
|
|
917
927
|
changedFiles: input.changedFiles,
|
|
918
928
|
nameCap: input.nameCap,
|
|
919
929
|
});
|
|
@@ -2357,120 +2367,6 @@ function addedDiffEvidence(diff: string): { text: string; truncated: boolean } {
|
|
|
2357
2367
|
};
|
|
2358
2368
|
}
|
|
2359
2369
|
|
|
2360
|
-
function isRepositoryRelativePath(candidate: string): boolean {
|
|
2361
|
-
if (/^(?:[A-Za-z][A-Za-z0-9+.-]*:\/\/|[\\/]|[A-Za-z]:[\\/])/.test(candidate)) return false;
|
|
2362
|
-
const parts = candidate.split('/');
|
|
2363
|
-
return parts.length > 1
|
|
2364
|
-
&& parts.every((part) => part !== '.' && part !== '..' && /^[A-Za-z0-9_.-]+$/.test(part))
|
|
2365
|
-
&& /\.[A-Za-z0-9]+$/.test(parts.at(-1)!);
|
|
2366
|
-
}
|
|
2367
|
-
|
|
2368
|
-
function extractRepositoryRelativePaths(first: string): string[] {
|
|
2369
|
-
const candidates = first.split(/[\s,;()[\]{}"'`<>]+/).filter(Boolean);
|
|
2370
|
-
return candidates.filter(isRepositoryRelativePath);
|
|
2371
|
-
}
|
|
2372
|
-
|
|
2373
|
-
function parseAskMarkdownH1(feature: string): string | undefined {
|
|
2374
|
-
// ⛔ 펜스는 «문자»만이 아니라 «길이»로 닫힌다(CommonMark): 닫는 줄은 같은 문자 · 여는 줄 이상의 길이 · 뒤에 정보 문자열 없음.
|
|
2375
|
-
// 🩸 2026-09-23(#20050 착지 직후 실물): GOAL 문서가 원래 ask 를 ```` 네 개 펜스로 싸고, 그 안에 ``` 블록이 있다.
|
|
2376
|
-
// 문자만 보면 안쪽 ``` 이 바깥 ```` 를 «닫아» 안팎이 뒤집히고 ```bash 안의 `# 주석` 이 다시 제목이 됐다.
|
|
2377
|
-
let fence: { marker: '`' | '~'; run: number } | undefined;
|
|
2378
|
-
for (const line of feature.split(/\r?\n/)) {
|
|
2379
|
-
const trimmed = line.trim();
|
|
2380
|
-
const marker = trimmed[0] === '`' || trimmed[0] === '~' ? trimmed[0] : undefined;
|
|
2381
|
-
let run = 0;
|
|
2382
|
-
if (marker) {
|
|
2383
|
-
while (run < trimmed.length && trimmed[run] === marker) run += 1;
|
|
2384
|
-
}
|
|
2385
|
-
if (marker && run >= 3) {
|
|
2386
|
-
if (!fence) {
|
|
2387
|
-
fence = { marker, run };
|
|
2388
|
-
continue;
|
|
2389
|
-
}
|
|
2390
|
-
if (fence.marker === marker && run >= fence.run && trimmed.slice(run).trim() === '') {
|
|
2391
|
-
fence = undefined;
|
|
2392
|
-
continue;
|
|
2393
|
-
}
|
|
2394
|
-
}
|
|
2395
|
-
if (fence) continue;
|
|
2396
|
-
if (line[0] !== '#' || line[1] === '#') continue;
|
|
2397
|
-
if (line.length < 2 || !/\s/.test(line[1]!)) continue;
|
|
2398
|
-
const text = line.slice(1).trim();
|
|
2399
|
-
if (text) return text;
|
|
2400
|
-
}
|
|
2401
|
-
return undefined;
|
|
2402
|
-
}
|
|
2403
|
-
|
|
2404
|
-
function prTitleCodePointCount(text: string): number {
|
|
2405
|
-
return Array.from(text).length;
|
|
2406
|
-
}
|
|
2407
|
-
|
|
2408
|
-
function truncatePrTitle(text: string): string {
|
|
2409
|
-
const points = Array.from(text);
|
|
2410
|
-
return points.length <= 72 ? text : `${points.slice(0, 69).join('')}...`;
|
|
2411
|
-
}
|
|
2412
|
-
|
|
2413
|
-
export function goalChecklistIds(feature: string, goalFile?: string): string[] {
|
|
2414
|
-
const document = goalFile ? goalDocumentForReleaseNote(goalFile) : feature;
|
|
2415
|
-
const declaration = document.split(/\r?\n/).find((line) => line.startsWith('- 칸 id: '));
|
|
2416
|
-
const declared = declaration?.slice('- 칸 id: '.length).trim();
|
|
2417
|
-
if (declared && declared !== 'not declared') {
|
|
2418
|
-
return [...new Set(declared.split(' · ').map((id) => id.trim()).filter(Boolean))];
|
|
2419
|
-
}
|
|
2420
|
-
const firstLine = feature.split(/\r?\n/, 1)[0] ?? '';
|
|
2421
|
-
return [...new Set(Array.from(firstLine.matchAll(/\b[A-Z][A-Z0-9]+-[A-Z0-9]+\b/g), (match) => match[0]))];
|
|
2422
|
-
}
|
|
2423
|
-
|
|
2424
|
-
function prTitleWithoutChecklistId(feature: string): string {
|
|
2425
|
-
const proseTitle = parseAskProseTitle(feature);
|
|
2426
|
-
if (proseTitle) return truncatePrTitle(proseTitle);
|
|
2427
|
-
|
|
2428
|
-
const headingTitle = parseAskMarkdownH1(feature);
|
|
2429
|
-
if (headingTitle) return truncatePrTitle(headingTitle);
|
|
2430
|
-
|
|
2431
|
-
// ⛔ GOAL 문서는 원래 ask 를 `Original ask (verbatim, unmodified):` 아래 ```` 펜스로 싣는다 — 그 안은 «코드»가 아니라 인용된 마크다운이다.
|
|
2432
|
-
// 🩸 2026-09-23: #20051 이 펜스를 길이로 닫게 고치자 그 인용 블록 안의 H1 까지 «건너뛰어»,
|
|
2433
|
-
// 첫 줄이 `대상 경로:` 인 GOAL 문서 대부분이 경로 요약 제목으로 떨어졌다(실물: #20055 `src/self-implement: gate-baseline.ts, …`).
|
|
2434
|
-
// ⇒ 인용된 ask 를 꺼내 그 «안»에서 같은 규칙(제목: 줄 → 펜스 밖 H1)으로 한 번 더 찾는다.
|
|
2435
|
-
// ⚠️ 정보 문자열이 붙은 펜스(```bash 등)로 싸였으면 그 안은 «코드»다 — 인용된 마크다운으로 보지 않는다.
|
|
2436
|
-
const verbatim = extractVerbatimOriginalAsk(feature);
|
|
2437
|
-
const opener = verbatim?.range ? feature.slice(0, verbatim.range.start).split(/\r?\n/).filter((line, i, all) => i === all.length - 2)[0] ?? '' : '';
|
|
2438
|
-
const verbatimAsk = verbatim && /^\s*(`{3,}|~{3,})\s*$/.test(opener) ? verbatim.ask : undefined;
|
|
2439
|
-
if (verbatimAsk) {
|
|
2440
|
-
const askTitle = parseAskProseTitle(verbatimAsk) ?? parseAskMarkdownH1(verbatimAsk);
|
|
2441
|
-
if (askTitle) return truncatePrTitle(askTitle);
|
|
2442
|
-
}
|
|
2443
|
-
|
|
2444
|
-
const first = feature.split('\n')[0]!.trim();
|
|
2445
|
-
const paths = extractRepositoryRelativePaths(first);
|
|
2446
|
-
if (!paths.length) return truncatePrTitle(first);
|
|
2447
|
-
|
|
2448
|
-
const pathParts = paths.map((path) => path.split('/'));
|
|
2449
|
-
const commonParts: string[] = [];
|
|
2450
|
-
for (let index = 0; index < pathParts[0]!.length - 1; index++) {
|
|
2451
|
-
const part = pathParts[0]![index]!;
|
|
2452
|
-
if (!pathParts.every((parts) => parts[index] === part)) break;
|
|
2453
|
-
commonParts.push(part);
|
|
2454
|
-
}
|
|
2455
|
-
const fileNames = pathParts.map((parts) => parts.at(-1)!);
|
|
2456
|
-
const directoryPrefix = commonParts.length ? `${commonParts.join('/')}: ` : '';
|
|
2457
|
-
const titlePrefix = prTitleCodePointCount(directoryPrefix) + prTitleCodePointCount(fileNames[0]!) <= 72 ? directoryPrefix : '';
|
|
2458
|
-
const title = fileNames.reduce((result, fileName) => {
|
|
2459
|
-
const next = result ? `${result}, ${fileName}` : fileName;
|
|
2460
|
-
return prTitleCodePointCount(titlePrefix) + prTitleCodePointCount(next) <= 72 ? next : result;
|
|
2461
|
-
}, '');
|
|
2462
|
-
if (title) return `${titlePrefix}${title}`;
|
|
2463
|
-
const firstFileName = fileNames[0]!;
|
|
2464
|
-
return truncatePrTitle(firstFileName);
|
|
2465
|
-
}
|
|
2466
|
-
|
|
2467
|
-
export function prTitle(feature: string, goalFile?: string): string {
|
|
2468
|
-
const title = prTitleWithoutChecklistId(feature);
|
|
2469
|
-
const id = goalChecklistIds(feature, goalFile)[0];
|
|
2470
|
-
if (!id) return title;
|
|
2471
|
-
return truncatePrTitle(title.startsWith(`${id}: `) ? title : `${id}: ${title}`);
|
|
2472
|
-
}
|
|
2473
|
-
|
|
2474
2370
|
const BLOCKED_DRAFT_PR_HUMAN_JUDGMENT_ANCHOR = '## 사람 판단 필요';
|
|
2475
2371
|
|
|
2476
2372
|
/** 사람이 읽는 중단 사유 상한. 관측 `reason.slice(0, 240)` 과 같은 길이라 표시가 앞부분을 버리지 않는다. */
|
|
@@ -2683,12 +2579,6 @@ export class MergedReleaseNoteWriteError extends Error {
|
|
|
2683
2579
|
}
|
|
2684
2580
|
}
|
|
2685
2581
|
|
|
2686
|
-
function goalDocumentForReleaseNote(goalFile?: string): string {
|
|
2687
|
-
if (!goalFile) return '';
|
|
2688
|
-
try { return readFileSync(goalFile, 'utf8'); }
|
|
2689
|
-
catch { return ''; }
|
|
2690
|
-
}
|
|
2691
|
-
|
|
2692
2582
|
function shardReleaseNote(feature: string): ReleaseNoteSection | undefined {
|
|
2693
2583
|
const matches = [...feature.matchAll(/^## Shard identity\r?\n([^\r\n]+)/gm)];
|
|
2694
2584
|
const identity = matches.at(-1)?.[1];
|
|
@@ -7261,7 +7151,8 @@ async function runSelfImplementInner(
|
|
|
7261
7151
|
try { goalDocument = readFileSync(opts.goalFile, 'utf8'); } catch { /* unknown scope */ }
|
|
7262
7152
|
// 🩸 10-09: 범위 타입검사 임시 tsconfig(.elanous-typecheck-scope-*.json · scoped-typecheck-config.ts)가 옛 가지에 커밋된 뒤 지워지면
|
|
7263
7153
|
// «추적 파일 삭제» 라 impact=critical → 결정 카드가 «irreversible» 로 대표에게 갔다(D-20·35·43·80). 하니스 임시물은 범위 판정 밖이다.
|
|
7264
|
-
const scope = detectDeclaredScopeDiff({ goalDocument,
|
|
7154
|
+
const scope = detectDeclaredScopeDiff({ goalDocument, goalDocumentPath: opts.goalFile,
|
|
7155
|
+
changedFiles: gateRouteFiles?.filter(file => !harnessSeededPaths.includes(file) && !isHarnessTempArtifact(file)), nameCap: gateRouteFiles?.length });
|
|
7265
7156
|
// SCOPE-HELD-DELIVER — no declared target means the declaration was unreadable (e.g. paths listed with spaces), not
|
|
7266
7157
|
// that every edit is outside it: treat it like an unknown declaration and go on to the gate.
|
|
7267
7158
|
if (scope.status === 'known' && scope.declaredCount === 0 && (scope.outsideCount ?? 0) > 0) {
|