elanous 0.2.22 → 0.2.24
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/NOTICE +7 -0
- package/README.md +32 -22
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/{aBi6EyMtLsrl7J8eH4kF7 → Q-7iofoxOEv1WX18S35of}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{119fc678.6f591cdb84ca5791.js → 0673cc54.8e2ef1c23e49e190.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{a9f2b54d-40c16bd0efdb04b8.js → 0a09e062-34f747a17d8d8c2e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{f8626309.a4e5d362b1d55e59.js → 0e3acd34.d42b2ef87fdf4234.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1168.a0fb3d9db76c00bd.js +77 -0
- package/apps/pwa/out/_next/static/chunks/{7175-350f4ce2873bc038.js → 1325-dc3f3c21eb181cb4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1357.a843c41d2cd7ec31.js +34 -0
- package/apps/pwa/out/_next/static/chunks/1430.53f49882b17607c2.js +24 -0
- package/apps/pwa/out/_next/static/chunks/1459-be6509b3419d8a9f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6767.8e6c5f6e744fcd9f.js → 1505.5826671109111e75.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/153.0a4e3cd516930491.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1572.7bc291352e241a45.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1593-d07ad068c120dfb0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1608.b7c900baa56cab32.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1615-4d8156febaac4b35.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1646.e03f0fbc26bc72f6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7327-2d69fb321ba73389.js → 1669-da843ed73aa301f5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/176.13ba0659e3e96fd4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1990.9c60f495ef33c070.js +36 -0
- package/apps/pwa/out/_next/static/chunks/2042e469.f86158dd5c1e51a1.js +122 -0
- package/apps/pwa/out/_next/static/chunks/2528.0af5c0e1fad88df6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2543-28ec6aeb80a5e1e1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2561.43c99d6ee914ee6a.js +62 -0
- package/apps/pwa/out/_next/static/chunks/2638.b39ab2f674caa1a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/272-0eed0fb0aab716b6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7899.597af4a9996c907f.js → 2721.bc9a8f36bd85c07a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2778.67e0c1d484189ccf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2841.10ff309f6a3168af.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2886-9639f97d523d752a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2978.57fb87ce21cc5a85.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3664.15f968c39d15bd28.js +149 -0
- package/apps/pwa/out/_next/static/chunks/3786-935eb3fcde90e496.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3813.df4a01ae89c6f63f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3961-aaae04ed1d32622f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3992.f79c70480e8c4077.js +309 -0
- package/apps/pwa/out/_next/static/chunks/40-413e8641de9ed1e5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4054-521f11a503daed64.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4315.e7356f34c7d8ec79.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4489-bf629de6f04f7681.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4540.557733cc88c6a82b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/462.0275b4338c5b6337.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4658-7ed9266098a787e4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4945-0f4046cfc3228ea3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{d70879db.c66c56a95a91efc6.js → 4c5e95ce.83e9b16add6fcd8c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5105-18b4165c5d3a86b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5205-6992210fe31f45f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5287-72898b126d722457.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6158.566c890adc06a459.js → 5313.1697309c532b9856.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{79b78388.663188133449d707.js → 53746282.1be36038d1abd949.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5474.991b90688c3cb321.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5544-871146192d095594.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5578.ac963634373b28c6.js +286 -0
- package/apps/pwa/out/_next/static/chunks/5935.d5e8ca3e096772e8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5967-c0a80f8ffe5d4050.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1268.0840ff91e083fcbd.js → 5974.360f8441eb0ac1ec.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6006.84e8b418a7a0db97.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6013-1267ba7454d6764b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6038-1e0f7ee1086da4cf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/617.709dd0019fe99796.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6261.fb9bf94947094636.js +74 -0
- package/apps/pwa/out/_next/static/chunks/6411.1966866fae31ffa9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6481-b829d99aa8d158f5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6541.2b7daa043100d0fa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6571-926ddf024a6ad5df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6597.2d7a6d77ab485b27.js +64 -0
- package/apps/pwa/out/_next/static/chunks/67.5dd2dc543c2fa3de.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9832.2ab2e818013574c7.js → 6702.ebbd165d5e4a4a14.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6777-312496b0d774719b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/681.0116f7036cfb4e8d.js +32 -0
- package/apps/pwa/out/_next/static/chunks/6871.30b2bf23b3126e36.js +24 -0
- package/apps/pwa/out/_next/static/chunks/6882.737d366d54e29d83.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7035.54c2c535164b1c9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7086-8bfa7e8f796a03d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7126.5e5599f251726b67.js +93 -0
- package/apps/pwa/out/_next/static/chunks/7203-47ff0740a293e284.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7268.017f49dafb5f0ff3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7355.5d65a87e9567ae08.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7392.4018c2a62177f296.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6110.1297d4093fdfbb0d.js → 740.90b31555290236a9.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/7471.3a3d1be50559cfb8.js +148 -0
- package/apps/pwa/out/_next/static/chunks/7500.73489a345cef2201.js +226 -0
- package/apps/pwa/out/_next/static/chunks/{9070.067c106528ec1ae6.js → 7518.49161e8f5814abdb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7565.c2f72a15c1ed0396.js +27 -0
- package/apps/pwa/out/_next/static/chunks/7651.6d1c984d3d8587a4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7713.7ab863ed59b2d661.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7793.d7cd2026767ddd54.js +115 -0
- package/apps/pwa/out/_next/static/chunks/7837.c7c267e5dceadb11.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7891.09266382daf70d1c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7905.b230b9d06cb4ad5d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7990-cbf6a01bcbdcb7e6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8119-819c549e0c197786.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8186-74ea19a3700d04a8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8194.484f51e273d9abd2.js → 8264.00e434fbd02e9311.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/8267-e7b3262b735ae106.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8386.86518e55b75f7cf5.js +8 -0
- package/apps/pwa/out/_next/static/chunks/{088d8e8a.8069543d082bec12.js → 83cfc5c8.349535543c1548b6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8437.ba6eeeb29590042f.js +23 -0
- package/apps/pwa/out/_next/static/chunks/{1948.5f35b39eef222a94.js → 8438.ee7f0df3b3f6fcb4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8469-1500be57e582296f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8483-7164cecdaf178ca6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4588.ad3364cb7fb97ada.js → 8532.a86e99acf9b761cb.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/8569.b853a8daa8f31d12.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8722-4c940f02c496ad36.js +1 -0
- package/apps/pwa/out/_next/static/chunks/887-41d0dcf5af48c628.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8925-2abfb48af477fb7f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{88729267.9c6c000157c83f2f.js → 89849432.9eaa2f4c9c010965.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/9039.da86361496797522.js +90 -0
- package/apps/pwa/out/_next/static/chunks/905.d5745a25884754d4.js +94 -0
- package/apps/pwa/out/_next/static/chunks/9089-d909f3d4478b0628.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9096.dc5c7a267f83790c.js +41 -0
- package/apps/pwa/out/_next/static/chunks/93.a567257b6bdb7fe4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9320.419acb9665b46597.js +287 -0
- package/apps/pwa/out/_next/static/chunks/9356.b8ceda6634612ff8.js +79 -0
- package/apps/pwa/out/_next/static/chunks/94.e9e1043b35cd3eed.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9400-7498ea90b2e6ee8f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3522-1de1319d028ac89c.js → 9502-32c5dc22e8f120f5.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/9930-58644af9c813d6e1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9932.367cf4725fedd6e2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9935.1628b904cdc8ce0e.js +104 -0
- package/apps/pwa/out/_next/static/chunks/{7630.2b9a68659053ff4e.js → 9976.8f28864317639fe6.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-a2aa8709d193ee0d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-3b9fc39362473ae7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f2b62c19ca68fef8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-d7602d489edf5f37.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-24282bf9f90031a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-8b7c5ab6b5bc8d64.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-4eb84d454f8c3415.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-b2e494bdad57fcb5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/{page-80ed511e02c81412.js → page-c0ab229673a8b0eb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-3e2b45f3c36dbac4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-c22aa511b28743ad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-26345242e4049f55.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-bf88c0f558d8ef54.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-52fec523e5b5d3ad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-67723dfdcde92b31.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-a2aa8709d193ee0d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-22725e2570f1126b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-1891335950d68b70.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-3267af1ebdc73cf5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-c314b75c11234998.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-9f9c85415f61782b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-c1d4276059085587.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-833aab587f26ad4c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-8526c17ae38e6a50.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-f998637a8402115c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-b7bb53828b17b335.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-1b1850de0257e46d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-6f23159fedb41f67.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-1d809a87139dd024.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-da9e570234d481fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-b92caddb5c715f30.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-8ce3a38e210b810a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-57ffeeb6019440fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-abbb417bf514630b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-2c2b3f29cec1efa4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-9369279f72fc7b51.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-64861f14039499c3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ddc4c93efd8ab94b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-a2aa8709d193ee0d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-901a1391b81053bc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-68d9bbaac9841a58.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-b5c0c996f329371e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-89881ccbcf728978.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-0e87a803b3d7165e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-58d4e5cb30ef4871.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-02ce4c3b5f39e4d2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-e620d1bb8eadcec2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-acf868c64d77f950.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-54fa605fa6dba457.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-bc79f0833533fa84.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-d5c4398eea03d8f3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/b4e12462-5fab4a813a63dadd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/cd39fa05.fac4545f42a3ef70.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{f6b7c9ba.64a895b8b2fedbdc.js → ce383d63.d2ede338788ed18e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{framework-5c169757551134ed.js → framework-b2763b10dc6b3836.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/main-app-27893e93b0ec193d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-f280047194e1daf8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-e90eff2d0b70564c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-70f2d654b3435d34.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-4794f053bd5e4230.js +1 -0
- package/apps/pwa/out/_next/static/css/72becfd42807b50d.css +1 -0
- package/apps/pwa/out/_next/static/css/d0a48dc099ed86cf.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +23 -23
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +23 -23
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +23 -23
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +22 -22
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +22 -22
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +23 -23
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +22 -22
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +23 -23
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +23 -23
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +22 -22
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +23 -23
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +24 -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 +24 -23
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +22 -22
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +22 -22
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +22 -22
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +23 -23
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +23 -23
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +22 -22
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +22 -22
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +22 -22
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +22 -22
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +23 -23
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +23 -23
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +22 -22
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +23 -23
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +23 -23
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +23 -23
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +23 -23
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +23 -23
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +22 -22
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +23 -23
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +23 -23
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +23 -23
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +23 -23
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +23 -23
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +23 -23
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +23 -23
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +23 -23
- package/catalog/models/anthropic/claude-haiku-5-5.yaml +32 -0
- package/catalog/models/anthropic/claude-opus-5-5.yaml +5 -0
- package/catalog/models/anthropic/claude-sonnet-5-5.yaml +31 -0
- package/catalog/models/anthropic/claude-sonnet-5.yaml +8 -2
- package/catalog/models/openai/gpt-6-astra.yaml +6 -0
- package/catalog/models/openai/gpt-6-luna.yaml +6 -0
- package/catalog/models/openai/gpt-6-sol.yaml +6 -0
- package/catalog/models/openrouter/deepseek-v4-pro-0813.yaml +39 -0
- package/catalog/models/openrouter/deepseek-v4.1-flash.yaml +38 -0
- package/catalog/models/openrouter/glm-5.3-flash.yaml +35 -0
- package/catalog/providers/openrouter.yaml +2 -0
- package/graphs/implement-loop.yaml +31 -0
- package/graphs/log-horizon/log-horizon-watch.yaml +25 -0
- package/graphs/log-horizon/recipes.yaml +3 -0
- package/graphs/ops/harness-gc.yaml +17 -0
- package/graphs/ops/recipes.yaml +3 -0
- package/graphs/overlays/README.md +1 -1
- package/graphs/overlays/stop-heal-ladder.yaml +105 -0
- package/graphs/release/recipes.yaml +1 -1
- package/graphs/release/release-loop.yaml +6 -2
- package/graphs/release-rehearsal/recipes.yaml +12 -0
- package/graphs/release-rehearsal/release-rehearsal.yaml +17 -0
- package/package.json +4 -1
- package/scripts/add-api-key.sh +1 -1
- package/scripts/bench-report.ts +82 -3
- package/scripts/ci-typecheck-changed.ts +80 -14
- package/scripts/fleet/bedrock-pod-secret.ts +122 -0
- package/scripts/fleet/node-setup-linux.sh +97 -0
- package/scripts/fleet/node-setup.sh +11 -0
- package/scripts/fleet/zai-pod-secret.ts +86 -0
- package/scripts/hq/hq-fence-wrapper.sh +148 -0
- package/scripts/land-global-checks.ts +3 -0
- package/scripts/lib/typecheck-ratchet.ts +51 -0
- package/scripts/measure-log-diet-2.ts +213 -0
- package/scripts/measure-tsc-affected-roots.ts +289 -0
- package/scripts/openai-relay-server.ts +5 -1
- package/scripts/release-loop/docs-node.ts +258 -43
- package/scripts/release-loop/gate-executor.ts +28 -0
- package/scripts/release-loop/gate-method.ts +59 -0
- package/scripts/release-loop/gate-node.ts +335 -33
- package/scripts/release-loop/gate-wall.ts +208 -0
- package/scripts/release-loop/known-issues-node.ts +53 -8
- package/scripts/release-loop/publish-at.ts +14 -0
- package/scripts/release-loop/publish-node.ts +17 -2
- package/scripts/release-loop/resume-release.ts +40 -4
- package/scripts/release-loop/resume.ts +94 -0
- package/scripts/release-loop/shard-plan.ts +3 -11
- package/scripts/release-loop/tui-node-checks.ts +22 -0
- package/scripts/release-loop/unattended-release.ts +29 -7
- package/scripts/rhythm/daily.ts +51 -2
- package/scripts/rhythm/weekly.ts +3 -2
- package/scripts/tsc-baseline-cache.ts +147 -0
- package/scripts/tsc-main-safety-net.ts +189 -0
- package/scripts/usage-rollup.ts +64 -8
- package/src/acp/codex-plugins.ts +48 -6
- package/src/agent/monad-agent-turn.ts +67 -5
- package/src/agent/run-context.ts +20 -0
- package/src/agent/tool-profile.ts +28 -2
- package/src/agent-mission/acp-judge.ts +8 -2
- package/src/agent-mission/capabilities-cli.ts +16 -1
- package/src/agent-mission/driver.ts +19 -4
- package/src/agent-mission/pr-review-watch.ts +6 -2
- package/src/agent-mission/resource-ladder.ts +8 -3
- package/src/agent-mission/review-loop.ts +41 -7
- package/src/agent-substrate/acp-implementer.ts +139 -0
- package/src/agent-substrate/acp-reviewer.ts +17 -8
- package/src/agent-substrate/pr-reviewer.ts +191 -28
- package/src/agent-substrate/review-intent.ts +6 -4
- package/src/agent-substrate/self-review-cli.ts +155 -21
- package/src/agent-substrate/shard-boundary-intent.ts +92 -26
- package/src/ask-user-question/pending-questions.ts +8 -2
- package/src/autopilot/build/llm-conflict-merge.ts +216 -12
- package/src/autopilot/codebase-grounding.ts +44 -0
- package/src/autopilot/llm-control-brain.ts +13 -1
- package/src/autopilot/mission-codebase-gate.ts +8 -77
- package/src/autopilot/mission-critique.ts +18 -5
- package/src/autopilot/mission-feasibility-negotiate.ts +11 -10
- package/src/autopilot/mission-trace.ts +12 -1
- package/src/autopilot/pr-manager.ts +12 -3
- package/src/autopilot/system-lookback-run.ts +16 -10
- package/src/bench/bench.ts +183 -0
- package/src/boot/acp-server.ts +4 -7
- package/src/boot/acp-socket-path.ts +7 -0
- package/src/briefing/brief-items.ts +21 -13
- package/src/budget/fetchers/grok.ts +15 -5
- package/src/budget/llm-cost.ts +37 -5
- package/src/budget/types.ts +8 -2
- package/src/budget/unified-usage.ts +88 -6
- package/src/chat/index.ts +12 -3
- package/src/cli/agent-cli.ts +20 -0
- package/src/cli/bench-cli.ts +34 -0
- package/src/cli/brief-cli.ts +27 -21
- package/src/cli/cli-user-error.ts +9 -2
- package/src/cli/guardian-cli.ts +26 -1
- package/src/cli/image-cli.ts +101 -0
- package/src/cli/log-event-names.ts +7 -0
- package/src/cli/logs-cli.ts +1 -0
- package/src/cli/mcp-login.ts +111 -37
- package/src/cli/plugin-cli.ts +21 -1
- package/src/cli/pod-cli.ts +26 -0
- package/src/cli/pr-cli.ts +90 -5
- package/src/cli/pr-land-overlap-evidence.ts +279 -0
- package/src/cli/release-cli.ts +63 -12
- package/src/cli/rfc-status.ts +52 -2
- package/src/cli/self-update.ts +277 -10
- package/src/cli/skills-cli.ts +12 -3
- package/src/cli/tasks-cli.ts +241 -30
- package/src/cli/usage-cli.ts +91 -8
- package/src/context-bus/context-first.ts +51 -2
- package/src/context-bus/context-now-surfaces.ts +13 -2
- package/src/context-bus/long-term-memory.ts +3 -1
- package/src/context-bus/nightly-condense.ts +3 -2
- package/src/core-turn/run-goal-loop.ts +87 -2
- package/src/dashboard/ad-run-setup-bindings.ts +279 -0
- package/src/dashboard/chat-fold.ts +20 -0
- package/src/dashboard/first-screen-band.ts +151 -1
- package/src/dashboard/index.ts +45 -281
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +5 -3
- package/src/dashboard/stale-install-check.ts +24 -2
- package/src/dashboard/turn-stream-formatter.ts +25 -0
- package/src/debug/log-diet.ts +190 -0
- package/src/debug/log.ts +70 -17
- package/src/display/coordinator.ts +25 -2
- package/src/domains/coo-admin-tool.ts +27 -0
- package/src/domains/cron-match.ts +1 -0
- package/src/domains/outbound-alert.ts +17 -6
- package/src/domains/release-tool.ts +158 -10
- package/src/domains/schedule-registry.ts +10 -7
- package/src/domains/schedule-runner.ts +1 -0
- package/src/elanous-config-dir.ts +2 -2
- package/src/elanous-daemon.ts +3 -3
- package/src/error-report/report.ts +21 -4
- package/src/execution-loop/launch-gate.ts +1 -1
- package/src/expression/i18n/messages.en.ts +5 -0
- package/src/expression/i18n/messages.ja.ts +5 -0
- package/src/expression/i18n/messages.ko.ts +5 -0
- package/src/expression/i18n/messages.zh.ts +5 -0
- package/src/expression/i18n/types.ts +8 -0
- package/src/github/pr-labels.ts +2 -0
- package/src/graph-runner/graph-cli.ts +42 -1
- package/src/graph-runner/runner.ts +218 -8
- package/src/grok/usage.ts +23 -2
- package/src/grounding/ref-index.ts +253 -0
- package/src/harness/dispatch-backpressure.ts +267 -0
- package/src/harness/harness-clean.ts +199 -78
- package/src/harness/harness-cli-command.ts +229 -35
- package/src/harness/harness-gc.ts +331 -0
- package/src/harness/harness-seams.ts +2 -20
- package/src/harness/harness-stop.ts +4 -2
- package/src/harness/harness-substrate-default.ts +214 -8
- package/src/harness/launch-registry.ts +6 -0
- package/src/harness/nested-elanous-policy.ts +4 -2
- package/src/harness/worktree-branch-prefix.ts +9 -0
- package/src/hq/fence-wrapper.ts +7 -0
- package/src/hq/fence.ts +187 -0
- package/src/hq/hq.ts +33 -2
- package/src/hq/lease.ts +13 -0
- package/src/hq/seats.ts +133 -21
- package/src/images/image-ledger.ts +179 -0
- package/src/index.ts +250 -69
- package/src/instance/child-scope.ts +32 -1
- package/src/instance/dev-project.ts +133 -0
- package/src/instance/resolve.ts +24 -0
- package/src/instance/spawn-elanous.ts +45 -0
- package/src/intake-plane/collect-github.ts +19 -1
- package/src/intake-plane/digest.ts +45 -20
- package/src/intake-plane/lens.ts +36 -8
- package/src/intake-plane/ref-prefetch.ts +110 -0
- package/src/intelligence-map/model-alias.ts +6 -0
- package/src/intelligence-map/model-catalog.ts +113 -0
- package/src/knowledge/kgs/pack.ts +5 -2
- package/src/knowledge/kgs/sqlite-store.ts +15 -0
- package/src/knowledge/tools/knowledge-query.ts +20 -2
- package/src/knowledge/write.ts +234 -2
- package/src/llm/bedrock-eventstream.ts +215 -0
- package/src/llm/bedrock-provider.ts +248 -0
- package/src/llm/bedrock.ts +491 -0
- package/src/llm/openrouter-byok-cost.ts +96 -0
- package/src/llm/openrouter-deepseek.ts +151 -0
- package/src/llm/openrouter-upstream-pins.config.ts +25 -0
- package/src/llm/provider-credentials.ts +3 -1
- package/src/llm/zai-coding-plan.ts +700 -0
- package/src/llm.ts +383 -41
- package/src/loops/budget.ts +150 -0
- package/src/loops/checker.ts +148 -9
- package/src/loops/orchestrator/resync-shadow.ts +34 -7
- package/src/loops/orchestrator/seat-share.ts +6 -49
- package/src/loops/orchestrator/traffic.ts +5 -81
- package/src/market/signed-index.ts +42 -0
- package/src/maturity/feature-maturity.ts +2 -2
- package/src/mcp/mcp-oauth.ts +136 -17
- package/src/model-tier/llm-tier-map.ts +52 -4
- package/src/models/prompts.ts +23 -1
- package/src/mss/logging/horizon-watch.ts +168 -0
- package/src/mss/logging/log-store.ts +262 -26
- package/src/native-tool-catalog.ts +1 -1
- package/src/nexus/api/consult-requests.ts +7 -10
- package/src/nexus/api/discord-trigger-bot.ts +6 -3
- package/src/nexus/api/error-reports.ts +30 -8
- package/src/nexus/api/http-server.ts +8 -0
- package/src/nexus/api/loop-resources.ts +42 -0
- package/src/nexus/api/missions.ts +73 -2
- package/src/nexus/api/ops-api.ts +18 -0
- package/src/nexus/api/outbound-report.ts +8 -3
- package/src/nexus/api/telegram-trigger-bot.ts +6 -3
- package/src/nexus/index.ts +17 -75
- package/src/nexus/outbound/format.ts +2 -0
- package/src/nexus/outbound/router.ts +198 -13
- package/src/nexus/tools-kind.ts +78 -0
- package/src/oauth/codex-account-rotation.ts +55 -20
- package/src/oauth/codex-account-store.ts +451 -23
- package/src/oauth/fallback-chain.ts +75 -15
- package/src/onboarding/first-run.ts +37 -18
- package/src/onboarding/web-first.ts +20 -2
- package/src/onboarding.ts +2 -1
- package/src/ops/machine-heartbeat.ts +185 -0
- package/src/ops/overview-cache.ts +175 -0
- package/src/ops/overview.ts +8 -0
- package/src/plugins/adapters/claude-package.ts +4 -12
- package/src/plugins/core/capability-policy.ts +141 -0
- package/src/plugins/core/host.ts +21 -8
- package/src/plugins/core/manifest.ts +19 -2
- package/src/plugins/core/trust-store.ts +15 -0
- package/src/plugins/core/types.ts +12 -0
- package/src/plugins/install/market-fetch.ts +68 -16
- package/src/plugins/install/plugin-install.ts +187 -16
- package/src/plugins/maker/plugin-maker.ts +25 -20
- package/src/plugins/maker/wizard-generate.ts +16 -2
- package/src/policy/llm-policy.ts +14 -1
- package/src/process/pid-liveness.ts +1 -1
- package/src/prompt-cache/openai.ts +13 -6
- package/src/prompt-cache/openrouter.ts +94 -0
- package/src/prompt-cache/types.ts +5 -0
- package/src/prompt-enhance/enhance.ts +69 -5
- package/src/prompt-library/family-prompt-coverage.ts +1 -0
- package/src/prompt-library/universal-preamble.ts +2 -2
- package/src/registry/discovery/openrouter-live-resolve.ts +122 -0
- package/src/registry/loader.ts +6 -1
- package/src/release-loop/checklist.ts +24 -9
- package/src/release-loop/feature-store.ts +3 -0
- package/src/release-loop/gate-shards.ts +48 -4
- package/src/release-loop/landed-to-green.ts +81 -0
- package/src/release-loop/light-rc.ts +11 -1
- package/src/release-loop/merged-pr-checklist.ts +10 -0
- package/src/release-loop/placement.ts +107 -23
- package/src/release-loop/rehearsal.ts +317 -0
- package/src/release-loop/release-schedule.ts +13 -1
- package/src/release-loop/rubric-types.ts +1 -0
- package/src/release-loop/rubric.ts +2 -2
- package/src/requirements/requirement-ledger.ts +536 -0
- package/src/retro/daily.ts +26 -12
- package/src/seat-loop/seat-loop.ts +66 -11
- package/src/seat-loop/traffic-signal.ts +44 -0
- package/src/self-dev/ask-launch-flow.ts +2 -2
- package/src/self-dev/dev-cli.ts +109 -11
- package/src/self-dev/dev-pipeline.ts +11 -8
- package/src/self-dev/draft-residue.ts +475 -0
- package/src/self-dev/draft-sweep.ts +254 -10
- package/src/self-dev/draft-triage-rules.ts +27 -1
- package/src/self-dev/graph-journey-route.ts +6 -0
- package/src/self-dev/launch-preflight-text.ts +549 -0
- package/src/self-dev/launch-preflight.ts +10 -545
- package/src/self-dev/orchestrate-cli.ts +82 -5
- package/src/self-dev/orchestrate-summary-line.ts +13 -0
- package/src/self-dev/orchestrate.ts +49 -141
- package/src/self-dev/review-provider-fallback.ts +115 -19
- package/src/self-dev/run-store.ts +1 -3
- package/src/self-dev/run-supervisor.ts +190 -36
- package/src/self-dev/run-types.ts +191 -0
- package/src/self-dev/shard-aggregate.ts +61 -13
- package/src/self-dev/shard-plan.ts +5 -1
- package/src/self-dev/shard-run.ts +23 -5
- package/src/self-dev/supervisor-verdict-edges.ts +3 -4
- package/src/self-implement/blocked-draft-policy.ts +3 -19
- package/src/self-implement/budget-gate.ts +53 -13
- package/src/self-implement/child-context-composition.ts +139 -0
- package/src/self-implement/child-llm-preference.ts +13 -5
- package/src/self-implement/claude-acp-implement.ts +67 -0
- package/src/self-implement/draft-on-stop-mode.ts +18 -0
- package/src/self-implement/flex-signals.ts +59 -0
- package/src/self-implement/follow-up-goals.ts +114 -38
- package/src/self-implement/frozen-merges.ts +8 -3
- package/src/self-implement/gate-baseline-reap.ts +157 -0
- package/src/self-implement/gate-baseline.ts +78 -16
- package/src/self-implement/gate-cli.ts +12 -2
- package/src/self-implement/gate-remote.ts +17 -6
- package/src/self-implement/goal-author-decompose.ts +10 -2
- package/src/self-implement/goal-author.ts +48 -13
- package/src/self-implement/goal-digest.ts +19 -0
- package/src/self-implement/graph-overlay-condition.ts +32 -0
- package/src/self-implement/graph-overlay-yaml.ts +41 -7
- package/src/self-implement/graph-templates.ts +33 -1
- package/src/self-implement/graph-yaml.ts +56 -0
- package/src/self-implement/headless-elanous-driver.ts +11 -9
- package/src/self-implement/heal-intake.ts +5 -1
- package/src/self-implement/host-regate.ts +120 -29
- package/src/self-implement/l8-merge-queue.ts +67 -5
- package/src/self-implement/merge-train.ts +131 -0
- package/src/self-implement/off-diff-evidence.ts +9 -0
- package/src/self-implement/orchestrator.ts +271 -25
- package/src/self-implement/review-finding-recurrence.ts +28 -0
- package/src/self-implement/rework-policy.ts +2 -1
- package/src/self-implement/round-summary-card.ts +63 -0
- package/src/self-implement/run-ledger.ts +4 -3
- package/src/self-implement/run-step-projection.ts +147 -0
- package/src/self-implement/run-stop.ts +1 -1
- package/src/self-implement/running-runs.ts +75 -5
- package/src/self-implement/seams.ts +83 -4
- package/src/self-implement/self-implement-cli.ts +12 -5
- package/src/self-implement/stop-autoheal.ts +69 -2
- package/src/self-implement/train-gate-remote.ts +158 -0
- package/src/session-runtime/index.ts +10 -1
- package/src/session-runtime/retry-api.ts +11 -1
- package/src/session-runtime/retry-policy.ts +2 -1
- package/src/skills/gift-install.ts +119 -0
- package/src/skills/runner.ts +59 -2
- package/src/skills/skill-feedback.ts +31 -1
- package/src/skills/skill-tier.ts +1 -0
- package/src/smart-wizard/capability-index.ts +231 -0
- package/src/smart-wizard/rung.ts +74 -0
- package/src/steward/launch.ts +22 -10
- package/src/steward/triage-budget.ts +62 -0
- package/src/steward/triage.ts +87 -24
- package/src/storage/file-lock.ts +8 -1
- package/src/task-agent/actions.ts +66 -5
- package/src/task-agent/card-evidence.ts +59 -13
- package/src/task-agent/completion-evidence.ts +5 -0
- package/src/task-agent/cover.ts +101 -3
- package/src/task-agent/judge.ts +20 -3
- package/src/task-agent/land-order-ledger.ts +95 -0
- package/src/task-agent/land-worktree.ts +201 -0
- package/src/task-agent/live-move-history.ts +219 -0
- package/src/task-agent/live-moves.ts +451 -34
- package/src/task-agent/parent-host.ts +117 -8
- package/src/task-agent/rejudge-on-head.ts +352 -0
- package/src/task-agent/review-prior-fix.ts +146 -0
- package/src/task-agent/review-result-capture.ts +218 -0
- package/src/task-agent/run-adopt.ts +136 -0
- package/src/task-agent/shadow.ts +154 -14
- package/src/task-agent/task-hand.ts +186 -14
- package/src/task-orchestrator/surfaces/pod-account-broker.ts +38 -5
- package/src/task-orchestrator/surfaces/pod-bedrock-child.ts +74 -0
- package/src/task-orchestrator/surfaces/pod-child-default.ts +50 -0
- package/src/task-orchestrator/surfaces/pod-child-providers.ts +42 -0
- package/src/task-orchestrator/surfaces/pod-command-job.ts +6 -3
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +94 -7
- package/src/task-orchestrator/surfaces/pod-image-source.ts +212 -0
- package/src/task-orchestrator/surfaces/pod-lease.ts +110 -17
- package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +32 -3
- package/src/task-orchestrator/surfaces/pod-pool.ts +86 -18
- package/src/task-orchestrator/surfaces/pod-zai-child.ts +101 -0
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +463 -50
- package/src/task-orchestrator/surfaces/self-implement.ts +25 -3
- package/src/telegram-service.ts +5 -1
- package/src/telegram.ts +17 -4
- package/src/time/format.ts +13 -4
- package/src/tool-runtime/goal-author-runtime.ts +1 -0
- package/src/tool-runtime/self-cognition-catalog.ts +23 -0
- package/src/tool-runtime/self-cognition-runtimes.ts +2 -24
- package/src/typecheck-ratchet.ts +1 -0
- package/src/user-config.ts +180 -32
- package/src/ux-sim/slash-menu-frames.ts +168 -0
- package/src/version/packed-revision.json +1 -1
- package/src/web-terminal/preview-tap-registry.ts +5 -2
- package/src/workflow-runtime/triggers/registry.ts +59 -0
- package/src/workflow-runtime/triggers/scheduler.ts +1 -0
- package/src/workflow-runtime/triggers/webhook-source.ts +35 -5
- package/apps/pwa/out/_next/static/chunks/1109.78a7a3288c0259d9.js +0 -148
- package/apps/pwa/out/_next/static/chunks/115.1c6690b8604f81c4.js +0 -32
- package/apps/pwa/out/_next/static/chunks/1262.76a3f08e67c5f816.js +0 -309
- package/apps/pwa/out/_next/static/chunks/1307-08b716476f1d50af.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1358d292.5c87f12cad6eaa91.js +0 -122
- package/apps/pwa/out/_next/static/chunks/1438.27a1a7b8f2308004.js +0 -149
- package/apps/pwa/out/_next/static/chunks/1442.02d85cd88f4c1eac.js +0 -79
- package/apps/pwa/out/_next/static/chunks/1501-1aad662d82ba43f7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1584.9e2dd53da6e6d4b1.js +0 -24
- package/apps/pwa/out/_next/static/chunks/1586.b989b0614afb77e6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1609.2ad355062870151f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1612-f6df0fc0eed7157b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1826-5d279da64bbbc2de.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1923.37f1d5fe7ebe3860.js +0 -27
- package/apps/pwa/out/_next/static/chunks/195-fb1d7690bf30bab4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1986-33e13d648a9df765.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1993.3fd074a2a246234e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/211-9c9090c59e2c5907.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2140.d2daf9ee96e295d1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2196-4700653d12a44b40.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2212.0359851457473efc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/224.583e562365a52f74.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2328.0f37465646bafa7d.js +0 -36
- package/apps/pwa/out/_next/static/chunks/2372.bf71372184991937.js +0 -286
- package/apps/pwa/out/_next/static/chunks/2489-d238d3e2eb5b2bf5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2537-6c289376caa88ca1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2549-a8515c86f9e8cb96.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2655.72cc6a97276c5acc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2699-325cc923ba7b8631.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2743-ef6e8c3ced74cce5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2840-5458ad50c49cac6a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2856.f75d5baef7f49b74.js +0 -1
- package/apps/pwa/out/_next/static/chunks/311.e685738f92e6e2ec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3194-807b212fb8eae065.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3324-d1d2979821dfa845.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3344.0de4b0ec5a454b7a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/335.a13f339e97893437.js +0 -94
- package/apps/pwa/out/_next/static/chunks/3394.646348f34b2500be.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3443.6276909b53d72d53.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3495.abd4254d808bf2dc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3558-bbb5ab553a0471d3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3721.ba5b82db0d9a5572.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3857-5985236d9307f676.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3916-3d02dd1fc257dd3c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3919.9ff7dc25afefee33.js +0 -74
- package/apps/pwa/out/_next/static/chunks/3998.bd9a69d9b50e9bd2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4003.ab6db1dc266576c9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4144-fad095b48a1862ee.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4216.e8ac94b9fe6b96ab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4327.c44dc2b55cb43ee5.js +0 -34
- package/apps/pwa/out/_next/static/chunks/4401.94257d497b6d26bc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4559.17ca2cdbaa8d414f.js +0 -115
- package/apps/pwa/out/_next/static/chunks/4565-3d7e3fdeb43686a8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4706.97e734bd4c9816ca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4795-f372490b178583fc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4982.6e44352f751b9a1b.js +0 -77
- package/apps/pwa/out/_next/static/chunks/5342.49c5c5a530e62b50.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5360-08a80abdf3a4da99.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5431.66c58ab1327ee0b7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5633-d6852385000738ef.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5717.bcfcb96e701b82e0.js +0 -90
- package/apps/pwa/out/_next/static/chunks/5755-30d102586789bf7f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5957.3f1a4012388dd962.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5977-5b9e8a45a5b0c823.js +0 -1
- package/apps/pwa/out/_next/static/chunks/602.9bf02ac8e9502598.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6020.3a1b347e2d2dfacc.js +0 -8
- package/apps/pwa/out/_next/static/chunks/6375.fce1d174ba6d0324.js +0 -64
- package/apps/pwa/out/_next/static/chunks/6546.92a828aef441271f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/658.957fdb0a8c6c6c8e.js +0 -287
- package/apps/pwa/out/_next/static/chunks/6706.323590aabb8b1293.js +0 -226
- package/apps/pwa/out/_next/static/chunks/6747.b67947f293a4c02d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6868.000b24a3045c5574.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6877-74399f69c7da1433.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6946.bba74e9c96050f30.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7033.a558f1b2f6912a53.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7065.46029c26c53eac50.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7087.6fae577d09249bc1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/722.de8d9801e0f6d414.js +0 -41
- package/apps/pwa/out/_next/static/chunks/726.83532d69452ee24b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7290-f09c928a06c52e2d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7497.57981e9d7a75a52a.js +0 -24
- package/apps/pwa/out/_next/static/chunks/7672.4af122ad892117c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/771.6ab889a233e7dae7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7797-df5aa0381fdc078f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8060-cc008cc6fedfa818.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8085-d065d0393c1760f5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8096.f7da0776cfde6300.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8401-35e94e9091f5eb8d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8682-7061dd4fa7bd62ed.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8695-846034ce44852c70.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8769.815ca69879f608b4.js +0 -104
- package/apps/pwa/out/_next/static/chunks/8857-aa1cc4ac90af4d40.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8f835b4f.048eeb02299e3e12.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9068.5f2764fccf86c1b2.js +0 -93
- package/apps/pwa/out/_next/static/chunks/9103-60fbef33e66f0a46.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9247-55bcfbb0e8057f59.js +0 -1
- package/apps/pwa/out/_next/static/chunks/935.4ddaa99fc1d1126c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9451.ebfb0dcc9c02250f.js +0 -23
- package/apps/pwa/out/_next/static/chunks/9559.e648369b1d57cf9a.js +0 -62
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-c1a96669158471ec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-88459e0903da2803.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-d85c43f46f58716b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-4e645600579ae952.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-87edbfd19117823b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-7f0c2b7801ac6a54.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-bf1f030a9d1adffd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-cbaf66b1e1804adf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-9f5610caaa06178c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-ec8f3575e339de74.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-86d753e460f1a989.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-4166a7d51cf0a57d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-2a19c5cd3b562580.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-b6a09cde2e07521a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-c1a96669158471ec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-f7eae1518ca0c353.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-456a8573ad811381.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-8462d6a543cbb2d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-2974cdfb87c0f9c9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-f927ffa25f3c86d1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-abd86cd832aaa011.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-79daf68f6256adaa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-8c3f168fc3f91939.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-786fb4504d0f2fa9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-75209f14597dcb8f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-bf30affe3a85af7e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-1187a44b7515434b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-3d0910185a66ed54.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-f401ee1dd5a26e25.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-5dfe7604fd842784.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-76cf838050a8d681.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-7ec8e289b4c14df6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-8c8ac17d52be2a79.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-d359ab048d63a9d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-b8b345c880bf78d1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-f151cc10ad026940.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-9875f103057da433.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-c1a96669158471ec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-9789328af9a9aa62.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-bf495a1e284f4e00.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-a263d94bca4be22a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-3962eab8ec58d16e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-9abcfac07e02a542.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-bee49f927c333abb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-bac2d56dcb02d955.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-937cbcc13176295c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-d09495594f7f480d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-69cb93d1a2e57e0e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-72ec543928d67c3e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-82906eeda0186a7b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/f6231284-45726550aba08fca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-59fe95fed40c7a01.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-4ca74dbbee7057c6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-13a0a886df4d97a1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-6af8591cd3a3f038.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-f2b4016b9b981bc8.js +0 -1
- package/apps/pwa/out/_next/static/css/f2bd5257e6af88d8.css +0 -1
- /package/apps/pwa/out/_next/static/{aBi6EyMtLsrl7J8eH4kF7 → Q-7iofoxOEv1WX18S35of}/_ssgManifest.js +0 -0
|
@@ -26,9 +26,7 @@ import { isPidAlive } from '../git-fs/worktree.js';
|
|
|
26
26
|
import type { EmbodiedTransportKind } from '../agent/embodiment.js';
|
|
27
27
|
import type { RunIdSource } from '../harness/harness-space.js';
|
|
28
28
|
import { withFileLockSync } from '../storage/file-lock.js';
|
|
29
|
-
import type { SelfDevJobResult, SelfDevGoal } from './
|
|
30
|
-
import type { SupervisorStopReason } from './run-supervisor.js';
|
|
31
|
-
import type { SupervisorNext } from './supervisor-verdict-edges.js';
|
|
29
|
+
import type { SelfDevJobResult, SelfDevGoal, SupervisorStopReason, SupervisorNext } from './run-types.js';
|
|
32
30
|
import { loadMirroredRunRecord, mirrorRunRecord } from './run-record-mirror.js';
|
|
33
31
|
|
|
34
32
|
export interface SelfDevRunParticipant {
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
// ── 런 슈퍼바이저 — 「끝까지 돌린다」를 «판정»으로 만든다 ───────────────────────
|
|
2
2
|
|
|
3
|
-
import { hasDelivered, triageRun, type FailureClassification } from './orchestrate.js';
|
|
3
|
+
import { hasDelivered, resumeKey, triageRun, type FailureClassification } from './orchestrate.js';
|
|
4
4
|
import type { DeployVerifyFinding } from '../harness/browser-verify.js';
|
|
5
|
-
import type { SelfDevJobResult } from './
|
|
5
|
+
import type { SelfDevJobResult, SupervisorStopReason, SupervisorNext, ReviewRework } from './run-types.js';
|
|
6
|
+
import { authorRepairGoal } from '../harness/helper-repair.js';
|
|
7
|
+
export type { SupervisorStopReason } from './run-types.js';
|
|
6
8
|
import { recordSelfDevRunSupervisorStop, selfDevRunsDir } from './run-store.js';
|
|
7
9
|
import { debug } from '../debug/log.js';
|
|
8
10
|
import { sweepFrozenMerges } from '../self-implement/frozen-merges.js';
|
|
9
|
-
import { routeSupervisorVerdict
|
|
11
|
+
import { routeSupervisorVerdict } from './supervisor-verdict-edges.js';
|
|
10
12
|
import { recordTaskAgentShadowMove, type TaskAgentShadowInput } from '../task-agent/shadow.js';
|
|
11
13
|
|
|
12
14
|
export interface SupervisorRound {
|
|
@@ -22,28 +24,23 @@ export interface SupervisorRound {
|
|
|
22
24
|
base?: string;
|
|
23
25
|
actionable: number;
|
|
24
26
|
reviewMustFixTrend?: SupervisorDecision['reviewMustFixTrend'];
|
|
27
|
+
signatures?: Record<string, string>;
|
|
28
|
+
oscillationRepairTaskIds?: string[];
|
|
29
|
+
/** Feature of each `oscillationRepairTaskIds` entry (same index) — reruns that mint a new taskId per round keep the goal. */
|
|
30
|
+
oscillationRepairFeatures?: string[];
|
|
31
|
+
/** Authored repair goal texts of that round, by taskId. */
|
|
32
|
+
oscillationRepairGoals?: Record<string, string>;
|
|
33
|
+
/** Tasks whose one main-sync relaunch this round used. */
|
|
34
|
+
mainSyncRelaunchTaskIds?: string[];
|
|
35
|
+
/** Original feature and relaunch goal text of those tasks — a rerun may mint a new taskId, so the piece is also found by goal. */
|
|
36
|
+
mainSyncRelaunchFeatures?: string[];
|
|
37
|
+
/**
|
|
38
|
+
* Tasks of this round that ended `status=failed` without a PR. Omitted when there are none — and on older
|
|
39
|
+
* history, which never measured it, so the no-PR streak guard reads it as «not measured» and stays off.
|
|
40
|
+
*/
|
|
41
|
+
noPrTaskIds?: string[];
|
|
25
42
|
}
|
|
26
43
|
|
|
27
|
-
export type SupervisorStopReason =
|
|
28
|
-
| 'converged'
|
|
29
|
-
/** 사람이 명시적으로 이 런을 중단했다. */
|
|
30
|
-
| 'human-stopped'
|
|
31
|
-
/** 승격 분해는 끝났지만 부모 결정 신호가 적색이라 완주를 승인할 수 없다. */
|
|
32
|
-
| 'parent-signals-red'
|
|
33
|
-
| 'needs-human'
|
|
34
|
-
| 'no-actionable-work'
|
|
35
|
-
| 'harvestable-awaiting-human'
|
|
36
|
-
| 'handed-off-to-salvage'
|
|
37
|
-
| 'max-rounds'
|
|
38
|
-
| 'no-progress'
|
|
39
|
-
| 'provider-exhausted'
|
|
40
|
-
/** 제자리인데 이번 라운드 재시도 후보가 전부 단계 시간 초과(`timed-out`) — 판정을 못 내고 다시 걸었다. */
|
|
41
|
-
| 'step-timeout'
|
|
42
|
-
| 'decomposable-no-progress'
|
|
43
|
-
| 'review-unobserved'
|
|
44
|
-
| 'deliverable-unobserved'
|
|
45
|
-
| 'deliverable-merged';
|
|
46
|
-
|
|
47
44
|
export const SUPERVISOR_STOP_REASONS = [
|
|
48
45
|
'converged',
|
|
49
46
|
'human-stopped',
|
|
@@ -58,6 +55,7 @@ export const SUPERVISOR_STOP_REASONS = [
|
|
|
58
55
|
'step-timeout',
|
|
59
56
|
'decomposable-no-progress',
|
|
60
57
|
'review-unobserved',
|
|
58
|
+
'review-oscillating',
|
|
61
59
|
'deliverable-unobserved',
|
|
62
60
|
'deliverable-merged',
|
|
63
61
|
] as const satisfies readonly SupervisorStopReason[];
|
|
@@ -88,12 +86,18 @@ export interface SupervisorDecision {
|
|
|
88
86
|
reworkable: string[];
|
|
89
87
|
decomposable: string[];
|
|
90
88
|
repairable: string[];
|
|
89
|
+
/** Pieces whose main sync is blocked for the first time — relaunched on the latest main instead of waiting for a human. */
|
|
90
|
+
relaunchOnMain: string[];
|
|
91
|
+
/** Relaunch goal by taskId for the `relaunchOnMain` pieces that kept a branch; the rerun receives these as `repairGoals`. */
|
|
92
|
+
relaunchGoals?: Record<string, string>;
|
|
91
93
|
needsHuman: string[];
|
|
92
94
|
classifications: FailureClassification[];
|
|
93
95
|
deliverableObservation: 'not-attempted' | 'failed' | 'observed';
|
|
94
96
|
deliverableUnmeasured: boolean;
|
|
95
97
|
deliverableMergeCompleteness: 'unmeasured' | 'complete' | 'incomplete';
|
|
96
|
-
reviewMustFixTrend: '
|
|
98
|
+
reviewMustFixTrend: ReviewRework['trend'];
|
|
99
|
+
oscillation?: { taskIds: string[]; helper: 'review-oscillation'; signature: string; repairGoals?: Record<string, string>; heldTaskIds?: string[] };
|
|
100
|
+
pendingDecision?: 'attempt-care-escalation';
|
|
97
101
|
}
|
|
98
102
|
|
|
99
103
|
export interface SupervisorLimits {
|
|
@@ -146,7 +150,19 @@ function awaitingHumanStopWhy(classifications: readonly FailureClassification[])
|
|
|
146
150
|
}
|
|
147
151
|
|
|
148
152
|
function countActionable(t: ReturnType<typeof triageRun>): number {
|
|
149
|
-
return t.rerunnable.length + t.reworkable.length + t.decomposable.length + t.repairable.length;
|
|
153
|
+
return t.rerunnable.length + t.reworkable.length + t.decomposable.length + t.repairable.length + t.relaunchOnMain.length;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/** The goal a main-sync relaunch runs: the same goal text under one head line naming the preserved branch. */
|
|
157
|
+
export function mainSyncRelaunchGoal(feature: string, branch: string): string {
|
|
158
|
+
return `참고 가지: ${branch} — 앞 런 구현. 최신 main 위에서 같은 의도를 다시 구현하되 이 가지의 diff 를 참고\n${feature}`;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** A piece gets one main-sync relaunch: spent when an earlier round recorded its task or its goal (original or relaunch text). */
|
|
162
|
+
function mainSyncRelaunchSpent(history: readonly SupervisorRound[]): (result: SelfDevJobResult) => boolean {
|
|
163
|
+
const taskIds = new Set(history.flatMap((entry) => entry.mainSyncRelaunchTaskIds ?? []));
|
|
164
|
+
const features = new Set(history.flatMap((entry) => entry.mainSyncRelaunchFeatures ?? []).map(resumeKey));
|
|
165
|
+
return (result) => taskIds.has(result.taskId) || features.has(resumeKey(result.feature));
|
|
150
166
|
}
|
|
151
167
|
|
|
152
168
|
type GoalPlanRevisionObservation = SelfDevJobResult['goalPlanRevision'];
|
|
@@ -191,6 +207,13 @@ export type SupervisorJobResult = SelfDevJobResult & {
|
|
|
191
207
|
next?: SupervisorNext;
|
|
192
208
|
};
|
|
193
209
|
|
|
210
|
+
export function aggregateReviewTrend(results: readonly SelfDevJobResult[]): ReviewRework['trend'] | undefined {
|
|
211
|
+
const trends = results.flatMap((result) => result.rework ? [result.rework.trend] : []);
|
|
212
|
+
if (!trends.length) return undefined;
|
|
213
|
+
const severity: readonly ReviewRework['trend'][] = ['unmeasured', 'improving', 'stable', 'worsening', 'oscillating'];
|
|
214
|
+
return severity[Math.max(...trends.map((trend) => severity.indexOf(trend)))];
|
|
215
|
+
}
|
|
216
|
+
|
|
194
217
|
export function decideNextRun(input: {
|
|
195
218
|
results: readonly SupervisorJobResult[];
|
|
196
219
|
history?: readonly SupervisorRound[];
|
|
@@ -200,7 +223,9 @@ export function decideNextRun(input: {
|
|
|
200
223
|
reviewed?: boolean;
|
|
201
224
|
reviewReason?: string;
|
|
202
225
|
deliverableMerge?: { readonly expected: number; readonly merged: number };
|
|
203
|
-
reviewMustFixTrend?: '
|
|
226
|
+
reviewMustFixTrend?: ReviewRework['trend'];
|
|
227
|
+
/** True: the rerun consumes the authored goal. False: it cannot, so oscillation stops for a human. Undefined: pure decision. */
|
|
228
|
+
repairGoalExecution?: boolean;
|
|
204
229
|
}): SupervisorDecision {
|
|
205
230
|
const results = [...input.results];
|
|
206
231
|
const history = [...(input.history ?? [])];
|
|
@@ -217,7 +242,16 @@ export function decideNextRun(input: {
|
|
|
217
242
|
const handedOffIds = new Set(handedOff.map((result) => result.taskId));
|
|
218
243
|
const deployFindings = input.deployFindings === undefined ? undefined
|
|
219
244
|
: new Map([...input.deployFindings].filter(([taskId]) => !handedOffIds.has(taskId)));
|
|
220
|
-
const t = triageRun(activeResults, deployFindings, observation === 'failed');
|
|
245
|
+
const t = triageRun(activeResults, deployFindings, observation === 'failed', undefined, mainSyncRelaunchSpent(history));
|
|
246
|
+
const relaunchGoals: Record<string, string> = Object.fromEntries(activeResults.flatMap((result) =>
|
|
247
|
+
t.relaunchOnMain.includes(result.taskId) && result.branch
|
|
248
|
+
? [[result.taskId, mainSyncRelaunchGoal(result.feature, result.branch)]] : []));
|
|
249
|
+
const noteMainSyncRelaunch = (): void => {
|
|
250
|
+
for (const taskId of t.relaunchOnMain) {
|
|
251
|
+
const branch = activeResults.find((result) => result.taskId === taskId)?.branch ?? null;
|
|
252
|
+
try { debug.log('self-dev.supervisor', 'merge-conflict-relaunch', { taskId, branch, attempt: 1 }); } catch { /* fail-open */ }
|
|
253
|
+
}
|
|
254
|
+
};
|
|
221
255
|
const round = history.length;
|
|
222
256
|
const landed = countLanded(results);
|
|
223
257
|
const baseCompleted = countBaseCompleted(results);
|
|
@@ -249,6 +283,8 @@ export function decideNextRun(input: {
|
|
|
249
283
|
reworkable: t.reworkable,
|
|
250
284
|
decomposable: t.decomposable,
|
|
251
285
|
repairable: t.repairable,
|
|
286
|
+
relaunchOnMain: t.relaunchOnMain,
|
|
287
|
+
...(Object.keys(relaunchGoals).length > 0 ? { relaunchGoals } : {}),
|
|
252
288
|
needsHuman: t.needsHuman,
|
|
253
289
|
classifications: t.classifications,
|
|
254
290
|
};
|
|
@@ -263,8 +299,10 @@ export function decideNextRun(input: {
|
|
|
263
299
|
};
|
|
264
300
|
}
|
|
265
301
|
|
|
266
|
-
|
|
267
|
-
|
|
302
|
+
// A first main-sync block is relaunched before it is judged harvestable; the spent ones stop for a human as before.
|
|
303
|
+
const harvestable = results.filter((result) => result.harvestable === true && !!result.branch
|
|
304
|
+
&& !t.relaunchOnMain.includes(result.taskId));
|
|
305
|
+
if (harvestable.length > 0 && t.relaunchOnMain.length === 0) {
|
|
268
306
|
return {
|
|
269
307
|
...base,
|
|
270
308
|
action: 'stop',
|
|
@@ -327,6 +365,7 @@ export function decideNextRun(input: {
|
|
|
327
365
|
&& t.reworkable.length === 0
|
|
328
366
|
&& t.decomposable.length === 0
|
|
329
367
|
&& t.repairable.length === 0
|
|
368
|
+
&& t.relaunchOnMain.length === 0
|
|
330
369
|
) {
|
|
331
370
|
return {
|
|
332
371
|
...base,
|
|
@@ -354,7 +393,7 @@ export function decideNextRun(input: {
|
|
|
354
393
|
}
|
|
355
394
|
|
|
356
395
|
// Only stop when every candidate for the next round is blocked by observed quota exhaustion.
|
|
357
|
-
const retryIds = [...new Set([...t.rerunnable, ...t.reworkable, ...t.decomposable, ...t.repairable])];
|
|
396
|
+
const retryIds = [...new Set([...t.rerunnable, ...t.reworkable, ...t.decomposable, ...t.repairable, ...t.relaunchOnMain])];
|
|
358
397
|
if (retryIds.length > 0 && retryIds.every((taskId) => results.some((result) =>
|
|
359
398
|
result.taskId === taskId && result.providerErrors?.category === 'quota'))) {
|
|
360
399
|
const failures = results.filter((result) => retryIds.includes(result.taskId));
|
|
@@ -394,7 +433,7 @@ export function decideNextRun(input: {
|
|
|
394
433
|
}
|
|
395
434
|
// 🩸 2026-09-24 🅕: 결말을 가른 것은 공급자 오류 수가 아니라 «리뷰가 시간 안에 판정을 냈나»였다(n=3 · step-timeout 0·1·2
|
|
396
435
|
// 가 결말과 같은 순서). 제자리의 원인이 단계 시간 초과면 «골을 의심하라» 대신 그 이름을 댄다.
|
|
397
|
-
const stalledRetryIds = [...new Set([...t.rerunnable, ...t.reworkable, ...t.decomposable, ...t.repairable])];
|
|
436
|
+
const stalledRetryIds = [...new Set([...t.rerunnable, ...t.reworkable, ...t.decomposable, ...t.repairable, ...t.relaunchOnMain])];
|
|
398
437
|
const timedOut = results.filter((result) => stalledRetryIds.includes(result.taskId) && result.stage === 'timed-out');
|
|
399
438
|
if (stalledRetryIds.length > 0 && timedOut.length === stalledRetryIds.length) {
|
|
400
439
|
const providerNote = timedOut.some((result) => result.providerErrors)
|
|
@@ -416,6 +455,85 @@ export function decideNextRun(input: {
|
|
|
416
455
|
}
|
|
417
456
|
}
|
|
418
457
|
|
|
458
|
+
// AUT-NO-PROGRESS-RETRY-LOOP — 같은 후보가 PR 없이 두 라운드 연속 실패하면 세 번째 Pod 를 띄우지 않는다
|
|
459
|
+
// (부검 run-1166bcd1 · run-1bde4815 · run-427bd632 · run-46a02f42). 직전 라운드가 noPrTaskIds 를 안 쟀으면 서지 않는다.
|
|
460
|
+
// 호출자가 stallRounds 를 기본보다 늘렸으면(제자리 인내를 늘림) 서지 않는다 — 0.2.24 컷 회귀(orchestrate-cli.test 라운드 상한 둘).
|
|
461
|
+
const previousNoPr = history.at(-1)?.noPrTaskIds;
|
|
462
|
+
if (previousNoPr !== undefined && retryIds.length > 0 && stallRounds <= DEFAULT_STALL_ROUNDS) {
|
|
463
|
+
const failedNoPr = (taskId: string) => activeResults.find((result) => result.taskId === taskId
|
|
464
|
+
&& result.status === 'failed' && result.prNumber === undefined);
|
|
465
|
+
const streak = retryIds.every((taskId) => previousNoPr.includes(taskId) && failedNoPr(taskId) !== undefined);
|
|
466
|
+
if (streak && !madeProgress(history.at(-1), thisRound)) {
|
|
467
|
+
const errors = retryIds.flatMap((taskId) => {
|
|
468
|
+
const message = failedNoPr(taskId)?.error?.message;
|
|
469
|
+
return message ? [message.slice(0, 200)] : [];
|
|
470
|
+
});
|
|
471
|
+
try { debug.log('self-dev.supervisor', 'no-pr-streak-stop', { taskIds: retryIds, round, errors }); } catch { /* fail-open */ }
|
|
472
|
+
return {
|
|
473
|
+
...base,
|
|
474
|
+
action: 'stop',
|
|
475
|
+
stopReason: 'no-progress',
|
|
476
|
+
why: ['PR 없이 2라운드 연속 실패 — 같은 골 재시도 대신 골·불변식 개정 또는 hold', ...errors].join(' · '),
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
const preceding = history.at(-1);
|
|
482
|
+
const oscillating = activeResults.filter((result) => retryIds.includes(result.taskId) && result.rework
|
|
483
|
+
&& (result.rework.trend === 'oscillating'
|
|
484
|
+
|| !!result.rework.signature && preceding?.signatures?.[result.taskId] === result.rework.signature));
|
|
485
|
+
if (oscillating.length > 0) {
|
|
486
|
+
// Repaired = same taskId, explicit lineage (`oscillationRepairOf`), or a feature that IS an authored repair goal
|
|
487
|
+
// text (orchestrate runs it as the piece's feature) — never a mere shared original feature.
|
|
488
|
+
const isRepaired = (result: SupervisorJobResult): boolean => history.some((entry) =>
|
|
489
|
+
(entry.oscillationRepairTaskIds ?? []).some((id, index) => id === result.taskId || id === result.oscillationRepairOf
|
|
490
|
+
|| (entry.oscillationRepairFeatures?.[index] !== undefined && entry.oscillationRepairFeatures[index] === result.feature
|
|
491
|
+
&& Object.values(entry.oscillationRepairGoals ?? {}).includes(result.feature))));
|
|
492
|
+
// Per task: a task that already got its one oscillation repair is held for a human; a fresh one may get it.
|
|
493
|
+
const fresh = oscillating.filter((result) => !isRepaired(result));
|
|
494
|
+
const held = [...new Set(oscillating.filter(isRepaired).map((result) => result.taskId))];
|
|
495
|
+
const repairGoals: Record<string, string> = Object.fromEntries(fresh.flatMap((result) => {
|
|
496
|
+
const goal = result.prNumber && result.reviewMustFix?.length
|
|
497
|
+
? authorRepairGoal({ pr: result.prNumber, category: 'review-oscillation', originalRequest: result.feature,
|
|
498
|
+
mustFix: result.reviewMustFix }) : null;
|
|
499
|
+
return goal ? [[result.taskId, goal]] : [];
|
|
500
|
+
}));
|
|
501
|
+
// A caller that declares it cannot run the authored goal (false), or one that can but has no goal for every fresh
|
|
502
|
+
// oscillating task, would turn add-repair-task into a same-strategy relaunch — stop for a human instead.
|
|
503
|
+
// Undefined is the pure decision (caller unknown): it names the first repair as the goal contract asks.
|
|
504
|
+
const cannotRepair = fresh.length > 0 && (input.repairGoalExecution === false
|
|
505
|
+
|| (input.repairGoalExecution === true && fresh.some((result) => !repairGoals[result.taskId])));
|
|
506
|
+
const action = fresh.length === 0 || cannotRepair ? 'stop' : 'add-repair-task';
|
|
507
|
+
const taskIds = action === 'stop'
|
|
508
|
+
? [...new Set(oscillating.map((result) => result.taskId))]
|
|
509
|
+
: [...new Set(fresh.map((result) => result.taskId))];
|
|
510
|
+
const signatureOf = (results: readonly SupervisorJobResult[]): string => results.map((result) => result.rework!.signature).join(' · ') || '(서명 없음)';
|
|
511
|
+
const signature = oscillating.filter((result) => taskIds.includes(result.taskId)).map((result) => result.rework!.signature).join(' · ');
|
|
512
|
+
const withoutHeld = (ids: readonly string[]): string[] => ids.filter((id) => !held.includes(id));
|
|
513
|
+
try { debug.log('self-dev.supervisor', 'oscillation-seen', { taskIds, signature, trend: reviewMustFixTrend, action, ...(held.length ? { held } : {}) }); } catch { /* fail-open */ }
|
|
514
|
+
if (action === 'add-repair-task') noteMainSyncRelaunch();
|
|
515
|
+
return {
|
|
516
|
+
...base,
|
|
517
|
+
...(action === 'add-repair-task' && held.length > 0 ? {
|
|
518
|
+
rerunnable: withoutHeld(base.rerunnable), reworkable: withoutHeld(base.reworkable),
|
|
519
|
+
decomposable: withoutHeld(base.decomposable), repairable: withoutHeld(base.repairable),
|
|
520
|
+
needsHuman: [...new Set([...base.needsHuman, ...held])],
|
|
521
|
+
} : {}),
|
|
522
|
+
action,
|
|
523
|
+
...(action === 'stop' ? { stopReason: 'review-oscillating' as const } : {}),
|
|
524
|
+
oscillation: { taskIds, helper: 'review-oscillation', signature, ...(Object.keys(repairGoals).length ? { repairGoals } : {}),
|
|
525
|
+
...(action === 'add-repair-task' && held.length ? { heldTaskIds: held } : {}) },
|
|
526
|
+
pendingDecision: 'attempt-care-escalation',
|
|
527
|
+
why: fresh.length === 0
|
|
528
|
+
? `리뷰 진동 반복 — ${signatureOf(oscillating)} · 사람 결정 필요(같은 전략 재발사 금지)`
|
|
529
|
+
: cannotRepair
|
|
530
|
+
? `리뷰 진동 — ${signatureOf(oscillating)} · ${input.repairGoalExecution === false ? '이 감독 경로가 수리 골 실행을 선언하지 않았다(미선언 또는 불가)' : '수리 원문/PR 관측 불가'} · 사람 결정 필요(같은 전략 재발사 금지)`
|
|
531
|
+
: `리뷰 진동 — ${signatureOf(fresh)} · review-oscillation 수리 조각을 한 번 붙인다${input.repairGoalExecution === true ? '' : '(실행 배선 미선언 — 결정 칸만)'}${held.length ? ` · 이미 수리한 조각 ${held.join(', ')} 은 사람 결정 대기` : ''}`,
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
noteMainSyncRelaunch();
|
|
536
|
+
|
|
419
537
|
if (t.repairable.length > 0) {
|
|
420
538
|
return {
|
|
421
539
|
...base,
|
|
@@ -427,7 +545,7 @@ export function decideNextRun(input: {
|
|
|
427
545
|
return {
|
|
428
546
|
...base,
|
|
429
547
|
action: 'relaunch',
|
|
430
|
-
why: `다시 건다 — 그대로 재실행 ${t.rerunnable.length} · 재작업 ${t.reworkable.length} · 분해 ${t.decomposable.length} · 수리 ${t.repairable.length} · 라운드 ${round + 1}/${maxRounds}`,
|
|
548
|
+
why: `다시 건다 — 그대로 재실행 ${t.rerunnable.length} · 재작업 ${t.reworkable.length} · 분해 ${t.decomposable.length} · 수리 ${t.repairable.length}${t.relaunchOnMain.length > 0 ? ` · main 위 재발사 ${t.relaunchOnMain.length}` : ''} · 라운드 ${round + 1}/${maxRounds}`,
|
|
431
549
|
};
|
|
432
550
|
}
|
|
433
551
|
|
|
@@ -435,22 +553,46 @@ export function appendRound(
|
|
|
435
553
|
history: readonly SupervisorRound[],
|
|
436
554
|
results: readonly SupervisorJobResult[],
|
|
437
555
|
reviewMustFixTrend?: SupervisorDecision['reviewMustFixTrend'],
|
|
556
|
+
decision?: SupervisorDecision,
|
|
438
557
|
): SupervisorRound[] {
|
|
439
|
-
const t = triageRun(results.filter((result) => result.salvage !== 'launched'));
|
|
558
|
+
const t = triageRun(results.filter((result) => result.salvage !== 'launched'), undefined, false, undefined, mainSyncRelaunchSpent(history));
|
|
440
559
|
const baseCompleted = countBaseCompleted(results);
|
|
441
560
|
const base = roundBase(results);
|
|
561
|
+
const noPrTaskIds = results.filter((result) => result.status === 'failed' && result.prNumber === undefined)
|
|
562
|
+
.map((result) => result.taskId);
|
|
442
563
|
return [...history, {
|
|
443
564
|
round: history.length,
|
|
444
565
|
landed: countLanded(results),
|
|
445
566
|
...(baseCompleted > 0 || base !== undefined ? { baseCompleted, ...(base === undefined ? {} : { base }) } : {}),
|
|
446
567
|
actionable: countActionable(t),
|
|
447
568
|
...(reviewMustFixTrend === undefined ? {} : { reviewMustFixTrend }),
|
|
569
|
+
...(results.some((result) => result.rework?.signature)
|
|
570
|
+
? { signatures: Object.fromEntries(results.filter((result) => result.rework?.signature).map((result) => [result.taskId, result.rework!.signature])) } : {}),
|
|
571
|
+
...(decision && decision.action !== 'stop' && decision.relaunchOnMain.length > 0 ? {
|
|
572
|
+
mainSyncRelaunchTaskIds: decision.relaunchOnMain,
|
|
573
|
+
mainSyncRelaunchFeatures: decision.relaunchOnMain.flatMap((id) => [
|
|
574
|
+
results.find((result) => result.taskId === id)?.feature,
|
|
575
|
+
decision.relaunchGoals?.[id],
|
|
576
|
+
].filter((feature): feature is string => feature !== undefined)),
|
|
577
|
+
} : {}),
|
|
578
|
+
...(decision?.action === 'add-repair-task' && decision.oscillation ? (() => {
|
|
579
|
+
// Each repaired task is recorded under its original goal feature and, when a rerun runs the authored goal as
|
|
580
|
+
// the piece's new feature (orchestrate), under that repair text too — so the repair's own oscillation stops.
|
|
581
|
+
const pairs = decision.oscillation.taskIds.flatMap((id) => {
|
|
582
|
+
const feature = results.find((result) => result.taskId === id)?.feature ?? '';
|
|
583
|
+
const repairGoal = decision.oscillation!.repairGoals?.[id];
|
|
584
|
+
return repairGoal === undefined ? [[id, feature]] : [[id, feature], [id, repairGoal]];
|
|
585
|
+
});
|
|
586
|
+
return { oscillationRepairTaskIds: pairs.map(([id]) => id!), oscillationRepairFeatures: pairs.map(([, feature]) => feature!),
|
|
587
|
+
...(decision.oscillation.repairGoals ? { oscillationRepairGoals: decision.oscillation.repairGoals } : {}) };
|
|
588
|
+
})() : {}),
|
|
589
|
+
...(noPrTaskIds.length > 0 ? { noPrTaskIds } : {}),
|
|
448
590
|
}];
|
|
449
591
|
}
|
|
450
592
|
|
|
451
593
|
export interface SuperviseRunOptions {
|
|
452
594
|
initial: readonly SupervisorJobResult[];
|
|
453
|
-
rerun: (previous: readonly SupervisorJobResult[], invocation: { relaunch: true }) => Promise<readonly SupervisorJobResult[]>;
|
|
595
|
+
rerun: (previous: readonly SupervisorJobResult[], invocation: { relaunch: true; repairGoals?: Record<string, string> }) => Promise<readonly SupervisorJobResult[]>;
|
|
454
596
|
limits?: SupervisorLimits;
|
|
455
597
|
enrich?: (results: readonly SupervisorJobResult[]) => readonly SupervisorJobResult[];
|
|
456
598
|
onDecision?: (decision: SupervisorDecision) => void;
|
|
@@ -462,6 +604,8 @@ export interface SuperviseRunOptions {
|
|
|
462
604
|
runStore?: { runId?: string; operatorDir?: string; dir?: string; isolatedDir?: string };
|
|
463
605
|
observe?: (event: string, data: Record<string, unknown>) => void;
|
|
464
606
|
sweepPendingMerges?: typeof sweepFrozenMerges;
|
|
607
|
+
/** True only when rerun consumes `invocation.repairGoals`; omitted or false → a review oscillation stops for a human. */
|
|
608
|
+
repairGoalExecution?: boolean;
|
|
465
609
|
/**
|
|
466
610
|
* TASK-AGENT-SHADOW — 멈춤이 확정되면 판단부를 그림자로 부른다(기본 `recordTaskAgentShadowMove`).
|
|
467
611
|
* `false` 면 끈다. 던져도 런의 결말은 바뀌지 않는다(fail-soft).
|
|
@@ -531,6 +675,9 @@ export async function superviseRun(opts: SuperviseRunOptions): Promise<Superviso
|
|
|
531
675
|
const decision = decideNextRun({
|
|
532
676
|
results,
|
|
533
677
|
history,
|
|
678
|
+
// Undeclared = cannot run the repair goal: an add-repair-task would otherwise be a same-strategy relaunch.
|
|
679
|
+
repairGoalExecution: opts.repairGoalExecution === true,
|
|
680
|
+
...(aggregateReviewTrend(results) ? { reviewMustFixTrend: aggregateReviewTrend(results) } : {}),
|
|
534
681
|
...(opts.limits ? { limits: opts.limits } : {}),
|
|
535
682
|
...(observed.deployFindings ? { deployFindings: observed.deployFindings } : {}),
|
|
536
683
|
deliverableObservation: observed.state,
|
|
@@ -635,8 +782,15 @@ export async function superviseRun(opts: SuperviseRunOptions): Promise<Superviso
|
|
|
635
782
|
return results;
|
|
636
783
|
}
|
|
637
784
|
|
|
638
|
-
history = appendRound(history, results, decision.reviewMustFixTrend);
|
|
639
|
-
|
|
785
|
+
history = appendRound(history, results, decision.reviewMustFixTrend, decision);
|
|
786
|
+
// Tasks that already had their one oscillation repair are held for a human — they are not handed to the rerun,
|
|
787
|
+
// but their results stay in the round so the human hand-off (and the final review-oscillating stop) keeps them.
|
|
788
|
+
const held = decision.oscillation?.heldTaskIds ?? [];
|
|
789
|
+
const heldResults = results.filter((result) => held.includes(result.taskId));
|
|
790
|
+
const repairGoals = { ...decision.relaunchGoals, ...decision.oscillation?.repairGoals };
|
|
791
|
+
const rerunResults = await opts.rerun(held.length ? results.filter((result) => !held.includes(result.taskId)) : results,
|
|
792
|
+
{ relaunch: true, ...(Object.keys(repairGoals).length > 0 ? { repairGoals } : {}) });
|
|
793
|
+
results = [...rerunResults, ...heldResults.filter((heldResult) => !rerunResults.some((result) => result.taskId === heldResult.taskId))];
|
|
640
794
|
|
|
641
795
|
try {
|
|
642
796
|
opts.onRound?.(results);
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import type { TaskStatus } from '../task-orchestrator/types.js';
|
|
2
|
+
|
|
3
|
+
type WorkingMemoryEntry = {
|
|
4
|
+
phaseId: string;
|
|
5
|
+
phaseTitle: string;
|
|
6
|
+
kind: 'investigation' | 'implementation' | 'operational';
|
|
7
|
+
at: string;
|
|
8
|
+
summary: string;
|
|
9
|
+
reusables: string[];
|
|
10
|
+
decisions: string[];
|
|
11
|
+
artifacts: string[];
|
|
12
|
+
provenance?: 'self' | 'external' | 'reconcile' | 'decision' | 'build';
|
|
13
|
+
arcId?: string;
|
|
14
|
+
deviation?: { kind: 'scope_reduction' | 'deferred' | 'asked_user' | 'env_improved' | 'regrounded' | 'other' | 'satisfied_skip' | 'blocked_dependency' | 'arc_surgery' | 'phase_failed' | 'self_heal' | 'deadlock' | 'review_fail'; note: string };
|
|
15
|
+
scope?: 'agent' | 'subteam' | 'global';
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
type AbandonedClassification = 'report-deficit' | 'implementation-deficit' | 'artifact-deficit' | 'contract-conflict' | 'goal-unconvergeable-candidate' | 'pr-declined' | 'merge-approved-abandoned' | 'run-deadline-exceeded' | 'quota-exhausted' | 'credential-failure' | 'provider-error' | 'already-satisfied';
|
|
19
|
+
|
|
20
|
+
type ResumeDisposition = 'skip' | 'rerun' | 'rerun-duplicate-risk';
|
|
21
|
+
|
|
22
|
+
export type JobKind = 'dev' | 'search' | 'deploy' | 'media';
|
|
23
|
+
export type SelfDevGoalType = 'implement' | 'research' | 'document' | 'operate';
|
|
24
|
+
|
|
25
|
+
export interface SelfDevGoal {
|
|
26
|
+
/** F1 job kind. Omitted remains the legacy `dev` self-implement job. */
|
|
27
|
+
kind?: JobKind;
|
|
28
|
+
/** Decomposition intent; deliberately distinct from executable `kind`. */
|
|
29
|
+
goalType?: SelfDevGoalType;
|
|
30
|
+
/** Feature/goal text → `elanous self implement <feature>` for dev jobs. */
|
|
31
|
+
feature: string;
|
|
32
|
+
/** Pod lease predecessor goal ID or PR number. */
|
|
33
|
+
after?: string | number;
|
|
34
|
+
base?: string;
|
|
35
|
+
autoMerge?: boolean;
|
|
36
|
+
/** G8 — attach `auto-review` opt-in label on PR (subject to eligibility self-assessment). */
|
|
37
|
+
autoReview?: boolean;
|
|
38
|
+
/** S3 — open a draft PR via the job's own merge-decision node (HITL).
|
|
39
|
+
* Promotion flows through the review node → disposition recorded
|
|
40
|
+
* internally (no external hand-merge). */
|
|
41
|
+
openPr?: boolean;
|
|
42
|
+
draft?: boolean;
|
|
43
|
+
/** Optional short title (≤ 80 chars). Default = feature head. */
|
|
44
|
+
title?: string;
|
|
45
|
+
/** 계획 브랜치가 알려지면 같은 워크트리의 실행을 직렬화한다. */
|
|
46
|
+
planBranch?: string;
|
|
47
|
+
/** 계획 브랜치가 없는 저작 골의 안정 식별자. */
|
|
48
|
+
goalId?: string;
|
|
49
|
+
/** S2 — goal-local id for dependency wiring (default = array index). */
|
|
50
|
+
id?: string;
|
|
51
|
+
/** S2 — goal-local ids this goal depends on (must complete first).
|
|
52
|
+
* The task becomes `ready` only after every dependency is `done`
|
|
53
|
+
* (topological parallel via the graph). Unknown/self ids are dropped. */
|
|
54
|
+
dependsOn?: string[];
|
|
55
|
+
/** Read-only handoff memory emitted by this shard for dependent child input.
|
|
56
|
+
* `[]` is a completed shard with no entries; null/undefined is unreadable. */
|
|
57
|
+
workingMemory?: readonly WorkingMemoryEntry[] | null;
|
|
58
|
+
/** 그 기억을 남긴 이 조각이 «착지했나». ⛔ 생략은 「모른다」이지 「착지」가 아니다. */
|
|
59
|
+
workingMemoryOutcome?: 'landed' | 'blocked' | 'unknown';
|
|
60
|
+
/** S2 — repo paths this job will touch. Two goals sharing a hot path
|
|
61
|
+
* are serialized (an implicit dependency edge is added, earlier-first)
|
|
62
|
+
* so their worktrees never merge concurrently. Cf. PLAN §8 risk 2. */
|
|
63
|
+
hotPaths?: string[];
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export type ReviewRework = {
|
|
67
|
+
trend: 'unmeasured' | 'improving' | 'stable' | 'worsening' | 'oscillating';
|
|
68
|
+
signature: string;
|
|
69
|
+
rounds: number;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export interface SelfDevJobResult {
|
|
73
|
+
taskId: string;
|
|
74
|
+
feature: string;
|
|
75
|
+
/** Run outcome — done | failed | cancelled | blocked (awaiting parent landing). */
|
|
76
|
+
status: TaskStatus;
|
|
77
|
+
error?: { code: string; message: string };
|
|
78
|
+
durationMs?: number;
|
|
79
|
+
/** S3 — real pipeline disposition from the child `--json`
|
|
80
|
+
* (merged / pr-opened / gate-failed / review-blocked / pr-declined). */
|
|
81
|
+
stage?: string;
|
|
82
|
+
branch?: string;
|
|
83
|
+
/** Child confirmed the finished implementation was pushed for manual harvest. */
|
|
84
|
+
harvestable?: true;
|
|
85
|
+
worktreePath?: string;
|
|
86
|
+
prUrl?: string;
|
|
87
|
+
prNumber?: number;
|
|
88
|
+
merged?: boolean;
|
|
89
|
+
/** Child commit SHA, when observed by the Pod/host. */
|
|
90
|
+
checkedHeadCommit?: string;
|
|
91
|
+
/**
|
|
92
|
+
* This run's own `--base` (not main). A non-main completion mode
|
|
93
|
+
* (worktree-only, draft, `--base` other than main) lands commits here.
|
|
94
|
+
*/
|
|
95
|
+
base?: string;
|
|
96
|
+
/** Child finished with GOAL-COMPLETE (`ok=true`). Distinct from a main merge. */
|
|
97
|
+
ok?: boolean;
|
|
98
|
+
/** Commits this child added against its own `--base`. 0 is not completion progress. */
|
|
99
|
+
commitsAheadOfBase?: number;
|
|
100
|
+
/** A dependency is done but its result is not on main; no child was launched. */
|
|
101
|
+
blockReason?: 'parent-unlanded';
|
|
102
|
+
parentPrNumber?: number;
|
|
103
|
+
/** The upstream completed in a worktree without opening a PR. */
|
|
104
|
+
parentNoPr?: true;
|
|
105
|
+
// ⭐⭐⭐ `A1`(2026-08-19 · 대표 *"R3 가 서브 프로세스여도 잘 도는 안"*) — ***판정 3종***.
|
|
106
|
+
// 🚨 이 셋이 트리아지의 입력 전부인데 종전엔 자식 → 부모 경계에서 «전부» 사라졌다.
|
|
107
|
+
// 값은 전선에 «실려 있었고»(자식이 `r.result` 를 통째로 낸다) 파서가 버렸다.
|
|
108
|
+
// ⇒ 📌 서브프로세스에서 «먼저» 옳아야 한다 — 실행 방식을 바꾸지 않고 고치는 자리다.
|
|
109
|
+
/** auto-merge 를 «왜» 건너뛰었나 — 「도구 한계」와 「자식이 못 함」을 가르는 근거. */
|
|
110
|
+
mergeReason?: string;
|
|
111
|
+
/** 런이 «왜» 멈췄나. 없으면 「부모가 잘랐다」다. */
|
|
112
|
+
stopReason?: string;
|
|
113
|
+
/** 자식이 스스로 낸 완료 성격. */
|
|
114
|
+
completionDisposition?: string;
|
|
115
|
+
/** Abandoned-run classification from the child. Independent of completionDisposition. */
|
|
116
|
+
failureClassification?: AbandonedClassification;
|
|
117
|
+
/** Provider failure evidence from the child result; absent when unobserved. */
|
|
118
|
+
providerErrors?: { count: number; provider: string; category: 'quota' | 'credential' | 'request' | 'other' };
|
|
119
|
+
/** Stable child run identity used to join its run-ledger proposal. */
|
|
120
|
+
runId?: string;
|
|
121
|
+
/** Self review verdict bound to the PR head observed by the child; absent if either observation is missing. */
|
|
122
|
+
/** TA-LAND-MUSTFIX-ZERO — `mustFixCount` is the review's must-fix list length; absent = unknown (the land gate fails closed). */
|
|
123
|
+
selfReview?: { verdict: 'pass' | 'fail'; head: string; mustFixCount?: number };
|
|
124
|
+
/** Measured child review history; absence means not observed, not a negative oscillation result. */
|
|
125
|
+
rework?: ReviewRework;
|
|
126
|
+
/** taskId whose review-oscillation repair produced this result (explicit lineage across a new taskId). */
|
|
127
|
+
oscillationRepairOf?: string;
|
|
128
|
+
/** Verbatim final reviewer must-fix items for a bounded helper repair. */
|
|
129
|
+
reviewMustFix?: string[];
|
|
130
|
+
/** Whether the child review actually ran; omitted preserves legacy producers. */
|
|
131
|
+
reviewed?: boolean;
|
|
132
|
+
/** Why the child did not run review; omitted preserves legacy review-unobserved handling. */
|
|
133
|
+
reviewReason?: string;
|
|
134
|
+
/** The abandoned-run classifier observed a goal-side cause for this failed convergence. */
|
|
135
|
+
goalCauseObserved?: true;
|
|
136
|
+
/** Resume selection that decided whether this shard was carried forward or retried. */
|
|
137
|
+
resumeDisposition?: ResumeDisposition;
|
|
138
|
+
/**
|
|
139
|
+
* ⭐ 하니스가 이 조각에 대해 낸 「이렇게 쪼개라」(2026-08-19).
|
|
140
|
+
*
|
|
141
|
+
* ⛔ 이 값은 자식 결과로 «안 온다» — 전선 타입(SelfImplementDisposition)에 칸이 없다.
|
|
142
|
+
* 그래서 «중앙»이 원장에서 읽어 채운다(decompose-proposal.ts). 트리아지는 그것을 그냥 본다.
|
|
143
|
+
* ⇒ 📌 출구 모듈은 ***「이 값이 어디서 왔는지 몰라야」*** 한다 — 알면 실행 방식마다 갈래가 는다.
|
|
144
|
+
* ⚠️ undefined = 「제안이 없다」와 「아직 안 읽었다」가 «같은 값»이다. 채우는 자가 그것을 구분해 관측한다.
|
|
145
|
+
*/
|
|
146
|
+
decomposeProposal?: { pieces: Array<{ id: string; feature: string; dependsOn: readonly string[]; goalType?: string }> };
|
|
147
|
+
/**
|
|
148
|
+
* Parent-side observation of CONTRACT-CONFLICT goal-plan revision application attempts.
|
|
149
|
+
* undefined = the parent has not read the run ledger yet; it is not the same as attempted=0.
|
|
150
|
+
*/
|
|
151
|
+
goalPlanRevision?:
|
|
152
|
+
| { status: 'read'; attempted: number; applied: number; failureReasons: string[] }
|
|
153
|
+
| { status: 'read-failed'; reason: 'directory-missing' | 'unreadable-directory' | 'unreadable-files'; scannedFiles: number; unreadableFiles: number; ledgerDirectory: string };
|
|
154
|
+
/** ⭐ 관측(2026-07-21 대표 co-design·"재현 없이 진단") — 자식 goal-loop 화면 버퍼 tail
|
|
155
|
+
* (ANSI 제거·"docker logs <id>" 등가물). detached PTY goal-loop 은 스폰 프로세스 stdout 이
|
|
156
|
+
* 아니라 file-based 화면 버퍼에만 남으므로, 실패 진단의 유일한 cross-process 진실원. */
|
|
157
|
+
screenTail?: string;
|
|
158
|
+
/** 화면 버퍼에서 판정한 goal-loop 종결 상태(complete=성공 마커·incomplete·null=불명). */
|
|
159
|
+
screenOutcome?: 'complete' | 'incomplete' | null;
|
|
160
|
+
/** 화면 버퍼 공간 id — `elanous self screen --space <id>` 로 전체 전사 재생 가능. */
|
|
161
|
+
screenSpace?: string;
|
|
162
|
+
/** ⚠️ exit-code 실패인데 화면은 GOAL-COMPLETE = 스폰-신호 단절(false-failure). 조정 플래그. */
|
|
163
|
+
reconcileMismatch?: boolean;
|
|
164
|
+
/** ⭐ 이 시도의 «걸음» — 노드 진입 순서(2026-09-08 · 대표 지시).
|
|
165
|
+
* 🩸 그 전까지 이 배열엔 「요약 판정」만 있었고 걸음은 런 «안»에서 끝났다.
|
|
166
|
+
* ⛔ 관측용이다 — 슈퍼바이저가 이것으로 «무엇을 할지»는 별개 결정이다. */
|
|
167
|
+
walk?: readonly { node: string; round: number }[];
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export type SupervisorStopReason =
|
|
171
|
+
| 'converged'
|
|
172
|
+
/** 사람이 명시적으로 이 런을 중단했다. */
|
|
173
|
+
| 'human-stopped'
|
|
174
|
+
/** 승격 분해는 끝났지만 부모 결정 신호가 적색이라 완주를 승인할 수 없다. */
|
|
175
|
+
| 'parent-signals-red'
|
|
176
|
+
| 'needs-human'
|
|
177
|
+
| 'no-actionable-work'
|
|
178
|
+
| 'harvestable-awaiting-human'
|
|
179
|
+
| 'handed-off-to-salvage'
|
|
180
|
+
| 'max-rounds'
|
|
181
|
+
| 'no-progress'
|
|
182
|
+
| 'provider-exhausted'
|
|
183
|
+
/** 제자리인데 이번 라운드 재시도 후보가 전부 단계 시간 초과(`timed-out`) — 판정을 못 내고 다시 걸었다. */
|
|
184
|
+
| 'step-timeout'
|
|
185
|
+
| 'decomposable-no-progress'
|
|
186
|
+
| 'review-unobserved'
|
|
187
|
+
| 'review-oscillating'
|
|
188
|
+
| 'deliverable-unobserved'
|
|
189
|
+
| 'deliverable-merged';
|
|
190
|
+
|
|
191
|
+
export type SupervisorNext = 'harvest' | 'scope-decompose' | 'self-review' | 'human-gate' | 'proposal';
|