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.
Files changed (705) hide show
  1. package/NOTICE +7 -0
  2. package/README.md +32 -22
  3. package/apps/pwa/out/404/index.html +1 -1
  4. package/apps/pwa/out/404.html +1 -1
  5. package/apps/pwa/out/_next/static/chunks/{119fc678.6f591cdb84ca5791.js → 0673cc54.8e2ef1c23e49e190.js} +1 -1
  6. package/apps/pwa/out/_next/static/chunks/{a9f2b54d-40c16bd0efdb04b8.js → 0a09e062-34f747a17d8d8c2e.js} +1 -1
  7. package/apps/pwa/out/_next/static/chunks/{f8626309.a4e5d362b1d55e59.js → 0e3acd34.d42b2ef87fdf4234.js} +1 -1
  8. package/apps/pwa/out/_next/static/chunks/1168.a0fb3d9db76c00bd.js +77 -0
  9. package/apps/pwa/out/_next/static/chunks/{7175-350f4ce2873bc038.js → 1325-dc3f3c21eb181cb4.js} +1 -1
  10. package/apps/pwa/out/_next/static/chunks/1357.a843c41d2cd7ec31.js +34 -0
  11. package/apps/pwa/out/_next/static/chunks/1430.53f49882b17607c2.js +24 -0
  12. package/apps/pwa/out/_next/static/chunks/1459-be6509b3419d8a9f.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/{6767.8e6c5f6e744fcd9f.js → 1505.5826671109111e75.js} +2 -2
  14. package/apps/pwa/out/_next/static/chunks/153.0a4e3cd516930491.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/1572.7bc291352e241a45.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/1593-d07ad068c120dfb0.js +1 -0
  17. package/apps/pwa/out/_next/static/chunks/1608.b7c900baa56cab32.js +1 -0
  18. package/apps/pwa/out/_next/static/chunks/1615-4d8156febaac4b35.js +1 -0
  19. package/apps/pwa/out/_next/static/chunks/1646.e03f0fbc26bc72f6.js +1 -0
  20. package/apps/pwa/out/_next/static/chunks/{7327-2d69fb321ba73389.js → 1669-da843ed73aa301f5.js} +1 -1
  21. package/apps/pwa/out/_next/static/chunks/176.13ba0659e3e96fd4.js +1 -0
  22. package/apps/pwa/out/_next/static/chunks/1990.9c60f495ef33c070.js +36 -0
  23. package/apps/pwa/out/_next/static/chunks/2042e469.f86158dd5c1e51a1.js +122 -0
  24. package/apps/pwa/out/_next/static/chunks/2528.0af5c0e1fad88df6.js +1 -0
  25. package/apps/pwa/out/_next/static/chunks/2543-28ec6aeb80a5e1e1.js +1 -0
  26. package/apps/pwa/out/_next/static/chunks/2561.43c99d6ee914ee6a.js +62 -0
  27. package/apps/pwa/out/_next/static/chunks/2638.b39ab2f674caa1a5.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/272-b23d2e92161d11fd.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/{7899.597af4a9996c907f.js → 2721.bc9a8f36bd85c07a.js} +1 -1
  30. package/apps/pwa/out/_next/static/chunks/2778.67e0c1d484189ccf.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/2841.10ff309f6a3168af.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/2886-9639f97d523d752a.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/2978.57fb87ce21cc5a85.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/3664.15f968c39d15bd28.js +149 -0
  35. package/apps/pwa/out/_next/static/chunks/3786-935eb3fcde90e496.js +1 -0
  36. package/apps/pwa/out/_next/static/chunks/3813.df4a01ae89c6f63f.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/3961-fbef064c213b2b18.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/3992.f79c70480e8c4077.js +309 -0
  39. package/apps/pwa/out/_next/static/chunks/40-413e8641de9ed1e5.js +1 -0
  40. package/apps/pwa/out/_next/static/chunks/4054-521f11a503daed64.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/4315.e7356f34c7d8ec79.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/4489-bf629de6f04f7681.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/4540.557733cc88c6a82b.js +1 -0
  44. package/apps/pwa/out/_next/static/chunks/462.0275b4338c5b6337.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/4658-7ed9266098a787e4.js +1 -0
  46. package/apps/pwa/out/_next/static/chunks/4945-0f4046cfc3228ea3.js +1 -0
  47. package/apps/pwa/out/_next/static/chunks/{d70879db.c66c56a95a91efc6.js → 4c5e95ce.83e9b16add6fcd8c.js} +1 -1
  48. package/apps/pwa/out/_next/static/chunks/5105-18b4165c5d3a86b0.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/5205-6992210fe31f45f4.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/5287-72898b126d722457.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/{6158.566c890adc06a459.js → 5313.1697309c532b9856.js} +2 -2
  52. package/apps/pwa/out/_next/static/chunks/{79b78388.663188133449d707.js → 53746282.1be36038d1abd949.js} +1 -1
  53. package/apps/pwa/out/_next/static/chunks/5474.991b90688c3cb321.js +1 -0
  54. package/apps/pwa/out/_next/static/chunks/5544-871146192d095594.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/5578.ac963634373b28c6.js +286 -0
  56. package/apps/pwa/out/_next/static/chunks/5935.d5e8ca3e096772e8.js +1 -0
  57. package/apps/pwa/out/_next/static/chunks/5967-c0a80f8ffe5d4050.js +1 -0
  58. package/apps/pwa/out/_next/static/chunks/{1268.0840ff91e083fcbd.js → 5974.360f8441eb0ac1ec.js} +1 -1
  59. package/apps/pwa/out/_next/static/chunks/6006.84e8b418a7a0db97.js +1 -0
  60. package/apps/pwa/out/_next/static/chunks/6013-1267ba7454d6764b.js +1 -0
  61. package/apps/pwa/out/_next/static/chunks/6038-1e0f7ee1086da4cf.js +1 -0
  62. package/apps/pwa/out/_next/static/chunks/617.709dd0019fe99796.js +1 -0
  63. package/apps/pwa/out/_next/static/chunks/6261.fb9bf94947094636.js +74 -0
  64. package/apps/pwa/out/_next/static/chunks/6411.1966866fae31ffa9.js +1 -0
  65. package/apps/pwa/out/_next/static/chunks/6481-b829d99aa8d158f5.js +1 -0
  66. package/apps/pwa/out/_next/static/chunks/6541.2b7daa043100d0fa.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/6571-926ddf024a6ad5df.js +1 -0
  68. package/apps/pwa/out/_next/static/chunks/6597.2d7a6d77ab485b27.js +64 -0
  69. package/apps/pwa/out/_next/static/chunks/67.5dd2dc543c2fa3de.js +1 -0
  70. package/apps/pwa/out/_next/static/chunks/{9832.2ab2e818013574c7.js → 6702.ebbd165d5e4a4a14.js} +1 -1
  71. package/apps/pwa/out/_next/static/chunks/6777-312496b0d774719b.js +1 -0
  72. package/apps/pwa/out/_next/static/chunks/681.0116f7036cfb4e8d.js +32 -0
  73. package/apps/pwa/out/_next/static/chunks/6871.30b2bf23b3126e36.js +24 -0
  74. package/apps/pwa/out/_next/static/chunks/6882.737d366d54e29d83.js +1 -0
  75. package/apps/pwa/out/_next/static/chunks/7035.54c2c535164b1c9b.js +1 -0
  76. package/apps/pwa/out/_next/static/chunks/7086-8bfa7e8f796a03d9.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/7126.5e5599f251726b67.js +93 -0
  78. package/apps/pwa/out/_next/static/chunks/7203-47ff0740a293e284.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/7268.017f49dafb5f0ff3.js +1 -0
  80. package/apps/pwa/out/_next/static/chunks/7355.5d65a87e9567ae08.js +1 -0
  81. package/apps/pwa/out/_next/static/chunks/7392.4018c2a62177f296.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/{6110.1297d4093fdfbb0d.js → 740.90b31555290236a9.js} +2 -2
  83. package/apps/pwa/out/_next/static/chunks/7471.3a3d1be50559cfb8.js +148 -0
  84. package/apps/pwa/out/_next/static/chunks/7500.73489a345cef2201.js +226 -0
  85. package/apps/pwa/out/_next/static/chunks/{9070.067c106528ec1ae6.js → 7518.49161e8f5814abdb.js} +1 -1
  86. package/apps/pwa/out/_next/static/chunks/7565.c2f72a15c1ed0396.js +27 -0
  87. package/apps/pwa/out/_next/static/chunks/7651.6d1c984d3d8587a4.js +1 -0
  88. package/apps/pwa/out/_next/static/chunks/7713.7ab863ed59b2d661.js +1 -0
  89. package/apps/pwa/out/_next/static/chunks/7793.d7cd2026767ddd54.js +115 -0
  90. package/apps/pwa/out/_next/static/chunks/7837.c7c267e5dceadb11.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/7891.09266382daf70d1c.js +1 -0
  92. package/apps/pwa/out/_next/static/chunks/7905.b230b9d06cb4ad5d.js +1 -0
  93. package/apps/pwa/out/_next/static/chunks/7990-cbf6a01bcbdcb7e6.js +1 -0
  94. package/apps/pwa/out/_next/static/chunks/8119-819c549e0c197786.js +1 -0
  95. package/apps/pwa/out/_next/static/chunks/8186-74ea19a3700d04a8.js +1 -0
  96. package/apps/pwa/out/_next/static/chunks/{8194.484f51e273d9abd2.js → 8264.00e434fbd02e9311.js} +16 -16
  97. package/apps/pwa/out/_next/static/chunks/8267-e7b3262b735ae106.js +1 -0
  98. package/apps/pwa/out/_next/static/chunks/8386.86518e55b75f7cf5.js +8 -0
  99. package/apps/pwa/out/_next/static/chunks/{088d8e8a.8069543d082bec12.js → 83cfc5c8.349535543c1548b6.js} +1 -1
  100. package/apps/pwa/out/_next/static/chunks/8437.ba6eeeb29590042f.js +23 -0
  101. package/apps/pwa/out/_next/static/chunks/{1948.5f35b39eef222a94.js → 8438.ee7f0df3b3f6fcb4.js} +1 -1
  102. package/apps/pwa/out/_next/static/chunks/8469-1500be57e582296f.js +1 -0
  103. package/apps/pwa/out/_next/static/chunks/8483-7164cecdaf178ca6.js +1 -0
  104. package/apps/pwa/out/_next/static/chunks/{4588.ad3364cb7fb97ada.js → 8532.a86e99acf9b761cb.js} +2 -2
  105. package/apps/pwa/out/_next/static/chunks/8569.b853a8daa8f31d12.js +1 -0
  106. package/apps/pwa/out/_next/static/chunks/8722-4c940f02c496ad36.js +1 -0
  107. package/apps/pwa/out/_next/static/chunks/887-41d0dcf5af48c628.js +1 -0
  108. package/apps/pwa/out/_next/static/chunks/8925-2abfb48af477fb7f.js +1 -0
  109. package/apps/pwa/out/_next/static/chunks/{88729267.9c6c000157c83f2f.js → 89849432.9eaa2f4c9c010965.js} +3 -3
  110. package/apps/pwa/out/_next/static/chunks/9039.da86361496797522.js +90 -0
  111. package/apps/pwa/out/_next/static/chunks/905.d5745a25884754d4.js +94 -0
  112. package/apps/pwa/out/_next/static/chunks/9089-d909f3d4478b0628.js +1 -0
  113. package/apps/pwa/out/_next/static/chunks/9096.dc5c7a267f83790c.js +41 -0
  114. package/apps/pwa/out/_next/static/chunks/93.a567257b6bdb7fe4.js +1 -0
  115. package/apps/pwa/out/_next/static/chunks/9320.419acb9665b46597.js +287 -0
  116. package/apps/pwa/out/_next/static/chunks/9356.b8ceda6634612ff8.js +79 -0
  117. package/apps/pwa/out/_next/static/chunks/94.e9e1043b35cd3eed.js +1 -0
  118. package/apps/pwa/out/_next/static/chunks/9400-7498ea90b2e6ee8f.js +1 -0
  119. package/apps/pwa/out/_next/static/chunks/{3522-1de1319d028ac89c.js → 9502-32c5dc22e8f120f5.js} +3 -3
  120. package/apps/pwa/out/_next/static/chunks/9930-58644af9c813d6e1.js +1 -0
  121. package/apps/pwa/out/_next/static/chunks/9932.367cf4725fedd6e2.js +1 -0
  122. package/apps/pwa/out/_next/static/chunks/9935.1628b904cdc8ce0e.js +104 -0
  123. package/apps/pwa/out/_next/static/chunks/{7630.2b9a68659053ff4e.js → 9976.8f28864317639fe6.js} +16 -16
  124. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-a2aa8709d193ee0d.js +1 -0
  125. package/apps/pwa/out/_next/static/chunks/app/approvals/page-d5341ac96203a983.js +1 -0
  126. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-0160ab83c8685a12.js +1 -0
  127. package/apps/pwa/out/_next/static/chunks/app/board/page-55c631c032dcc47e.js +1 -0
  128. package/apps/pwa/out/_next/static/chunks/app/botlab/page-ad3bd8084048bee4.js +1 -0
  129. package/apps/pwa/out/_next/static/chunks/app/bots/page-e6784759a2531031.js +1 -0
  130. package/apps/pwa/out/_next/static/chunks/app/ceo/page-5c5d0e370f495ef6.js +1 -0
  131. package/apps/pwa/out/_next/static/chunks/app/chat/page-c325e21543cd48a8.js +1 -0
  132. package/apps/pwa/out/_next/static/chunks/app/consult/{page-80ed511e02c81412.js → page-6168a7c43e6ef8f5.js} +1 -1
  133. package/apps/pwa/out/_next/static/chunks/app/control/page-31417d3604154a6d.js +1 -0
  134. package/apps/pwa/out/_next/static/chunks/app/decisions/page-e9606dc0bdec9305.js +1 -0
  135. package/apps/pwa/out/_next/static/chunks/app/design-check/page-a648bc464c9dc754.js +1 -0
  136. package/apps/pwa/out/_next/static/chunks/app/editor/page-25bb425afdb27541.js +1 -0
  137. package/apps/pwa/out/_next/static/chunks/app/exec/page-32d72fdef1afe11a.js +1 -0
  138. package/apps/pwa/out/_next/static/chunks/app/field/page-d27b794c8ba76bbb.js +1 -0
  139. package/apps/pwa/out/_next/static/chunks/app/healthz/route-a2aa8709d193ee0d.js +1 -0
  140. package/apps/pwa/out/_next/static/chunks/app/inside/page-2bd9ce9c020d02d4.js +1 -0
  141. package/apps/pwa/out/_next/static/chunks/app/intake/page-a34096245e63b9f2.js +1 -0
  142. package/apps/pwa/out/_next/static/chunks/app/layout-22170f4f00a15496.js +1 -0
  143. package/apps/pwa/out/_next/static/chunks/app/live/page-4cc66d22ca4ec502.js +1 -0
  144. package/apps/pwa/out/_next/static/chunks/app/live-run/page-83b14c729fcea837.js +1 -0
  145. package/apps/pwa/out/_next/static/chunks/app/loops/page-6e2781c523dad761.js +1 -0
  146. package/apps/pwa/out/_next/static/chunks/app/market/page-26dd415c8f13f341.js +1 -0
  147. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-ccdb83ed40c8d724.js +1 -0
  148. package/apps/pwa/out/_next/static/chunks/app/morning/page-7ad3de8fa06fdea9.js +1 -0
  149. package/apps/pwa/out/_next/static/chunks/app/not-found-015c02c4fec4023e.js +1 -0
  150. package/apps/pwa/out/_next/static/chunks/app/observatory/page-6b0ae5b5c42f6d2f.js +1 -0
  151. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-786111f30b6f0969.js +1 -0
  152. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-48fb31810693c357.js +1 -0
  153. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-4e17cce5e2ed0fee.js +1 -0
  154. package/apps/pwa/out/_next/static/chunks/app/outputs/page-cb154acadb025414.js +1 -0
  155. package/apps/pwa/out/_next/static/chunks/app/page-16258e956ea93fc2.js +1 -0
  156. package/apps/pwa/out/_next/static/chunks/app/reflection/page-c2dd2b19c93f90ab.js +1 -0
  157. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-85f35dd1dd96ae87.js +1 -0
  158. package/apps/pwa/out/_next/static/chunks/app/sessions/page-d3c007c8a0ddd7ee.js +1 -0
  159. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-7837ce2aacb97b04.js +1 -0
  160. package/apps/pwa/out/_next/static/chunks/app/settings/page-7350ee93f4fe1033.js +1 -0
  161. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-00723458575f2b19.js +1 -0
  162. package/apps/pwa/out/_next/static/chunks/app/setup/layout-a2aa8709d193ee0d.js +1 -0
  163. package/apps/pwa/out/_next/static/chunks/app/setup/page-745d9b6c015076f8.js +1 -0
  164. package/apps/pwa/out/_next/static/chunks/app/share/page-736d33c7414a8a1a.js +1 -0
  165. package/apps/pwa/out/_next/static/chunks/app/showroom/page-119be9a0444d2482.js +1 -0
  166. package/apps/pwa/out/_next/static/chunks/app/tasks/page-fa806c018833e332.js +1 -0
  167. package/apps/pwa/out/_next/static/chunks/app/term/page-c782041b5f5199ba.js +1 -0
  168. package/apps/pwa/out/_next/static/chunks/app/today/page-d431fbdea6ad93dd.js +1 -0
  169. package/apps/pwa/out/_next/static/chunks/app/trace/page-0c056abff82b9891.js +1 -0
  170. package/apps/pwa/out/_next/static/chunks/app/vault/page-242d668e4fbf72c4.js +1 -0
  171. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-847c3de6ca8a4416.js +1 -0
  172. package/apps/pwa/out/_next/static/chunks/app/workflows/page-81dd0d8ae923ed72.js +1 -0
  173. package/apps/pwa/out/_next/static/chunks/app/workspace/page-74e69ba2c8e970d4.js +1 -0
  174. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-70038f41ae7cf931.js +1 -0
  175. package/apps/pwa/out/_next/static/chunks/b4e12462-5fab4a813a63dadd.js +1 -0
  176. package/apps/pwa/out/_next/static/chunks/cd39fa05.fac4545f42a3ef70.js +1 -0
  177. package/apps/pwa/out/_next/static/chunks/{f6b7c9ba.64a895b8b2fedbdc.js → ce383d63.d2ede338788ed18e.js} +1 -1
  178. package/apps/pwa/out/_next/static/chunks/{framework-5c169757551134ed.js → framework-b2763b10dc6b3836.js} +1 -1
  179. package/apps/pwa/out/_next/static/chunks/main-app-27893e93b0ec193d.js +1 -0
  180. package/apps/pwa/out/_next/static/chunks/main-f280047194e1daf8.js +1 -0
  181. package/apps/pwa/out/_next/static/chunks/pages/_app-e90eff2d0b70564c.js +1 -0
  182. package/apps/pwa/out/_next/static/chunks/pages/_error-70f2d654b3435d34.js +1 -0
  183. package/apps/pwa/out/_next/static/chunks/webpack-4794f053bd5e4230.js +1 -0
  184. package/apps/pwa/out/_next/static/css/5619d59e87eddf66.css +1 -0
  185. package/apps/pwa/out/_next/static/css/d0a48dc099ed86cf.css +1 -0
  186. package/apps/pwa/out/_next/static/{aBi6EyMtLsrl7J8eH4kF7 → rfkMm4movqkqMebBrCXiR}/_buildManifest.js +1 -1
  187. package/apps/pwa/out/approvals/index.html +1 -1
  188. package/apps/pwa/out/approvals/index.txt +23 -23
  189. package/apps/pwa/out/autopilot/index.html +1 -1
  190. package/apps/pwa/out/autopilot/index.txt +23 -23
  191. package/apps/pwa/out/board/index.html +1 -1
  192. package/apps/pwa/out/board/index.txt +23 -23
  193. package/apps/pwa/out/botlab/index.html +1 -1
  194. package/apps/pwa/out/botlab/index.txt +22 -22
  195. package/apps/pwa/out/bots/index.html +1 -1
  196. package/apps/pwa/out/bots/index.txt +22 -22
  197. package/apps/pwa/out/ceo/index.html +1 -1
  198. package/apps/pwa/out/ceo/index.txt +23 -23
  199. package/apps/pwa/out/chat/index.html +1 -1
  200. package/apps/pwa/out/chat/index.txt +22 -22
  201. package/apps/pwa/out/consult/index.html +1 -1
  202. package/apps/pwa/out/consult/index.txt +23 -23
  203. package/apps/pwa/out/control/index.html +1 -1
  204. package/apps/pwa/out/control/index.txt +23 -23
  205. package/apps/pwa/out/decisions/index.html +1 -1
  206. package/apps/pwa/out/decisions/index.txt +22 -22
  207. package/apps/pwa/out/design-check/index.html +1 -1
  208. package/apps/pwa/out/design-check/index.txt +23 -23
  209. package/apps/pwa/out/editor/index.html +1 -1
  210. package/apps/pwa/out/editor/index.txt +24 -23
  211. package/apps/pwa/out/exec/index.html +1 -1
  212. package/apps/pwa/out/exec/index.txt +23 -23
  213. package/apps/pwa/out/field/index.html +1 -1
  214. package/apps/pwa/out/field/index.txt +23 -23
  215. package/apps/pwa/out/healthz +1 -1
  216. package/apps/pwa/out/index.html +1 -1
  217. package/apps/pwa/out/index.txt +22 -22
  218. package/apps/pwa/out/inside/index.html +1 -1
  219. package/apps/pwa/out/inside/index.txt +22 -22
  220. package/apps/pwa/out/intake/index.html +1 -1
  221. package/apps/pwa/out/intake/index.txt +23 -23
  222. package/apps/pwa/out/live/index.html +1 -1
  223. package/apps/pwa/out/live/index.txt +23 -23
  224. package/apps/pwa/out/live-run/index.html +1 -1
  225. package/apps/pwa/out/live-run/index.txt +24 -23
  226. package/apps/pwa/out/loops/index.html +1 -1
  227. package/apps/pwa/out/loops/index.txt +22 -22
  228. package/apps/pwa/out/market/index.html +1 -1
  229. package/apps/pwa/out/market/index.txt +22 -22
  230. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  231. package/apps/pwa/out/missions/placeholder/index.txt +22 -22
  232. package/apps/pwa/out/morning/index.html +1 -1
  233. package/apps/pwa/out/morning/index.txt +23 -23
  234. package/apps/pwa/out/observatory/index.html +1 -1
  235. package/apps/pwa/out/observatory/index.txt +23 -23
  236. package/apps/pwa/out/ops/checklist/index.html +1 -1
  237. package/apps/pwa/out/ops/checklist/index.txt +22 -22
  238. package/apps/pwa/out/ops/release/index.html +1 -1
  239. package/apps/pwa/out/ops/release/index.txt +22 -22
  240. package/apps/pwa/out/ops/seats/index.html +1 -1
  241. package/apps/pwa/out/ops/seats/index.txt +22 -22
  242. package/apps/pwa/out/outputs/index.html +1 -1
  243. package/apps/pwa/out/outputs/index.txt +22 -22
  244. package/apps/pwa/out/reflection/index.html +1 -1
  245. package/apps/pwa/out/reflection/index.txt +23 -23
  246. package/apps/pwa/out/scheduler/index.html +1 -1
  247. package/apps/pwa/out/scheduler/index.txt +23 -23
  248. package/apps/pwa/out/sessions/index.html +1 -1
  249. package/apps/pwa/out/sessions/index.txt +22 -22
  250. package/apps/pwa/out/settings/devices/index.html +1 -1
  251. package/apps/pwa/out/settings/devices/index.txt +23 -23
  252. package/apps/pwa/out/settings/index.html +1 -1
  253. package/apps/pwa/out/settings/index.txt +23 -23
  254. package/apps/pwa/out/setup/done/index.html +1 -1
  255. package/apps/pwa/out/setup/done/index.txt +23 -23
  256. package/apps/pwa/out/setup/index.html +1 -1
  257. package/apps/pwa/out/setup/index.txt +23 -23
  258. package/apps/pwa/out/share/index.html +1 -1
  259. package/apps/pwa/out/share/index.txt +23 -23
  260. package/apps/pwa/out/showroom/index.html +1 -1
  261. package/apps/pwa/out/showroom/index.txt +22 -22
  262. package/apps/pwa/out/tasks/index.html +1 -1
  263. package/apps/pwa/out/tasks/index.txt +23 -23
  264. package/apps/pwa/out/term/index.html +1 -1
  265. package/apps/pwa/out/term/index.txt +23 -23
  266. package/apps/pwa/out/today/index.html +1 -1
  267. package/apps/pwa/out/today/index.txt +23 -23
  268. package/apps/pwa/out/trace/index.html +1 -1
  269. package/apps/pwa/out/trace/index.txt +23 -23
  270. package/apps/pwa/out/vault/index.html +1 -1
  271. package/apps/pwa/out/vault/index.txt +23 -23
  272. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  273. package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
  274. package/apps/pwa/out/workflows/index.html +1 -1
  275. package/apps/pwa/out/workflows/index.txt +23 -23
  276. package/apps/pwa/out/workspace/index.html +1 -1
  277. package/apps/pwa/out/workspace/index.txt +23 -23
  278. package/apps/pwa/out/worktrees/index.html +1 -1
  279. package/apps/pwa/out/worktrees/index.txt +23 -23
  280. package/catalog/models/anthropic/claude-haiku-5-5.yaml +32 -0
  281. package/catalog/models/anthropic/claude-opus-5-5.yaml +5 -0
  282. package/catalog/models/anthropic/claude-sonnet-5-5.yaml +31 -0
  283. package/catalog/models/anthropic/claude-sonnet-5.yaml +8 -2
  284. package/catalog/models/openai/gpt-6-astra.yaml +6 -0
  285. package/catalog/models/openai/gpt-6-luna.yaml +6 -0
  286. package/catalog/models/openai/gpt-6-sol.yaml +6 -0
  287. package/graphs/log-horizon/log-horizon-watch.yaml +25 -0
  288. package/graphs/log-horizon/recipes.yaml +3 -0
  289. package/graphs/release/recipes.yaml +1 -1
  290. package/graphs/release/release-loop.yaml +6 -2
  291. package/graphs/release-rehearsal/recipes.yaml +12 -0
  292. package/graphs/release-rehearsal/release-rehearsal.yaml +17 -0
  293. package/package.json +4 -1
  294. package/scripts/bench-report.ts +82 -3
  295. package/scripts/ci-typecheck-changed.ts +10 -1
  296. package/scripts/hq/hq-fence-wrapper.sh +148 -0
  297. package/scripts/lib/typecheck-ratchet.ts +51 -0
  298. package/scripts/openai-relay-server.ts +5 -1
  299. package/scripts/release-loop/docs-node.ts +258 -43
  300. package/scripts/release-loop/gate-method.ts +59 -0
  301. package/scripts/release-loop/gate-node.ts +73 -7
  302. package/scripts/release-loop/gate-wall.ts +208 -0
  303. package/scripts/release-loop/known-issues-node.ts +53 -8
  304. package/scripts/release-loop/publish-at.ts +14 -0
  305. package/scripts/release-loop/publish-node.ts +17 -2
  306. package/scripts/release-loop/resume-release.ts +34 -4
  307. package/scripts/release-loop/resume.ts +53 -0
  308. package/scripts/release-loop/shard-plan.ts +3 -11
  309. package/scripts/release-loop/tui-node-checks.ts +22 -0
  310. package/scripts/release-loop/unattended-release.ts +8 -1
  311. package/scripts/rhythm/daily.ts +51 -2
  312. package/scripts/rhythm/weekly.ts +3 -2
  313. package/scripts/tsc-main-safety-net.ts +189 -0
  314. package/scripts/usage-rollup.ts +8 -4
  315. package/src/acp/codex-plugins.ts +48 -6
  316. package/src/agent/monad-agent-turn.ts +67 -5
  317. package/src/agent/run-context.ts +10 -0
  318. package/src/agent/tool-profile.ts +28 -2
  319. package/src/agent-mission/acp-judge.ts +8 -2
  320. package/src/agent-mission/capabilities-cli.ts +16 -1
  321. package/src/agent-mission/driver.ts +1 -1
  322. package/src/agent-mission/pr-review-watch.ts +6 -2
  323. package/src/agent-mission/review-loop.ts +33 -5
  324. package/src/agent-substrate/acp-reviewer.ts +17 -8
  325. package/src/agent-substrate/pr-reviewer.ts +164 -28
  326. package/src/agent-substrate/review-intent.ts +6 -4
  327. package/src/agent-substrate/self-review-cli.ts +111 -16
  328. package/src/agent-substrate/shard-boundary-intent.ts +92 -26
  329. package/src/ask-user-question/pending-questions.ts +8 -2
  330. package/src/autopilot/build/llm-conflict-merge.ts +216 -12
  331. package/src/autopilot/codebase-grounding.ts +44 -0
  332. package/src/autopilot/llm-control-brain.ts +13 -1
  333. package/src/autopilot/mission-codebase-gate.ts +8 -77
  334. package/src/autopilot/pr-manager.ts +12 -3
  335. package/src/boot/acp-server.ts +4 -7
  336. package/src/boot/acp-socket-path.ts +7 -0
  337. package/src/briefing/brief-items.ts +21 -13
  338. package/src/chat/index.ts +12 -3
  339. package/src/cli/agent-cli.ts +20 -0
  340. package/src/cli/brief-cli.ts +27 -21
  341. package/src/cli/cli-user-error.ts +9 -2
  342. package/src/cli/log-event-names.ts +3 -0
  343. package/src/cli/logs-cli.ts +1 -0
  344. package/src/cli/mcp-login.ts +111 -37
  345. package/src/cli/plugin-cli.ts +21 -1
  346. package/src/cli/pod-cli.ts +26 -0
  347. package/src/cli/pr-cli.ts +30 -2
  348. package/src/cli/pr-land-overlap-evidence.ts +131 -0
  349. package/src/cli/release-cli.ts +53 -11
  350. package/src/cli/self-update.ts +173 -10
  351. package/src/cli/skills-cli.ts +12 -3
  352. package/src/cli/tasks-cli.ts +133 -27
  353. package/src/context-bus/context-first.ts +51 -2
  354. package/src/context-bus/context-now-surfaces.ts +13 -2
  355. package/src/context-bus/long-term-memory.ts +3 -1
  356. package/src/context-bus/nightly-condense.ts +3 -2
  357. package/src/core-turn/run-goal-loop.ts +86 -2
  358. package/src/dashboard/chat-fold.ts +20 -0
  359. package/src/dashboard/first-screen-band.ts +151 -1
  360. package/src/dashboard/index.ts +27 -5
  361. package/src/dashboard/slash-runtime/dashboard-handlers.ts +5 -3
  362. package/src/dashboard/stale-install-check.ts +13 -2
  363. package/src/dashboard/turn-stream-formatter.ts +25 -0
  364. package/src/debug/log-diet.ts +159 -0
  365. package/src/debug/log.ts +52 -17
  366. package/src/display/coordinator.ts +25 -2
  367. package/src/domains/coo-admin-tool.ts +27 -0
  368. package/src/domains/cron-match.ts +1 -0
  369. package/src/domains/outbound-alert.ts +17 -6
  370. package/src/domains/release-tool.ts +119 -10
  371. package/src/domains/schedule-registry.ts +10 -7
  372. package/src/domains/schedule-runner.ts +1 -0
  373. package/src/elanous-config-dir.ts +2 -2
  374. package/src/elanous-daemon.ts +3 -3
  375. package/src/execution-loop/launch-gate.ts +1 -1
  376. package/src/expression/i18n/messages.en.ts +5 -0
  377. package/src/expression/i18n/messages.ja.ts +5 -0
  378. package/src/expression/i18n/messages.ko.ts +5 -0
  379. package/src/expression/i18n/messages.zh.ts +5 -0
  380. package/src/expression/i18n/types.ts +8 -0
  381. package/src/github/pr-labels.ts +1 -0
  382. package/src/graph-runner/runner.ts +54 -5
  383. package/src/harness/dispatch-backpressure.ts +259 -0
  384. package/src/harness/harness-cli-command.ts +107 -28
  385. package/src/harness/harness-seams.ts +2 -20
  386. package/src/harness/harness-substrate-default.ts +72 -1
  387. package/src/harness/nested-elanous-policy.ts +4 -2
  388. package/src/hq/fence-wrapper.ts +7 -0
  389. package/src/hq/hq.ts +33 -2
  390. package/src/hq/lease.ts +13 -0
  391. package/src/hq/seats.ts +114 -18
  392. package/src/index.ts +163 -64
  393. package/src/intake-plane/collect-github.ts +19 -1
  394. package/src/intake-plane/digest.ts +45 -20
  395. package/src/intake-plane/lens.ts +36 -8
  396. package/src/intelligence-map/model-alias.ts +6 -0
  397. package/src/intelligence-map/model-catalog.ts +41 -0
  398. package/src/knowledge/kgs/pack.ts +5 -2
  399. package/src/knowledge/kgs/sqlite-store.ts +15 -0
  400. package/src/knowledge/tools/knowledge-query.ts +20 -2
  401. package/src/knowledge/write.ts +234 -2
  402. package/src/llm/bedrock-provider.ts +175 -0
  403. package/src/llm/bedrock.ts +345 -0
  404. package/src/llm/provider-credentials.ts +3 -1
  405. package/src/llm.ts +306 -35
  406. package/src/loops/budget.ts +150 -0
  407. package/src/loops/orchestrator/seat-share.ts +6 -49
  408. package/src/loops/orchestrator/traffic.ts +5 -81
  409. package/src/market/signed-index.ts +42 -0
  410. package/src/mcp/mcp-oauth.ts +136 -17
  411. package/src/model-tier/llm-tier-map.ts +48 -4
  412. package/src/models/prompts.ts +22 -1
  413. package/src/mss/logging/horizon-watch.ts +168 -0
  414. package/src/mss/logging/log-store.ts +204 -15
  415. package/src/native-tool-catalog.ts +1 -1
  416. package/src/nexus/api/consult-requests.ts +7 -10
  417. package/src/nexus/api/discord-trigger-bot.ts +6 -3
  418. package/src/nexus/api/error-reports.ts +30 -8
  419. package/src/nexus/api/http-server.ts +8 -0
  420. package/src/nexus/api/loop-resources.ts +42 -0
  421. package/src/nexus/api/outbound-report.ts +8 -3
  422. package/src/nexus/api/telegram-trigger-bot.ts +6 -3
  423. package/src/nexus/index.ts +10 -0
  424. package/src/nexus/outbound/format.ts +2 -0
  425. package/src/nexus/outbound/router.ts +198 -13
  426. package/src/oauth/codex-account-rotation.ts +16 -18
  427. package/src/oauth/codex-account-store.ts +134 -5
  428. package/src/oauth/fallback-chain.ts +28 -6
  429. package/src/onboarding.ts +2 -1
  430. package/src/plugins/adapters/claude-package.ts +4 -12
  431. package/src/plugins/core/capability-policy.ts +141 -0
  432. package/src/plugins/core/host.ts +21 -8
  433. package/src/plugins/core/manifest.ts +19 -2
  434. package/src/plugins/core/trust-store.ts +15 -0
  435. package/src/plugins/core/types.ts +12 -0
  436. package/src/plugins/install/market-fetch.ts +68 -16
  437. package/src/plugins/install/plugin-install.ts +187 -16
  438. package/src/plugins/maker/plugin-maker.ts +25 -20
  439. package/src/plugins/maker/wizard-generate.ts +16 -2
  440. package/src/policy/llm-policy.ts +14 -1
  441. package/src/process/pid-liveness.ts +1 -1
  442. package/src/prompt-cache/openai.ts +10 -6
  443. package/src/prompt-cache/openrouter.ts +94 -0
  444. package/src/prompt-enhance/enhance.ts +46 -5
  445. package/src/prompt-library/family-prompt-coverage.ts +1 -0
  446. package/src/prompt-library/universal-preamble.ts +2 -2
  447. package/src/registry/discovery/openrouter-live-resolve.ts +122 -0
  448. package/src/registry/loader.ts +6 -1
  449. package/src/release-loop/checklist.ts +24 -9
  450. package/src/release-loop/feature-store.ts +3 -0
  451. package/src/release-loop/gate-shards.ts +48 -4
  452. package/src/release-loop/landed-to-green.ts +81 -0
  453. package/src/release-loop/light-rc.ts +11 -1
  454. package/src/release-loop/merged-pr-checklist.ts +10 -0
  455. package/src/release-loop/placement.ts +91 -22
  456. package/src/release-loop/rehearsal.ts +317 -0
  457. package/src/release-loop/release-schedule.ts +13 -1
  458. package/src/release-loop/rubric-types.ts +1 -0
  459. package/src/release-loop/rubric.ts +2 -2
  460. package/src/retro/daily.ts +23 -9
  461. package/src/seat-loop/seat-loop.ts +34 -1
  462. package/src/seat-loop/traffic-signal.ts +44 -0
  463. package/src/self-dev/ask-launch-flow.ts +2 -2
  464. package/src/self-dev/dev-cli.ts +67 -3
  465. package/src/self-dev/dev-pipeline.ts +4 -6
  466. package/src/self-dev/draft-residue.ts +463 -0
  467. package/src/self-dev/draft-sweep.ts +151 -10
  468. package/src/self-dev/draft-triage-rules.ts +27 -1
  469. package/src/self-dev/launch-preflight-text.ts +549 -0
  470. package/src/self-dev/launch-preflight.ts +10 -545
  471. package/src/self-dev/orchestrate-cli.ts +57 -2
  472. package/src/self-dev/orchestrate-summary-line.ts +13 -0
  473. package/src/self-dev/orchestrate.ts +8 -135
  474. package/src/self-dev/review-provider-fallback.ts +115 -19
  475. package/src/self-dev/run-store.ts +1 -3
  476. package/src/self-dev/run-supervisor.ts +3 -22
  477. package/src/self-dev/run-types.ts +178 -0
  478. package/src/self-dev/shard-aggregate.ts +61 -13
  479. package/src/self-dev/shard-plan.ts +5 -1
  480. package/src/self-dev/shard-run.ts +23 -5
  481. package/src/self-dev/supervisor-verdict-edges.ts +2 -4
  482. package/src/self-implement/blocked-draft-policy.ts +3 -19
  483. package/src/self-implement/draft-on-stop-mode.ts +18 -0
  484. package/src/self-implement/follow-up-goals.ts +114 -38
  485. package/src/self-implement/gate-baseline-reap.ts +157 -0
  486. package/src/self-implement/gate-baseline.ts +78 -16
  487. package/src/self-implement/gate-cli.ts +12 -2
  488. package/src/self-implement/gate-remote.ts +17 -6
  489. package/src/self-implement/goal-author.ts +24 -4
  490. package/src/self-implement/goal-digest.ts +19 -0
  491. package/src/self-implement/graph-overlay-condition.ts +4 -0
  492. package/src/self-implement/headless-elanous-driver.ts +11 -9
  493. package/src/self-implement/host-regate.ts +120 -29
  494. package/src/self-implement/l8-merge-queue.ts +67 -5
  495. package/src/self-implement/merge-train.ts +131 -0
  496. package/src/self-implement/off-diff-evidence.ts +9 -0
  497. package/src/self-implement/orchestrator.ts +133 -16
  498. package/src/self-implement/review-finding-recurrence.ts +28 -0
  499. package/src/self-implement/rework-policy.ts +2 -1
  500. package/src/self-implement/round-summary-card.ts +63 -0
  501. package/src/self-implement/run-ledger.ts +4 -3
  502. package/src/self-implement/run-step-projection.ts +147 -0
  503. package/src/self-implement/run-stop.ts +1 -1
  504. package/src/self-implement/seams.ts +36 -3
  505. package/src/self-implement/self-implement-cli.ts +3 -1
  506. package/src/self-implement/train-gate-remote.ts +158 -0
  507. package/src/session-runtime/index.ts +10 -1
  508. package/src/session-runtime/retry-api.ts +11 -1
  509. package/src/skills/gift-install.ts +119 -0
  510. package/src/skills/runner.ts +59 -2
  511. package/src/skills/skill-feedback.ts +31 -1
  512. package/src/skills/skill-tier.ts +1 -0
  513. package/src/smart-wizard/capability-index.ts +231 -0
  514. package/src/smart-wizard/rung.ts +74 -0
  515. package/src/steward/launch.ts +20 -9
  516. package/src/steward/triage.ts +4 -2
  517. package/src/storage/file-lock.ts +8 -1
  518. package/src/task-agent/actions.ts +4 -0
  519. package/src/task-agent/card-evidence.ts +59 -13
  520. package/src/task-agent/judge.ts +4 -3
  521. package/src/task-agent/land-worktree.ts +201 -0
  522. package/src/task-agent/live-move-history.ts +133 -0
  523. package/src/task-agent/live-moves.ts +106 -19
  524. package/src/task-agent/parent-host.ts +117 -8
  525. package/src/task-agent/rejudge-on-head.ts +297 -0
  526. package/src/task-agent/review-result-capture.ts +218 -0
  527. package/src/task-agent/shadow.ts +103 -7
  528. package/src/task-agent/task-hand.ts +136 -11
  529. package/src/task-orchestrator/surfaces/pod-child-providers.ts +29 -0
  530. package/src/task-orchestrator/surfaces/pod-command-job.ts +6 -3
  531. package/src/task-orchestrator/surfaces/pod-failure-reason.ts +16 -2
  532. package/src/task-orchestrator/surfaces/pod-image-source.ts +212 -0
  533. package/src/task-orchestrator/surfaces/pod-lease.ts +93 -12
  534. package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +25 -2
  535. package/src/task-orchestrator/surfaces/pod-pool.ts +66 -14
  536. package/src/task-orchestrator/surfaces/self-implement-pod.ts +259 -36
  537. package/src/task-orchestrator/surfaces/self-implement.ts +6 -2
  538. package/src/telegram-service.ts +5 -1
  539. package/src/telegram.ts +17 -4
  540. package/src/time/format.ts +13 -4
  541. package/src/tool-runtime/goal-author-runtime.ts +1 -0
  542. package/src/tool-runtime/self-cognition-catalog.ts +23 -0
  543. package/src/tool-runtime/self-cognition-runtimes.ts +2 -24
  544. package/src/user-config.ts +132 -24
  545. package/src/ux-sim/slash-menu-frames.ts +168 -0
  546. package/src/version/packed-revision.json +1 -1
  547. package/src/web-terminal/preview-tap-registry.ts +5 -2
  548. package/src/workflow-runtime/triggers/scheduler.ts +1 -0
  549. package/apps/pwa/out/_next/static/chunks/1109.78a7a3288c0259d9.js +0 -148
  550. package/apps/pwa/out/_next/static/chunks/115.1c6690b8604f81c4.js +0 -32
  551. package/apps/pwa/out/_next/static/chunks/1262.76a3f08e67c5f816.js +0 -309
  552. package/apps/pwa/out/_next/static/chunks/1307-08b716476f1d50af.js +0 -1
  553. package/apps/pwa/out/_next/static/chunks/1358d292.5c87f12cad6eaa91.js +0 -122
  554. package/apps/pwa/out/_next/static/chunks/1438.27a1a7b8f2308004.js +0 -149
  555. package/apps/pwa/out/_next/static/chunks/1442.02d85cd88f4c1eac.js +0 -79
  556. package/apps/pwa/out/_next/static/chunks/1501-1aad662d82ba43f7.js +0 -1
  557. package/apps/pwa/out/_next/static/chunks/1584.9e2dd53da6e6d4b1.js +0 -24
  558. package/apps/pwa/out/_next/static/chunks/1586.b989b0614afb77e6.js +0 -1
  559. package/apps/pwa/out/_next/static/chunks/1609.2ad355062870151f.js +0 -1
  560. package/apps/pwa/out/_next/static/chunks/1612-f6df0fc0eed7157b.js +0 -1
  561. package/apps/pwa/out/_next/static/chunks/1826-5d279da64bbbc2de.js +0 -1
  562. package/apps/pwa/out/_next/static/chunks/1923.37f1d5fe7ebe3860.js +0 -27
  563. package/apps/pwa/out/_next/static/chunks/195-fb1d7690bf30bab4.js +0 -1
  564. package/apps/pwa/out/_next/static/chunks/1986-33e13d648a9df765.js +0 -1
  565. package/apps/pwa/out/_next/static/chunks/1993.3fd074a2a246234e.js +0 -1
  566. package/apps/pwa/out/_next/static/chunks/211-9c9090c59e2c5907.js +0 -1
  567. package/apps/pwa/out/_next/static/chunks/2140.d2daf9ee96e295d1.js +0 -1
  568. package/apps/pwa/out/_next/static/chunks/2196-4700653d12a44b40.js +0 -1
  569. package/apps/pwa/out/_next/static/chunks/2212.0359851457473efc.js +0 -1
  570. package/apps/pwa/out/_next/static/chunks/224.583e562365a52f74.js +0 -1
  571. package/apps/pwa/out/_next/static/chunks/2328.0f37465646bafa7d.js +0 -36
  572. package/apps/pwa/out/_next/static/chunks/2372.bf71372184991937.js +0 -286
  573. package/apps/pwa/out/_next/static/chunks/2489-d238d3e2eb5b2bf5.js +0 -1
  574. package/apps/pwa/out/_next/static/chunks/2537-6c289376caa88ca1.js +0 -1
  575. package/apps/pwa/out/_next/static/chunks/2549-a8515c86f9e8cb96.js +0 -1
  576. package/apps/pwa/out/_next/static/chunks/2655.72cc6a97276c5acc.js +0 -1
  577. package/apps/pwa/out/_next/static/chunks/2699-325cc923ba7b8631.js +0 -1
  578. package/apps/pwa/out/_next/static/chunks/2743-ef6e8c3ced74cce5.js +0 -1
  579. package/apps/pwa/out/_next/static/chunks/2840-5458ad50c49cac6a.js +0 -1
  580. package/apps/pwa/out/_next/static/chunks/2856.f75d5baef7f49b74.js +0 -1
  581. package/apps/pwa/out/_next/static/chunks/311.e685738f92e6e2ec.js +0 -1
  582. package/apps/pwa/out/_next/static/chunks/3194-807b212fb8eae065.js +0 -1
  583. package/apps/pwa/out/_next/static/chunks/3324-d1d2979821dfa845.js +0 -1
  584. package/apps/pwa/out/_next/static/chunks/3344.0de4b0ec5a454b7a.js +0 -1
  585. package/apps/pwa/out/_next/static/chunks/335.a13f339e97893437.js +0 -94
  586. package/apps/pwa/out/_next/static/chunks/3394.646348f34b2500be.js +0 -1
  587. package/apps/pwa/out/_next/static/chunks/3443.6276909b53d72d53.js +0 -1
  588. package/apps/pwa/out/_next/static/chunks/3495.abd4254d808bf2dc.js +0 -1
  589. package/apps/pwa/out/_next/static/chunks/3558-bbb5ab553a0471d3.js +0 -1
  590. package/apps/pwa/out/_next/static/chunks/3721.ba5b82db0d9a5572.js +0 -1
  591. package/apps/pwa/out/_next/static/chunks/3857-5985236d9307f676.js +0 -1
  592. package/apps/pwa/out/_next/static/chunks/3916-3d02dd1fc257dd3c.js +0 -1
  593. package/apps/pwa/out/_next/static/chunks/3919.9ff7dc25afefee33.js +0 -74
  594. package/apps/pwa/out/_next/static/chunks/3998.bd9a69d9b50e9bd2.js +0 -1
  595. package/apps/pwa/out/_next/static/chunks/4003.ab6db1dc266576c9.js +0 -1
  596. package/apps/pwa/out/_next/static/chunks/4144-fad095b48a1862ee.js +0 -1
  597. package/apps/pwa/out/_next/static/chunks/4216.e8ac94b9fe6b96ab.js +0 -1
  598. package/apps/pwa/out/_next/static/chunks/4327.c44dc2b55cb43ee5.js +0 -34
  599. package/apps/pwa/out/_next/static/chunks/4401.94257d497b6d26bc.js +0 -1
  600. package/apps/pwa/out/_next/static/chunks/4559.17ca2cdbaa8d414f.js +0 -115
  601. package/apps/pwa/out/_next/static/chunks/4565-3d7e3fdeb43686a8.js +0 -1
  602. package/apps/pwa/out/_next/static/chunks/4706.97e734bd4c9816ca.js +0 -1
  603. package/apps/pwa/out/_next/static/chunks/4795-f372490b178583fc.js +0 -1
  604. package/apps/pwa/out/_next/static/chunks/4982.6e44352f751b9a1b.js +0 -77
  605. package/apps/pwa/out/_next/static/chunks/5342.49c5c5a530e62b50.js +0 -1
  606. package/apps/pwa/out/_next/static/chunks/5360-08a80abdf3a4da99.js +0 -1
  607. package/apps/pwa/out/_next/static/chunks/5431.66c58ab1327ee0b7.js +0 -1
  608. package/apps/pwa/out/_next/static/chunks/5633-d6852385000738ef.js +0 -1
  609. package/apps/pwa/out/_next/static/chunks/5717.bcfcb96e701b82e0.js +0 -90
  610. package/apps/pwa/out/_next/static/chunks/5755-30d102586789bf7f.js +0 -1
  611. package/apps/pwa/out/_next/static/chunks/5957.3f1a4012388dd962.js +0 -1
  612. package/apps/pwa/out/_next/static/chunks/5977-5b9e8a45a5b0c823.js +0 -1
  613. package/apps/pwa/out/_next/static/chunks/602.9bf02ac8e9502598.js +0 -1
  614. package/apps/pwa/out/_next/static/chunks/6020.3a1b347e2d2dfacc.js +0 -8
  615. package/apps/pwa/out/_next/static/chunks/6375.fce1d174ba6d0324.js +0 -64
  616. package/apps/pwa/out/_next/static/chunks/6546.92a828aef441271f.js +0 -1
  617. package/apps/pwa/out/_next/static/chunks/658.957fdb0a8c6c6c8e.js +0 -287
  618. package/apps/pwa/out/_next/static/chunks/6706.323590aabb8b1293.js +0 -226
  619. package/apps/pwa/out/_next/static/chunks/6747.b67947f293a4c02d.js +0 -1
  620. package/apps/pwa/out/_next/static/chunks/6868.000b24a3045c5574.js +0 -1
  621. package/apps/pwa/out/_next/static/chunks/6877-74399f69c7da1433.js +0 -1
  622. package/apps/pwa/out/_next/static/chunks/6946.bba74e9c96050f30.js +0 -1
  623. package/apps/pwa/out/_next/static/chunks/7033.a558f1b2f6912a53.js +0 -1
  624. package/apps/pwa/out/_next/static/chunks/7065.46029c26c53eac50.js +0 -1
  625. package/apps/pwa/out/_next/static/chunks/7087.6fae577d09249bc1.js +0 -1
  626. package/apps/pwa/out/_next/static/chunks/722.de8d9801e0f6d414.js +0 -41
  627. package/apps/pwa/out/_next/static/chunks/726.83532d69452ee24b.js +0 -1
  628. package/apps/pwa/out/_next/static/chunks/7290-f09c928a06c52e2d.js +0 -1
  629. package/apps/pwa/out/_next/static/chunks/7497.57981e9d7a75a52a.js +0 -24
  630. package/apps/pwa/out/_next/static/chunks/7672.4af122ad892117c7.js +0 -1
  631. package/apps/pwa/out/_next/static/chunks/771.6ab889a233e7dae7.js +0 -1
  632. package/apps/pwa/out/_next/static/chunks/7797-df5aa0381fdc078f.js +0 -1
  633. package/apps/pwa/out/_next/static/chunks/8060-cc008cc6fedfa818.js +0 -1
  634. package/apps/pwa/out/_next/static/chunks/8085-d065d0393c1760f5.js +0 -1
  635. package/apps/pwa/out/_next/static/chunks/8096.f7da0776cfde6300.js +0 -1
  636. package/apps/pwa/out/_next/static/chunks/8401-35e94e9091f5eb8d.js +0 -1
  637. package/apps/pwa/out/_next/static/chunks/8682-7061dd4fa7bd62ed.js +0 -1
  638. package/apps/pwa/out/_next/static/chunks/8695-846034ce44852c70.js +0 -1
  639. package/apps/pwa/out/_next/static/chunks/8769.815ca69879f608b4.js +0 -104
  640. package/apps/pwa/out/_next/static/chunks/8857-aa1cc4ac90af4d40.js +0 -1
  641. package/apps/pwa/out/_next/static/chunks/8f835b4f.048eeb02299e3e12.js +0 -1
  642. package/apps/pwa/out/_next/static/chunks/9068.5f2764fccf86c1b2.js +0 -93
  643. package/apps/pwa/out/_next/static/chunks/9103-60fbef33e66f0a46.js +0 -1
  644. package/apps/pwa/out/_next/static/chunks/9247-55bcfbb0e8057f59.js +0 -1
  645. package/apps/pwa/out/_next/static/chunks/935.4ddaa99fc1d1126c.js +0 -1
  646. package/apps/pwa/out/_next/static/chunks/9451.ebfb0dcc9c02250f.js +0 -23
  647. package/apps/pwa/out/_next/static/chunks/9559.e648369b1d57cf9a.js +0 -62
  648. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-c1a96669158471ec.js +0 -1
  649. package/apps/pwa/out/_next/static/chunks/app/approvals/page-88459e0903da2803.js +0 -1
  650. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-d85c43f46f58716b.js +0 -1
  651. package/apps/pwa/out/_next/static/chunks/app/board/page-4e645600579ae952.js +0 -1
  652. package/apps/pwa/out/_next/static/chunks/app/botlab/page-87edbfd19117823b.js +0 -1
  653. package/apps/pwa/out/_next/static/chunks/app/bots/page-7f0c2b7801ac6a54.js +0 -1
  654. package/apps/pwa/out/_next/static/chunks/app/ceo/page-bf1f030a9d1adffd.js +0 -1
  655. package/apps/pwa/out/_next/static/chunks/app/chat/page-cbaf66b1e1804adf.js +0 -1
  656. package/apps/pwa/out/_next/static/chunks/app/control/page-9f5610caaa06178c.js +0 -1
  657. package/apps/pwa/out/_next/static/chunks/app/decisions/page-ec8f3575e339de74.js +0 -1
  658. package/apps/pwa/out/_next/static/chunks/app/design-check/page-86d753e460f1a989.js +0 -1
  659. package/apps/pwa/out/_next/static/chunks/app/editor/page-4166a7d51cf0a57d.js +0 -1
  660. package/apps/pwa/out/_next/static/chunks/app/exec/page-2a19c5cd3b562580.js +0 -1
  661. package/apps/pwa/out/_next/static/chunks/app/field/page-b6a09cde2e07521a.js +0 -1
  662. package/apps/pwa/out/_next/static/chunks/app/healthz/route-c1a96669158471ec.js +0 -1
  663. package/apps/pwa/out/_next/static/chunks/app/inside/page-f7eae1518ca0c353.js +0 -1
  664. package/apps/pwa/out/_next/static/chunks/app/intake/page-456a8573ad811381.js +0 -1
  665. package/apps/pwa/out/_next/static/chunks/app/layout-8462d6a543cbb2d9.js +0 -1
  666. package/apps/pwa/out/_next/static/chunks/app/live/page-2974cdfb87c0f9c9.js +0 -1
  667. package/apps/pwa/out/_next/static/chunks/app/live-run/page-f927ffa25f3c86d1.js +0 -1
  668. package/apps/pwa/out/_next/static/chunks/app/loops/page-abd86cd832aaa011.js +0 -1
  669. package/apps/pwa/out/_next/static/chunks/app/market/page-79daf68f6256adaa.js +0 -1
  670. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-8c3f168fc3f91939.js +0 -1
  671. package/apps/pwa/out/_next/static/chunks/app/morning/page-786fb4504d0f2fa9.js +0 -1
  672. package/apps/pwa/out/_next/static/chunks/app/not-found-75209f14597dcb8f.js +0 -1
  673. package/apps/pwa/out/_next/static/chunks/app/observatory/page-bf30affe3a85af7e.js +0 -1
  674. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-1187a44b7515434b.js +0 -1
  675. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-3d0910185a66ed54.js +0 -1
  676. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-f401ee1dd5a26e25.js +0 -1
  677. package/apps/pwa/out/_next/static/chunks/app/outputs/page-5dfe7604fd842784.js +0 -1
  678. package/apps/pwa/out/_next/static/chunks/app/page-76cf838050a8d681.js +0 -1
  679. package/apps/pwa/out/_next/static/chunks/app/reflection/page-7ec8e289b4c14df6.js +0 -1
  680. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-8c8ac17d52be2a79.js +0 -1
  681. package/apps/pwa/out/_next/static/chunks/app/sessions/page-d359ab048d63a9d9.js +0 -1
  682. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-b8b345c880bf78d1.js +0 -1
  683. package/apps/pwa/out/_next/static/chunks/app/settings/page-f151cc10ad026940.js +0 -1
  684. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-9875f103057da433.js +0 -1
  685. package/apps/pwa/out/_next/static/chunks/app/setup/layout-c1a96669158471ec.js +0 -1
  686. package/apps/pwa/out/_next/static/chunks/app/setup/page-9789328af9a9aa62.js +0 -1
  687. package/apps/pwa/out/_next/static/chunks/app/share/page-bf495a1e284f4e00.js +0 -1
  688. package/apps/pwa/out/_next/static/chunks/app/showroom/page-a263d94bca4be22a.js +0 -1
  689. package/apps/pwa/out/_next/static/chunks/app/tasks/page-3962eab8ec58d16e.js +0 -1
  690. package/apps/pwa/out/_next/static/chunks/app/term/page-9abcfac07e02a542.js +0 -1
  691. package/apps/pwa/out/_next/static/chunks/app/today/page-bee49f927c333abb.js +0 -1
  692. package/apps/pwa/out/_next/static/chunks/app/trace/page-bac2d56dcb02d955.js +0 -1
  693. package/apps/pwa/out/_next/static/chunks/app/vault/page-937cbcc13176295c.js +0 -1
  694. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-d09495594f7f480d.js +0 -1
  695. package/apps/pwa/out/_next/static/chunks/app/workflows/page-69cb93d1a2e57e0e.js +0 -1
  696. package/apps/pwa/out/_next/static/chunks/app/workspace/page-72ec543928d67c3e.js +0 -1
  697. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-82906eeda0186a7b.js +0 -1
  698. package/apps/pwa/out/_next/static/chunks/f6231284-45726550aba08fca.js +0 -1
  699. package/apps/pwa/out/_next/static/chunks/main-59fe95fed40c7a01.js +0 -1
  700. package/apps/pwa/out/_next/static/chunks/main-app-4ca74dbbee7057c6.js +0 -1
  701. package/apps/pwa/out/_next/static/chunks/pages/_app-13a0a886df4d97a1.js +0 -1
  702. package/apps/pwa/out/_next/static/chunks/pages/_error-6af8591cd3a3f038.js +0 -1
  703. package/apps/pwa/out/_next/static/chunks/webpack-f2b4016b9b981bc8.js +0 -1
  704. package/apps/pwa/out/_next/static/css/f2bd5257e6af88d8.css +0 -1
  705. /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
- const next = await exec(spec, { ...baseRuntime, resumeFrom: [...previous], ...(resumeHold.length > 0 ? { resumeHold } : {}) }, pipelineDeps);
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
- /** The runner and the subscription probe share the PTY backend's billing-env scrub. */
36
- export function subscriptionReviewerSpawn(spec: SubscriptionReviewerSpec, env: NodeJS.ProcessEnv = process.env): {
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: cleanEnv } = resolveBackendSpawn(claudeBackend, env);
41
- const command = executor === 'cct' ? 'teamclaude' : 'claude';
42
- const args = executor === 'cct'
43
- ? ['run', '--auto-fallback', '--', '--dangerously-skip-permissions']
44
- : ['--dangerously-skip-permissions'];
45
- return { command, args, env: cleanEnv,
46
- backendSpec: { ...getAcpBackend('claude'), command, args } };
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
- const usedPercent = deps.usedPercent ?? (() => {
61
- const result = runStatus('teamclaude', ['status'], spawn.env);
62
- if (result.status !== 0) return undefined;
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 = String(result.stdout).match(/(?:usage|used)\s*[:=]?\s*(\d+(?:\.\d+)?)\s*%/i);
65
- return match ? Number(match[1]) : undefined;
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 status = runStatus('teamclaude', ['status'], cleanEnv);
71
- return status.status === 0 && /(?:subscription|claude\.ai|claude\s+(?:max|pro))/i.test(String(status.stdout))
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
- } catch { /* ACP failure is not a completed review. */ }
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 './orchestrate.js';
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 './orchestrate.js';
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, type SupervisorNext } from './supervisor-verdict-edges.js';
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',