elanous 0.2.36 → 0.2.38
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/{uC-N0emedeNOFuaBQFv-I → RrjXTwz-urRAbChP1bX02}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{9250-072df22eaadaa6b5.js → 1026-44010f405704050c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1118.a8a74ea29aac3e46.js +27 -0
- package/apps/pwa/out/_next/static/chunks/1204-2aa830479adf80f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1341-43b7d2dc77d45c9d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1440-c3ea8882badfd9bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4304.e9b2512834a9e23e.js → 1632.7d87f998e714bede.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1698-9c11cbf97f13717e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1770-3b1fc92253ef9f2f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1923-5c1695332240246a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1938.0e6c60ee91c4d7f5.js +148 -0
- package/apps/pwa/out/_next/static/chunks/{7784.1f0ac4a16d190cf4.js → 2104.70e086d5174a4736.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/213-20675f20673ba22a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6566.926a1d1b7c911442.js → 214.186a430da28338f1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2277.3bd4c0ac7f1b5996.js +93 -0
- package/apps/pwa/out/_next/static/chunks/240.e09f433f71c78ff4.js +104 -0
- package/apps/pwa/out/_next/static/chunks/{5711.957b095705c12560.js → 2415.738b777642a02233.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2417.02151393605a7cd0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2463.cd2641a76daaa9ff.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2576.b9e9c629c4b84c52.js +1 -0
- package/apps/pwa/out/_next/static/chunks/265-c021de53f0865bd9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2998-b1cc13956cd6a6e7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2e4782d3.ba2f0ab2b63a53e7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4286.b70c4520306817e8.js → 3086.fb14b60ce98b53d3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3148-98efd4869d660a87.js → 3124-561f7f037943cde2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3130.626b54382b4dc379.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3221-1bb3f99a55088613.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3280.24edb1ffd03a7f3f.js +24 -0
- package/apps/pwa/out/_next/static/chunks/3288-eb3c22a1cbf2ae68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3727.7949ccaacaa71242.js → 3291.f6c1005387d514bd.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/33.ef99e8374f96c6c4.js +36 -0
- package/apps/pwa/out/_next/static/chunks/3341-f09b9efbd7a82f70.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3389.012c70767a872f9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3410-d7c0f14b329d6fda.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3421.c87d6313a7d670f7.js +287 -0
- package/apps/pwa/out/_next/static/chunks/3422-83a3953f9bd67e26.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8904.7d51af2dc033965c.js → 3528.e4b8ab70d339f965.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3587-002e24e368c515a9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3644.f12a7d821ab940af.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3660.d7516588e2d875c3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3695.b82e2610f4cd4ea9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3858.ca1f5bc0f577eac9.js +94 -0
- package/apps/pwa/out/_next/static/chunks/3959-e6ac4a139d9d4bcc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3f0de3de-2340c532c00395db.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4032.53f62176514ec0ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3031-85328a92fcce4da6.js → 4199-f7c6eb40cd0322f8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4204-ef8484cbecd5d62f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4259-163129ca79913c4b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/428-eaa77df3d0c85969.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4432-97e400ffa1e161f5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/449-aa427cf2cbb75f50.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4491-39a0fd32bbaf3840.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4588.b7cf06d382953979.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4690.70ec8060825366ab.js +32 -0
- package/apps/pwa/out/_next/static/chunks/4804.6012b5cd33c22792.js +90 -0
- package/apps/pwa/out/_next/static/chunks/4881.e4d22d730e3b9df5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4937.ce2e340dc29cad3e.js +79 -0
- package/apps/pwa/out/_next/static/chunks/5-bb1c08d84bd71df3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5005.de98df23b37cdf3c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5035.dc64a89cad5573cc.js +74 -0
- package/apps/pwa/out/_next/static/chunks/5041-5aada92ca215ffdd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{528.38ce20ef8aa251ff.js → 5203.51e5d8b5f1dcfe53.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/5207.1a224035455790fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5255-1b60d50eabe9f057.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5269.d0436ee6d773382a.js +286 -0
- package/apps/pwa/out/_next/static/chunks/5300.677c97e0393742e6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2683.c9773a0c589b031b.js → 5307.d7328020227880c2.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/5309.3367c4d50f52b489.js +1 -0
- package/apps/pwa/out/_next/static/chunks/552-689827d49780fa00.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5539.34cc9d60622cb69b.js +8 -0
- package/apps/pwa/out/_next/static/chunks/5568.218dea0c00ca2ec7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{552.b7d061ad91eeac51.js → 5638.107314dc479e2f37.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/5645.b7e3b055455a04ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5662.18cc0f30353cbd96.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5671.da24fc9dc5e98325.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5b141171.324c40fd49cb6821.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6142.913b44e260a3f925.js +64 -0
- package/apps/pwa/out/_next/static/chunks/6175-d4621f6a10b0cfab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6290.3eb53a20746b72ce.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6415-9307f3eafa90837f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6925.562d532110879886.js → 6493.27ad77de7aac7966.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6579-3de35d00aacd71b5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/680-2f324c4e039a5b67.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6845-331b3c7481da3ba3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7000.28157393caaf5343.js +62 -0
- package/apps/pwa/out/_next/static/chunks/{275-02ea4c2a33980422.js → 7161-8f22db3ec5ed005e.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/7311-60a7ea80d23c7521.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7401.525d0a12f7d02c06.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7438.c2cf72b66dca6aa4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3136.30aaaa5fa03662a3.js → 7488.966b116789f3d41a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{4116.a84a92a2492c080e.js → 7524.ce973525d30b3d52.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7573.2376e13c9c21f1f8.js +77 -0
- package/apps/pwa/out/_next/static/chunks/7577.ea6e9ac72e035520.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3324.a09703033abcbd2f.js → 7628.6b16863ac3972333.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7657.8d1fb3d2f7ebe273.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7903-1435d5d2f0dd7807.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3410.7f9af5ab77cbe65f.js → 7954.4f7a8832663ee979.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7978-30a91192c5dbe3c2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{771.c3cdb6c1f7f47c02.js → 8019.21ca554a821dad01.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/8025-8795821525cf1a07.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8191.3674a00f0b565c23.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8217-604955d8885c5ef2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8298-eed6f5f2585a63f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4615.8525eb0add35eba6.js → 8487.291666583bebe640.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8509.3a54d4e61893d7cb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8758.ac421f726a189125.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6943.c6b24124853a47b2.js → 8879.ac06755bcf3e44a1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/891.d6c723a51a067b36.js +149 -0
- package/apps/pwa/out/_next/static/chunks/{575.d929793a53f27c4b.js → 8911.bf5e712acb25fb6c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9f31e478.fefcbcd3c388ebc5.js → 8994d93e.33ba491f95345fc2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{da5ecc5c-b005ad8cac737d57.js → 89d6c04f-6b8ab341748e468a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{599.c39c571b6733f2a2.js → 9223.cbcc88e0e9950426.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/9299.24e2a7d9b6d1f91b.js +226 -0
- package/apps/pwa/out/_next/static/chunks/9317.6a9869039c231bb3.js +24 -0
- package/apps/pwa/out/_next/static/chunks/9383.e4755f275b3c11ff.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8037.e254fd797aa224d1.js → 9581.da63ddf41acfad46.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9715.8c5529a0a5c41a36.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9817.3009d65f0889ef1f.js +2 -0
- package/apps/pwa/out/_next/static/chunks/{ceba0382.650712b56b85b582.js → 9fe1b809.738da85c8b17e3fb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-76873dd80da4f715.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-ed32b6ec5dea8f23.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-fdd40e15babf3d25.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-384efc78e85e400b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-866aac5ff226a7f3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-d91809c5aeed319a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-128f3522f89a81ab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-595961abf3b43ad1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-f41dccb76d8c0263.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-a3205c2e28b7d0d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-c39a80277814a3f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-1ab3f98194513195.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-a5246f7e254d77d0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-0f92287bdb81217d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-5a37131ff63793ef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-76873dd80da4f715.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-ac4bd14bb2348bfd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-c348a3959c5b5fc6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-2addd81c0d3e2906.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-da6b765f58a3eefb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-0661e40f8780c32c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-b89af1b1c8e4875b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-da8aeb82ba751cdb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-cc71317b239439db.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-bde7fc1d64ffe369.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-e2797214f713fa58.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-2a35bcda70defaf6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-3af03deedde45032.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-d1d1210f99f620ae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-46d1b5500885861d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/{page-e7abc34a48a6f71e.js → page-291ab19fe2acb173.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/page-7f569e533ddeecba.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-990129c9fee46d8f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-7737f785ebb1cdaf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9f3c73a4f7ffd2f8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-03be7fb347f01058.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-96b0280625e4df2b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-56855545049eb56d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-76873dd80da4f715.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-79a909c9981f0338.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-a9d9a3e66459c1e0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c383cbf2013f7069.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f57c6a2e54dbdca4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/{page-c15958835534404b.js → page-6b140f77593576eb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-6b767ae2d9d0adfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-116d6198d5da0e3d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-b9c9b778c7501370.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-a6c78392ab8f6335.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-455183deb4ed0cfe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-6a63e99526bd63d0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-31c22caafe788c08.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3a3d9966.cc4d4585a2708e7c.js → b7459770.6539b11860eb8a9c.js} +7 -7
- package/apps/pwa/out/_next/static/chunks/{053a429e.9a63436527cc751c.js → b7478fef.5917716286213fcc.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/bb6987f9.3647e1a23b0e3217.js +122 -0
- package/apps/pwa/out/_next/static/chunks/{2812ca6a.3b9f4a7a08885744.js → de8b930d.d94c0f42acf807fc.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{873d6c12.09bd499f57171543.js → eaad0cba.771200940c529df7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/framework-4b12a946f352cee2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-941155250ed2644b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-f8b6765abed6d149.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-78432194c85388f9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-cdf7390829512b1b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-d5f0964a9c2e92d2.js +1 -0
- package/apps/pwa/out/_next/static/css/{b5d88eba78a3d7bf.css → be9019f696217521.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/graphs/drafts/recipes.yaml +27 -7
- package/graphs/release/recipes.yaml +9 -0
- package/graphs/release/release-loop.yaml +26 -18
- package/graphs/work/draft-close.yaml +54 -0
- package/graphs/work/green-close.yaml +37 -0
- package/graphs/work/recipes.yaml +46 -1
- package/graphs/work/run-research.yaml +35 -0
- package/package.json +1 -1
- package/scripts/__fixtures__/authoring-paths-10x3.json +32 -0
- package/scripts/ask-op-inbox-once.ts +17 -0
- package/scripts/boundary-proof-mapping-audit.ts +88 -0
- package/scripts/brand/check.ts +13 -4
- package/scripts/codex-fallback-live-probe.ts +17 -15
- package/scripts/fleet/node-setup.sh +32 -2
- package/scripts/fleet/run-light-worker.sh +9 -0
- package/scripts/gate-0226-accepted-remaining-90.txt +91 -0
- package/scripts/gate-0226-failure-census.ts +546 -0
- package/scripts/goals/authoring-metrics.ts +258 -0
- package/scripts/graph-units/draft-close-node.ts +222 -0
- package/scripts/hook-order-sweep.ts +7 -4
- package/scripts/intake-collect-telegram-saved-stage.ts +48 -0
- package/scripts/land-global-checks.ts +69 -1
- package/scripts/measure-nl-routing-corpus.ts +207 -2
- package/scripts/provision-export-redactions.ts +15 -0
- package/scripts/public-copy-lint.ts +122 -0
- package/scripts/public-export.ts +69 -2
- package/scripts/ratchets/next-tui-entry-budget.ts +124 -0
- package/scripts/ratchets/train-side-invariants.sh +7 -1
- package/scripts/release-loop/cut-branch.ts +61 -12
- package/scripts/release-loop/docs-node.ts +140 -0
- package/scripts/release-loop/gate-closure.ts +48 -0
- package/scripts/release-loop/gate-diff.ts +2 -1
- package/scripts/release-loop/gate-node.ts +161 -25
- package/scripts/release-loop/gate-partial.ts +82 -3
- package/scripts/release-loop/gate-prewarm-plan.ts +35 -0
- package/scripts/release-loop/gate-radius-live.ts +4 -2
- package/scripts/release-loop/known-issues-node.ts +6 -4
- package/scripts/release-loop/notes-repair.ts +216 -0
- package/scripts/release-loop/prepare-node.ts +61 -5
- package/scripts/release-loop/resume-cap.ts +2 -1
- package/scripts/release-loop/resume-release.ts +406 -7
- package/scripts/release-loop/resume-test-traffic.ts +10 -0
- package/scripts/release-loop/resume.ts +13 -5
- package/scripts/release-loop/traffic-node.ts +12 -4
- package/scripts/release-loop/traffic-transition.ts +53 -13
- package/scripts/release-loop/version-node.ts +109 -15
- package/scripts/train/green-leg.ts +176 -0
- package/scripts/tui-continue-real-evidence.ts +47 -0
- package/scripts/ux-sim.ts +1 -1
- package/scripts/video-pipeline.ts +2 -2
- package/src/acp/client.ts +31 -5
- package/src/acp/core-turn-bridge.ts +12 -1
- package/src/acp/stderr-summary.ts +49 -0
- package/src/agent/monad-agent-turn.ts +1 -0
- package/src/agent/run-context.ts +1 -1
- package/src/agent/task-notification.ts +3 -1
- package/src/agent/terminal-surface.ts +217 -0
- package/src/agent-substrate/pr-reviewer.ts +11 -3
- package/src/agent-substrate/review-observation.ts +10 -0
- package/src/agent-substrate/self-review-cli.ts +537 -57
- package/src/auto-research/question-ladder-contract.ts +137 -0
- package/src/auto-research/research-turn.ts +134 -0
- package/src/autopilot/discovery/doc-lint.ts +1 -1
- package/src/autopilot/lineage/sources.ts +1 -1
- package/src/autopilot/pr-manager.ts +64 -13
- package/src/boot/daemon-runtime.ts +35 -3
- package/src/boot/daemon-tools/pty-shell.ts +2 -1
- package/src/bots/screen-probe.ts +1 -1
- package/src/budget/run-usage-rollup.ts +12 -7
- package/src/budget/unified-usage.ts +20 -0
- package/src/capture/tui-self-report.ts +42 -5
- package/src/chat/index.ts +1 -0
- package/src/chat/tool-render/dispatch.ts +8 -1
- package/src/cli/autopilot-cli.ts +24 -9
- package/src/cli/decisions-cli.ts +7 -4
- package/src/cli/doctor-cli.ts +116 -7
- package/src/cli/guardian-cli.ts +3 -1
- package/src/cli/intake-cli.ts +48 -12
- package/src/cli/lesson-cli.ts +69 -9
- package/src/cli/logs-cli.ts +357 -2
- package/src/cli/memory-cli.ts +30 -1
- package/src/cli/msg-cli.ts +15 -11
- package/src/cli/pr-granularity.ts +5 -3
- package/src/cli/pr-land-overlap-evidence.ts +38 -5
- package/src/cli/pr-land-refusal.ts +1 -1
- package/src/cli/pty-takeover-cli.ts +58 -5
- package/src/cli/release-checklist-read-cli.ts +112 -4
- package/src/cli/release-cli.ts +89 -18
- package/src/cli/review-carry.ts +77 -0
- package/src/cli/self-update.ts +24 -6
- package/src/cli/self-utterances-cli.ts +13 -16
- package/src/cli/tasks-card-show.ts +31 -1
- package/src/cli/tasks-cli.ts +370 -33
- package/src/cli/tasks-read-cli.ts +13 -5
- package/src/cli/usage-cli.ts +12 -10
- package/src/context-bus/claude-memory-import.ts +99 -0
- package/src/context-bus/context-now.ts +86 -2
- package/src/context-bus/long-term-memory.ts +125 -0
- package/src/core-turn/run-core-turn.ts +9 -2
- package/src/core-turn/run-goal-loop.ts +5 -2
- package/src/core-turn/types.ts +5 -0
- package/src/dashboard/chat/acp-chat.ts +9 -0
- package/src/dashboard/index.ts +115 -30
- package/src/dashboard/input/agent-wake.ts +43 -0
- package/src/dashboard/input/chat-main-acp-dispatch.ts +21 -1
- package/src/dashboard/input/terminal-modal-router.ts +8 -159
- package/src/dashboard/replay-preview.ts +25 -0
- package/src/dashboard/side-basic-runtime.ts +61 -0
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +19 -8
- package/src/dashboard/synchronized-frame-output.ts +74 -0
- package/src/dashboard/term-slash-runtime.ts +2 -0
- package/src/dashboard/turn-preamble.ts +28 -4
- package/src/display/coordinator.ts +45 -12
- package/src/display/resize-listener.ts +41 -20
- package/src/display/synchronized-output-region.ts +60 -0
- package/src/domains/guardian-tick.ts +9 -0
- package/src/domains/surface-events.ts +80 -1
- package/src/exec-requests/planner.ts +37 -2
- package/src/execution-loop/launch-gate.ts +4 -3
- package/src/git-fs/cli-stderr.ts +45 -0
- package/src/git-fs/gh-cli.ts +6 -3
- package/src/git-fs/git-cli.ts +11 -5
- package/src/git-fs/watcher.ts +27 -22
- package/src/git-fs/worktree.ts +19 -3
- package/src/graph-runner/graph-cli.ts +26 -2
- package/src/graph-runner/graph-grow.ts +37 -9
- package/src/graph-runner/graph-run-api.ts +3 -2
- package/src/graph-runner/runner.ts +34 -7
- package/src/graph-wizard/generate.ts +29 -6
- package/src/grok/credential.ts +107 -36
- package/src/harness/harness-cli-command.ts +179 -33
- package/src/harness/review-adapter.ts +26 -6
- package/src/hq/fence-wrapper.ts +1 -1
- package/src/hq/transfer.ts +1 -1
- package/src/index.ts +151 -18
- package/src/instance/test-write-guard-real-transport.fixture.ts +52 -0
- package/src/intake-plane/collect-telegram-saved.ts +54 -5
- package/src/interactive-terminal-modal.ts +3 -0
- package/src/keybindings.ts +17 -22
- package/src/llm/provider-credentials.ts +1 -1
- package/src/llm/route-decision.ts +13 -0
- package/src/llm-tool-name.ts +37 -0
- package/src/llm-tool-schema.ts +55 -0
- package/src/llm.ts +203 -21
- package/src/loops/checker.ts +100 -0
- package/src/loops/consensus.ts +26 -2
- package/src/loops/loop-cli.ts +9 -4
- package/src/loops/orchestrator/anomaly-cluster.ts +243 -0
- package/src/loops/orchestrator/inbox-once.ts +28 -0
- package/src/loops/orchestrator/inbox.ts +130 -1
- package/src/loops/orchestrator/tick.ts +55 -7
- package/src/maturity/feature-maturity.ts +1 -0
- package/src/model-tier/llm-tier-map.ts +12 -17
- package/src/msg/msg-store.ts +17 -0
- package/src/native-tool-catalog.ts +1 -1
- package/src/nexus/api/channel-ask-op.ts +96 -0
- package/src/nexus/api/discord-trigger-bot.ts +28 -1
- package/src/nexus/api/graph-wizard-api.ts +27 -2
- package/src/nexus/api/grid.ts +24 -4
- package/src/nexus/api/http-server.ts +1 -1
- package/src/nexus/api/ops-api.ts +14 -6
- package/src/nexus/api/telegram-trigger-bot.ts +24 -0
- package/src/nexus/api/terminals.ts +28 -6
- package/src/nexus/state/state.ts +7 -1
- package/src/oauth/codex-account-store.ts +34 -1
- package/src/ops/loops-map.ts +46 -0
- package/src/ops/overview-cache.ts +22 -4
- package/src/ops/overview.ts +41 -5
- package/src/patents/ledger.ts +18 -1
- package/src/policy/llm-policy.ts +3 -1
- package/src/preview/terminal.ts +4 -2
- package/src/prompt-cache/anthropic.ts +2 -0
- package/src/prompt-enhance/enhance.ts +9 -4
- package/src/pty-shell/availability.ts +7 -0
- package/src/pty-shell/herdr-agent-report.ts +40 -31
- package/src/pty-shell/herdr-prune-stale.ts +17 -0
- package/src/pty-shell/herdr-sequence-lease.ts +60 -0
- package/src/pty-shell/pty-control-ipc.ts +187 -18
- package/src/pty-shell/pty-manifest.ts +16 -2
- package/src/pty-shell/registry.ts +25 -15
- package/src/pty-shell/tui-run-state.ts +235 -1
- package/src/release-loop/checklist.ts +50 -5
- package/src/release-loop/feature-store.ts +9 -9
- package/src/release-loop/gate-shards.ts +61 -0
- package/src/release-loop/landed-but-yellow.ts +93 -12
- package/src/release-loop/light-rc.ts +7 -4
- package/src/release-loop/rehearsal.ts +1 -1
- package/src/repl/index.ts +18 -0
- package/src/research/axis-fanout.ts +133 -0
- package/src/research/edge-decision.ts +88 -0
- package/src/research/output-router.ts +127 -0
- package/src/research-bridge/format.ts +16 -1
- package/src/research-bridge/index.ts +1 -0
- package/src/research-bridge/invoke.ts +41 -5
- package/src/seat-loop/seat-report.ts +1 -0
- package/src/self-dev/ask-launch-flow.ts +86 -10
- package/src/self-dev/decompose-proposal.ts +29 -18
- package/src/self-dev/decompose.ts +45 -9
- package/src/self-dev/dev-pipeline.ts +29 -7
- package/src/self-dev/draft-residue.ts +221 -2
- package/src/self-dev/draft-sweep.ts +254 -16
- package/src/self-dev/draft-triage-rules.ts +19 -5
- package/src/self-dev/orchestrate.ts +1 -0
- package/src/self-dev/review-provider-fallback.ts +45 -7
- package/src/self-dev/run-supervisor.ts +22 -7
- package/src/self-dev/shard-plan.ts +48 -0
- package/src/self-dev/shard-run.ts +310 -6
- package/src/self-implement/comment-only-source.ts +54 -0
- package/src/self-implement/doctor-visit.ts +108 -0
- package/src/self-implement/gate-artifacts.ts +6 -2
- package/src/self-implement/gate-baseline.ts +99 -1
- package/src/self-implement/gate-cli.ts +231 -82
- package/src/self-implement/gate-failure-signature.ts +44 -0
- package/src/self-implement/gate-remote.ts +30 -4
- package/src/self-implement/gate-scope.ts +13 -1
- package/src/self-implement/goal-author.ts +407 -21
- package/src/self-implement/goal-doc/section.ts +22 -0
- package/src/self-implement/goal-supervisor-fill.ts +110 -27
- package/src/self-implement/importer-test-index.ts +215 -2
- package/src/self-implement/knowhow-pack.ts +125 -12
- package/src/self-implement/l8-merge-queue.ts +198 -32
- package/src/self-implement/off-diff-evidence.ts +23 -0
- package/src/self-implement/orchestrator.ts +369 -33
- package/src/self-implement/pod-inplace-worktree.ts +82 -0
- package/src/self-implement/pod-warm-pool-profile.ts +2 -2
- package/src/self-implement/premise-review.ts +7 -5
- package/src/self-implement/review-round-brief.ts +300 -0
- package/src/self-implement/rework-policy.ts +14 -0
- package/src/self-implement/run-ledger.ts +428 -6
- package/src/self-implement/run-stop.ts +1 -1
- package/src/self-implement/running-runs.ts +17 -3
- package/src/self-implement/seams.ts +45 -16
- package/src/self-implement/self-implement-cli.ts +26 -2
- package/src/self-implement/stop-autoheal.ts +1 -0
- package/src/self-implement/test-seams.ts +13 -1
- package/src/self-implement/train-reach-grouping.ts +8 -2
- package/src/session/channel-ask-op-envelope.ts +36 -0
- package/src/session/channel-op-reply-route.ts +200 -0
- package/src/session/chat.ts +10 -1
- package/src/session/id-prefix.ts +60 -0
- package/src/session/index.ts +6 -0
- package/src/session-runtime/index.ts +18 -23
- package/src/skills/runner.ts +7 -3
- package/src/skills/tools/dev-harness.ts +2 -2
- package/src/skills/tools/pty.ts +5 -0
- package/src/skills/tools/schedule-wakeup.ts +1 -6
- package/src/status/bar.ts +3 -3
- package/src/status/metrics.ts +12 -1
- package/src/steward/rejudge-tick.ts +12 -5
- package/src/steward/resync-tick.ts +31 -4
- package/src/storage/file-lock.ts +17 -4
- package/src/task-agent/actions.ts +199 -4
- package/src/task-agent/adopt-pr.ts +63 -2
- package/src/task-agent/boundary-proof-mapping.ts +12 -0
- package/src/task-agent/boundary-proof-producer.ts +147 -0
- package/src/task-agent/completion-evidence.ts +2 -1
- package/src/task-agent/evidence-command-normalize.ts +42 -0
- package/src/task-agent/export-redactions-provision.ts +43 -0
- package/src/task-agent/green-close-recipe.ts +239 -0
- package/src/task-agent/green-sweep.ts +64 -10
- package/src/task-agent/live-moves.ts +48 -3
- package/src/task-agent/map-host-adapter.ts +134 -0
- package/src/task-agent/map-reduce.ts +158 -0
- package/src/task-agent/map-run-ledger.ts +226 -0
- package/src/task-agent/parent-host.ts +74 -17
- package/src/task-agent/rejudge-on-head.ts +72 -5
- package/src/task-agent/repair-cycle.ts +108 -8
- package/src/task-agent/repair-next-move.ts +12 -2
- package/src/task-agent/repair-worker.ts +37 -1
- package/src/task-agent/review-prior-fix.ts +12 -2
- package/src/task-agent/shadow.ts +188 -5
- package/src/task-agent/task-hand.ts +253 -20
- package/src/task-agent/task-parent-role-llm.ts +9 -0
- package/src/task-agent/tier-split.ts +40 -5
- package/src/task-agent/work-order.ts +53 -2
- package/src/task-orchestrator/dispatcher.ts +46 -1
- package/src/task-orchestrator/generator-prompt.ts +6 -0
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +16 -6
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +31 -4
- package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +8 -6
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +97 -0
- package/src/task-orchestrator/surfaces/pod-pool.ts +77 -8
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +15 -9
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +338 -79
- package/src/task-orchestrator/surfaces/self-implement.ts +37 -2
- package/src/terminal/session-registry.ts +1 -0
- package/src/terminal/terminal-modal-router.ts +156 -0
- package/src/testing/linux-env.ts +177 -0
- package/src/tool-hints/gate.ts +6 -4
- package/src/tool-hints/signals.ts +33 -1
- package/src/tui/chat/background-job-status.ts +8 -2
- package/src/tui/chat/goal-interim.ts +5 -1
- package/src/tui/entry.ts +722 -30
- package/src/tui/input/at-picker.ts +55 -0
- package/src/tui/sidetab/attach.ts +304 -0
- package/src/tui/sidetab/list.ts +176 -0
- package/src/tui/sidetab/nl-tool.ts +136 -0
- package/src/tui/slash/resume-command.ts +23 -0
- package/src/tui/slash/resume.ts +38 -35
- package/src/tui/slash/signals.ts +114 -0
- package/src/tui/slash/term-next.ts +72 -0
- package/src/tui-client/local-chat-turn.ts +31 -9
- package/src/user-config.ts +30 -3
- package/src/ux-sim/boot-daemon-tools-pty-shell-device.ts +136 -0
- package/src/ux-sim/classic-tui-seat-scenarios.ts +158 -4
- package/src/ux-sim/fake-gh.ts +174 -0
- package/src/ux-sim/fake-kubectl.ts +142 -0
- package/src/ux-sim/fake-llm.ts +17 -6
- package/src/ux-sim/next-tui-seat-scenarios.ts +176 -6
- package/src/ux-sim/resume-picker-device.ts +173 -0
- package/src/ux-sim/session-id-seed.ts +60 -0
- package/src/ux-sim/skills-tools-shell-device.ts +156 -0
- package/src/ux-sim/task-agent-parent-host-device.ts +264 -0
- package/src/ux-sim/task-agent-rejudge-on-head-device.ts +114 -0
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/109.f196abf3484bb97f.js +0 -287
- package/apps/pwa/out/_next/static/chunks/1201.afbfc5b1c5e5cbe4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1517.9275b89572098ff3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1574.ad11f8db8396ab45.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1614.7a8c5c40aee0261f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1871-f1eb29d8dbb4065b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/190.285c832bd9626f8c.js +0 -64
- package/apps/pwa/out/_next/static/chunks/2193.0ea24c4a7aa1d004.js +0 -36
- package/apps/pwa/out/_next/static/chunks/223-ad865c1e80491d78.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2265-f0d90b6dbec05f81.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2267.eb4a62a209f09ec4.js +0 -149
- package/apps/pwa/out/_next/static/chunks/2341-86cd06c0cf01aa33.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2352.9abc42422bade876.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2397-c1653a816061842d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2500.cbc1257b774aae52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2709.8e1889034255fc5f.js +0 -24
- package/apps/pwa/out/_next/static/chunks/284.ac77c0db55bfd3a8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2941.3c3546f96bc6efa7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2976.b000698a3c6512dc.js +0 -24
- package/apps/pwa/out/_next/static/chunks/2986.45d7652e4f13557e.js +0 -2
- package/apps/pwa/out/_next/static/chunks/3155.2587a55196ecb394.js +0 -226
- package/apps/pwa/out/_next/static/chunks/3277.785db1cf09f98601.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3320-f9c77381f85a2c0a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3386-91049feabff9a94e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/339.80afb7e8839372af.js +0 -8
- package/apps/pwa/out/_next/static/chunks/3538.a445e50bb359d068.js +0 -32
- package/apps/pwa/out/_next/static/chunks/3540c645.2595a6af01a97672.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3621.581b2054cc14bee4.js +0 -286
- package/apps/pwa/out/_next/static/chunks/3676.8c28d16fd84ca843.js +0 -1
- package/apps/pwa/out/_next/static/chunks/375-b84540853523fe52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3757-180308bc61021b05.js +0 -1
- package/apps/pwa/out/_next/static/chunks/379.ee262e37586fe1ae.js +0 -74
- package/apps/pwa/out/_next/static/chunks/3840-5825d56d46976a92.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3969-81054381eaec4c4c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4067-bf9aa60547972937.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4176.e5729c93c29151eb.js +0 -104
- package/apps/pwa/out/_next/static/chunks/4227-e6c84686bc8946ca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4327.b9e08a71c0009348.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4946.bd106eafd668f248.js +0 -148
- package/apps/pwa/out/_next/static/chunks/5085-bce4904931767ca6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5125.2eb9968b83767193.js +0 -93
- package/apps/pwa/out/_next/static/chunks/5128-75b733fd74a9a1eb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5489f3fe.4bb1458b09f6dead.js +0 -122
- package/apps/pwa/out/_next/static/chunks/5560-2a4648f6a30f16e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5772-e29e14f8ff127122.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5887.5b2f5b44ce0f7e9a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5899-4c112a2d908cf97f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6041.1b65efb796ebc2a5.js +0 -79
- package/apps/pwa/out/_next/static/chunks/6057-765c0a26028c86b2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6142.f289e0d039f453a6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6199-6bcd61d2a3910e04.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6236.cdf7293e710a9b2d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6387-237e079dac9a3ae6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6448-b6d272d074276e14.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6466-92e65a48490b68a9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6580-cdc0e4a634ce4708.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6659-b242dc31b20b3f29.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6690.c5d9b321b1f79384.js +0 -1
- package/apps/pwa/out/_next/static/chunks/671-e9b6ad0c771c5514.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6862.bcbf89dd0f4496b3.js +0 -27
- package/apps/pwa/out/_next/static/chunks/6912-7b375ee48732c767.js +0 -1
- package/apps/pwa/out/_next/static/chunks/727.7deb87749b0a343a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7481.39f7a4654907bf6e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7545.b1aa42cd15503319.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7551-416d298c2dc4a9ab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7870-309de463786ac1fc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7888-e29b151bb6a3bb8b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7891.03f910124a737985.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7905-6ba78d9234608f79.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8207.f527886b7c464529.js +0 -1
- package/apps/pwa/out/_next/static/chunks/856.50bda61439d465e6.js +0 -62
- package/apps/pwa/out/_next/static/chunks/9031-92e9b487edb681ee.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9060.5410d9f6a95f6287.js +0 -90
- package/apps/pwa/out/_next/static/chunks/914.8abefd48d579547b.js +0 -94
- package/apps/pwa/out/_next/static/chunks/9187-c87a2207d4ac5d46.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9289.3e92f278821e18e0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9319.7816d3cc741cd34f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9327-e016bb9f1674d24f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9365.3de48bf75193ff9a.js +0 -77
- package/apps/pwa/out/_next/static/chunks/9383.5b5e9aa56b5fea97.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9387-cb929573ef436f39.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9489.c27becacc3283dec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9514.131c52cc75fe6439.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9536.28962663c7734376.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9686-12286f5bbf15a5a0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9776.289d40cc5a4c342a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9789.60f723d18097ec30.js +0 -1
- package/apps/pwa/out/_next/static/chunks/989.f0c17523c5e61f65.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9972-1df393aa8d4f7d52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-96750aba7430959f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-4105e5bbbb043024.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-5d4fa75c2acb113e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-a79a9bdb3b2142bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-f1c2047484992a35.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-15ffc49b2d8c70e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-67d53a3fc8734135.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-e30c8dc696491336.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-2136e04fa77696e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-fecd2814790c2e12.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-280aa4a98fc5bb44.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-c14e96b65fb4b883.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-187dac74825ed6bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-6bc7246ea8c92448.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-083747f1d4518f61.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-96750aba7430959f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-15ca95a16ec96e1f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-a8ac031b3810eb64.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-8835f93110494cda.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-e2de2e59111c9aad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-f2b2e4bf6e981450.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-5b92b7f75df20948.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-468eddf2b1a84ecb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-2af16e62c12f22df.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-18b40867a77a5793.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-fe934f2979f5a4a2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-3eec435537357170.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-ff88cbfd2aa99fc8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-a5b39fb780c70ab5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ae465dde1d1b3933.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-cab9674fde9ead26.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-1da49bc8712284d0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5e8aa657551ac912.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-fcc36f36c6dc1fe2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-d22db22f2a7296ca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-d12dc7b1773878f0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-99debec9ea7fbec0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-96750aba7430959f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-2a088a78bad7e924.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-2e8ed57db7e69993.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-4b3a16213c2ae8fe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f098747ddf38c98b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-68279e3c843c1fd7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-a34a74453367a39d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-8767a7db2155a5bd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-bd5976683460d7f2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-b7364835e7f2ef54.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-311af16b3ee0ffca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-fb670757274ae990.js +0 -1
- package/apps/pwa/out/_next/static/chunks/ccae1c4b-0cf414f5eff1b10d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/f9a61e4d.1fc2c1dbdd49fe46.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-6d497cbf1eef04c6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-012f5edec932f337.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-da5aeb809edc94a2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-5ee319af6f749dfe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-4bc84653a718d6c6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-8a96cf6775c73d6e.js +0 -1
- package/scripts/migrate-monad-to-elanous.ts +0 -195
- package/scripts/rebrand-elanous.ts +0 -242
- /package/apps/pwa/out/_next/static/{uC-N0emedeNOFuaBQFv-I → RrjXTwz-urRAbChP1bX02}/_ssgManifest.js +0 -0
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
// into the chat pane so the user sees what was archived.
|
|
8
8
|
|
|
9
9
|
import type { ExternalResearchResult } from './types.js';
|
|
10
|
+
import type { ResearchOutputRouteDecision } from '../research/output-router.js';
|
|
10
11
|
|
|
11
12
|
const PREFILL_OUTPUT_CAP = 6000;
|
|
12
13
|
|
|
@@ -19,13 +20,27 @@ export function formatResearchSummary(r: ExternalResearchResult): string {
|
|
|
19
20
|
return head;
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
// TODO(AXIS-FANOUT): pass the route from the production caller when that upstream interface lands.
|
|
24
|
+
// Keeping it optional preserves the existing prefill byte-for-byte until then.
|
|
25
|
+
export function formatResearchPrefill(r: ExternalResearchResult, route?: ResearchOutputRouteDecision): string {
|
|
23
26
|
const truncated = r.output.length > PREFILL_OUTPUT_CAP;
|
|
24
27
|
const body = truncated ? r.output.slice(0, PREFILL_OUTPUT_CAP) + '\n\n…(truncated — see archive)' : r.output;
|
|
25
28
|
const lines: string[] = [];
|
|
26
29
|
lines.push('<external-research>');
|
|
27
30
|
lines.push(` <topic>${r.topic}</topic>`);
|
|
28
31
|
lines.push(` <skill>${r.skill}</skill>`);
|
|
32
|
+
if (route) {
|
|
33
|
+
lines.push(` <output_format>${route.format}</output_format>`);
|
|
34
|
+
lines.push(` <question_weight source="${route.weightSource}">${route.weight}</question_weight>`);
|
|
35
|
+
lines.push(` <output_route_observation>${JSON.stringify(route.observation)}</output_route_observation>`);
|
|
36
|
+
if (route.skillCallPlan) {
|
|
37
|
+
lines.push(` <output_skill>${route.skillCallPlan.skill}</output_skill>`);
|
|
38
|
+
lines.push(' <output_skill_args>');
|
|
39
|
+
lines.push(route.skillCallPlan.args);
|
|
40
|
+
lines.push(' </output_skill_args>');
|
|
41
|
+
}
|
|
42
|
+
if (route.fallbackReason) lines.push(` <output_route_fallback>${route.fallbackReason}</output_route_fallback>`);
|
|
43
|
+
}
|
|
29
44
|
lines.push(` <duration_ms>${r.durationMs}</duration_ms>`);
|
|
30
45
|
lines.push(` <ok>${r.ok}</ok>`);
|
|
31
46
|
lines.push(` <output>`);
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
|
|
16
16
|
import type { ExternalResearchResult, InvokeResearchOpts } from './types.js';
|
|
17
17
|
import type { SkillManifest } from '../skills/runner.js';
|
|
18
|
+
import type { BloomResearchQuestion } from '../auto-research/question-ladder-contract.js';
|
|
19
|
+
import type { AxisFanoutDeps, AxisFanoutResult } from '../research/axis-fanout.js';
|
|
18
20
|
import { recordResult } from './store.js';
|
|
19
21
|
|
|
20
22
|
const DEFAULT_SKILL = 'omni-crawl';
|
|
@@ -31,6 +33,15 @@ const DEFAULT_SKILL = 'omni-crawl';
|
|
|
31
33
|
// 조사 부작용만 원천 봉쇄. deny wins over allow(tool-policy). 순수·spread(원본 불변).
|
|
32
34
|
export const RESEARCH_DENIED_TOOLS = ['Write', 'Edit', 'NotebookEdit'] as const;
|
|
33
35
|
|
|
36
|
+
const ANSI_CONTROL_SEQUENCES = /\u001B(?:\[[0-?]*[ -/]*[@-~]|\][^\u0007]*(?:\u0007|\u001B\\))/g;
|
|
37
|
+
|
|
38
|
+
/** Select the model's final answer, never the TUI-rendered tool transcript. */
|
|
39
|
+
export function researchOutputFromSkillRun(
|
|
40
|
+
run: { finalResponse: string },
|
|
41
|
+
): string {
|
|
42
|
+
return run.finalResponse.replace(ANSI_CONTROL_SEQUENCES, '');
|
|
43
|
+
}
|
|
44
|
+
|
|
34
45
|
export function withResearchIsolation(manifest: SkillManifest): SkillManifest {
|
|
35
46
|
const deniedTools = [...new Set([...(manifest.deniedTools ?? []), ...RESEARCH_DENIED_TOOLS])];
|
|
36
47
|
return { ...manifest, deniedTools };
|
|
@@ -45,6 +56,21 @@ export interface ResearchInvocationOutcome {
|
|
|
45
56
|
error?: string;
|
|
46
57
|
}
|
|
47
58
|
|
|
59
|
+
/** A successful skill call with no final answer is an incomplete invocation. */
|
|
60
|
+
export function researchOutcomeFromSkillRun(
|
|
61
|
+
run: { finalResponse: string },
|
|
62
|
+
): ResearchInvocationOutcome {
|
|
63
|
+
const output = researchOutputFromSkillRun(run);
|
|
64
|
+
if (output.length === 0) {
|
|
65
|
+
return {
|
|
66
|
+
output,
|
|
67
|
+
ok: false,
|
|
68
|
+
error: 'skill run finished without a final assistant response',
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return { output, ok: true };
|
|
72
|
+
}
|
|
73
|
+
|
|
48
74
|
export type ResearchInvoker = (
|
|
49
75
|
skillName: string,
|
|
50
76
|
args: string,
|
|
@@ -59,6 +85,18 @@ export function setResearchInvoker(fn: ResearchInvoker | null): void {
|
|
|
59
85
|
invoker = fn;
|
|
60
86
|
}
|
|
61
87
|
|
|
88
|
+
/** Research-turn entry once Bloom has supplied its question axes. This uses
|
|
89
|
+
* native search per axis; it never sends the entire request to a skill. */
|
|
90
|
+
export async function invokeResearchAxes(
|
|
91
|
+
questions: readonly BloomResearchQuestion[],
|
|
92
|
+
deps: AxisFanoutDeps = {},
|
|
93
|
+
): Promise<AxisFanoutResult> {
|
|
94
|
+
// Keep the generic chat entry's static module closure unchanged; axis search
|
|
95
|
+
// is loaded only for a Bloom research turn.
|
|
96
|
+
const { fanOutAxisEvidence } = await import('../research/axis-fanout.js');
|
|
97
|
+
return fanOutAxisEvidence(questions, deps);
|
|
98
|
+
}
|
|
99
|
+
|
|
62
100
|
async function defaultInvoker(
|
|
63
101
|
skillName: string,
|
|
64
102
|
args: string,
|
|
@@ -73,17 +111,15 @@ async function defaultInvoker(
|
|
|
73
111
|
error: `skill "${skillName}" not found under ~/.claude/skills/`,
|
|
74
112
|
};
|
|
75
113
|
}
|
|
76
|
-
let buffered = '';
|
|
77
114
|
try {
|
|
78
115
|
// ★ research 격리 — 파일-쓰기 도구 deny 주입(main 트리 오염 차단). Bash·검색도구는 유지.
|
|
79
|
-
const result = await executeSkill(withResearchIsolation(manifest), args, (delta
|
|
80
|
-
buffered = full;
|
|
116
|
+
const result = await executeSkill(withResearchIsolation(manifest), args, (delta) => {
|
|
81
117
|
if (onProgress) onProgress(delta);
|
|
82
118
|
});
|
|
83
|
-
return
|
|
119
|
+
return researchOutcomeFromSkillRun(result);
|
|
84
120
|
} catch (err) {
|
|
85
121
|
return {
|
|
86
|
-
output:
|
|
122
|
+
output: '',
|
|
87
123
|
ok: false,
|
|
88
124
|
error: err instanceof Error ? err.message : String(err),
|
|
89
125
|
};
|
|
@@ -134,6 +134,7 @@ export async function seatReport(seat: string, deps: SeatReportDeps = {}): Promi
|
|
|
134
134
|
const [{ resolveRepositoryName }, { githubDraftSweepAdapters }] = await Promise.all([
|
|
135
135
|
import('../harness/repository-name.js'), import('../harness/harness-cli-command.js'),
|
|
136
136
|
]);
|
|
137
|
+
// The collector folds repeated PR pages before this report formats the census.
|
|
137
138
|
return collectDraftMetrics(resolveRepositoryName({}), githubDraftSweepAdapters(), clock);
|
|
138
139
|
}))(now);
|
|
139
140
|
draftDetail = ` · draft 재고 ${metrics.inventory} · 최장 나이 ${metrics.oldestAgeHours === null ? '해당 없음' : `${metrics.oldestAgeHours.toFixed(1)}h`} · needs-owner ${metrics.needsOwner} · 48h 전환율 ${metrics.conversion48h === null ? '표본 없음' : `${(metrics.conversion48h * 100).toFixed(1)}% (${metrics.converted48h}/${metrics.cohort48h})`}`;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// (바꾸면 이 추출이 회귀인지 개선인지 사후에 못 가른다.)
|
|
11
11
|
// ⛔ 종료(`process.exit`)는 여기가 «안» 한다 — 호출자가 자기 표면에 맞게 끝낸다.
|
|
12
12
|
// 그래서 결과를 «세 값»으로 낸다: 발사 / 저작 전 중단 / 전제 검사 중단.
|
|
13
|
-
import { linesOutsideFencedCode } from '../self-implement/goal-author.js';
|
|
13
|
+
import { linesOutsideFencedCode, readGoalAuthorGroundingTimebox, type GoalAuthorGroundingTimebox } from '../self-implement/goal-author.js';
|
|
14
14
|
import { existsSync } from 'node:fs';
|
|
15
15
|
import { debug } from '../debug/log.js';
|
|
16
16
|
import { appendRunLedgerEntry, runLedgerDir } from '../self-implement/run-ledger.js';
|
|
@@ -69,6 +69,23 @@ export interface AskAuthoredGoal {
|
|
|
69
69
|
readonly authored?: { readonly document?: string; readonly grounded?: boolean | null; readonly authorRunId?: string } | null;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* ⭐ AUTHOR-TIMEBOX 결과 줄 — `formatOrchestrateResultLine`
|
|
74
|
+
* (` ${icon} ${status} · ${feature}${disp}${error}`)과 **같은 모양**을 쓴다.
|
|
75
|
+
*
|
|
76
|
+
* ⛔ `src/self-dev/orchestrate-summary-line.ts` 는 «안 고친다» — 다른 명령·화면의 기본 동작과
|
|
77
|
+
* 원장 형식은 보존 계약이다. 그래서 같은 모양을 이 자리에서 «쓴다».
|
|
78
|
+
* ⛔ 접지가 예산 초과로 끊긴 저작이 «조용히» 지나가면 상위 디스패처는 그 런을 성공으로도
|
|
79
|
+
* 실패로도 판정하지 못한다(80분 런 사망의 실제 모양).
|
|
80
|
+
*/
|
|
81
|
+
export function formatGoalAuthorTimeboxResultLine(
|
|
82
|
+
goalFile: string,
|
|
83
|
+
timebox: GoalAuthorGroundingTimebox,
|
|
84
|
+
): string {
|
|
85
|
+
const feature = (goalFile.split('/').at(-1) ?? goalFile).slice(0, 56);
|
|
86
|
+
return ` ❌ NOT-GROUNDED · ${feature} [author-timebox] — grounding-timebox: exceeded ${timebox.budgetMs}ms budget after ${timebox.elapsedMs}ms; authoring stopped before launch`;
|
|
87
|
+
}
|
|
88
|
+
|
|
72
89
|
export type LaunchingTreeProbe =
|
|
73
90
|
| { readonly kind: 'measured'; readonly ahead: number; readonly behind: number; readonly reference: string }
|
|
74
91
|
| { readonly kind: 'unmeasurable'; readonly error: string };
|
|
@@ -240,7 +257,12 @@ export type AskLaunchFlowResult =
|
|
|
240
257
|
/** ⓪ 저작 «전»에 막혔다 — 100초를 안 썼다. */
|
|
241
258
|
| { readonly kind: 'stopped-before-authoring'; readonly goalFile?: undefined }
|
|
242
259
|
/** ⑵⑶⑷ 에서 막혔다 — 골은 «있다»(사람이 열어볼 수 있게 돌려준다). */
|
|
243
|
-
| { readonly kind: 'stopped-by-preflight'; readonly goalFile: string; readonly blockers: LaunchPreflightResult['blockers'] }
|
|
260
|
+
| { readonly kind: 'stopped-by-preflight'; readonly goalFile: string; readonly blockers: LaunchPreflightResult['blockers'] }
|
|
261
|
+
/** ⑴ 저작에서 접지 예산(AUTHOR-TIMEBOX)을 넘겨 NOT-GROUNDED 로 끝났다 — 발사하지 «않는다». */
|
|
262
|
+
| { readonly kind: 'stopped-by-timebox'; readonly goalFile: string };
|
|
263
|
+
|
|
264
|
+
/** ⑴ AUTHOR-TIMEBOX NOT-GROUNDED — 결과 줄을 쓰고 흐름을 끊는 값. */
|
|
265
|
+
export type AskLaunchFlowTimeboxStop = Extract<AskLaunchFlowResult, { kind: 'stopped-by-timebox' }>;
|
|
244
266
|
|
|
245
267
|
/** 런 식별자가 흐름 뒤에 확정된 호출자는 이 관측으로 입구와 런을 조인한다. */
|
|
246
268
|
export function observeAskLaunchRunIdentity(
|
|
@@ -738,7 +760,7 @@ async function intakeClarifications(
|
|
|
738
760
|
input: AskLaunchFlowInput,
|
|
739
761
|
deps: AskLaunchFlowDeps,
|
|
740
762
|
selfResolveClarifications: ResolvedSelfResolveClarifications,
|
|
741
|
-
): Promise<string> {
|
|
763
|
+
): Promise<string | AskLaunchFlowTimeboxStop> {
|
|
742
764
|
let effectiveGoalFile = authored.path;
|
|
743
765
|
let document = deps.readFile(effectiveGoalFile);
|
|
744
766
|
const { pending, mode } = planClarificationIntake(document, deps.isInteractive());
|
|
@@ -824,6 +846,28 @@ async function intakeClarifications(
|
|
|
824
846
|
const parentDocument = document;
|
|
825
847
|
effectiveGoalFile = isAbsolutePath(reauthored.path) ? reauthored.path : resolvePath(deps.cwd(), reauthored.path);
|
|
826
848
|
deps.print(`[ask] ⑴b 재저작됨: ${reauthored.path}`);
|
|
849
|
+
// 재저작도 «같은 저작 진입점»이다 — 접지가 예산 초과로 끊기면 같은 결과 줄을 쓴다(조용히 넘기지 않는다).
|
|
850
|
+
const reauthoredTimebox = reauthored.authored?.document === undefined
|
|
851
|
+
? null
|
|
852
|
+
: readGoalAuthorGroundingTimebox(reauthored.authored.document);
|
|
853
|
+
if (reauthoredTimebox !== null) {
|
|
854
|
+
deps.print(formatGoalAuthorTimeboxResultLine(reauthored.path, reauthoredTimebox));
|
|
855
|
+
deps.log('ask-author-timebox', {
|
|
856
|
+
goalFile: reauthored.path,
|
|
857
|
+
provenance: 'reauthor',
|
|
858
|
+
outcome: 'NOT-GROUNDED',
|
|
859
|
+
budgetMs: reauthoredTimebox.budgetMs,
|
|
860
|
+
elapsedMs: reauthoredTimebox.elapsedMs,
|
|
861
|
+
grounded: reauthored.authored?.grounded ?? null,
|
|
862
|
+
}, 'warn');
|
|
863
|
+
// ⛔⭐⭐ 재저작 NOT-GROUNDED 도 «끝»이다 — 결과 줄을 쓰고 되묻기 이후 단계로 지나가지 않는다.
|
|
864
|
+
observeFrontNodeExit({ node: 'author', outcome: 'not-grounded' }, {
|
|
865
|
+
...(input.runId === undefined ? {} : { runId: input.runId }),
|
|
866
|
+
attempt: 1, goalFile: effectiveGoalFile,
|
|
867
|
+
reason: `grounding-timebox-exhausted (budget ${reauthoredTimebox.budgetMs}ms, elapsed ${reauthoredTimebox.elapsedMs}ms)`,
|
|
868
|
+
});
|
|
869
|
+
return { kind: 'stopped-by-timebox', goalFile: effectiveGoalFile };
|
|
870
|
+
}
|
|
827
871
|
// ⛔ 「재저작이 «났다»」와 「재저작이 «옳았다»」는 다른 물음이다(JDG-T35 3단 ⑶).
|
|
828
872
|
const childDocument = reauthored.authored?.document ?? deps.readFile(effectiveGoalFile);
|
|
829
873
|
const askFidelity = classifyReauthoredAsk(parentDocument, childDocument);
|
|
@@ -886,10 +930,10 @@ export async function runAskLaunchFlow(
|
|
|
886
930
|
if (launchPreflight === false) return { kind: 'stopped-before-authoring' };
|
|
887
931
|
|
|
888
932
|
await deps.beforeAuthoring?.();
|
|
889
|
-
const authorAndPreflight = async (authorAskText: string = input.askText, machineSuggestedTargetPaths: readonly string[] = [], attempt = 1): Promise<
|
|
890
|
-
readonly goalFile: string;
|
|
891
|
-
|
|
892
|
-
|
|
933
|
+
const authorAndPreflight = async (authorAskText: string = input.askText, machineSuggestedTargetPaths: readonly string[] = [], attempt = 1): Promise<
|
|
934
|
+
| { readonly goalFile: string; readonly decision: ReturnType<typeof decideAskPreflight> }
|
|
935
|
+
| AskLaunchFlowTimeboxStop
|
|
936
|
+
> => {
|
|
893
937
|
// ⛔ 수를 박지 않는다 — 「100~110초」가 박혀 있었고 2026-08-23 prod 실측은 «206초»(2배)였다.
|
|
894
938
|
// 재는 명령: elanous logs --category goal-author --event phase-end --json --json-data
|
|
895
939
|
deps.print('[ask] ⑴ 저작 — self author (수 분 걸린다 · 페이즈별 실측은 goal-author/phase-end)');
|
|
@@ -926,6 +970,29 @@ export async function runAskLaunchFlow(
|
|
|
926
970
|
throw error;
|
|
927
971
|
});
|
|
928
972
|
deps.print(`[ask] 저작됨: ${authored.path}`);
|
|
973
|
+
// ⛔⭐⭐ AUTHOR-TIMEBOX — 접지가 예산을 넘겨 끊긴 저작은 «결과 줄» 없이 지나가면 안 된다.
|
|
974
|
+
// 이 자리가 ask → Pod 발사를 쥔 곳이므로(이 흐름이 발사 여부를 정한다), 여기서 한 줄을 쓴다.
|
|
975
|
+
const groundingTimebox = authored.authored?.document === undefined
|
|
976
|
+
? null
|
|
977
|
+
: readGoalAuthorGroundingTimebox(authored.authored.document);
|
|
978
|
+
if (groundingTimebox !== null) {
|
|
979
|
+
deps.print(formatGoalAuthorTimeboxResultLine(authored.path, groundingTimebox));
|
|
980
|
+
deps.log('ask-author-timebox', {
|
|
981
|
+
goalFile: authored.path,
|
|
982
|
+
provenance: 'author',
|
|
983
|
+
outcome: 'NOT-GROUNDED',
|
|
984
|
+
budgetMs: groundingTimebox.budgetMs,
|
|
985
|
+
elapsedMs: groundingTimebox.elapsedMs,
|
|
986
|
+
grounded: authored.authored?.grounded ?? null,
|
|
987
|
+
}, 'warn');
|
|
988
|
+
// ⛔⭐⭐ NOT-GROUNDED 는 «끝»이다 — 이 흐름이 발사 여부를 정하므로, 결과 줄을 쓰고 나서
|
|
989
|
+
// 되묻기·전제 검사·발사로 «지나가지 않는다». 저작 종료 출구를 그래프에 남기고 흐름을 끊는다.
|
|
990
|
+
observeFrontNodeExit({ node: 'author', outcome: 'not-grounded' }, {
|
|
991
|
+
...frontObservation, attempt, goalFile: authored.path,
|
|
992
|
+
reason: `grounding-timebox-exhausted (budget ${groundingTimebox.budgetMs}ms, elapsed ${groundingTimebox.elapsedMs}ms)`,
|
|
993
|
+
});
|
|
994
|
+
return { kind: 'stopped-by-timebox', goalFile: authored.path };
|
|
995
|
+
}
|
|
929
996
|
// AUTHOR-TRACE: the authored goal file can be cleaned up later — keep path ⊕ sha256 ⊕ size in the run ledger and
|
|
930
997
|
// archive the body, so authoring length is measurable after the fact (GOAL-BENCH · AUTHOR-LITE).
|
|
931
998
|
const traceIds = {
|
|
@@ -979,10 +1046,13 @@ export async function runAskLaunchFlow(
|
|
|
979
1046
|
}, markerCounts !== null && markerCounts.missingMarkers > 0 ? 'warn' : 'info');
|
|
980
1047
|
|
|
981
1048
|
// ⛔ 되묻기에 답하면 «새 골»이 나온다 — 아래 전제 검사·발사는 그 «최종» 골을 써야 한다.
|
|
982
|
-
const
|
|
1049
|
+
const clarifiedGoalFile = await intakeClarifications({
|
|
983
1050
|
...authored,
|
|
984
1051
|
path: isAbsolutePath(authored.path) ? authored.path : resolvePath(deps.cwd(), authored.path),
|
|
985
1052
|
}, input, deps, selfResolveClarifications);
|
|
1053
|
+
// 재저작이 AUTHOR-TIMEBOX 로 끊겼으면 이 흐름도 그대로 끊는다 — 전제 검사·발사로 지나가지 않는다.
|
|
1054
|
+
if (typeof clarifiedGoalFile !== 'string') return clarifiedGoalFile;
|
|
1055
|
+
const goalFile = clarifiedGoalFile;
|
|
986
1056
|
// The child reads this file again. Filtering only preflight.paths would leave the same bogus
|
|
987
1057
|
// TRACED PATHS prose in the child and repeat its missing-file failure.
|
|
988
1058
|
let sanitizeFailed = false;
|
|
@@ -1090,7 +1160,10 @@ export async function runAskLaunchFlow(
|
|
|
1090
1160
|
});
|
|
1091
1161
|
};
|
|
1092
1162
|
|
|
1093
|
-
let
|
|
1163
|
+
let firstAuthored = await authorAndPreflight();
|
|
1164
|
+
// 저작 단계가 AUTHOR-TIMEBOX NOT-GROUNDED 로 끝났으면 이 흐름도 그대로 끊는다.
|
|
1165
|
+
if ('kind' in firstAuthored) return firstAuthored;
|
|
1166
|
+
let authored = firstAuthored;
|
|
1094
1167
|
let reauthored = false;
|
|
1095
1168
|
const retryableNoTargetPaths = !input.forceRequested
|
|
1096
1169
|
&& !authored.decision.shouldLaunch
|
|
@@ -1142,9 +1215,12 @@ export async function runAskLaunchFlow(
|
|
|
1142
1215
|
deps.print('[ask] ⑴ ⚠️ 자동 재저작에 넣을 대상 경로 후보가 없다. 대상 경로를 확인해야 한다');
|
|
1143
1216
|
}
|
|
1144
1217
|
recordPodAuthoring('ask-auto-reauthor', { candidatePathCount: candidates.paths.length, firstPathCount: first.decision.result.paths.length, outcome: 'started' });
|
|
1145
|
-
|
|
1218
|
+
const secondAuthored = await authorAndPreflight(selectedPaths.length > 0
|
|
1146
1219
|
? `대상 경로: ${selectedPaths.join(' · ')}\n${input.askText}`
|
|
1147
1220
|
: input.askText, selectedPaths, 2);
|
|
1221
|
+
// 재시도 저작도 AUTHOR-TIMEBOX 로 끊길 수 있다 — 그러면 발사하지 않는다.
|
|
1222
|
+
if ('kind' in secondAuthored) return secondAuthored;
|
|
1223
|
+
authored = secondAuthored;
|
|
1148
1224
|
// 두 번째 not-grounded 는 re-ground 예산(max_visits 1)을 넘어 needs-human(근거 카드)으로 — 판정은 observeFrontNodeExit 가 선언에서 읽는다.
|
|
1149
1225
|
observeAuthorExit(2, authored, !authored.decision.shouldLaunch && authorNotGrounded(authored.decision) ? 'not-grounded' : 're-authored');
|
|
1150
1226
|
deps.log('ask-auto-reauthor', {
|
|
@@ -276,7 +276,7 @@ export interface ShadowFirstPlan {
|
|
|
276
276
|
/** shadow-first 집행 판정. ⛔ 「고칠 수 없음」과 「거부」를 같은 값으로 접지 않는다. */
|
|
277
277
|
export type ShadowFirstDispatch =
|
|
278
278
|
| { kind: 'ok'; pieces: DecomposePiece[]; shadowFirst?: ShadowFirstPlan }
|
|
279
|
-
| { kind: 'rejected'; reason: 'dangling-dependsOn';
|
|
279
|
+
| { kind: 'rejected'; reason: 'dangling-dependsOn' | 'shadow-depends-on-live' | 'shadow-depends-on-self'; detail: string[] };
|
|
280
280
|
|
|
281
281
|
/**
|
|
282
282
|
* ⭐⭐⭐ shadow 관측이 live 발사보다 «앞선다» — AUTHOR-SHADOW-FIRST-SPLIT ② (#26884 수확).
|
|
@@ -290,13 +290,21 @@ export type ShadowFirstDispatch =
|
|
|
290
290
|
* 없는 조각을 선행으로 단 제안은 승격하지 않는다(`danglingDependsOn` 을 세는 것만으로는 live 발사를 못 막는다).
|
|
291
291
|
* ⓑ shadow 조각이 «둘» 이상 → `kind: 'ok'` 지만 «가드 없음» — 어느 쪽이 관측인지 모르는 제안은 고치지 않는다.
|
|
292
292
|
*
|
|
293
|
-
* ⭐
|
|
294
|
-
*
|
|
295
|
-
*
|
|
293
|
+
* ⭐ 모든 live 조각이 shadow 를 선행으로 가져야 관측이 어떤 실행 순서보다 먼저다.
|
|
294
|
+
* live 조각 사이의 기존 의미 의존성은 그대로 둔다. shadow 가 live 조각에 의존하는 경우는
|
|
295
|
+
* 이 순서와 모순이므로 거부한다.
|
|
296
296
|
*
|
|
297
297
|
* 순수 함수다 — 시계·파일·프로세스를 안 만진다. 입력 조각은 «변형하지 않는다».
|
|
298
298
|
*/
|
|
299
299
|
export function planShadowFirstDispatch(pieces: readonly DecomposePiece[]): ShadowFirstDispatch {
|
|
300
|
+
const shadowPieces = pieces.filter((piece) => piece.id === SHADOW_PIECE_ID);
|
|
301
|
+
if (shadowPieces.length !== 1) return { kind: 'ok', pieces: [...pieces] };
|
|
302
|
+
|
|
303
|
+
const shadow = shadowPieces[0]!;
|
|
304
|
+
const rest = pieces.filter((piece) => piece !== shadow);
|
|
305
|
+
if (shadow.dependsOn.includes(SHADOW_PIECE_ID)) {
|
|
306
|
+
return { kind: 'rejected', reason: 'shadow-depends-on-self', detail: [SHADOW_PIECE_ID] };
|
|
307
|
+
}
|
|
300
308
|
const known = new Set(pieces.map((piece) => piece.id));
|
|
301
309
|
const danglingIds: string[] = [];
|
|
302
310
|
for (const piece of pieces) {
|
|
@@ -305,19 +313,20 @@ export function planShadowFirstDispatch(pieces: readonly DecomposePiece[]): Shad
|
|
|
305
313
|
danglingIds.push(dep);
|
|
306
314
|
}
|
|
307
315
|
}
|
|
308
|
-
if (danglingIds.length) return { kind: 'rejected', reason: 'dangling-dependsOn', danglingIds };
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
const
|
|
314
|
-
const
|
|
315
|
-
|
|
316
|
-
|
|
316
|
+
if (danglingIds.length) return { kind: 'rejected', reason: 'dangling-dependsOn', detail: danglingIds };
|
|
317
|
+
|
|
318
|
+
// A shadow observation cannot be ordered before a live piece if it itself
|
|
319
|
+
// depends on that piece. Reject this cyclic ordering instead of returning a
|
|
320
|
+
// plan that appears shadow-first but cannot be dispatched in that order.
|
|
321
|
+
const liveIds = new Set(rest.map((piece) => piece.id));
|
|
322
|
+
const shadowLiveDependencies = shadow.dependsOn.filter((dep) => liveIds.has(dep));
|
|
323
|
+
if (shadowLiveDependencies.length) {
|
|
324
|
+
return { kind: 'rejected', reason: 'shadow-depends-on-live', detail: [...new Set(shadowLiveDependencies)] };
|
|
325
|
+
}
|
|
317
326
|
|
|
318
327
|
let restoredEdges = 0;
|
|
319
328
|
const reordered = rest.map((piece) => {
|
|
320
|
-
if (
|
|
329
|
+
if (piece.dependsOn.includes(SHADOW_PIECE_ID)) return piece;
|
|
321
330
|
restoredEdges++;
|
|
322
331
|
return { ...piece, dependsOn: [...piece.dependsOn, SHADOW_PIECE_ID] };
|
|
323
332
|
});
|
|
@@ -457,7 +466,7 @@ export function readDecomposeProposals(input: {
|
|
|
457
466
|
/** 승격하지 «않은» 제안 하나 — ⛔ 조용히 원본만 두면 다음 라운드가 같은 제안을 다시 쓴다. */
|
|
458
467
|
export interface DecomposeRejection {
|
|
459
468
|
feature: string;
|
|
460
|
-
reason: 'dangling-dependsOn';
|
|
469
|
+
reason: 'dangling-dependsOn' | 'shadow-depends-on-live' | 'shadow-depends-on-self';
|
|
461
470
|
/** 무엇이 매달렸나 — 조각 목록에 없는 선행 id 들. */
|
|
462
471
|
detail: string[];
|
|
463
472
|
}
|
|
@@ -533,17 +542,19 @@ export function applyDecomposeProposals(
|
|
|
533
542
|
for (const goal of goals) {
|
|
534
543
|
const pieces = byFeature.get(goal.feature);
|
|
535
544
|
if (!pieces) { out.push(goal); continue; }
|
|
536
|
-
// ⛔⭐ shadow-first 가드 —
|
|
545
|
+
// ⛔⭐ shadow-first 가드 — shadow proposal의 매달린 간선은 «쪼개지 않는다»(원본 유지).
|
|
546
|
+
// 일반 proposal은 기존 orderPiecesTopologically 계약대로 dangling 간선을 세고 계속 처리한다.
|
|
537
547
|
const plan = planShadowFirstDispatch(pieces);
|
|
538
548
|
if (plan.kind === 'rejected') {
|
|
539
|
-
rejected.push({ feature: goal.feature, reason: plan.reason, detail: [...plan.
|
|
549
|
+
rejected.push({ feature: goal.feature, reason: plan.reason, detail: [...plan.detail] });
|
|
540
550
|
// ⛔⭐ 거부를 «로그와 값에 다» 남긴다 — 조용히 버리면 다음 라운드가 같은 제안을 다시 쓴다.
|
|
541
551
|
// 혼합 문서 거부(mixed-decompose-document)와 같은 관측 채널·같은 fail-open 규율이다.
|
|
542
552
|
try {
|
|
543
553
|
debug.log('self-dev.decompose', 'decompose-rejected', {
|
|
544
554
|
feature: goal.feature,
|
|
545
555
|
reason: plan.reason,
|
|
546
|
-
|
|
556
|
+
detail: [...plan.detail],
|
|
557
|
+
...(plan.reason === 'dangling-dependsOn' ? { danglingIds: [...plan.detail] } : {}),
|
|
547
558
|
});
|
|
548
559
|
} catch { /* fail-open */ }
|
|
549
560
|
out.push(goal);
|
|
@@ -442,6 +442,24 @@ function isRawSubtask(value: unknown): value is RawSubtask {
|
|
|
442
442
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
443
443
|
}
|
|
444
444
|
|
|
445
|
+
function ensureSingleCompletionCriterion(feature: string, targetPaths: string[]): string {
|
|
446
|
+
const lines = feature.split(/\r?\n/);
|
|
447
|
+
const criteria = lines.filter((line) => /^\s*완료 기준\s*:/.test(line));
|
|
448
|
+
if (criteria.length === 0) {
|
|
449
|
+
return `${feature}\n완료 기준: ${targetPaths.join(' · ')}의 변경을 확인하고 관련 시험을 통과한다.`;
|
|
450
|
+
}
|
|
451
|
+
if (criteria.length === 1 && criteria[0]!.trim().length > '완료 기준:'.length) return feature;
|
|
452
|
+
const criterionText = criteria
|
|
453
|
+
.map((line) => line.replace(/^\s*완료 기준\s*:\s*/, '').trim())
|
|
454
|
+
.filter(Boolean)
|
|
455
|
+
.join(' · ');
|
|
456
|
+
const normalizedCriterion = criterionText || `${targetPaths.join(' · ')}의 변경을 확인하고 관련 시험을 통과한다.`;
|
|
457
|
+
const firstCriterionIndex = lines.findIndex((line) => /^\s*완료 기준\s*:/.test(line));
|
|
458
|
+
const withoutCriteria = lines.filter((line) => !/^\s*완료 기준\s*:/.test(line));
|
|
459
|
+
withoutCriteria.splice(Math.min(firstCriterionIndex, withoutCriteria.length), 0, `완료 기준: ${normalizedCriterion}`);
|
|
460
|
+
return withoutCriteria.join('\n');
|
|
461
|
+
}
|
|
462
|
+
|
|
445
463
|
/**
|
|
446
464
|
* G6 (1c) — 결정론적 hotPaths 추론. 분해된 sub-goal 의 feature 텍스트에서 repo 파일
|
|
447
465
|
* 경로(src/…·docs/…·scripts/… + 확장자)를 뽑는다. LLM 이 hotPaths 를 안 채워도 hot-file
|
|
@@ -476,7 +494,8 @@ export function inheritDecomposedTargetPaths(parentFeature: string, goals: SelfD
|
|
|
476
494
|
? own[index]!
|
|
477
495
|
: (goal.hotPaths ?? []).filter((path) => parentTargets.includes(path)));
|
|
478
496
|
const claimedOwners = parentTargets.map((path) => goals.flatMap((_, index) => claims[index]!.includes(path) ? [index] : []));
|
|
479
|
-
const
|
|
497
|
+
const sharedExplicitTarget = own.length === 2 && own[0]!.some((path) => own[1]!.includes(path));
|
|
498
|
+
const conflictingClaims = sharedExplicitTarget || claimedOwners.some((indices) => indices.length > 1);
|
|
480
499
|
const nameOwners = parentTargets.map((path) => {
|
|
481
500
|
const stemWords = path.split('/').at(-1)!.replace(/\.[^.]+$/, '').toLowerCase().match(/[a-z0-9]+/g) ?? [];
|
|
482
501
|
if (!stemWords.length || stemWords.join('').length < 4) return [];
|
|
@@ -507,24 +526,41 @@ export function inheritDecomposedTargetPaths(parentFeature: string, goals: SelfD
|
|
|
507
526
|
// A named path wins over model order; if every path points at one child,
|
|
508
527
|
// keep the old scope rather than inventing work for the other child.
|
|
509
528
|
const partitions = goals.map((_, index) => parentTargets.filter((_, pathIndex) => owners[pathIndex] === index));
|
|
510
|
-
const sharedOtherPaths = (goals[0]?.hotPaths ?? []).some((path) =>
|
|
511
|
-
!parentTargets.includes(path) && (goals[1]?.hotPaths ?? []).includes(path));
|
|
512
529
|
const conflictingParentReference = goals.some((goal, index) =>
|
|
513
530
|
own[index]!.length > 0 && (goal.hotPaths ?? []).some((path) =>
|
|
514
531
|
parentTargets.includes(path) && !own[index]!.includes(path)));
|
|
515
532
|
if (partitions.every((paths) => paths.length > 0)
|
|
516
533
|
&& !conflictingClaims && !ambiguousName && !conflictingNameClaim && !conflictingUnclaimedHint
|
|
517
|
-
&& !
|
|
534
|
+
&& !conflictingParentReference) return goals.map((goal, index) => {
|
|
518
535
|
const targets = partitions[index]!;
|
|
519
|
-
|
|
520
|
-
|
|
536
|
+
// A declared child target may add a helper outside the parent fence. Bare
|
|
537
|
+
// hotPaths outside that fence are references, so do not widen the write fence.
|
|
538
|
+
const explicitHelpers = own[index]!.filter((path) => !parentTargets.includes(path));
|
|
539
|
+
const feature = `${goal.feature}${own[index]!.length ? '' : `\n대상 경로: ${targets.join(' · ')}`}`;
|
|
540
|
+
return { ...goal, hotPaths: [...new Set([...targets, ...explicitHelpers])],
|
|
541
|
+
feature: ensureSingleCompletionCriterion(feature, targets) };
|
|
521
542
|
});
|
|
522
543
|
}
|
|
523
544
|
}
|
|
524
|
-
|
|
545
|
+
const explicitChildTargets = goals.map((goal) => declaredTargets(goal.feature ?? ''));
|
|
546
|
+
const explicitParentTargets = explicitChildTargets.map((paths) => paths.filter((path) => parentTargets.includes(path)));
|
|
547
|
+
const explicitTargetsArePartition = goals.length === 2
|
|
548
|
+
&& explicitParentTargets.every((paths) => paths.length > 0)
|
|
549
|
+
&& new Set(explicitChildTargets.flat()).size === explicitChildTargets.flat().length
|
|
550
|
+
&& explicitParentTargets[0]!.every((path) => !explicitParentTargets[1]!.includes(path))
|
|
551
|
+
&& new Set(explicitParentTargets.flat()).size === parentTargets.length
|
|
552
|
+
&& parentTargets.every((path) => explicitParentTargets.flat().includes(path))
|
|
553
|
+
&& goals.every((goal, index) => (goal.hotPaths ?? []).every((path) =>
|
|
554
|
+
!parentTargets.includes(path) || explicitChildTargets[index]!.includes(path)));
|
|
555
|
+
return goals.map((goal, index) => {
|
|
525
556
|
// hotPaths also contains inferred references; only an explicit target line establishes child scope.
|
|
526
|
-
const own =
|
|
527
|
-
if (own.length)
|
|
557
|
+
const own = explicitChildTargets[index]!;
|
|
558
|
+
if (own.length) {
|
|
559
|
+
if (explicitTargetsArePartition) {
|
|
560
|
+
return { ...goal, hotPaths: own, feature: ensureSingleCompletionCriterion(goal.feature ?? '', own) };
|
|
561
|
+
}
|
|
562
|
+
return goal;
|
|
563
|
+
}
|
|
528
564
|
return { ...goal, hotPaths: [...new Set([...(goal.hotPaths ?? []), ...parentTargets])],
|
|
529
565
|
feature: `${goal.feature}\n대상 경로: ${parentTargets.join(' · ')}` };
|
|
530
566
|
});
|
|
@@ -45,7 +45,7 @@ import { addSelfDevRunParticipant, processBirthId, saveSelfDevRun } from './run-
|
|
|
45
45
|
import { getUserConfig, resolveRoleLlm, type RoleLlmSource } from '../user-config.js';
|
|
46
46
|
import { applyGlmCredentialFallback, GlmChildCredentialError } from './glm-credential-guard.js';
|
|
47
47
|
import { reviewReasoningEffort } from '../model-tier/review-effort.js';
|
|
48
|
-
import { getProvider, inferProviderFromModel } from '../llm.js';
|
|
48
|
+
import { getProvider, getProviderForConfig, inferProviderFromModel } from '../llm.js';
|
|
49
49
|
import { buildReviewProviderAttempts, defaultReviewFallbackModel, runReviewWithFallback, reviewFallbackModelsFromConfig, runSubscriptionReviewer, type SubscriptionReviewerDeps } from './review-provider-fallback.js';
|
|
50
50
|
import { loadLlmPolicy, resolveSubscriptionReviewer } from '../policy/llm-policy.js';
|
|
51
51
|
import type { DefaultSeamsOptions } from '../self-implement/seams.js';
|
|
@@ -1126,12 +1126,34 @@ export async function buildDefaultSelfImplementSeams(
|
|
|
1126
1126
|
// ⛔ 쿼터 폴백(`DEFAULT_FALLBACK_CHAIN`)과 «다른 축»이다 — 그 자는 「계정이 남았나」를 본다.
|
|
1127
1127
|
// ⭐ 첫 시도 성공이면 종전과 «완전히 동일»하다(관측 한 줄만 는다).
|
|
1128
1128
|
const reviewFallbackModels = reviewFallbackModelsFromConfig();
|
|
1129
|
-
const reviewAttemptForModel = (model: string, label: string) =>
|
|
1130
|
-
model
|
|
1131
|
-
provider
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1129
|
+
const reviewAttemptForModel = (model: string, label: string, configuredProvider?: string) => {
|
|
1130
|
+
// GLM's historical alias and both OpenRouter spellings identify the same model even when
|
|
1131
|
+
// a Pod/default role carries no provider source. Resolve the provider from the canonical ID.
|
|
1132
|
+
const normalizedInput = model.trim().toLowerCase();
|
|
1133
|
+
const isGlm53 = normalizedInput === 'glm-5.3'
|
|
1134
|
+
|| normalizedInput === 'z-ai/glm-5.3'
|
|
1135
|
+
|| normalizedInput === 'openrouter/z-ai/glm-5.3';
|
|
1136
|
+
const normalizedModel = isGlm53
|
|
1137
|
+
? 'openrouter/z-ai/glm-5.3'
|
|
1138
|
+
: configuredProvider === 'openrouter' && !model.startsWith('openrouter/') ? `openrouter/${model}` : model;
|
|
1139
|
+
const routeProvider = normalizedModel === 'openrouter/z-ai/glm-5.3' ? 'openrouter' : configuredProvider;
|
|
1140
|
+
let provider: ReturnType<typeof getProvider> | undefined;
|
|
1141
|
+
try {
|
|
1142
|
+
if (routeProvider) {
|
|
1143
|
+
const config = getUserConfig();
|
|
1144
|
+
provider = getProviderForConfig({ ...config, llm: { ...config.llm, provider: routeProvider as typeof config.llm.provider } }, normalizedModel);
|
|
1145
|
+
} else if (inferProviderFromModel(normalizedModel)) {
|
|
1146
|
+
provider = getProvider(normalizedModel);
|
|
1147
|
+
}
|
|
1148
|
+
} catch {
|
|
1149
|
+
// An unavailable or unsupported configured primary must not prevent the existing fallback attempt.
|
|
1150
|
+
}
|
|
1151
|
+
return { model: normalizedModel, provider, label };
|
|
1152
|
+
};
|
|
1153
|
+
const primaryProviderIsPinned = reviewRole.source === 'flag' || reviewRole.source === 'config-role'
|
|
1154
|
+
|| reviewRole.source === 'environment';
|
|
1155
|
+
const configuredPrimaryProvider = primaryProviderIsPinned ? reviewRole.provider : undefined;
|
|
1156
|
+
const primaryReviewAttempt = reviewAttemptForModel(reviewModel, 'primary', configuredPrimaryProvider);
|
|
1135
1157
|
const reviewAttempts = buildReviewProviderAttempts(
|
|
1136
1158
|
primaryReviewAttempt,
|
|
1137
1159
|
[...reviewFallbackModels, defaultReviewFallbackModel(primaryReviewAttempt.provider?.name)]
|