elanous 0.2.22 → 0.2.23
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/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-b23d2e92161d11fd.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-fbef064c213b2b18.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-d5341ac96203a983.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-0160ab83c8685a12.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-55c631c032dcc47e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-ad3bd8084048bee4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-e6784759a2531031.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-5c5d0e370f495ef6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-c325e21543cd48a8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/{page-80ed511e02c81412.js → page-6168a7c43e6ef8f5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-31417d3604154a6d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-e9606dc0bdec9305.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-a648bc464c9dc754.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-25bb425afdb27541.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-32d72fdef1afe11a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-d27b794c8ba76bbb.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-2bd9ce9c020d02d4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-a34096245e63b9f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-22170f4f00a15496.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-4cc66d22ca4ec502.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-83b14c729fcea837.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-6e2781c523dad761.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-26dd415c8f13f341.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-ccdb83ed40c8d724.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-7ad3de8fa06fdea9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-015c02c4fec4023e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-6b0ae5b5c42f6d2f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-786111f30b6f0969.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-48fb31810693c357.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-4e17cce5e2ed0fee.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-cb154acadb025414.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-16258e956ea93fc2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-c2dd2b19c93f90ab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-85f35dd1dd96ae87.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-d3c007c8a0ddd7ee.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-7837ce2aacb97b04.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-7350ee93f4fe1033.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-00723458575f2b19.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-745d9b6c015076f8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-736d33c7414a8a1a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-119be9a0444d2482.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-fa806c018833e332.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-c782041b5f5199ba.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-d431fbdea6ad93dd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-0c056abff82b9891.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-242d668e4fbf72c4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-847c3de6ca8a4416.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-81dd0d8ae923ed72.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-74e69ba2c8e970d4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-70038f41ae7cf931.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/5619d59e87eddf66.css +1 -0
- package/apps/pwa/out/_next/static/css/d0a48dc099ed86cf.css +1 -0
- package/apps/pwa/out/_next/static/{aBi6EyMtLsrl7J8eH4kF7 → rfkMm4movqkqMebBrCXiR}/_buildManifest.js +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 +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/graphs/log-horizon/log-horizon-watch.yaml +25 -0
- package/graphs/log-horizon/recipes.yaml +3 -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/bench-report.ts +82 -3
- package/scripts/ci-typecheck-changed.ts +10 -1
- package/scripts/hq/hq-fence-wrapper.sh +148 -0
- package/scripts/lib/typecheck-ratchet.ts +51 -0
- package/scripts/openai-relay-server.ts +5 -1
- package/scripts/release-loop/docs-node.ts +258 -43
- package/scripts/release-loop/gate-method.ts +59 -0
- package/scripts/release-loop/gate-node.ts +73 -7
- 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 +34 -4
- package/scripts/release-loop/resume.ts +53 -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 +8 -1
- package/scripts/rhythm/daily.ts +51 -2
- package/scripts/rhythm/weekly.ts +3 -2
- package/scripts/tsc-main-safety-net.ts +189 -0
- package/scripts/usage-rollup.ts +8 -4
- package/src/acp/codex-plugins.ts +48 -6
- package/src/agent/monad-agent-turn.ts +67 -5
- package/src/agent/run-context.ts +10 -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 +1 -1
- package/src/agent-mission/pr-review-watch.ts +6 -2
- package/src/agent-mission/review-loop.ts +33 -5
- package/src/agent-substrate/acp-reviewer.ts +17 -8
- package/src/agent-substrate/pr-reviewer.ts +164 -28
- package/src/agent-substrate/review-intent.ts +6 -4
- package/src/agent-substrate/self-review-cli.ts +111 -16
- 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/pr-manager.ts +12 -3
- 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/chat/index.ts +12 -3
- package/src/cli/agent-cli.ts +20 -0
- package/src/cli/brief-cli.ts +27 -21
- package/src/cli/cli-user-error.ts +9 -2
- package/src/cli/log-event-names.ts +3 -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 +30 -2
- package/src/cli/pr-land-overlap-evidence.ts +131 -0
- package/src/cli/release-cli.ts +53 -11
- package/src/cli/self-update.ts +173 -10
- package/src/cli/skills-cli.ts +12 -3
- package/src/cli/tasks-cli.ts +133 -27
- 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 +86 -2
- package/src/dashboard/chat-fold.ts +20 -0
- package/src/dashboard/first-screen-band.ts +151 -1
- package/src/dashboard/index.ts +27 -5
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +5 -3
- package/src/dashboard/stale-install-check.ts +13 -2
- package/src/dashboard/turn-stream-formatter.ts +25 -0
- package/src/debug/log-diet.ts +159 -0
- package/src/debug/log.ts +52 -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 +119 -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/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 +1 -0
- package/src/graph-runner/runner.ts +54 -5
- package/src/harness/dispatch-backpressure.ts +259 -0
- package/src/harness/harness-cli-command.ts +107 -28
- package/src/harness/harness-seams.ts +2 -20
- package/src/harness/harness-substrate-default.ts +72 -1
- package/src/harness/nested-elanous-policy.ts +4 -2
- package/src/hq/fence-wrapper.ts +7 -0
- package/src/hq/hq.ts +33 -2
- package/src/hq/lease.ts +13 -0
- package/src/hq/seats.ts +114 -18
- package/src/index.ts +163 -64
- 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/intelligence-map/model-alias.ts +6 -0
- package/src/intelligence-map/model-catalog.ts +41 -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-provider.ts +175 -0
- package/src/llm/bedrock.ts +345 -0
- package/src/llm/provider-credentials.ts +3 -1
- package/src/llm.ts +306 -35
- package/src/loops/budget.ts +150 -0
- 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/mcp/mcp-oauth.ts +136 -17
- package/src/model-tier/llm-tier-map.ts +48 -4
- package/src/models/prompts.ts +22 -1
- package/src/mss/logging/horizon-watch.ts +168 -0
- package/src/mss/logging/log-store.ts +204 -15
- 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/outbound-report.ts +8 -3
- package/src/nexus/api/telegram-trigger-bot.ts +6 -3
- package/src/nexus/index.ts +10 -0
- package/src/nexus/outbound/format.ts +2 -0
- package/src/nexus/outbound/router.ts +198 -13
- package/src/oauth/codex-account-rotation.ts +16 -18
- package/src/oauth/codex-account-store.ts +134 -5
- package/src/oauth/fallback-chain.ts +28 -6
- package/src/onboarding.ts +2 -1
- 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 +10 -6
- package/src/prompt-cache/openrouter.ts +94 -0
- package/src/prompt-enhance/enhance.ts +46 -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 +91 -22
- 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/retro/daily.ts +23 -9
- package/src/seat-loop/seat-loop.ts +34 -1
- 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 +67 -3
- package/src/self-dev/dev-pipeline.ts +4 -6
- package/src/self-dev/draft-residue.ts +463 -0
- package/src/self-dev/draft-sweep.ts +151 -10
- package/src/self-dev/draft-triage-rules.ts +27 -1
- 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 +57 -2
- package/src/self-dev/orchestrate-summary-line.ts +13 -0
- package/src/self-dev/orchestrate.ts +8 -135
- 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 +3 -22
- package/src/self-dev/run-types.ts +178 -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 +2 -4
- package/src/self-implement/blocked-draft-policy.ts +3 -19
- package/src/self-implement/draft-on-stop-mode.ts +18 -0
- package/src/self-implement/follow-up-goals.ts +114 -38
- 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.ts +24 -4
- package/src/self-implement/goal-digest.ts +19 -0
- package/src/self-implement/graph-overlay-condition.ts +4 -0
- package/src/self-implement/headless-elanous-driver.ts +11 -9
- 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 +133 -16
- 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/seams.ts +36 -3
- package/src/self-implement/self-implement-cli.ts +3 -1
- 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/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 +20 -9
- package/src/steward/triage.ts +4 -2
- package/src/storage/file-lock.ts +8 -1
- package/src/task-agent/actions.ts +4 -0
- package/src/task-agent/card-evidence.ts +59 -13
- package/src/task-agent/judge.ts +4 -3
- package/src/task-agent/land-worktree.ts +201 -0
- package/src/task-agent/live-move-history.ts +133 -0
- package/src/task-agent/live-moves.ts +106 -19
- package/src/task-agent/parent-host.ts +117 -8
- package/src/task-agent/rejudge-on-head.ts +297 -0
- package/src/task-agent/review-result-capture.ts +218 -0
- package/src/task-agent/shadow.ts +103 -7
- package/src/task-agent/task-hand.ts +136 -11
- package/src/task-orchestrator/surfaces/pod-child-providers.ts +29 -0
- package/src/task-orchestrator/surfaces/pod-command-job.ts +6 -3
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +16 -2
- package/src/task-orchestrator/surfaces/pod-image-source.ts +212 -0
- package/src/task-orchestrator/surfaces/pod-lease.ts +93 -12
- package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +25 -2
- package/src/task-orchestrator/surfaces/pod-pool.ts +66 -14
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +259 -36
- package/src/task-orchestrator/surfaces/self-implement.ts +6 -2
- 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/user-config.ts +132 -24
- 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/scheduler.ts +1 -0
- 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 → rfkMm4movqkqMebBrCXiR}/_ssgManifest.js +0 -0
|
@@ -12,7 +12,7 @@ import { launchAndVerifyGoalDeliverable } from '../harness/deliverable-verify-cl
|
|
|
12
12
|
import type { DeployVerifyResult } from '../harness/browser-verify.js';
|
|
13
13
|
import { buildSelfOrchestrateDevSpec, executeOrchestrateReroute } from './dev-pipeline.js';
|
|
14
14
|
import type { DevPipelineDeps, OrchestrateRuntime } from './dev-pipeline.js';
|
|
15
|
-
import { resolveOrchestrateConcurrency } from './orchestrate.js';
|
|
15
|
+
import { resolveOrchestrateConcurrency, resumeKey } from './orchestrate.js';
|
|
16
16
|
import type { FailureClassification, SelfDevGoal, SelfDevJobResult } from './orchestrate.js';
|
|
17
17
|
import { superviseRun, type SupervisorDecision } from './run-supervisor.js';
|
|
18
18
|
import { readDecomposeProposals, applyDecomposeProposals } from './decompose-proposal.js';
|
|
@@ -432,6 +432,7 @@ export async function runSelfOrchestrateCliCommand(
|
|
|
432
432
|
// ⭐ 방금 끝난 결과를 넘긴다 — orchestrateSelfDev 가 classifyResumeDisposition 으로
|
|
433
433
|
// skip/rerun 을 갈라준다(재발명 0 · 착지한 조각은 다시 안 돈다).
|
|
434
434
|
rerun: async (previous) => {
|
|
435
|
+
let addedRepairIds: string[] = [];
|
|
435
436
|
if (currentDecision?.action === 'add-repair-task') {
|
|
436
437
|
const appended = appendRepairFragments(currentGoals, currentDecision.classifications, {
|
|
437
438
|
seenFingerprints: repairFingerprints,
|
|
@@ -441,6 +442,7 @@ export async function runSelfOrchestrateCliCommand(
|
|
|
441
442
|
repairFragmentsAdded += appended.added.length;
|
|
442
443
|
for (const outcome of appended.added) repairFingerprints.set(outcome.fingerprint, (repairFingerprints.get(outcome.fingerprint) ?? 0) + 1);
|
|
443
444
|
repairAppend.push({ added: appended.added, skipped: appended.skipped });
|
|
445
|
+
addedRepairIds = appended.added.map((item) => `repair:${item.fingerprint}`);
|
|
444
446
|
spec = buildSelfOrchestrateDevSpec(currentGoals, input.concurrency);
|
|
445
447
|
if (appended.added.length === 0) {
|
|
446
448
|
currentDecision.why = `${currentDecision.why} — 수리 조각 추가 없음 (${appended.skipped.length}건 건너뜀)`;
|
|
@@ -460,6 +462,7 @@ export async function runSelfOrchestrateCliCommand(
|
|
|
460
462
|
// 판정(decompose-and-retry)은 트리아지가 이미 했다. 여기는 그 답을 집행만 한다.
|
|
461
463
|
// ⛔ 의존성은 조각이 «들고 온 그대로» 물려준다 ⇒ dependsOn 이 없는 조각은
|
|
462
464
|
// orchestrateSelfDev 의 위상 병렬로 «자동으로 동시에» 돈다(대표 2026-08-19 기본 동작).
|
|
465
|
+
const goalsBeforeDecompose = new Set(currentGoals);
|
|
463
466
|
const applied = applyDecomposeProposals(currentGoals, previous, { alreadyDecomposed: decomposedFeatures });
|
|
464
467
|
if (applied.decomposed.length > 0) {
|
|
465
468
|
for (const f of applied.decomposed) decomposedFeatures.add(f);
|
|
@@ -485,7 +488,59 @@ export async function runSelfOrchestrateCliCommand(
|
|
|
485
488
|
// ⛔⭐ 판정이 「사람이 볼 것」이라 한 조각은 집행이 다시 돌리지 않는다 — 판정과 집행이 갈리면
|
|
486
489
|
// `pr-opened` 조각이 duplicate-risk 로 재실행돼 PR 이 겹친다(2026-09-25 실측).
|
|
487
490
|
const resumeHold = currentDecision?.needsHuman ?? [];
|
|
488
|
-
|
|
491
|
+
// The engine's resume lookup is last-result-wins for each normalized feature.
|
|
492
|
+
// Use that exact predecessor, not any earlier task sharing the same feature.
|
|
493
|
+
const selectedPrior = new Map(previous.map((result) => [resumeKey(result.feature), result.taskId]));
|
|
494
|
+
const strategyByPriorId = new Map<string, 'rerun' | 'rework' | 'decompose-and-retry'>();
|
|
495
|
+
for (const id of currentDecision?.rerunnable ?? []) strategyByPriorId.set(id, 'rerun');
|
|
496
|
+
for (const id of currentDecision?.reworkable ?? []) strategyByPriorId.set(id, 'rework');
|
|
497
|
+
for (const id of currentDecision?.decomposable ?? []) strategyByPriorId.set(id, 'decompose-and-retry');
|
|
498
|
+
const strategyByGoal = new Map<SelfDevGoal, string>();
|
|
499
|
+
for (const goal of currentGoals) {
|
|
500
|
+
const predecessor = selectedPrior.get(resumeKey(goal.feature));
|
|
501
|
+
if (predecessor && strategyByPriorId.has(predecessor)) strategyByGoal.set(goal, strategyByPriorId.get(predecessor)!);
|
|
502
|
+
if (goal.id && addedRepairIds.includes(goal.id)) strategyByGoal.set(goal, 'add-repair-task');
|
|
503
|
+
}
|
|
504
|
+
// Pieces have fresh goal objects; the selected source must actually have been decomposed.
|
|
505
|
+
for (const id of currentDecision?.decomposable ?? []) {
|
|
506
|
+
const source = previous.find((result) => result.taskId === id);
|
|
507
|
+
if (!source || selectedPrior.get(resumeKey(source.feature)) !== id || !applied.decomposed.includes(source.feature)) continue;
|
|
508
|
+
for (const piece of source.decomposeProposal?.pieces ?? []) {
|
|
509
|
+
const goal = currentGoals.find((candidate) => !goalsBeforeDecompose.has(candidate) && candidate.id === piece.id && candidate.feature === piece.feature);
|
|
510
|
+
if (goal) strategyByGoal.set(goal, 'decompose-and-retry');
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
const requested = new Map<string, number>();
|
|
514
|
+
for (const strategy of strategyByGoal.values()) requested.set(strategy, (requested.get(strategy) ?? 0) + 1);
|
|
515
|
+
const launchedByStrategy = new Map<string, string[]>();
|
|
516
|
+
const next = await exec(spec, {
|
|
517
|
+
...baseRuntime, resumeFrom: [...previous], ...(resumeHold.length > 0 ? { resumeHold } : {}),
|
|
518
|
+
onTaskLaunched: (goal, taskId, priorTaskId) => {
|
|
519
|
+
baseRuntime.onTaskLaunched?.(goal, taskId, priorTaskId);
|
|
520
|
+
const strategy = strategyByGoal.get(goal);
|
|
521
|
+
if (!strategy) return;
|
|
522
|
+
if (strategy === 'add-repair-task' && !addedRepairIds.includes(goal.id ?? '')) return;
|
|
523
|
+
if (strategy === 'decompose-and-retry' && goalsBeforeDecompose.has(goal)
|
|
524
|
+
&& (priorTaskId === undefined || priorTaskId !== selectedPrior.get(resumeKey(goal.feature)))) return;
|
|
525
|
+
if (strategy !== 'add-repair-task' && strategy !== 'decompose-and-retry'
|
|
526
|
+
&& (priorTaskId === undefined || priorTaskId !== selectedPrior.get(resumeKey(goal.feature)))) return;
|
|
527
|
+
const launched = launchedByStrategy.get(strategy) ?? [];
|
|
528
|
+
launched.push(taskId);
|
|
529
|
+
launchedByStrategy.set(strategy, launched);
|
|
530
|
+
},
|
|
531
|
+
}, pipelineDeps);
|
|
532
|
+
// runSelfOrchestrateCliCommand → superviseRun.rerun → executeOrchestrateReroute → orchestrateSelfDev.
|
|
533
|
+
// Only task identities observed at dispatch count; a checkpoint result cannot claim another strategy's launch.
|
|
534
|
+
for (const [strategy, count] of requested) {
|
|
535
|
+
const returnedIds = new Set(next.results.map((result) => result.taskId));
|
|
536
|
+
const taskIds = (launchedByStrategy.get(strategy) ?? []).filter((id) => returnedIds.has(id));
|
|
537
|
+
try {
|
|
538
|
+
debug.log('self-dev.supervisor', 'strategy.launch', {
|
|
539
|
+
strategy, round: supervisedRound + 1, requested: count,
|
|
540
|
+
launched: taskIds.length, taskIds,
|
|
541
|
+
});
|
|
542
|
+
} catch { /* observation must not interrupt execution */ }
|
|
543
|
+
}
|
|
489
544
|
exitCode = next.exitCode;
|
|
490
545
|
supervisedRound += 1;
|
|
491
546
|
await recordRoundPrs(next.results);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SelfDevJobResult } from './run-types.js';
|
|
2
|
+
|
|
3
|
+
/** Error codes whose message is the only place the Pod failure reason survives — the harness Pod exit
|
|
4
|
+
* classifier (src/harness/harness-cli-command.ts) reads it back from this line (POD-EXIT-REASON-SHOWN). */
|
|
5
|
+
const MESSAGE_CODES = new Set(['pod-job-failed', 'pod-child-failed']);
|
|
6
|
+
|
|
7
|
+
/** One human summary line per job printed by `elanous self orchestrate` (src/index.ts). */
|
|
8
|
+
export function formatOrchestrateResultLine(r: Pick<SelfDevJobResult, 'status' | 'feature' | 'merged' | 'prUrl' | 'stage' | 'error'>): string {
|
|
9
|
+
const icon = r.status === 'done' ? '✅' : r.status === 'cancelled' ? '⛔' : '❌';
|
|
10
|
+
const disp = r.merged ? ` → merged ${r.prUrl}` : r.prUrl ? ` → PR ${r.prUrl}` : r.stage ? ` [${r.stage}]` : '';
|
|
11
|
+
const error = r.error ? ` — ${r.error.code}${MESSAGE_CODES.has(r.error.code) ? `: ${r.error.message}` : ''}` : '';
|
|
12
|
+
return ` ${icon} ${r.status} · ${r.feature.slice(0, 56)}${disp}${error}`;
|
|
13
|
+
}
|
|
@@ -30,6 +30,8 @@ import { plannedSelfImplBranch } from '../harness/worktree-branch-prefix.js';
|
|
|
30
30
|
import { parseGoalId } from '../self-implement/goal-author.js';
|
|
31
31
|
import { isTransientExecutionFailure } from './execution-transient.js';
|
|
32
32
|
import type { AbandonedClassification } from '../self-implement/abandoned-classification.js';
|
|
33
|
+
import type { JobKind, SelfDevGoal, SelfDevJobResult } from './run-types.js';
|
|
34
|
+
export type { JobKind, SelfDevGoalType, SelfDevGoal, SelfDevJobResult } from './run-types.js';
|
|
33
35
|
import type { DeployVerifyFinding, DeployVerifyResult } from '../harness/browser-verify.js';
|
|
34
36
|
import type { LogQuery, LogStoreRow } from '../mss/logging/log-store.js';
|
|
35
37
|
import { observeDeliverables, type DeliverableObservationTarget } from '../harness/deliverable-observation.js';
|
|
@@ -80,9 +82,6 @@ const LEGIT_PIPELINE_FAIL_STAGES: ReadonlySet<string> = new Set([
|
|
|
80
82
|
'gate-failed', 'review-blocked', 'merge-conflict', 'timed-out', 'aborted', 'pr-declined',
|
|
81
83
|
]);
|
|
82
84
|
|
|
83
|
-
export type JobKind = 'dev' | 'search' | 'deploy' | 'media';
|
|
84
|
-
export type SelfDevGoalType = 'implement' | 'research' | 'document' | 'operate';
|
|
85
|
-
|
|
86
85
|
/** Maps a heterogeneous job kind to an existing TOX surface adapter. */
|
|
87
86
|
export interface JobKindDefinition {
|
|
88
87
|
surfaceKind: TaskSurfaceKind;
|
|
@@ -195,47 +194,6 @@ export function formatShardHandoffInput(
|
|
|
195
194
|
return compact.length <= boundedLength ? compact : JSON.stringify({ truncated: true });
|
|
196
195
|
}
|
|
197
196
|
|
|
198
|
-
export interface SelfDevGoal {
|
|
199
|
-
/** F1 job kind. Omitted remains the legacy `dev` self-implement job. */
|
|
200
|
-
kind?: JobKind;
|
|
201
|
-
/** Decomposition intent; deliberately distinct from executable `kind`. */
|
|
202
|
-
goalType?: SelfDevGoalType;
|
|
203
|
-
/** Feature/goal text → `elanous self implement <feature>` for dev jobs. */
|
|
204
|
-
feature: string;
|
|
205
|
-
/** Pod lease predecessor goal ID or PR number. */
|
|
206
|
-
after?: string | number;
|
|
207
|
-
base?: string;
|
|
208
|
-
autoMerge?: boolean;
|
|
209
|
-
/** G8 — attach `auto-review` opt-in label on PR (subject to eligibility self-assessment). */
|
|
210
|
-
autoReview?: boolean;
|
|
211
|
-
/** S3 — open a draft PR via the job's own merge-decision node (HITL).
|
|
212
|
-
* Promotion flows through the review node → disposition recorded
|
|
213
|
-
* internally (no external hand-merge). */
|
|
214
|
-
openPr?: boolean;
|
|
215
|
-
draft?: boolean;
|
|
216
|
-
/** Optional short title (≤ 80 chars). Default = feature head. */
|
|
217
|
-
title?: string;
|
|
218
|
-
/** 계획 브랜치가 알려지면 같은 워크트리의 실행을 직렬화한다. */
|
|
219
|
-
planBranch?: string;
|
|
220
|
-
/** 계획 브랜치가 없는 저작 골의 안정 식별자. */
|
|
221
|
-
goalId?: string;
|
|
222
|
-
/** S2 — goal-local id for dependency wiring (default = array index). */
|
|
223
|
-
id?: string;
|
|
224
|
-
/** S2 — goal-local ids this goal depends on (must complete first).
|
|
225
|
-
* The task becomes `ready` only after every dependency is `done`
|
|
226
|
-
* (topological parallel via the graph). Unknown/self ids are dropped. */
|
|
227
|
-
dependsOn?: string[];
|
|
228
|
-
/** Read-only handoff memory emitted by this shard for dependent child input.
|
|
229
|
-
* `[]` is a completed shard with no entries; null/undefined is unreadable. */
|
|
230
|
-
workingMemory?: readonly WorkingMemoryEntry[] | null;
|
|
231
|
-
/** 그 기억을 남긴 이 조각이 «착지했나». ⛔ 생략은 「모른다」이지 「착지」가 아니다. */
|
|
232
|
-
workingMemoryOutcome?: 'landed' | 'blocked' | 'unknown';
|
|
233
|
-
/** S2 — repo paths this job will touch. Two goals sharing a hot path
|
|
234
|
-
* are serialized (an implicit dependency edge is added, earlier-first)
|
|
235
|
-
* so their worktrees never merge concurrently. Cf. PLAN §8 risk 2. */
|
|
236
|
-
hotPaths?: string[];
|
|
237
|
-
}
|
|
238
|
-
|
|
239
197
|
interface SelfDevTerminalOutcome {
|
|
240
198
|
/** Stable TOX task identity, matching the returned `SelfDevJobResult.taskId`. */
|
|
241
199
|
taskId: string;
|
|
@@ -249,97 +207,6 @@ interface SelfDevTerminalOutcome {
|
|
|
249
207
|
parentNoPr?: true;
|
|
250
208
|
}
|
|
251
209
|
|
|
252
|
-
export interface SelfDevJobResult {
|
|
253
|
-
taskId: string;
|
|
254
|
-
feature: string;
|
|
255
|
-
/** Run outcome — done | failed | cancelled | blocked (awaiting parent landing). */
|
|
256
|
-
status: TaskStatus;
|
|
257
|
-
error?: { code: string; message: string };
|
|
258
|
-
durationMs?: number;
|
|
259
|
-
/** S3 — real pipeline disposition from the child `--json`
|
|
260
|
-
* (merged / pr-opened / gate-failed / review-blocked / pr-declined). */
|
|
261
|
-
stage?: string;
|
|
262
|
-
branch?: string;
|
|
263
|
-
/** Child confirmed the finished implementation was pushed for manual harvest. */
|
|
264
|
-
harvestable?: true;
|
|
265
|
-
worktreePath?: string;
|
|
266
|
-
prUrl?: string;
|
|
267
|
-
prNumber?: number;
|
|
268
|
-
merged?: boolean;
|
|
269
|
-
/** Child commit SHA, when observed by the Pod/host. */
|
|
270
|
-
checkedHeadCommit?: string;
|
|
271
|
-
/**
|
|
272
|
-
* This run's own `--base` (not main). A non-main completion mode
|
|
273
|
-
* (worktree-only, draft, `--base` other than main) lands commits here.
|
|
274
|
-
*/
|
|
275
|
-
base?: string;
|
|
276
|
-
/** Child finished with GOAL-COMPLETE (`ok=true`). Distinct from a main merge. */
|
|
277
|
-
ok?: boolean;
|
|
278
|
-
/** Commits this child added against its own `--base`. 0 is not completion progress. */
|
|
279
|
-
commitsAheadOfBase?: number;
|
|
280
|
-
/** A dependency is done but its result is not on main; no child was launched. */
|
|
281
|
-
blockReason?: 'parent-unlanded';
|
|
282
|
-
parentPrNumber?: number;
|
|
283
|
-
/** The upstream completed in a worktree without opening a PR. */
|
|
284
|
-
parentNoPr?: true;
|
|
285
|
-
// ⭐⭐⭐ `A1`(2026-08-19 · 대표 *"R3 가 서브 프로세스여도 잘 도는 안"*) — ***판정 3종***.
|
|
286
|
-
// 🚨 이 셋이 트리아지의 입력 전부인데 종전엔 자식 → 부모 경계에서 «전부» 사라졌다.
|
|
287
|
-
// 값은 전선에 «실려 있었고»(자식이 `r.result` 를 통째로 낸다) 파서가 버렸다.
|
|
288
|
-
// ⇒ 📌 서브프로세스에서 «먼저» 옳아야 한다 — 실행 방식을 바꾸지 않고 고치는 자리다.
|
|
289
|
-
/** auto-merge 를 «왜» 건너뛰었나 — 「도구 한계」와 「자식이 못 함」을 가르는 근거. */
|
|
290
|
-
mergeReason?: string;
|
|
291
|
-
/** 런이 «왜» 멈췄나. 없으면 「부모가 잘랐다」다. */
|
|
292
|
-
stopReason?: string;
|
|
293
|
-
/** 자식이 스스로 낸 완료 성격. */
|
|
294
|
-
completionDisposition?: string;
|
|
295
|
-
/** Abandoned-run classification from the child. Independent of completionDisposition. */
|
|
296
|
-
failureClassification?: AbandonedClassification;
|
|
297
|
-
/** Provider failure evidence from the child result; absent when unobserved. */
|
|
298
|
-
providerErrors?: { count: number; provider: string; category: 'quota' | 'credential' | 'request' | 'other' };
|
|
299
|
-
/** Stable child run identity used to join its run-ledger proposal. */
|
|
300
|
-
runId?: string;
|
|
301
|
-
/** Self review verdict bound to the PR head observed by the child; absent if either observation is missing. */
|
|
302
|
-
selfReview?: { verdict: 'pass' | 'fail'; head: string };
|
|
303
|
-
/** Whether the child review actually ran; omitted preserves legacy producers. */
|
|
304
|
-
reviewed?: boolean;
|
|
305
|
-
/** Why the child did not run review; omitted preserves legacy review-unobserved handling. */
|
|
306
|
-
reviewReason?: string;
|
|
307
|
-
/** The abandoned-run classifier observed a goal-side cause for this failed convergence. */
|
|
308
|
-
goalCauseObserved?: true;
|
|
309
|
-
/** Resume selection that decided whether this shard was carried forward or retried. */
|
|
310
|
-
resumeDisposition?: ResumeDisposition;
|
|
311
|
-
/**
|
|
312
|
-
* ⭐ 하니스가 이 조각에 대해 낸 「이렇게 쪼개라」(2026-08-19).
|
|
313
|
-
*
|
|
314
|
-
* ⛔ 이 값은 자식 결과로 «안 온다» — 전선 타입(SelfImplementDisposition)에 칸이 없다.
|
|
315
|
-
* 그래서 «중앙»이 원장에서 읽어 채운다(decompose-proposal.ts). 트리아지는 그것을 그냥 본다.
|
|
316
|
-
* ⇒ 📌 출구 모듈은 ***「이 값이 어디서 왔는지 몰라야」*** 한다 — 알면 실행 방식마다 갈래가 는다.
|
|
317
|
-
* ⚠️ undefined = 「제안이 없다」와 「아직 안 읽었다」가 «같은 값»이다. 채우는 자가 그것을 구분해 관측한다.
|
|
318
|
-
*/
|
|
319
|
-
decomposeProposal?: { pieces: Array<{ id: string; feature: string; dependsOn: readonly string[]; goalType?: string }> };
|
|
320
|
-
/**
|
|
321
|
-
* Parent-side observation of CONTRACT-CONFLICT goal-plan revision application attempts.
|
|
322
|
-
* undefined = the parent has not read the run ledger yet; it is not the same as attempted=0.
|
|
323
|
-
*/
|
|
324
|
-
goalPlanRevision?:
|
|
325
|
-
| { status: 'read'; attempted: number; applied: number; failureReasons: string[] }
|
|
326
|
-
| { status: 'read-failed'; reason: 'directory-missing' | 'unreadable-directory' | 'unreadable-files'; scannedFiles: number; unreadableFiles: number; ledgerDirectory: string };
|
|
327
|
-
/** ⭐ 관측(2026-07-21 대표 co-design·"재현 없이 진단") — 자식 goal-loop 화면 버퍼 tail
|
|
328
|
-
* (ANSI 제거·"docker logs <id>" 등가물). detached PTY goal-loop 은 스폰 프로세스 stdout 이
|
|
329
|
-
* 아니라 file-based 화면 버퍼에만 남으므로, 실패 진단의 유일한 cross-process 진실원. */
|
|
330
|
-
screenTail?: string;
|
|
331
|
-
/** 화면 버퍼에서 판정한 goal-loop 종결 상태(complete=성공 마커·incomplete·null=불명). */
|
|
332
|
-
screenOutcome?: 'complete' | 'incomplete' | null;
|
|
333
|
-
/** 화면 버퍼 공간 id — `elanous self screen --space <id>` 로 전체 전사 재생 가능. */
|
|
334
|
-
screenSpace?: string;
|
|
335
|
-
/** ⚠️ exit-code 실패인데 화면은 GOAL-COMPLETE = 스폰-신호 단절(false-failure). 조정 플래그. */
|
|
336
|
-
reconcileMismatch?: boolean;
|
|
337
|
-
/** ⭐ 이 시도의 «걸음» — 노드 진입 순서(2026-09-08 · 대표 지시).
|
|
338
|
-
* 🩸 그 전까지 이 배열엔 「요약 판정」만 있었고 걸음은 런 «안»에서 끝났다.
|
|
339
|
-
* ⛔ 관측용이다 — 슈퍼바이저가 이것으로 «무엇을 할지»는 별개 결정이다. */
|
|
340
|
-
walk?: readonly { node: string; round: number }[];
|
|
341
|
-
}
|
|
342
|
-
|
|
343
210
|
/**
|
|
344
211
|
* Resume identity for the legacy feature-only checkpoint format.
|
|
345
212
|
* It deliberately absorbs only trim, whitespace runs, and case; wording,
|
|
@@ -944,6 +811,8 @@ export interface OrchestrateSelfDevOptions {
|
|
|
944
811
|
* 🩸 2026-09-25 실측: 판정은 「재실행 1 · 사람 대기 2」였는데 `pr-opened` 가 `rerun-duplicate-risk` 로
|
|
945
812
|
* 분류돼 PR 을 이미 연 두 조각까지 «다시» 돌았다(같은 골·새 task id · 과금 팔 포함). */
|
|
946
813
|
resumeHold?: readonly string[];
|
|
814
|
+
/** Link a dispatched task to its exact goal and selected resume predecessor. */
|
|
815
|
+
onTaskLaunched?: (goal: SelfDevGoal, taskId: string, priorTaskId: string | undefined) => void;
|
|
947
816
|
/** S3 — called with the full current result set after every job
|
|
948
817
|
* settles (+ at finish) so callers can persist a resumable checkpoint.
|
|
949
818
|
* Default CLI wiring = saveSelfDevRun. Fail-soft in the caller. */
|
|
@@ -1160,6 +1029,10 @@ export function orchestrateSelfDev(opts: OrchestrateSelfDevOptions): Promise<Sel
|
|
|
1160
1029
|
const goal = taskId ? taskByGoal.get(taskId) : undefined;
|
|
1161
1030
|
if (cancelling) throw new Error('orchestration cancelled by signal');
|
|
1162
1031
|
const started = baseSpawn({ ...input, feature: dependencyOutputFeature(input.spaceId, input.feature) });
|
|
1032
|
+
if (goal && taskId) {
|
|
1033
|
+
try { opts.onTaskLaunched?.(goal, taskId, priorByResumeKey.get(resumeKey(goal.feature))?.taskId); }
|
|
1034
|
+
catch { /* observation must not interrupt execution */ }
|
|
1035
|
+
}
|
|
1163
1036
|
return {
|
|
1164
1037
|
address: started.address,
|
|
1165
1038
|
done: started.done.then((d) => {
|
|
@@ -24,6 +24,59 @@ import { claudeBackend, resolveBackendSpawn } from '../agent-mission/driver.js';
|
|
|
24
24
|
import { checkClaudeSubscription } from '../agent-mission/claude-subscription.js';
|
|
25
25
|
import { getAcpBackend, type AcpBackendSpec } from '../acp/backend-registry.js';
|
|
26
26
|
import type { SubscriptionReviewerSpec } from '../user-config.js';
|
|
27
|
+
import { debug } from '../debug/log.js';
|
|
28
|
+
|
|
29
|
+
export interface TeamclaudeSubscriptionProbe {
|
|
30
|
+
subscribed: boolean;
|
|
31
|
+
usedPercent?: number;
|
|
32
|
+
reason: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Read `teamclaude status --json`. The human `teamclaude status` text names neither "subscription" nor a
|
|
37
|
+
* "usage: N%" label, so the text probe failed on every review (10-10 · mbp 0/0). Accounts are subscription
|
|
38
|
+
* (oauth) accounts; quota buckets `unified5h`/`unified7d` are utilization ratios 0-1 (teamclaude
|
|
39
|
+
* `account-manager.js`). Returns undefined when stdout is not that JSON, so an old teamclaude falls back to text.
|
|
40
|
+
*/
|
|
41
|
+
export function parseTeamclaudeStatusJson(stdout: string): TeamclaudeSubscriptionProbe | undefined {
|
|
42
|
+
let doc: unknown;
|
|
43
|
+
try { doc = JSON.parse(stdout); } catch { return undefined; }
|
|
44
|
+
if (!doc || typeof doc !== 'object' || !Array.isArray((doc as { accounts?: unknown }).accounts)) return undefined;
|
|
45
|
+
const root = doc as { accounts: unknown[]; currentAccount?: unknown; currentAccounts?: unknown };
|
|
46
|
+
// Every account must carry the string `type`/`status` this parser reads; another schema is "not this JSON".
|
|
47
|
+
if (!root.accounts.every((a) => a && typeof a === 'object'
|
|
48
|
+
&& typeof (a as { type?: unknown }).type === 'string' && typeof (a as { status?: unknown }).status === 'string'
|
|
49
|
+
&& typeof (a as { disabled?: unknown }).disabled === 'boolean')) return undefined;
|
|
50
|
+
const current = typeof root.currentAccount === 'string' ? root.currentAccount
|
|
51
|
+
: root.currentAccounts && typeof root.currentAccounts === 'object'
|
|
52
|
+
&& typeof (root.currentAccounts as Record<string, unknown>).anthropic === 'string'
|
|
53
|
+
? (root.currentAccounts as Record<string, string>).anthropic : undefined;
|
|
54
|
+
type Account = { name?: unknown; type?: unknown; status?: unknown; disabled?: unknown; quota?: Record<string, unknown> | null };
|
|
55
|
+
const usable = (root.accounts as Account[]).filter((a) => a && typeof a === 'object'
|
|
56
|
+
&& a.type === 'oauth' && a.status === 'active' && a.disabled !== true);
|
|
57
|
+
if (usable.length === 0) return { subscribed: false, reason: 'no-active-oauth-account' };
|
|
58
|
+
const ratio = (v: unknown) => typeof v === 'number' && Number.isFinite(v) && v >= 0 && v <= 1 ? v : undefined;
|
|
59
|
+
// A bucket that is null was reset or not yet seen: teamclaude nulls `unified5h`/`unified7d` when their window
|
|
60
|
+
// expires (`_clearExpiredQuotas`), so the other measured bucket still gates. A present but invalid value
|
|
61
|
+
// (non-number, outside 0-1) or a missing key is not a measurement and fails closed. Both null is unmeasured.
|
|
62
|
+
const usedOf = (account: Account) => {
|
|
63
|
+
// A missing key (or no quota object) is not a reset: it stays unmeasured.
|
|
64
|
+
const raw = [account.quota?.unified5h, account.quota?.unified7d].filter((v) => v !== null);
|
|
65
|
+
const measured = raw.map(ratio);
|
|
66
|
+
if (measured.length === 0 || measured.some((v) => v === undefined)) return undefined;
|
|
67
|
+
return Math.max(...(measured as number[])) * 100;
|
|
68
|
+
};
|
|
69
|
+
// The usage that gates the review is the routed account's. The current account is the one the proxy routes to;
|
|
70
|
+
// without a usable current account, every usable account must be measured and the highest one counts.
|
|
71
|
+
const routed = usable.find((a) => a.name === current);
|
|
72
|
+
if (routed) {
|
|
73
|
+
const used = usedOf(routed);
|
|
74
|
+
return used === undefined ? { subscribed: true, reason: 'quota-unmeasured' } : { subscribed: true, usedPercent: used, reason: 'current-account' };
|
|
75
|
+
}
|
|
76
|
+
const all = usable.map(usedOf);
|
|
77
|
+
if (all.some((v) => v === undefined)) return { subscribed: true, reason: 'quota-unmeasured' };
|
|
78
|
+
return { subscribed: true, usedPercent: Math.max(...(all as number[])), reason: 'max-active-account' };
|
|
79
|
+
}
|
|
27
80
|
|
|
28
81
|
export interface SubscriptionReviewerDeps {
|
|
29
82
|
/** Returns measured Claude subscription usage; unknown usage fails closed. */
|
|
@@ -32,18 +85,26 @@ export interface SubscriptionReviewerDeps {
|
|
|
32
85
|
runStatus?: (command: string, args: string[], env: Record<string, string>) => { status: number | null; stdout?: string | Buffer | null };
|
|
33
86
|
}
|
|
34
87
|
|
|
35
|
-
/**
|
|
36
|
-
|
|
88
|
+
/**
|
|
89
|
+
* The runner and the subscription probe share the PTY backend's billing-env scrub.
|
|
90
|
+
* ⛔ The child must speak ACP: `teamclaude run` / `claude` start the interactive CLI, which never answers the ACP
|
|
91
|
+
* handshake (10-10 measured: the review hung with no timeout). Both executors therefore run the ACP adapter
|
|
92
|
+
* (`claude-agent-acp`); `cct` routes it through the teamclaude proxy by its base URL (`teamclaude env --no-mitm`).
|
|
93
|
+
*/
|
|
94
|
+
export function subscriptionReviewerSpawn(spec: SubscriptionReviewerSpec, env: NodeJS.ProcessEnv = process.env, proxyBaseUrl?: string): {
|
|
37
95
|
command: string; args: string[]; env: Record<string, string>; backendSpec: AcpBackendSpec;
|
|
38
96
|
} {
|
|
39
97
|
const executor = spec.executor ?? 'cct';
|
|
40
|
-
const { env:
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
98
|
+
const { env: scrubbed } = resolveBackendSpawn(claudeBackend, env);
|
|
99
|
+
const cleanEnv = executor === 'cct' && proxyBaseUrl ? { ...scrubbed, ANTHROPIC_BASE_URL: proxyBaseUrl } : scrubbed;
|
|
100
|
+
const backendSpec = getAcpBackend('claude');
|
|
101
|
+
return { command: backendSpec.command, args: [...backendSpec.args], env: cleanEnv, backendSpec };
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** `teamclaude env --no-mitm` prints `export ANTHROPIC_BASE_URL=…`; only that line is read (never the proxy key). */
|
|
105
|
+
export function parseTeamclaudeBaseUrl(stdout: string): string | undefined {
|
|
106
|
+
const match = stdout.match(/^\s*export\s+ANTHROPIC_BASE_URL=["']?(https?:\/\/[^\s"']+)["']?\s*$/m);
|
|
107
|
+
return match?.[1];
|
|
47
108
|
}
|
|
48
109
|
|
|
49
110
|
/** Guard the ACP review before spawning. An unmeasured quota never authorizes subscription use. */
|
|
@@ -57,25 +118,53 @@ export function subscriptionReviewerAvailability(
|
|
|
57
118
|
const executor = spec.executor ?? 'cct';
|
|
58
119
|
const runStatus = deps.runStatus ?? ((command: string, args: string[], cleanEnv: Record<string, string>) =>
|
|
59
120
|
spawnSync(command, args, { env: { ...cleanEnv, NODE_ENV: process.env.NODE_ENV }, encoding: 'utf8', timeout: 5_000 }));
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
121
|
+
// One `--json` read serves both questions; the text regexes stay only for a teamclaude without `--json`.
|
|
122
|
+
let jsonProbe: TeamclaudeSubscriptionProbe | null | undefined;
|
|
123
|
+
const readJsonProbe = (cleanEnv: Record<string, string>) => {
|
|
124
|
+
if (jsonProbe !== undefined) return jsonProbe ?? undefined;
|
|
125
|
+
const result = runStatus('teamclaude', ['status', '--json'], cleanEnv);
|
|
126
|
+
jsonProbe = result.status === 0 ? parseTeamclaudeStatusJson(String(result.stdout ?? '')) ?? null : null;
|
|
127
|
+
if (jsonProbe) debug.log('self-dev.reviewer', 'subscription-probe', { source: 'json', ...jsonProbe });
|
|
128
|
+
return jsonProbe ?? undefined;
|
|
129
|
+
};
|
|
130
|
+
// Old teamclaude: one text read answers both questions and is logged once with both values.
|
|
131
|
+
let textProbe: { subscribed: boolean; usedPercent?: number } | undefined;
|
|
132
|
+
const readTextProbe = (cleanEnv: Record<string, string>) => {
|
|
133
|
+
if (textProbe) return textProbe;
|
|
134
|
+
const status = runStatus('teamclaude', ['status'], cleanEnv);
|
|
135
|
+
const out = String(status.stdout ?? '');
|
|
136
|
+
const ok = status.status === 0;
|
|
63
137
|
// Only a named usage percentage is accepted; a random percentage in status is not quota evidence.
|
|
64
|
-
const match =
|
|
65
|
-
|
|
138
|
+
const match = ok ? out.match(/(?:usage|used)\s*[:=]?\s*(\d+(?:\.\d+)?)\s*%/i) : null;
|
|
139
|
+
textProbe = {
|
|
140
|
+
subscribed: ok && /(?:subscription|claude\.ai|claude\s+(?:max|pro))/i.test(out)
|
|
141
|
+
&& !/(?:logged\s*out|not\s+logged\s+in|api[_ -]?key|not\s+authenticated)/i.test(out),
|
|
142
|
+
usedPercent: match ? Number(match[1]) : undefined,
|
|
143
|
+
};
|
|
144
|
+
debug.log('self-dev.reviewer', 'subscription-probe', { source: 'text', ...textProbe,
|
|
145
|
+
reason: ok ? 'text-read' : `exit-${status.status}` });
|
|
146
|
+
return textProbe;
|
|
147
|
+
};
|
|
148
|
+
const usedPercent = deps.usedPercent ?? (() => {
|
|
149
|
+
const probe = executor === 'cct' ? readJsonProbe(spawn.env) : undefined;
|
|
150
|
+
return probe ? probe.usedPercent : readTextProbe(spawn.env).usedPercent;
|
|
66
151
|
});
|
|
67
152
|
try {
|
|
68
153
|
const subscribed = deps.checkSubscription ?? ((cleanEnv: Record<string, string>) => {
|
|
69
154
|
if (executor === 'cc') return checkClaudeSubscription({ env: cleanEnv }).ok;
|
|
70
|
-
const
|
|
71
|
-
return
|
|
72
|
-
&& !/(?:logged\s*out|not\s+logged\s+in|api[_ -]?key|not\s+authenticated)/i.test(String(status.stdout));
|
|
155
|
+
const probe = readJsonProbe(cleanEnv);
|
|
156
|
+
return probe ? probe.subscribed : readTextProbe(cleanEnv).subscribed;
|
|
73
157
|
});
|
|
74
158
|
if (!subscribed(spawn.env)) return { reason: `${executor} subscription check failed` };
|
|
75
159
|
const used = usedPercent();
|
|
76
160
|
if (!Number.isFinite(cap) || cap < 0 || cap > 100 || used === undefined
|
|
77
161
|
|| !Number.isFinite(used) || used < 0 || used >= cap) return { reason: `Claude subscription usage unavailable or at harness cap (${cap}%)` };
|
|
78
|
-
return { spawn };
|
|
162
|
+
if (executor === 'cc') return { spawn };
|
|
163
|
+
const proxy = runStatus('teamclaude', ['env', '--no-mitm'], spawn.env);
|
|
164
|
+
const baseUrl = proxy.status === 0 ? parseTeamclaudeBaseUrl(String(proxy.stdout ?? '')) : undefined;
|
|
165
|
+
debug.log('self-dev.reviewer', 'proxy-base-url', { found: baseUrl !== undefined, exit: proxy.status });
|
|
166
|
+
if (!baseUrl) return { reason: 'cct proxy base URL unavailable' };
|
|
167
|
+
return { spawn: subscriptionReviewerSpawn(spec, env, baseUrl) };
|
|
79
168
|
} catch {
|
|
80
169
|
return { reason: `${executor} subscription check failed` };
|
|
81
170
|
}
|
|
@@ -97,7 +186,14 @@ export async function runSubscriptionReviewer(
|
|
|
97
186
|
try {
|
|
98
187
|
const text = await acpReview(prompt, availability.spawn);
|
|
99
188
|
if (text.trim()) return text;
|
|
100
|
-
|
|
189
|
+
debug.log('self-dev.reviewer', 'acp-review-failed', { reason: 'acp-empty-review' });
|
|
190
|
+
} catch (e) {
|
|
191
|
+
// ACP failure is not a completed review; the worst case stays the default reviewer.
|
|
192
|
+
// Only a reason code: the raw message may carry account or proxy details.
|
|
193
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
194
|
+
debug.log('self-dev.reviewer', 'acp-review-failed', {
|
|
195
|
+
reason: /handshake timeout/i.test(message) ? 'acp-handshake-timeout' : 'acp-error' });
|
|
196
|
+
}
|
|
101
197
|
}
|
|
102
198
|
const reason = availability.reason ?? 'ACP review failed';
|
|
103
199
|
return `${await defaultReview(prompt)}\n[reviewer fallback: ${reason}; default reviewer used]`;
|
|
@@ -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 {
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import { hasDelivered, 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 } from './run-types.js';
|
|
6
|
+
export type { SupervisorStopReason } from './run-types.js';
|
|
6
7
|
import { recordSelfDevRunSupervisorStop, selfDevRunsDir } from './run-store.js';
|
|
7
8
|
import { debug } from '../debug/log.js';
|
|
8
9
|
import { sweepFrozenMerges } from '../self-implement/frozen-merges.js';
|
|
9
|
-
import { routeSupervisorVerdict
|
|
10
|
+
import { routeSupervisorVerdict } from './supervisor-verdict-edges.js';
|
|
10
11
|
import { recordTaskAgentShadowMove, type TaskAgentShadowInput } from '../task-agent/shadow.js';
|
|
11
12
|
|
|
12
13
|
export interface SupervisorRound {
|
|
@@ -24,26 +25,6 @@ export interface SupervisorRound {
|
|
|
24
25
|
reviewMustFixTrend?: SupervisorDecision['reviewMustFixTrend'];
|
|
25
26
|
}
|
|
26
27
|
|
|
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
28
|
export const SUPERVISOR_STOP_REASONS = [
|
|
48
29
|
'converged',
|
|
49
30
|
'human-stopped',
|