elanous 0.2.24 → 0.2.27

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 (601) hide show
  1. package/apps/pwa/out/404/index.html +1 -1
  2. package/apps/pwa/out/404.html +1 -1
  3. package/apps/pwa/out/_next/static/{Q-7iofoxOEv1WX18S35of → Ev2jivDMTSoEc-5rIXdcy}/_buildManifest.js +1 -1
  4. package/apps/pwa/out/_next/static/chunks/1027.a0f04663d24c2779.js +1 -0
  5. package/apps/pwa/out/_next/static/chunks/1038.676007ae505822e7.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/1113.a37eadf7f740d955.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/112-fa7c526c20ce1405.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/1144.5fa1fa1d48dbcd12.js +36 -0
  9. package/apps/pwa/out/_next/static/chunks/1146.80d15ea7c6e6ee95.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/1157.f08bf2b70915e176.js +148 -0
  11. package/apps/pwa/out/_next/static/chunks/119b405e.8fdd0e44d1ff37aa.js +1 -0
  12. package/apps/pwa/out/_next/static/chunks/1296.04560d98e73fbf51.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/1314-f604ba013ec535b0.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/1454-a9c338f5bb556f42.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/1464.f3209af0d8ae4ff2.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/{8532.a86e99acf9b761cb.js → 1516.83dd2c1b86b4e507.js} +2 -2
  17. package/apps/pwa/out/_next/static/chunks/{89849432.9eaa2f4c9c010965.js → 16e57f67.3ea19e893461e611.js} +3 -3
  18. package/apps/pwa/out/_next/static/chunks/1729-d73dd25e564679d4.js +1 -0
  19. package/apps/pwa/out/_next/static/chunks/{1505.5826671109111e75.js → 1743.563d3168e95825ef.js} +2 -2
  20. package/apps/pwa/out/_next/static/chunks/1843.5924c24295243261.js +27 -0
  21. package/apps/pwa/out/_next/static/chunks/1987.e28149724b92918b.js +1 -0
  22. package/apps/pwa/out/_next/static/chunks/2066-5ca18ffa5a4be68b.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/2240.d10a66695155fd93.js +1 -0
  24. package/apps/pwa/out/_next/static/chunks/2391.e2cbc98d4abbb41a.js +1 -0
  25. package/apps/pwa/out/_next/static/chunks/2528.3868070ef1be69f9.js +24 -0
  26. package/apps/pwa/out/_next/static/chunks/2566-734cb83bbd405886.js +1 -0
  27. package/apps/pwa/out/_next/static/chunks/2697.76ca2ac3efef6f3b.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/275.0e6bad414729bfa0.js +32 -0
  29. package/apps/pwa/out/_next/static/chunks/2803-33bdae771855a8d1.js +1 -0
  30. package/apps/pwa/out/_next/static/chunks/2846.d6a433b8663819a5.js +309 -0
  31. package/apps/pwa/out/_next/static/chunks/3143.257997a5f1ed79df.js +34 -0
  32. package/apps/pwa/out/_next/static/chunks/{5967-c0a80f8ffe5d4050.js → 3259-86f3be56e43eaf6a.js} +1 -1
  33. package/apps/pwa/out/_next/static/chunks/3280-e177c33bfbdcfb0a.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/3294-2b6a6d45a46a6c1c.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/3309.364573ceedbdfd5f.js +1 -0
  36. package/apps/pwa/out/_next/static/chunks/3522.758840fc5e7fe630.js +287 -0
  37. package/apps/pwa/out/_next/static/chunks/3525-a7c989c1a661e880.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/3694.b1a66387756458c0.js +1 -0
  39. package/apps/pwa/out/_next/static/chunks/370.124f9e678a76fc01.js +1 -0
  40. package/apps/pwa/out/_next/static/chunks/3797-9643105335e660fe.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/{5578.ac963634373b28c6.js → 4084.15ecaf4240bd9e77.js} +2 -2
  42. package/apps/pwa/out/_next/static/chunks/4089-b3382b8843114eee.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/{8438.ee7f0df3b3f6fcb4.js → 4204.a409ab6250c0f6a8.js} +1 -1
  44. package/apps/pwa/out/_next/static/chunks/4293.928a8d573c16aab7.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/4402.f9238a3b18a7bd43.js +1 -0
  46. package/apps/pwa/out/_next/static/chunks/4490-9b090b0f9427f902.js +1 -0
  47. package/apps/pwa/out/_next/static/chunks/4548.13502d0ca3b4f862.js +8 -0
  48. package/apps/pwa/out/_next/static/chunks/4565-67e4c620597965c8.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/{7905.b230b9d06cb4ad5d.js → 4593.10f5b9bd702d4a6c.js} +1 -1
  50. package/apps/pwa/out/_next/static/chunks/4599-548bc96cda44a5a7.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/4625.206574e33a9e7ae8.js +104 -0
  52. package/apps/pwa/out/_next/static/chunks/4862-392c9a71f0d8dfb4.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/5054.2906d1b02542edc5.js +149 -0
  54. package/apps/pwa/out/_next/static/chunks/{8569.b853a8daa8f31d12.js → 5081.a240b63fad28663a.js} +1 -1
  55. package/apps/pwa/out/_next/static/chunks/5102-c822bbbee5a022a4.js +1 -0
  56. package/apps/pwa/out/_next/static/chunks/5194-8c93f2e7e4b6f717.js +1 -0
  57. package/apps/pwa/out/_next/static/chunks/5305-bacd7eca0b9a5848.js +1 -0
  58. package/apps/pwa/out/_next/static/chunks/5311.9071ee3f44fd7ff5.js +1 -0
  59. package/apps/pwa/out/_next/static/chunks/5369.9f34353442daa421.js +1 -0
  60. package/apps/pwa/out/_next/static/chunks/{2528.0af5c0e1fad88df6.js → 5408.377c8c543635b81f.js} +1 -1
  61. package/apps/pwa/out/_next/static/chunks/{9502-32c5dc22e8f120f5.js → 5492-e05e26a033ba80d2.js} +3 -3
  62. package/apps/pwa/out/_next/static/chunks/5785-ea8d2c633b6688e3.js +1 -0
  63. package/apps/pwa/out/_next/static/chunks/589-49d730cb8138b397.js +1 -0
  64. package/apps/pwa/out/_next/static/chunks/5904-264a6412ae3c9028.js +1 -0
  65. package/apps/pwa/out/_next/static/chunks/5980.728531d5c566535c.js +1 -0
  66. package/apps/pwa/out/_next/static/chunks/599-a914cc0468f56143.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/6011.f525002e21bef0ac.js +23 -0
  68. package/apps/pwa/out/_next/static/chunks/6132.4381ab93683f1acf.js +1 -0
  69. package/apps/pwa/out/_next/static/chunks/6149.2e698635e454d8f6.js +1 -0
  70. package/apps/pwa/out/_next/static/chunks/{5974.360f8441eb0ac1ec.js → 6196.34d6b229079e9e28.js} +1 -1
  71. package/apps/pwa/out/_next/static/chunks/6356-0afafc4230cf9767.js +1 -0
  72. package/apps/pwa/out/_next/static/chunks/6406.64756073f7df35b8.js +77 -0
  73. package/apps/pwa/out/_next/static/chunks/6479-16e62aedafa0e310.js +1 -0
  74. package/apps/pwa/out/_next/static/chunks/6599.b5246b46a2453329.js +64 -0
  75. package/apps/pwa/out/_next/static/chunks/{ce383d63.d2ede338788ed18e.js → 65ebff95.081daeff622d238e.js} +1 -1
  76. package/apps/pwa/out/_next/static/chunks/6610.5c26eec011565acb.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/666.37d18474edc1c552.js +2 -0
  78. package/apps/pwa/out/_next/static/chunks/6904.a0b5b1ed4f2d2c20.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/{83cfc5c8.349535543c1548b6.js → 6def8a8e.c81f9ca41028eccf.js} +1 -1
  80. package/apps/pwa/out/_next/static/chunks/7247-1f4aba94aba50d9f.js +1 -0
  81. package/apps/pwa/out/_next/static/chunks/7274-e71a7c5b7760cd02.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/7290.1fcaeef3adb5d0d4.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/7477-2c64e42760f82f33.js +1 -0
  84. package/apps/pwa/out/_next/static/chunks/{2721.bc9a8f36bd85c07a.js → 7483.ba01c6c209b81bba.js} +1 -1
  85. package/apps/pwa/out/_next/static/chunks/7505-47002b76ff1aef6c.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/7600-11884ca4da68e5d9.js +1 -0
  87. package/apps/pwa/out/_next/static/chunks/7607.40d8bb3689697ccb.js +62 -0
  88. package/apps/pwa/out/_next/static/chunks/{6702.ebbd165d5e4a4a14.js → 7752.5cbdd0b433c54af9.js} +1 -1
  89. package/apps/pwa/out/_next/static/chunks/7763.f51fcc19ca1414ec.js +1 -0
  90. package/apps/pwa/out/_next/static/chunks/7785.846140c859b1adf6.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/7807-a0fdac6393e0bf36.js +1 -0
  92. package/apps/pwa/out/_next/static/chunks/7837-20a63b4b7e9342b1.js +1 -0
  93. package/apps/pwa/out/_next/static/chunks/800.7815414cf280545d.js +1 -0
  94. package/apps/pwa/out/_next/static/chunks/{8925-2abfb48af477fb7f.js → 8085-1e5fce59500a2cc2.js} +1 -1
  95. package/apps/pwa/out/_next/static/chunks/8100.415f2105faa63e97.js +1 -0
  96. package/apps/pwa/out/_next/static/chunks/8290.701aa42ed13aa767.js +226 -0
  97. package/apps/pwa/out/_next/static/chunks/{b4e12462-5fab4a813a63dadd.js → 83a80514-b897b64df43ce108.js} +1 -1
  98. package/apps/pwa/out/_next/static/chunks/8444.d9c74214a3145a43.js +93 -0
  99. package/apps/pwa/out/_next/static/chunks/8569.98c915534928c7f9.js +24 -0
  100. package/apps/pwa/out/_next/static/chunks/{8264.00e434fbd02e9311.js → 8578.dff22d988cc2b106.js} +3 -3
  101. package/apps/pwa/out/_next/static/chunks/8591.b1c7f876e5ec7cfb.js +1 -0
  102. package/apps/pwa/out/_next/static/chunks/8715-f63756021d3ab989.js +1 -0
  103. package/apps/pwa/out/_next/static/chunks/8879.776c2ec7732aa114.js +115 -0
  104. package/apps/pwa/out/_next/static/chunks/8881.ddca15b3c82c490c.js +1 -0
  105. package/apps/pwa/out/_next/static/chunks/8946.5da5c87f32a2e1a8.js +41 -0
  106. package/apps/pwa/out/_next/static/chunks/9117.080b9b75be90e14d.js +74 -0
  107. package/apps/pwa/out/_next/static/chunks/9167.f3ecb28f367d6e69.js +94 -0
  108. package/apps/pwa/out/_next/static/chunks/9224.66095370ee28c93b.js +1 -0
  109. package/apps/pwa/out/_next/static/chunks/9238-0682b013c83d6449.js +1 -0
  110. package/apps/pwa/out/_next/static/chunks/{7518.49161e8f5814abdb.js → 9311.24c8f5ea793253dd.js} +1 -1
  111. package/apps/pwa/out/_next/static/chunks/{9976.8f28864317639fe6.js → 94.4cfed21c0b781a06.js} +3 -3
  112. package/apps/pwa/out/_next/static/chunks/9449.d3ed795da4befb1c.js +1 -0
  113. package/apps/pwa/out/_next/static/chunks/949.1e7d45ccb71580aa.js +90 -0
  114. package/apps/pwa/out/_next/static/chunks/9638-d268329f2c6f4f8d.js +1 -0
  115. package/apps/pwa/out/_next/static/chunks/{0e3acd34.d42b2ef87fdf4234.js → 973cbf1b.3bbcf2b41548eca7.js} +1 -1
  116. package/apps/pwa/out/_next/static/chunks/9842-d6644eb53d3dc6bf.js +1 -0
  117. package/apps/pwa/out/_next/static/chunks/9863.94ca3263e760696e.js +1 -0
  118. package/apps/pwa/out/_next/static/chunks/{6571-926ddf024a6ad5df.js → 9917-9e26abc5f7772735.js} +1 -1
  119. package/apps/pwa/out/_next/static/chunks/9938.b23e4d4dfa0114cd.js +79 -0
  120. package/apps/pwa/out/_next/static/chunks/{740.90b31555290236a9.js → 9974.e77b4ff4884557b3.js} +2 -2
  121. package/apps/pwa/out/_next/static/chunks/{4c5e95ce.83e9b16add6fcd8c.js → ab4d57c2.e90bc2cb31949045.js} +7 -7
  122. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-d9babd8795f396a5.js +1 -0
  123. package/apps/pwa/out/_next/static/chunks/app/approvals/page-a1ce306364f08da9.js +1 -0
  124. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-07110da72c45e68f.js +1 -0
  125. package/apps/pwa/out/_next/static/chunks/app/board/page-d2d76d4a7eae91bd.js +1 -0
  126. package/apps/pwa/out/_next/static/chunks/app/botlab/page-30007380f2e2a3c1.js +1 -0
  127. package/apps/pwa/out/_next/static/chunks/app/bots/page-e5a9302c105725a3.js +1 -0
  128. package/apps/pwa/out/_next/static/chunks/app/ceo/page-b93c04b5311c97ec.js +1 -0
  129. package/apps/pwa/out/_next/static/chunks/app/chat/page-718a49e86bf25f9c.js +1 -0
  130. package/apps/pwa/out/_next/static/chunks/app/consult/page-20662900d6b4b455.js +1 -0
  131. package/apps/pwa/out/_next/static/chunks/app/control/page-f707a509515ac50c.js +1 -0
  132. package/apps/pwa/out/_next/static/chunks/app/decisions/page-6a16a48d1aa6e91f.js +1 -0
  133. package/apps/pwa/out/_next/static/chunks/app/design-check/{page-26345242e4049f55.js → page-fcb06e305f515527.js} +1 -1
  134. package/apps/pwa/out/_next/static/chunks/app/editor/page-6acf5ec4e6c6d1af.js +1 -0
  135. package/apps/pwa/out/_next/static/chunks/app/exec/page-39f82acf619cca23.js +1 -0
  136. package/apps/pwa/out/_next/static/chunks/app/field/page-7c2c8f81b185f9c0.js +1 -0
  137. package/apps/pwa/out/_next/static/chunks/app/healthz/route-d9babd8795f396a5.js +1 -0
  138. package/apps/pwa/out/_next/static/chunks/app/inside/page-ae7aff07e32676bb.js +1 -0
  139. package/apps/pwa/out/_next/static/chunks/app/intake/page-482c60c1bc540d0a.js +1 -0
  140. package/apps/pwa/out/_next/static/chunks/app/layout-7cb996c1aa08b6f5.js +1 -0
  141. package/apps/pwa/out/_next/static/chunks/app/live/page-623e08fe4477d606.js +1 -0
  142. package/apps/pwa/out/_next/static/chunks/app/live-run/page-db460cd8aecb8490.js +1 -0
  143. package/apps/pwa/out/_next/static/chunks/app/loops/page-ff27902d0b11ef4f.js +1 -0
  144. package/apps/pwa/out/_next/static/chunks/app/market/page-8397a5c6ca569bf4.js +1 -0
  145. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1917ea87ea71ab6b.js +1 -0
  146. package/apps/pwa/out/_next/static/chunks/app/morning/page-25a302273b054fd7.js +1 -0
  147. package/apps/pwa/out/_next/static/chunks/app/not-found-670510eda8b9443f.js +1 -0
  148. package/apps/pwa/out/_next/static/chunks/app/observatory/page-d73c3f1e00d93986.js +1 -0
  149. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-65caacf54389081e.js +1 -0
  150. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-4bb7556e2e97a750.js +1 -0
  151. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-77e04b4f8762c666.js +1 -0
  152. package/apps/pwa/out/_next/static/chunks/app/outputs/{page-b92caddb5c715f30.js → page-15c0a4095baddfba.js} +1 -1
  153. package/apps/pwa/out/_next/static/chunks/app/page-4eb96fc7241c2456.js +1 -0
  154. package/apps/pwa/out/_next/static/chunks/app/reflection/page-63e272a4cd3b6634.js +1 -0
  155. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-0d64ff212dc55d03.js +1 -0
  156. package/apps/pwa/out/_next/static/chunks/app/sessions/page-7f096248993fc2d4.js +1 -0
  157. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-e47fc72049149a38.js +1 -0
  158. package/apps/pwa/out/_next/static/chunks/app/settings/page-f7d808e31e005895.js +1 -0
  159. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-5c2b24b5496dad73.js +1 -0
  160. package/apps/pwa/out/_next/static/chunks/app/setup/layout-d9babd8795f396a5.js +1 -0
  161. package/apps/pwa/out/_next/static/chunks/app/setup/page-76cdb531668b5191.js +1 -0
  162. package/apps/pwa/out/_next/static/chunks/app/share/page-e2b63345bba1a11f.js +1 -0
  163. package/apps/pwa/out/_next/static/chunks/app/showroom/page-d376e0c83edc041a.js +1 -0
  164. package/apps/pwa/out/_next/static/chunks/app/tasks/page-d6db55fe2c04d128.js +1 -0
  165. package/apps/pwa/out/_next/static/chunks/app/term/page-87b88f551f421d8b.js +1 -0
  166. package/apps/pwa/out/_next/static/chunks/app/today/page-dab163b338e3b966.js +1 -0
  167. package/apps/pwa/out/_next/static/chunks/app/trace/page-08019efef111ed2e.js +1 -0
  168. package/apps/pwa/out/_next/static/chunks/app/vault/page-0260ffc7eda50db1.js +1 -0
  169. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-980ce6fe36ad95eb.js +1 -0
  170. package/apps/pwa/out/_next/static/chunks/app/workflows/page-99c4e6c7345a9156.js +1 -0
  171. package/apps/pwa/out/_next/static/chunks/app/workspace/page-0ab42e0f05823013.js +1 -0
  172. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-ad9220422d20ba33.js +1 -0
  173. package/apps/pwa/out/_next/static/chunks/dcf24383-2f82e35f2d827393.js +1 -0
  174. package/apps/pwa/out/_next/static/chunks/{53746282.1be36038d1abd949.js → e117f801.e92bf10242653497.js} +1 -1
  175. package/apps/pwa/out/_next/static/chunks/e87d89b9.2e71c0ae475d28a1.js +122 -0
  176. package/apps/pwa/out/_next/static/chunks/{0673cc54.8e2ef1c23e49e190.js → f4dfbfc0.a69fb12f854882aa.js} +1 -1
  177. package/apps/pwa/out/_next/static/chunks/framework-bf135b997155e90e.js +1 -0
  178. package/apps/pwa/out/_next/static/chunks/main-5571537543bea91c.js +1 -0
  179. package/apps/pwa/out/_next/static/chunks/main-app-25c51c7df7f3a442.js +1 -0
  180. package/apps/pwa/out/_next/static/chunks/pages/_app-e3b2c1f5d82abd65.js +1 -0
  181. package/apps/pwa/out/_next/static/chunks/pages/_error-083f2e23e9bc3641.js +1 -0
  182. package/apps/pwa/out/_next/static/chunks/webpack-e94d22b7a028217b.js +1 -0
  183. package/apps/pwa/out/approvals/index.html +1 -1
  184. package/apps/pwa/out/approvals/index.txt +22 -22
  185. package/apps/pwa/out/autopilot/index.html +1 -1
  186. package/apps/pwa/out/autopilot/index.txt +22 -22
  187. package/apps/pwa/out/board/index.html +1 -1
  188. package/apps/pwa/out/board/index.txt +22 -22
  189. package/apps/pwa/out/botlab/index.html +1 -1
  190. package/apps/pwa/out/botlab/index.txt +21 -21
  191. package/apps/pwa/out/bots/index.html +1 -1
  192. package/apps/pwa/out/bots/index.txt +21 -21
  193. package/apps/pwa/out/ceo/index.html +1 -1
  194. package/apps/pwa/out/ceo/index.txt +22 -22
  195. package/apps/pwa/out/chat/index.html +1 -1
  196. package/apps/pwa/out/chat/index.txt +21 -21
  197. package/apps/pwa/out/consult/index.html +1 -1
  198. package/apps/pwa/out/consult/index.txt +22 -22
  199. package/apps/pwa/out/control/index.html +1 -1
  200. package/apps/pwa/out/control/index.txt +22 -22
  201. package/apps/pwa/out/decisions/index.html +1 -1
  202. package/apps/pwa/out/decisions/index.txt +21 -21
  203. package/apps/pwa/out/design-check/index.html +1 -1
  204. package/apps/pwa/out/design-check/index.txt +22 -22
  205. package/apps/pwa/out/editor/index.html +1 -1
  206. package/apps/pwa/out/editor/index.txt +22 -22
  207. package/apps/pwa/out/exec/index.html +1 -1
  208. package/apps/pwa/out/exec/index.txt +22 -22
  209. package/apps/pwa/out/field/index.html +1 -1
  210. package/apps/pwa/out/field/index.txt +22 -22
  211. package/apps/pwa/out/healthz +1 -1
  212. package/apps/pwa/out/index.html +1 -1
  213. package/apps/pwa/out/index.txt +21 -21
  214. package/apps/pwa/out/inside/index.html +1 -1
  215. package/apps/pwa/out/inside/index.txt +21 -21
  216. package/apps/pwa/out/intake/index.html +1 -1
  217. package/apps/pwa/out/intake/index.txt +22 -22
  218. package/apps/pwa/out/live/index.html +1 -1
  219. package/apps/pwa/out/live/index.txt +22 -22
  220. package/apps/pwa/out/live-run/index.html +1 -1
  221. package/apps/pwa/out/live-run/index.txt +22 -22
  222. package/apps/pwa/out/loops/index.html +1 -1
  223. package/apps/pwa/out/loops/index.txt +21 -21
  224. package/apps/pwa/out/market/index.html +1 -1
  225. package/apps/pwa/out/market/index.txt +21 -21
  226. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  227. package/apps/pwa/out/missions/placeholder/index.txt +21 -21
  228. package/apps/pwa/out/morning/index.html +1 -1
  229. package/apps/pwa/out/morning/index.txt +22 -22
  230. package/apps/pwa/out/observatory/index.html +1 -1
  231. package/apps/pwa/out/observatory/index.txt +22 -22
  232. package/apps/pwa/out/ops/checklist/index.html +1 -1
  233. package/apps/pwa/out/ops/checklist/index.txt +21 -21
  234. package/apps/pwa/out/ops/release/index.html +1 -1
  235. package/apps/pwa/out/ops/release/index.txt +21 -21
  236. package/apps/pwa/out/ops/seats/index.html +1 -1
  237. package/apps/pwa/out/ops/seats/index.txt +21 -21
  238. package/apps/pwa/out/outputs/index.html +1 -1
  239. package/apps/pwa/out/outputs/index.txt +21 -21
  240. package/apps/pwa/out/reflection/index.html +1 -1
  241. package/apps/pwa/out/reflection/index.txt +22 -22
  242. package/apps/pwa/out/scheduler/index.html +1 -1
  243. package/apps/pwa/out/scheduler/index.txt +22 -22
  244. package/apps/pwa/out/sessions/index.html +1 -1
  245. package/apps/pwa/out/sessions/index.txt +21 -21
  246. package/apps/pwa/out/settings/devices/index.html +1 -1
  247. package/apps/pwa/out/settings/devices/index.txt +22 -22
  248. package/apps/pwa/out/settings/index.html +1 -1
  249. package/apps/pwa/out/settings/index.txt +22 -22
  250. package/apps/pwa/out/setup/done/index.html +1 -1
  251. package/apps/pwa/out/setup/done/index.txt +22 -22
  252. package/apps/pwa/out/setup/index.html +1 -1
  253. package/apps/pwa/out/setup/index.txt +22 -22
  254. package/apps/pwa/out/share/index.html +1 -1
  255. package/apps/pwa/out/share/index.txt +22 -22
  256. package/apps/pwa/out/showroom/index.html +1 -1
  257. package/apps/pwa/out/showroom/index.txt +21 -21
  258. package/apps/pwa/out/tasks/index.html +1 -1
  259. package/apps/pwa/out/tasks/index.txt +22 -22
  260. package/apps/pwa/out/term/index.html +1 -1
  261. package/apps/pwa/out/term/index.txt +22 -22
  262. package/apps/pwa/out/today/index.html +1 -1
  263. package/apps/pwa/out/today/index.txt +22 -22
  264. package/apps/pwa/out/trace/index.html +1 -1
  265. package/apps/pwa/out/trace/index.txt +22 -22
  266. package/apps/pwa/out/vault/index.html +1 -1
  267. package/apps/pwa/out/vault/index.txt +22 -22
  268. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  269. package/apps/pwa/out/workflows/chat-ui/index.txt +22 -22
  270. package/apps/pwa/out/workflows/index.html +1 -1
  271. package/apps/pwa/out/workflows/index.txt +22 -22
  272. package/apps/pwa/out/workspace/index.html +1 -1
  273. package/apps/pwa/out/workspace/index.txt +22 -22
  274. package/apps/pwa/out/worktrees/index.html +1 -1
  275. package/apps/pwa/out/worktrees/index.txt +22 -22
  276. package/graphs/release/release-loop.yaml +5 -5
  277. package/graphs/steward/recipes.yaml +4 -0
  278. package/graphs/steward/steward.yaml +10 -1
  279. package/package.json +1 -1
  280. package/scripts/bench-report.ts +46 -1
  281. package/scripts/ci-typecheck-changed.ts +88 -7
  282. package/scripts/coord-msg-bridge.ts +209 -0
  283. package/scripts/coord-post.sh +40 -7
  284. package/scripts/coord-requests-bridge.ts +10 -5
  285. package/scripts/expose-rubric-suggest.ts +1 -1
  286. package/scripts/measure-tsc-affected-roots.ts +10 -1
  287. package/scripts/release-loop/auto-approve-node.ts +6 -0
  288. package/scripts/release-loop/export-check-node.ts +8 -5
  289. package/scripts/release-loop/gate-closure.ts +286 -0
  290. package/scripts/release-loop/gate-node.ts +73 -13
  291. package/scripts/release-loop/gate-partial.ts +34 -6
  292. package/scripts/release-loop/node-verdict.ts +7 -2
  293. package/scripts/release-loop/ops-upgrade-node.ts +63 -42
  294. package/scripts/release-loop/publish-node.ts +6 -0
  295. package/scripts/release-loop/resume-release.ts +37 -10
  296. package/scripts/release-loop/resume.ts +69 -4
  297. package/scripts/tsc-baseline-cache.ts +28 -3
  298. package/scripts/usage-rollup.ts +27 -13
  299. package/scripts/ux-sim.ts +30 -1
  300. package/skills/youtube-master/scripts/main.ts +4 -1
  301. package/skills/youtube-master/src/obsidian.ts +9 -0
  302. package/src/agent/task-notification.ts +30 -1
  303. package/src/agent-substrate/acp-implementer.ts +14 -7
  304. package/src/agent-substrate/pr-reviewer.ts +30 -10
  305. package/src/agent-substrate/review-observation.ts +9 -2
  306. package/src/agent-substrate/self-review-cli.ts +154 -16
  307. package/src/boot/daemon-tools/self-implement.ts +72 -4
  308. package/src/budget/cost-tier-advisor.ts +91 -0
  309. package/src/budget/llm-cost.ts +5 -1
  310. package/src/budget/shadow-arms.ts +77 -0
  311. package/src/budget/types.ts +5 -3
  312. package/src/budget/unified-usage.ts +172 -8
  313. package/src/cli/control-cli.ts +29 -0
  314. package/src/cli/doctor-cli.ts +106 -3
  315. package/src/cli/friendly-errors.ts +113 -0
  316. package/src/cli/intake-cli.ts +3 -1
  317. package/src/cli/memory-cli.ts +182 -0
  318. package/src/cli/model-watch-cli.ts +4 -1
  319. package/src/cli/msg-cli.ts +15 -5
  320. package/src/cli/pr-cli.ts +53 -0
  321. package/src/cli/pr-land-overlap-evidence.ts +18 -10
  322. package/src/cli/pr-land-pod-shadow.ts +54 -0
  323. package/src/cli/release-cli.ts +41 -12
  324. package/src/cli/release-run-if-ready.ts +11 -0
  325. package/src/cli/resource-cli.ts +48 -0
  326. package/src/cli/retro-cli.ts +12 -3
  327. package/src/cli/seat-cli.ts +121 -0
  328. package/src/cli/seat-requests-cli.ts +25 -0
  329. package/src/cli/self-utterances-cli.ts +140 -0
  330. package/src/cli/tasks-cli.ts +168 -14
  331. package/src/cli/usage-cli.ts +3 -1
  332. package/src/compact/verify-probe.ts +23 -3
  333. package/src/context-card/cell.ts +40 -0
  334. package/src/context-card/index.ts +50 -0
  335. package/src/control/control-status.ts +30 -1
  336. package/src/dashboard/boot-timing.ts +35 -0
  337. package/src/dashboard/index.ts +86 -24
  338. package/src/dashboard/input/chat-main-plain-turn-runtime.ts +26 -0
  339. package/src/dashboard/slash-runtime/dashboard-handlers.ts +10 -138
  340. package/src/dashboard/slash-runtime/shell-slash.ts +145 -0
  341. package/src/debug/log-diet.ts +16 -4
  342. package/src/debug/log.ts +1 -1
  343. package/src/domains/morning-essential.ts +18 -3
  344. package/src/domains/release-tool.ts +29 -8
  345. package/src/domains/surface-events.ts +16 -0
  346. package/src/elanous-config-dir.ts +2 -2
  347. package/src/execution-loop/launch-gate.ts +158 -2
  348. package/src/fleet/host-doctor.ts +446 -0
  349. package/src/goals/judge.ts +20 -6
  350. package/src/graph-runner/runner.ts +12 -6
  351. package/src/graph-wizard/archetypes.ts +14 -8
  352. package/src/graph-wizard/generate.ts +77 -1
  353. package/src/grok.ts +13 -7
  354. package/src/harness/harness-cli-command.ts +102 -51
  355. package/src/harness/harness-stop.ts +93 -19
  356. package/src/index.ts +52 -179
  357. package/src/instance/current.ts +2 -6
  358. package/src/instance/resolve.ts +5 -6
  359. package/src/intake-plane/collect-github.ts +7 -2
  360. package/src/intake-plane/lens.ts +46 -4
  361. package/src/intake-plane/requirement-funnel.ts +53 -1
  362. package/src/intelligence-map/catalog-feed.ts +119 -0
  363. package/src/intelligence-map/model-watch-intake.ts +40 -0
  364. package/src/intelligence-map/model-watch-mission.ts +14 -1
  365. package/src/llm/open-weight-discipline.ts +21 -0
  366. package/src/llm/openai-sampling-fields.ts +89 -0
  367. package/src/llm/runtime-model-family.ts +61 -0
  368. package/src/llm/zai-coding-plan.ts +27 -1
  369. package/src/llm.ts +17 -97
  370. package/src/machines/machine-ledger.ts +31 -3
  371. package/src/maturity/cli-maturity.ts +13 -3
  372. package/src/maturity/feature-maturity.ts +1 -1
  373. package/src/msg/msg-store.ts +69 -7
  374. package/src/nexus/api/http-server.ts +22 -0
  375. package/src/oauth/codex-account-rotation.ts +4 -1
  376. package/src/oauth/codex-account-store.ts +20 -7
  377. package/src/oauth/codex-quota-policy.ts +33 -4
  378. package/src/ops/overview-collect.ts +3 -2
  379. package/src/ops/overview-owner.ts +29 -0
  380. package/src/plugin-hooks/shell-hook.ts +17 -2
  381. package/src/plugin-missions/evaluator-runner.ts +18 -2
  382. package/src/plugins/install/plugin-install.ts +11 -1
  383. package/src/preview/terminal.ts +15 -5
  384. package/src/project/project-store.ts +20 -0
  385. package/src/prompt-enhance/enhance.ts +11 -0
  386. package/src/release-loop/auto-start.ts +7 -5
  387. package/src/release-loop/checklist.ts +52 -5
  388. package/src/release-loop/feature-store.ts +10 -9
  389. package/src/release-loop/gate-shards.ts +4 -0
  390. package/src/release-loop/light-rc.ts +84 -13
  391. package/src/release-loop/merged-pr-checklist.ts +35 -5
  392. package/src/release-loop/rehearsal.ts +1 -1
  393. package/src/seat-loop/duty-ledger.ts +64 -0
  394. package/src/seat-loop/seat-loop.ts +5 -1
  395. package/src/self-dev/decompose.ts +37 -3
  396. package/src/self-dev/dev-pipeline.ts +32 -7
  397. package/src/self-dev/draft-residue.ts +16 -6
  398. package/src/self-dev/draft-sweep.ts +75 -18
  399. package/src/self-dev/fabric-decompose-adapter.ts +9 -2
  400. package/src/self-dev/orchestrate.ts +6 -2
  401. package/src/self-dev/run-supervisor.ts +72 -8
  402. package/src/self-implement/gate-cli.ts +29 -10
  403. package/src/self-implement/gate-remote.ts +4 -1
  404. package/src/self-implement/goal-author.ts +15 -29
  405. package/src/self-implement/goal-command-execution.ts +26 -0
  406. package/src/self-implement/goal-new-paths.ts +42 -0
  407. package/src/self-implement/host-regate.ts +124 -30
  408. package/src/self-implement/importer-test-index.ts +3 -1
  409. package/src/self-implement/l8-merge-queue.ts +80 -2
  410. package/src/self-implement/merge-train.ts +19 -0
  411. package/src/self-implement/off-diff-evidence.ts +40 -1
  412. package/src/self-implement/orchestrator.ts +90 -20
  413. package/src/self-implement/premise-review.ts +159 -0
  414. package/src/self-implement/pwa-import-graph.ts +194 -7
  415. package/src/self-implement/regate-detail.ts +79 -0
  416. package/src/self-implement/review-deferred-to-host.ts +21 -0
  417. package/src/self-implement/rework-budget-judgment.ts +23 -3
  418. package/src/self-implement/running-runs.ts +2 -2
  419. package/src/self-implement/scope-adjacency.ts +23 -0
  420. package/src/self-implement/seams.ts +42 -7
  421. package/src/self-implement/self-implement-runtime.ts +126 -21
  422. package/src/session/index.ts +14 -4
  423. package/src/session-runtime/index.ts +55 -11
  424. package/src/skills/tools/agent.ts +16 -1
  425. package/src/skills/tools/persistent-grounding.ts +11 -1
  426. package/src/skills/tools/shell.ts +33 -1
  427. package/src/steward/rejudge-tick.ts +142 -0
  428. package/src/task-agent/board.ts +92 -3
  429. package/src/task-agent/card-evidence.ts +88 -1
  430. package/src/task-agent/cover.ts +85 -1
  431. package/src/task-agent/live-moves.ts +14 -6
  432. package/src/task-agent/parent-host.ts +27 -3
  433. package/src/task-agent/rejudge-on-head.ts +370 -29
  434. package/src/task-agent/review-result-capture.ts +67 -2
  435. package/src/task-agent/shadow.ts +148 -21
  436. package/src/task-agent/task-hand.ts +22 -3
  437. package/src/task-orchestrator/surfaces/pod-command-job.ts +14 -0
  438. package/src/task-orchestrator/surfaces/pod-host-acp-review.ts +122 -0
  439. package/src/task-orchestrator/surfaces/pod-manifest-test-normalize.ts +23 -0
  440. package/src/task-orchestrator/surfaces/pod-pool.ts +53 -0
  441. package/src/task-orchestrator/surfaces/self-implement-pod.ts +236 -28
  442. package/src/tool-runtime/tool-search-runtime.ts +25 -0
  443. package/src/tui.ts +20 -1
  444. package/src/user-config.ts +21 -63
  445. package/src/ux-sim/fault-cred-expiry.ts +100 -0
  446. package/src/ux-sim/fault-pod-death.ts +74 -0
  447. package/src/ux-sim/fault-pool-cap.ts +81 -0
  448. package/src/version/packed-revision.json +1 -1
  449. package/src/webclone/qa-table.ts +22 -0
  450. package/apps/pwa/out/_next/static/chunks/0a09e062-34f747a17d8d8c2e.js +0 -1
  451. package/apps/pwa/out/_next/static/chunks/1168.a0fb3d9db76c00bd.js +0 -77
  452. package/apps/pwa/out/_next/static/chunks/1325-dc3f3c21eb181cb4.js +0 -1
  453. package/apps/pwa/out/_next/static/chunks/1357.a843c41d2cd7ec31.js +0 -34
  454. package/apps/pwa/out/_next/static/chunks/1430.53f49882b17607c2.js +0 -24
  455. package/apps/pwa/out/_next/static/chunks/1459-be6509b3419d8a9f.js +0 -1
  456. package/apps/pwa/out/_next/static/chunks/153.0a4e3cd516930491.js +0 -1
  457. package/apps/pwa/out/_next/static/chunks/1572.7bc291352e241a45.js +0 -1
  458. package/apps/pwa/out/_next/static/chunks/1593-d07ad068c120dfb0.js +0 -1
  459. package/apps/pwa/out/_next/static/chunks/1608.b7c900baa56cab32.js +0 -1
  460. package/apps/pwa/out/_next/static/chunks/1615-4d8156febaac4b35.js +0 -1
  461. package/apps/pwa/out/_next/static/chunks/1646.e03f0fbc26bc72f6.js +0 -1
  462. package/apps/pwa/out/_next/static/chunks/1669-da843ed73aa301f5.js +0 -1
  463. package/apps/pwa/out/_next/static/chunks/176.13ba0659e3e96fd4.js +0 -1
  464. package/apps/pwa/out/_next/static/chunks/1990.9c60f495ef33c070.js +0 -36
  465. package/apps/pwa/out/_next/static/chunks/2042e469.f86158dd5c1e51a1.js +0 -122
  466. package/apps/pwa/out/_next/static/chunks/2543-28ec6aeb80a5e1e1.js +0 -1
  467. package/apps/pwa/out/_next/static/chunks/2561.43c99d6ee914ee6a.js +0 -62
  468. package/apps/pwa/out/_next/static/chunks/2638.b39ab2f674caa1a5.js +0 -1
  469. package/apps/pwa/out/_next/static/chunks/272-0eed0fb0aab716b6.js +0 -1
  470. package/apps/pwa/out/_next/static/chunks/2778.67e0c1d484189ccf.js +0 -1
  471. package/apps/pwa/out/_next/static/chunks/2841.10ff309f6a3168af.js +0 -1
  472. package/apps/pwa/out/_next/static/chunks/2886-9639f97d523d752a.js +0 -1
  473. package/apps/pwa/out/_next/static/chunks/2978.57fb87ce21cc5a85.js +0 -1
  474. package/apps/pwa/out/_next/static/chunks/3664.15f968c39d15bd28.js +0 -149
  475. package/apps/pwa/out/_next/static/chunks/3786-935eb3fcde90e496.js +0 -1
  476. package/apps/pwa/out/_next/static/chunks/3813.df4a01ae89c6f63f.js +0 -1
  477. package/apps/pwa/out/_next/static/chunks/3961-aaae04ed1d32622f.js +0 -1
  478. package/apps/pwa/out/_next/static/chunks/3992.f79c70480e8c4077.js +0 -309
  479. package/apps/pwa/out/_next/static/chunks/40-413e8641de9ed1e5.js +0 -1
  480. package/apps/pwa/out/_next/static/chunks/4054-521f11a503daed64.js +0 -1
  481. package/apps/pwa/out/_next/static/chunks/4315.e7356f34c7d8ec79.js +0 -1
  482. package/apps/pwa/out/_next/static/chunks/4489-bf629de6f04f7681.js +0 -1
  483. package/apps/pwa/out/_next/static/chunks/4540.557733cc88c6a82b.js +0 -1
  484. package/apps/pwa/out/_next/static/chunks/462.0275b4338c5b6337.js +0 -1
  485. package/apps/pwa/out/_next/static/chunks/4658-7ed9266098a787e4.js +0 -1
  486. package/apps/pwa/out/_next/static/chunks/4945-0f4046cfc3228ea3.js +0 -1
  487. package/apps/pwa/out/_next/static/chunks/5105-18b4165c5d3a86b0.js +0 -1
  488. package/apps/pwa/out/_next/static/chunks/5205-6992210fe31f45f4.js +0 -1
  489. package/apps/pwa/out/_next/static/chunks/5287-72898b126d722457.js +0 -1
  490. package/apps/pwa/out/_next/static/chunks/5313.1697309c532b9856.js +0 -2
  491. package/apps/pwa/out/_next/static/chunks/5474.991b90688c3cb321.js +0 -1
  492. package/apps/pwa/out/_next/static/chunks/5544-871146192d095594.js +0 -1
  493. package/apps/pwa/out/_next/static/chunks/5935.d5e8ca3e096772e8.js +0 -1
  494. package/apps/pwa/out/_next/static/chunks/6006.84e8b418a7a0db97.js +0 -1
  495. package/apps/pwa/out/_next/static/chunks/6013-1267ba7454d6764b.js +0 -1
  496. package/apps/pwa/out/_next/static/chunks/6038-1e0f7ee1086da4cf.js +0 -1
  497. package/apps/pwa/out/_next/static/chunks/617.709dd0019fe99796.js +0 -1
  498. package/apps/pwa/out/_next/static/chunks/6261.fb9bf94947094636.js +0 -74
  499. package/apps/pwa/out/_next/static/chunks/6411.1966866fae31ffa9.js +0 -1
  500. package/apps/pwa/out/_next/static/chunks/6481-b829d99aa8d158f5.js +0 -1
  501. package/apps/pwa/out/_next/static/chunks/6541.2b7daa043100d0fa.js +0 -1
  502. package/apps/pwa/out/_next/static/chunks/6597.2d7a6d77ab485b27.js +0 -64
  503. package/apps/pwa/out/_next/static/chunks/67.5dd2dc543c2fa3de.js +0 -1
  504. package/apps/pwa/out/_next/static/chunks/6777-312496b0d774719b.js +0 -1
  505. package/apps/pwa/out/_next/static/chunks/681.0116f7036cfb4e8d.js +0 -32
  506. package/apps/pwa/out/_next/static/chunks/6871.30b2bf23b3126e36.js +0 -24
  507. package/apps/pwa/out/_next/static/chunks/6882.737d366d54e29d83.js +0 -1
  508. package/apps/pwa/out/_next/static/chunks/7035.54c2c535164b1c9b.js +0 -1
  509. package/apps/pwa/out/_next/static/chunks/7086-8bfa7e8f796a03d9.js +0 -1
  510. package/apps/pwa/out/_next/static/chunks/7126.5e5599f251726b67.js +0 -93
  511. package/apps/pwa/out/_next/static/chunks/7203-47ff0740a293e284.js +0 -1
  512. package/apps/pwa/out/_next/static/chunks/7268.017f49dafb5f0ff3.js +0 -1
  513. package/apps/pwa/out/_next/static/chunks/7355.5d65a87e9567ae08.js +0 -1
  514. package/apps/pwa/out/_next/static/chunks/7392.4018c2a62177f296.js +0 -1
  515. package/apps/pwa/out/_next/static/chunks/7471.3a3d1be50559cfb8.js +0 -148
  516. package/apps/pwa/out/_next/static/chunks/7500.73489a345cef2201.js +0 -226
  517. package/apps/pwa/out/_next/static/chunks/7565.c2f72a15c1ed0396.js +0 -27
  518. package/apps/pwa/out/_next/static/chunks/7651.6d1c984d3d8587a4.js +0 -1
  519. package/apps/pwa/out/_next/static/chunks/7713.7ab863ed59b2d661.js +0 -1
  520. package/apps/pwa/out/_next/static/chunks/7793.d7cd2026767ddd54.js +0 -115
  521. package/apps/pwa/out/_next/static/chunks/7837.c7c267e5dceadb11.js +0 -1
  522. package/apps/pwa/out/_next/static/chunks/7891.09266382daf70d1c.js +0 -1
  523. package/apps/pwa/out/_next/static/chunks/7990-cbf6a01bcbdcb7e6.js +0 -1
  524. package/apps/pwa/out/_next/static/chunks/8119-819c549e0c197786.js +0 -1
  525. package/apps/pwa/out/_next/static/chunks/8186-74ea19a3700d04a8.js +0 -1
  526. package/apps/pwa/out/_next/static/chunks/8267-e7b3262b735ae106.js +0 -1
  527. package/apps/pwa/out/_next/static/chunks/8386.86518e55b75f7cf5.js +0 -8
  528. package/apps/pwa/out/_next/static/chunks/8437.ba6eeeb29590042f.js +0 -23
  529. package/apps/pwa/out/_next/static/chunks/8469-1500be57e582296f.js +0 -1
  530. package/apps/pwa/out/_next/static/chunks/8483-7164cecdaf178ca6.js +0 -1
  531. package/apps/pwa/out/_next/static/chunks/8722-4c940f02c496ad36.js +0 -1
  532. package/apps/pwa/out/_next/static/chunks/887-41d0dcf5af48c628.js +0 -1
  533. package/apps/pwa/out/_next/static/chunks/9039.da86361496797522.js +0 -90
  534. package/apps/pwa/out/_next/static/chunks/905.d5745a25884754d4.js +0 -94
  535. package/apps/pwa/out/_next/static/chunks/9089-d909f3d4478b0628.js +0 -1
  536. package/apps/pwa/out/_next/static/chunks/9096.dc5c7a267f83790c.js +0 -41
  537. package/apps/pwa/out/_next/static/chunks/93.a567257b6bdb7fe4.js +0 -1
  538. package/apps/pwa/out/_next/static/chunks/9320.419acb9665b46597.js +0 -287
  539. package/apps/pwa/out/_next/static/chunks/9356.b8ceda6634612ff8.js +0 -79
  540. package/apps/pwa/out/_next/static/chunks/94.e9e1043b35cd3eed.js +0 -1
  541. package/apps/pwa/out/_next/static/chunks/9400-7498ea90b2e6ee8f.js +0 -1
  542. package/apps/pwa/out/_next/static/chunks/9930-58644af9c813d6e1.js +0 -1
  543. package/apps/pwa/out/_next/static/chunks/9932.367cf4725fedd6e2.js +0 -1
  544. package/apps/pwa/out/_next/static/chunks/9935.1628b904cdc8ce0e.js +0 -104
  545. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-a2aa8709d193ee0d.js +0 -1
  546. package/apps/pwa/out/_next/static/chunks/app/approvals/page-3b9fc39362473ae7.js +0 -1
  547. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f2b62c19ca68fef8.js +0 -1
  548. package/apps/pwa/out/_next/static/chunks/app/board/page-d7602d489edf5f37.js +0 -1
  549. package/apps/pwa/out/_next/static/chunks/app/botlab/page-24282bf9f90031a5.js +0 -1
  550. package/apps/pwa/out/_next/static/chunks/app/bots/page-8b7c5ab6b5bc8d64.js +0 -1
  551. package/apps/pwa/out/_next/static/chunks/app/ceo/page-4eb84d454f8c3415.js +0 -1
  552. package/apps/pwa/out/_next/static/chunks/app/chat/page-b2e494bdad57fcb5.js +0 -1
  553. package/apps/pwa/out/_next/static/chunks/app/consult/page-c0ab229673a8b0eb.js +0 -1
  554. package/apps/pwa/out/_next/static/chunks/app/control/page-3e2b45f3c36dbac4.js +0 -1
  555. package/apps/pwa/out/_next/static/chunks/app/decisions/page-c22aa511b28743ad.js +0 -1
  556. package/apps/pwa/out/_next/static/chunks/app/editor/page-bf88c0f558d8ef54.js +0 -1
  557. package/apps/pwa/out/_next/static/chunks/app/exec/page-52fec523e5b5d3ad.js +0 -1
  558. package/apps/pwa/out/_next/static/chunks/app/field/page-67723dfdcde92b31.js +0 -1
  559. package/apps/pwa/out/_next/static/chunks/app/healthz/route-a2aa8709d193ee0d.js +0 -1
  560. package/apps/pwa/out/_next/static/chunks/app/inside/page-22725e2570f1126b.js +0 -1
  561. package/apps/pwa/out/_next/static/chunks/app/intake/page-1891335950d68b70.js +0 -1
  562. package/apps/pwa/out/_next/static/chunks/app/layout-3267af1ebdc73cf5.js +0 -1
  563. package/apps/pwa/out/_next/static/chunks/app/live/page-c314b75c11234998.js +0 -1
  564. package/apps/pwa/out/_next/static/chunks/app/live-run/page-9f9c85415f61782b.js +0 -1
  565. package/apps/pwa/out/_next/static/chunks/app/loops/page-c1d4276059085587.js +0 -1
  566. package/apps/pwa/out/_next/static/chunks/app/market/page-833aab587f26ad4c.js +0 -1
  567. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-8526c17ae38e6a50.js +0 -1
  568. package/apps/pwa/out/_next/static/chunks/app/morning/page-f998637a8402115c.js +0 -1
  569. package/apps/pwa/out/_next/static/chunks/app/not-found-b7bb53828b17b335.js +0 -1
  570. package/apps/pwa/out/_next/static/chunks/app/observatory/page-1b1850de0257e46d.js +0 -1
  571. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-6f23159fedb41f67.js +0 -1
  572. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-1d809a87139dd024.js +0 -1
  573. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-da9e570234d481fd.js +0 -1
  574. package/apps/pwa/out/_next/static/chunks/app/page-8ce3a38e210b810a.js +0 -1
  575. package/apps/pwa/out/_next/static/chunks/app/reflection/page-57ffeeb6019440fd.js +0 -1
  576. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-abbb417bf514630b.js +0 -1
  577. package/apps/pwa/out/_next/static/chunks/app/sessions/page-2c2b3f29cec1efa4.js +0 -1
  578. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-9369279f72fc7b51.js +0 -1
  579. package/apps/pwa/out/_next/static/chunks/app/settings/page-64861f14039499c3.js +0 -1
  580. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ddc4c93efd8ab94b.js +0 -1
  581. package/apps/pwa/out/_next/static/chunks/app/setup/layout-a2aa8709d193ee0d.js +0 -1
  582. package/apps/pwa/out/_next/static/chunks/app/setup/page-901a1391b81053bc.js +0 -1
  583. package/apps/pwa/out/_next/static/chunks/app/share/page-68d9bbaac9841a58.js +0 -1
  584. package/apps/pwa/out/_next/static/chunks/app/showroom/page-b5c0c996f329371e.js +0 -1
  585. package/apps/pwa/out/_next/static/chunks/app/tasks/page-89881ccbcf728978.js +0 -1
  586. package/apps/pwa/out/_next/static/chunks/app/term/page-0e87a803b3d7165e.js +0 -1
  587. package/apps/pwa/out/_next/static/chunks/app/today/page-58d4e5cb30ef4871.js +0 -1
  588. package/apps/pwa/out/_next/static/chunks/app/trace/page-02ce4c3b5f39e4d2.js +0 -1
  589. package/apps/pwa/out/_next/static/chunks/app/vault/page-e620d1bb8eadcec2.js +0 -1
  590. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-acf868c64d77f950.js +0 -1
  591. package/apps/pwa/out/_next/static/chunks/app/workflows/page-54fa605fa6dba457.js +0 -1
  592. package/apps/pwa/out/_next/static/chunks/app/workspace/page-bc79f0833533fa84.js +0 -1
  593. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-d5c4398eea03d8f3.js +0 -1
  594. package/apps/pwa/out/_next/static/chunks/cd39fa05.fac4545f42a3ef70.js +0 -1
  595. package/apps/pwa/out/_next/static/chunks/framework-b2763b10dc6b3836.js +0 -1
  596. package/apps/pwa/out/_next/static/chunks/main-app-27893e93b0ec193d.js +0 -1
  597. package/apps/pwa/out/_next/static/chunks/main-f280047194e1daf8.js +0 -1
  598. package/apps/pwa/out/_next/static/chunks/pages/_app-e90eff2d0b70564c.js +0 -1
  599. package/apps/pwa/out/_next/static/chunks/pages/_error-70f2d654b3435d34.js +0 -1
  600. package/apps/pwa/out/_next/static/chunks/webpack-4794f053bd5e4230.js +0 -1
  601. /package/apps/pwa/out/_next/static/{Q-7iofoxOEv1WX18S35of → Ev2jivDMTSoEc-5rIXdcy}/_ssgManifest.js +0 -0
package/src/index.ts CHANGED
@@ -9,6 +9,7 @@ import { LOGS_SINCE_OPTION, registerLogsCommands } from './cli/logs-cli.js';
9
9
  import { registerDocsCommands } from './cli/docs-cli.js';
10
10
  import { registerBenchCommands } from './cli/bench-cli.js';
11
11
  import { registerRetroCommands } from './cli/retro-cli.js';
12
+ import { registerMemoryCommands } from './cli/memory-cli.js';
12
13
  import { registerA2ACommands } from './cli/a2a-cli.js';
13
14
  import { registerPluginCommands } from './cli/plugin-cli.js';
14
15
  import { registerMakeCommand } from './cli/make-cli.js';
@@ -37,6 +38,7 @@ import { DEV_PIPELINE_SINK_SURFACE } from './self-implement/self-cli-sink-surfac
37
38
  import { registerPrivateLedgerCommands } from './cli/private-ledger-commands.js';
38
39
  import { registerKnowCommand } from './cli/know-cli.js';
39
40
  import { registerSeatRequestsCommands } from './cli/seat-requests-cli.js';
41
+ import { registerSeatBootCommands } from './cli/seat-cli.js';
40
42
  import { applyTestStateDirFlagFromArgv } from './cli/test-state-dir-flag.js';
41
43
  import { applyTestFlagFromArgv, observeTestFlagOwnership, uncoveredTestFlagPaths, staleTestFlagPaths } from './cli/test-flag.js';
42
44
  import { registerPtyTakeoverCommands } from './cli/pty-takeover-cli.js';
@@ -93,6 +95,7 @@ import { registerStartCommand } from './cli/start-cli.js';
93
95
  import { registerGroundingSourcesCli } from './grounding/sources-cli.js';
94
96
  import { registerGraphCommands } from './graph-runner/graph-cli.js';
95
97
  import { registerLoopCommands } from './loops/loop-cli.js';
98
+ import { registerResourceCommands } from './cli/resource-cli.js';
96
99
  import { registerHqMovePlanCommand } from './hq/hq.js';
97
100
  import { registerCardCommand } from './task-cards/card-cli.js';
98
101
  import { registerLaunchHeadCommands } from './launch-head/launch-head-cli.js';
@@ -121,6 +124,8 @@ import { runGitCommand } from './git-fs/runner.js';
121
124
  import { debug, redactSecretText, redactSecrets } from './debug/log.js';
122
125
  import { installHarnessCliCommand, type HarnessAskSayChildLlmOptions, type HarnessAskSayOptions, type HarnessPlanOptions } from './harness/harness-cli-command.js';
123
126
  import { CliUserError, formatCliUserError, isCliUserError } from './cli/cli-user-error.js';
127
+ import { classifyFriendlyError, formatFriendlyError } from './cli/friendly-errors.js';
128
+ import { detectLocale } from './expression/locale.js';
124
129
  import { dispatchSolveMission } from './skills/tools/solve-mission.js';
125
130
  import { performBrowserAction, type BrowserActionDeps, type BrowserActionResult } from './harness/browser-act.js';
126
131
  import { decideTypeAction, type TypeActionDecision, type TypeTarget } from './harness/browser-act-type.js';
@@ -201,11 +206,6 @@ import {
201
206
  } from './cli/mission-config.js';
202
207
  import { DEFAULT_THEME_TOKENS, resolveThemeTokens } from './theme/tokens.js';
203
208
  import { conatusPath } from './domains/conatus-data-dir.js';
204
- import {
205
- saveMemory, loadMemory, listMemories, deleteMemory, searchMemories,
206
- readIndex, memoryRoot, memoryIndexPath,
207
- type MemoryType,
208
- } from './memory.js';
209
209
 
210
210
  /** 원본 전용 봇랩 도구 — 공개본엔 없다(release/public-export.yaml · scripts/botlab/**). */
211
211
  const BOTLAB_STATE_PATHS_MODULE: string = '../scripts/botlab/botlab-state-paths.js';
@@ -1119,6 +1119,7 @@ hqCmd.command('fence').description('이 호스트가 임대를 쥐었을 때만
1119
1119
  process.exitCode = hqFenceRun(opts.role as 'cron', command);
1120
1120
  });
1121
1121
  const seatCmd = program.command('seat').description('분배된 자리의 하루 루프와 보고');
1122
+ registerSeatBootCommands(seatCmd);
1122
1123
  registerSeatRequestsCommands(seatCmd);
1123
1124
  seatCmd.command('asks').description('최근 CTO 되묻기 왕복과 10분 판정')
1124
1125
  .option('--since <duration>', '조회 창 (예: 24h)', '24h')
@@ -1268,6 +1269,7 @@ registerStartCommand(program);
1268
1269
  registerGroundingSourcesCli(program);
1269
1270
  registerGraphCommands(program);
1270
1271
  registerLoopCommands(program);
1272
+ registerResourceCommands(program);
1271
1273
  // RFC 실행·착지 루프 §3 — 태스크 컨텍스트 카드(`elanous card list|show` · ⛔ `task`/`tasks` 는 TOX 몫).
1272
1274
  registerCardCommand(program);
1273
1275
  registerLaunchHeadCommands(program);
@@ -1935,174 +1937,7 @@ registerAutopilotCommands(program);
1935
1937
  registerRetroCommands(program);
1936
1938
 
1937
1939
  // ── memory ──
1938
- const memCmd = program.command('memory').description('Persistent memories injected into every chat turn (user / feedback / project / reference)');
1939
-
1940
- memCmd
1941
- .command('list [type]')
1942
- .description('List memories (optionally filtered by type)')
1943
- .option('-n, --limit <n>', 'Max entries to show', '30')
1944
- .action((type?: string, opts?: { limit: string }) => {
1945
- const t = type as MemoryType | undefined;
1946
- const entries = listMemories({ type: t, limit: parseInt(opts?.limit ?? '30', 10) });
1947
- if (entries.length === 0) {
1948
- ui.info('No memories yet. Add one with `elanous memory add <type> "<name>" "<description>"`.');
1949
- return;
1950
- }
1951
- ui.header(`memories (${entries.length})`);
1952
- for (const e of entries) {
1953
- console.log(` ${e.id.slice(0, 8)} [${e.type.padEnd(9)}] ${e.name}`);
1954
- if (e.description) console.log(` ${e.description.slice(0, 100)}`);
1955
- }
1956
- });
1957
-
1958
- memCmd
1959
- .command('add <type> <name> [description...]')
1960
- .description('Create a memory (type: user|feedback|project|reference). Body piped via stdin if available.')
1961
- .action(async (type: string, name: string, descParts: string[]) => {
1962
- if (!['user', 'feedback', 'project', 'reference'].includes(type)) {
1963
- ui.error(`invalid type "${type}". Use: user | feedback | project | reference`);
1964
- process.exit(1);
1965
- }
1966
- const description = (descParts || []).join(' ');
1967
- // Read body from stdin if piped; otherwise use description as body too.
1968
- let body = description;
1969
- const pipedBody = await readPipedStdin(); // ★ OBS-T3 — 비-TTY 는 파이프를 뜻하지 않는다(소켓이면 EOF 가 안 온다)
1970
- if (pipedBody) body = pipedBody;
1971
- const e = saveMemory({ type: type as MemoryType, name, description, body });
1972
- ui.info(`saved ${e.id.slice(0, 8)} [${e.type}] "${e.name}"`);
1973
- });
1974
-
1975
- // 3번째 recall 레버(2026-07-19) — pin(항상주입) / priority(매칭 시 순위 부스트).
1976
- memCmd
1977
- .command('pin <idPrefix>')
1978
- .description('Pin a memory so it is ALWAYS injected (bypass keyword gate). Optionally set priority.')
1979
- .option('-p, --priority <n>', 'priority boost (higher = ranked/kept first)', '5')
1980
- .action((prefix: string, opts: { priority: string }) => {
1981
- const e = loadMemory(prefix);
1982
- if (!e) { ui.error(`no memory matching "${prefix}"`); process.exit(1); }
1983
- saveMemory({ type: e.type, name: e.name, description: e.description, body: e.body, id: e.id, pinned: true, priority: parseInt(opts.priority, 10) || 0 });
1984
- ui.info(`📌 pinned ${e.id.slice(0, 8)} "${e.name}" (priority ${opts.priority})`);
1985
- });
1986
-
1987
- memCmd
1988
- .command('unpin <idPrefix>')
1989
- .description('Un-pin a memory (back to keyword-gated recall).')
1990
- .action((prefix: string) => {
1991
- const e = loadMemory(prefix);
1992
- if (!e) { ui.error(`no memory matching "${prefix}"`); process.exit(1); }
1993
- saveMemory({ type: e.type, name: e.name, description: e.description, body: e.body, id: e.id, pinned: false, priority: e.priority });
1994
- ui.info(`unpinned ${e.id.slice(0, 8)} "${e.name}"`);
1995
- });
1996
-
1997
- memCmd
1998
- .command('priority <idPrefix> <n>')
1999
- .description('Set a memory\'s injection priority boost (0 = default). Added to match score.')
2000
- .action((prefix: string, n: string) => {
2001
- const e = loadMemory(prefix);
2002
- if (!e) { ui.error(`no memory matching "${prefix}"`); process.exit(1); }
2003
- saveMemory({ type: e.type, name: e.name, description: e.description, body: e.body, id: e.id, priority: parseInt(n, 10) || 0, pinned: e.pinned });
2004
- ui.info(`priority ${e.id.slice(0, 8)} "${e.name}" → ${parseInt(n, 10) || 0}`);
2005
- });
2006
-
2007
- // 통합 관리 뷰(2026-07-19) — 2 시스템(큐레이션 파일메모리 + 에피소드 self-log)을 한 화면에.
2008
- memCmd
2009
- .command('status')
2010
- .description('Unified memory overview — ① curated file-memory + ② self-log (surface_events)')
2011
- .action(async () => {
2012
- const { memoryRoot } = await import('./memory.js');
2013
- const mems = listMemories();
2014
- const byType: Record<string, number> = {};
2015
- let pinned = 0;
2016
- for (const e of mems) { byType[e.type] = (byType[e.type] ?? 0) + 1; if (e.pinned) pinned += 1; }
2017
- ui.header('memory (unified)');
2018
- console.log(`① 큐레이션 파일메모리: ${mems.length}건 [${Object.entries(byType).map(([k, v]) => `${k}:${v}`).join(' ') || '-'}] 📌pinned ${pinned}`);
2019
- console.log(` ${memoryRoot()} (LLM-judge/luna recall · MEMORY.md 항상주입)`);
2020
- try {
2021
- const { surfaceEventsDbPath, openSurfaceEventsDb } = await import('./domains/surface-events.js');
2022
- const path = surfaceEventsDbPath();
2023
- // 항상 open — legacy conatus/ → memory/ 자가치유 마이그레이션이 여기서 실행된다(존재 체크 먼저
2024
- // 하면 신 경로 부재로 마이그레이션이 스킵됨). 없으면 빈 store 생성(무해).
2025
- const db = openSurfaceEventsDb(path);
2026
- const n = (db.prepare('SELECT count(*) c FROM events').get() as { c: number }).c;
2027
- const recent = (db.prepare('SELECT ts FROM events ORDER BY ts DESC LIMIT 1').get() as { ts: string } | undefined)?.ts;
2028
- db.close();
2029
- console.log(`② 에피소드 self-log: ${n.toLocaleString()} events (최근 ${recent?.slice(0, 16) ?? '-'})`);
2030
- console.log(` ${path} (FTS5 bm25+recency+myelin rerank · ambient 회상)`);
2031
- } catch (e) { console.log(`② self-log 조회 실패: ${(e as Error).message}`); }
2032
- try {
2033
- const { openKnowledgeDb, knowledgeDbPath } = await import('./domains/knowledge.js');
2034
- const kdb = openKnowledgeDb(); // 기본 경로 → legacy conatus/ 자가치유 이전
2035
- const kn = (kdb.prepare('SELECT count(*) c FROM docs').get() as { c: number }).c;
2036
- const dom = (kdb.prepare("SELECT domain, count(*) c FROM docs GROUP BY domain ORDER BY c DESC LIMIT 3").all() as Array<{ domain: string | null; c: number }>);
2037
- kdb.close();
2038
- console.log(`③ 시맨틱 knowledge: ${kn.toLocaleString()} docs [${dom.map(d => `${d.domain ?? 'null'}:${d.c}`).join(' ')}]`);
2039
- console.log(` ${knowledgeDbPath()} (임베딩 벡터+BM25 하이브리드 · 의미 회상)`);
2040
- } catch (e) { console.log(`③ knowledge 조회 실패: ${(e as Error).message}`); }
2041
- });
2042
-
2043
- memCmd
2044
- .command('show <idPrefix>')
2045
- .description('Print full memory body')
2046
- .action((prefix: string) => {
2047
- const entries = listMemories();
2048
- const hit = entries.find(e => e.id.startsWith(prefix));
2049
- if (!hit) { ui.error(`no memory matching "${prefix}"`); process.exit(1); }
2050
- const full = loadMemory(hit.id)!;
2051
- ui.header(`${full.type}: ${full.name}`);
2052
- console.log(` id ${full.id}`);
2053
- console.log(` created ${full.createdAt}`);
2054
- console.log(` updated ${full.updatedAt}`);
2055
- console.log(` description ${full.description}`);
2056
- console.log('');
2057
- console.log(full.body);
2058
- });
2059
-
2060
- memCmd
2061
- .command('search <query...>')
2062
- .description('Keyword search across all memories')
2063
- .option('--type <t>', 'Filter by type')
2064
- .option('-n, --limit <n>', 'Max results', '10')
2065
- .action((parts: string[], opts) => {
2066
- const hits = searchMemories(parts.join(' '), {
2067
- type: opts.type as MemoryType | undefined,
2068
- limit: parseInt(opts.limit, 10),
2069
- });
2070
- if (hits.length === 0) { ui.info('No matches.'); return; }
2071
- ui.header(`matches (${hits.length})`);
2072
- for (const h of hits) {
2073
- console.log(` ${h.entry.id.slice(0, 8)} score ${h.score} [${h.entry.type}] ${h.entry.name}`);
2074
- if (h.entry.description) console.log(` ${h.entry.description.slice(0, 100)}`);
2075
- }
2076
- });
2077
-
2078
- memCmd
2079
- .command('delete <idPrefix>')
2080
- .description('Delete a memory')
2081
- .action((prefix: string) => {
2082
- const entries = listMemories();
2083
- const hit = entries.find(e => e.id.startsWith(prefix));
2084
- if (!hit) { ui.error(`no memory matching "${prefix}"`); process.exit(1); }
2085
- deleteMemory(hit.id);
2086
- ui.info(`deleted ${hit.id.slice(0, 8)}`);
2087
- });
2088
-
2089
- memCmd
2090
- .command('index')
2091
- .description('Print MEMORY.md index verbatim')
2092
- .action(() => {
2093
- const idx = readIndex();
2094
- if (!idx) { ui.info('empty (no memories yet)'); return; }
2095
- console.log(idx);
2096
- });
2097
-
2098
- memCmd
2099
- .command('where')
2100
- .description('Show the memory storage path')
2101
- .action(() => {
2102
- console.log(`memory dir ${memoryRoot()}`);
2103
- console.log(`index file ${memoryIndexPath()}`);
2104
- });
2105
-
1940
+ registerMemoryCommands(program);
2106
1941
  // ── self (self-awareness memory — 외부 도구가 elanous 구현 이력을 주입/회상) ──
2107
1942
  // ── decide (Jev · System One — ⛔ 텍스트를 «생성하지 않는다». 확률이 붙은 판정만 받는다) ──
2108
1943
  program
@@ -3519,6 +3354,7 @@ coordCmd.command('events')
3519
3354
  });
3520
3355
 
3521
3356
  const selfCmd = program.command('self').description('Self-awareness memory — 외부 도구(Claude Code/Codex)가 구현/변경 이력을 elanous 기억에 주입·회상');
3357
+ { const { registerSelfUtterancesCommand } = await import('./cli/self-utterances-cli.js'); registerSelfUtterancesCommand(selfCmd); }
3522
3358
 
3523
3359
  // M12 Claude Code 의존도 계기판 — `elanous self dependence [--since] [--until] [--json]`(읽기만).
3524
3360
  { const { registerDependenceCommand } = await import('./cli/dependence-gauge.js'); registerDependenceCommand(selfCmd); }
@@ -5865,6 +5701,8 @@ selfCmd
5865
5701
  return (prompt: string) =>
5866
5702
  streamLLM([{ role: 'user', content: prompt }], () => {}, {
5867
5703
  model,
5704
+ // ⛔ 어댑터 기본 2048 은 리뷰 응답을 자른다(VERDICT/MUST-FIX 줄이 잘리면 reviewed=false 로 접힌다).
5705
+ maxTokens: 16_000,
5868
5706
  ...(o?.pinProvider ? { provider: getProvider(model) } : {}),
5869
5707
  ...(o?.onResolved ? { onResolvedProvider: o.onResolved } : {}),
5870
5708
  ...(effort ? { reasoningEffort: effort } : {}),
@@ -5878,7 +5716,7 @@ selfCmd
5878
5716
  return async (prompt: string, images?: readonly ReviewImage[]) => {
5879
5717
  if (!made) {
5880
5718
  const { makeLazyAcpReviewLLM } = await import('./agent-substrate/acp-reviewer.js');
5881
- made = makeLazyAcpReviewLLM({ cwd: process.cwd(), backend: o.backend, model: o.model, timeoutMs: o.timeoutMs });
5719
+ made = makeLazyAcpReviewLLM({ cwd: o.cwd ?? process.cwd(), backend: o.backend, model: o.model, timeoutMs: o.timeoutMs });
5882
5720
  }
5883
5721
  return made(prompt, images);
5884
5722
  };
@@ -5894,7 +5732,7 @@ selfCmd
5894
5732
  // handshakeTimeoutMs left to the adapter default (min(timeoutMs, 60s)) — the harness lane passes none either.
5895
5733
  return {
5896
5734
  backend: 'claude',
5897
- llm: makeRoleAcpReviewLLM({ cwd: process.cwd(), backend: 'claude', backendSpec: spawn.backendSpec, env: spawn.env, timeoutMs: o.timeoutMs }),
5735
+ llm: makeRoleAcpReviewLLM({ cwd: o.cwd ?? process.cwd(), backend: 'claude', backendSpec: spawn.backendSpec, env: spawn.env, timeoutMs: o.timeoutMs }),
5898
5736
  };
5899
5737
  },
5900
5738
  // SUBSCRIPTION-EXHAUST-REROUTE — role reviewer unavailable ⇒ GLM on OpenRouter (the review policy's first
@@ -5909,6 +5747,19 @@ selfCmd
5909
5747
  envModel: () => process.env.ELANOUS_PR_REVIEW_MODEL,
5910
5748
  });
5911
5749
  if (opts.json) await writeStdoutJson(selfReviewJsonLine(results));
5750
+ // Detached TA review: stdout is now complete in its result file. Resume only the bound card.
5751
+ try {
5752
+ const { rejudgeCompletedTaskReview, TA_REVIEW_COMPLETION_CARD_ENV, TA_REVIEW_COMPLETION_STATE_ENV, TA_REVIEW_COMPLETION_RESULT_ENV } = await import('./task-agent/review-result-capture.js');
5753
+ const completionEnv: Record<string, string | undefined> = {};
5754
+ for (const key of [TA_REVIEW_COMPLETION_CARD_ENV, TA_REVIEW_COMPLETION_STATE_ENV, TA_REVIEW_COMPLETION_RESULT_ENV]) {
5755
+ const value = process.env[key];
5756
+ if (value) completionEnv[key] = value;
5757
+ delete process.env[key];
5758
+ }
5759
+ await rejudgeCompletedTaskReview(completionEnv);
5760
+ } catch (error) {
5761
+ try { debug.log('task-agent', 'review-completion-rejudge-failed', { reason: String(error).slice(-300) }, { level: 'warn' }); } catch { /* fail-soft */ }
5762
+ }
5912
5763
  if (failed >= 1) process.exitCode = 1;
5913
5764
  });
5914
5765
 
@@ -5987,22 +5838,25 @@ selfCmd
5987
5838
  .description('외부 도구 발화를 elanous 기억에 주입 — origin/git/branch/cwd/시간 태그(회상이 "누가 언제 어디서" 구분). text=--text 또는 stdin')
5988
5839
  .option('-s, --text <text>', '발화 원문(생략 시 stdin)')
5989
5840
  .option('--source <origin>', 'claude-code|codex|gemini|…', 'claude-code')
5841
+ .option('--origin <origin>', '발화 주체: human|agent (기본 agent)')
5990
5842
  .option('--session <id>', '세션 id')
5991
5843
  .option('--git-hash <hash>', '발화 시점 git HEAD(short)')
5992
5844
  .option('--branch <name>', 'git 브랜치')
5993
5845
  .option('--cwd <dir>', '작업 디렉토리')
5994
5846
  .option('--ts <iso>', 'ISO 시간(기본 now)')
5995
5847
  .option('-i, --importance <n>', '0-10 현저성', '5')
5996
- .action(async (opts: { text?: string; source: string; session?: string; gitHash?: string; branch?: string; cwd?: string; ts?: string; importance: string }) => {
5848
+ .action(async (opts: { text?: string; source: string; origin?: string; session?: string; gitHash?: string; branch?: string; cwd?: string; ts?: string; importance: string }) => {
5849
+ if (opts.origin !== undefined && opts.origin !== 'human' && opts.origin !== 'agent') { ui.error('utterance: --origin must be human or agent'); process.exitCode = 1; return; }
5997
5850
  let text = opts.text;
5998
5851
  if (!text) text = await readPipedStdin(); // ★ OBS-T3
5999
5852
  if (!text || !text.trim()) { ui.error('utterance: --text 또는 stdin 필요'); process.exit(1); }
6000
5853
  // 독립 CLI 프로세스 — 데몬 StoreSink 를 상속 안 하므로 logs.db 싱크를 붙여야
6001
5854
  // injectUtterance 의 `debug.log('memory.utterance','ingress')` 가 logs.db 에 닿음(제1원칙 관측).
6002
- const { injectUtterance } = await import('./domains/self-awareness.js');
6003
- const r = injectUtterance({
5855
+ const { recordSelfUtterance } = await import('./cli/self-utterances-cli.js');
5856
+ const r = recordSelfUtterance({
6004
5857
  text: text.trim(),
6005
5858
  origin: opts.source,
5859
+ utteranceOrigin: opts.origin === 'human' ? 'human' : 'agent',
6006
5860
  ...(opts.session ? { sessionId: opts.session } : {}),
6007
5861
  ...(opts.gitHash ? { gitHash: opts.gitHash } : {}),
6008
5862
  ...(opts.branch ? { branch: opts.branch } : {}),
@@ -11887,7 +11741,10 @@ async function main(): Promise<void> {
11887
11741
  // 한다. 인터랙티브 TUI 는 데몬 sink 를 상속 안 하므로 안 붙이면 debug.log 가 no-op
11888
11742
  // (제1원칙 관측 갭 · tui-sim 드라이브에서 agent.source 0건으로 실측 2026-07-19).
11889
11743
  // PR#4622(self utterance CLI)·session-cli 미러. fail-open·비블로킹.
11744
+ const bootTimer = (await import('./dashboard/boot-timing.js')).createBootTimer();
11745
+ bootTimer.begin();
11890
11746
  try { await (await import('./domains/standalone-log-sink.js')).registerStandaloneLogSink('tui'); } catch { /* fail-open */ }
11747
+ bootTimer.phase('log-sink');
11891
11748
  // P3(대표 2026-07-26) — footgun 관측을 logs.db 에 도달시킨다. 초반(arg 파싱 前) warnProdSpawnFootgun 은
11892
11749
  // StoreSink 등록 前이라 debug.log 가 logs.db 미도달이었다(순서 갭). sink 등록 직후 관측만 재발행(stderr 중복 X).
11893
11750
  try { (await import('./instance-root-coherence.js')).warnProdSpawnFootgun({ emit: 'log' }); } catch { /* fail-open */ }
@@ -11897,7 +11754,9 @@ async function main(): Promise<void> {
11897
11754
  // so `elanous self screen` / `/v1/terminals` / (P2) PWA can see the
11898
11755
  // dashboard the user is actually looking at. Off unless this boots
11899
11756
  // (no producer in headless/daemon paths). fail-soft·비블로킹.
11757
+ bootTimer.begin();
11900
11758
  try { (await import('./capture/tui-self-report.js')).startTuiSelfReport(); } catch { /* fail-soft */ }
11759
+ bootTimer.phase('self-report');
11901
11760
 
11902
11761
  // Dashboard handles sync inline — only returns on quit
11903
11762
  // ⛔ stdin 이 TTY 가 아니면 «뜨지 않는다» — 뜨면 readKey 가 엔터를 지어내 초당 수백 프레임을
@@ -11910,7 +11769,14 @@ async function main(): Promise<void> {
11910
11769
  return;
11911
11770
  }
11912
11771
  }
11913
- await showDashboard(dashboardOpts);
11772
+ bootTimer.begin();
11773
+ await showDashboard({
11774
+ ...dashboardOpts,
11775
+ onFirstFrameRendered: () => {
11776
+ bootTimer.phase('show-dashboard');
11777
+ bootTimer.done();
11778
+ },
11779
+ });
11914
11780
  closeTui();
11915
11781
  // Force exit: the dashboard starts background timers (clipboard
11916
11782
  // poller, shimmer/blink animations) that keep the Bun event loop
@@ -11941,6 +11807,13 @@ export function runCli(): void {
11941
11807
  console.error(formatCliUserError(err));
11942
11808
  process.exit(1);
11943
11809
  }
11810
+ const friendlyCode = classifyFriendlyError(err);
11811
+ if (friendlyCode) {
11812
+ const locale = detectLocale();
11813
+ console.error(formatFriendlyError(friendlyCode, locale));
11814
+ debug.log('cli.friendly-error', 'shown', { code: friendlyCode, locale });
11815
+ process.exit(1);
11816
+ }
11944
11817
  // ER1 — a real crash is reported once (consented · scrubbed · never blocks more than the send timeout).
11945
11818
  try {
11946
11819
  const { reportError } = await import('./error-report/report.js');
@@ -1,9 +1,8 @@
1
- import { join } from 'node:path';
2
1
  import { debug } from '../debug/log.js';
3
2
  import { getElanousConfigDirOverride } from '../elanous-config-dir.js';
4
3
  import { getTestStateRoot } from '../nexus/paths.js';
5
- import { findTreeRoot, getAppliedGlobalTestRoot } from '../cli/test-flag.js';
6
- import { isInstalledCopyScript, treeFromScriptPath } from './leader.js';
4
+ import { getAppliedGlobalTestRoot } from '../cli/test-flag.js';
5
+ import { isInstalledCopyScript } from './leader.js';
7
6
  import { prodInstanceRoot, resolveInstance, type InstanceResolution } from './resolve.js';
8
7
 
9
8
  interface ResolveCurrentInstanceDeps {
@@ -16,15 +15,12 @@ interface ResolveCurrentInstanceDeps {
16
15
 
17
16
  /** 현재 프로세스의 4층 판정 입력을 모아 순수 리졸버에 전달한다. */
18
17
  export function resolveCurrentInstance(deps: ResolveCurrentInstanceDeps = {}): InstanceResolution {
19
- const cwd = (deps.cwd ?? (() => process.cwd()))();
20
18
  const explicitFlagRoot = (deps.explicitFlagRoot ?? (() =>
21
19
  getAppliedGlobalTestRoot() ?? getTestStateRoot() ?? getElanousConfigDirOverride()))();
22
- const treeRoot = (process.argv[1] ? treeFromScriptPath(process.argv[1]) : null) ?? findTreeRoot(cwd);
23
20
  const resolution = resolveInstance({
24
21
  explicitFlagRoot,
25
22
  stampedStateDir: (deps.stampedStateDir ?? (() => process.env.ELANOUS_STATE_DIR))(),
26
23
  installedCopy: isInstalledCopyScript(),
27
- treeTestRoot: treeRoot ? join(treeRoot, '.elanous-test') : null,
28
24
  prodRoot: prodInstanceRoot(),
29
25
  });
30
26
  debug.log('instance.current', 'resolved', { layer: resolution.layer, kind: resolution.kind });
@@ -1,9 +1,9 @@
1
- // 인스턴스 우주: 명시 루트 → 부모 스탬프 → 설치본 → 소스 트리 격리.
1
+ // 인스턴스 우주: 명시 루트 → 부모 스탬프 → 운영 집. 트리 위치는 우주를 고르지 않는다.
2
2
  import { homedir } from 'node:os';
3
3
  import { join, resolve } from 'node:path';
4
4
 
5
5
  export type InstanceKind = 'prod' | 'test';
6
- export type ResolutionLayer = 'explicit-flag' | 'parent-stamp' | 'installed' | 'tree-derived' | 'default';
6
+ export type ResolutionLayer = 'explicit-flag' | 'parent-stamp' | 'installed' | 'default';
7
7
 
8
8
  export interface InstanceResolution {
9
9
  kind: InstanceKind;
@@ -50,10 +50,9 @@ export function resolveInstance(deps: ResolveDeps = {}): InstanceResolution {
50
50
  }
51
51
  const installed = deps.installedCopy ?? isInstalledExecution();
52
52
  if (installed) return { kind: 'prod', root: prodRoot, layer: 'installed', why: '설치본으로 실행' };
53
- const treeTestRoot = deps.treeTestRoot === undefined ? treeDerivedRootFor(process.cwd()) : deps.treeTestRoot;
54
- if (treeTestRoot) return { kind: 'test', root: normRoot(treeTestRoot), layer: 'tree-derived', why: '소스 트리(격리)' };
55
- // 레포 밖의 비설치 실행은 운영 권위를 얻지 않는다. 격리 루트를 cwd 에 둔다.
56
- return { kind: 'test', root: normRoot(join(process.cwd(), '.elanous-test')), layer: 'default', why: '소스 트리 밖 실행(격리)' };
53
+ // Explicit --test selects a test root before this resolver runs. A checkout,
54
+ // worktree, or arbitrary cwd alone never changes the operating house.
55
+ return { kind: 'prod', root: prodRoot, layer: 'default', why: '명시 시험 우주가 없는 운영 집' };
57
56
  }
58
57
 
59
58
  /** 부모가 도장으로 물려준 우주와 자식이 실제로 쓰는 우주가 다른가. 비어 있는 쪽은 비교하지 않는다. */
@@ -29,6 +29,9 @@ export const DEFAULT_GITHUB_STAR_DAYS = 30;
29
29
  */
30
30
  export const DEFAULT_GITHUB_STAR_PER_QUERY = 20;
31
31
 
32
+ /** 하루당 별 증가 상위 이 개수 행만 README 를 싣고 `surge.score` 를 받는다. */
33
+ const GITHUB_SURGE_TOP = 3;
34
+
32
35
  export interface GithubStarRepo {
33
36
  fullName: string;
34
37
  url: string;
@@ -223,7 +226,7 @@ export async function collectGithubStars(
223
226
  }).sort((a, b) => (b.starsPerDay ?? -Infinity) - (a.starsPerDay ?? -Infinity) || b.stars - a.stars);
224
227
  const readmes = new Map<string, string>();
225
228
  if (!opts.dryRun) {
226
- for (const row of repos.slice(0, 3)) {
229
+ for (const row of repos.slice(0, GITHUB_SURGE_TOP)) {
227
230
  try {
228
231
  readmes.set(row.repo, `README:\n${(await (opts.fetchReadme ?? ghApiFetchReadme)(row.repo)).slice(0, 1_500)}`);
229
232
  } catch {
@@ -231,7 +234,7 @@ export async function collectGithubStars(
231
234
  }
232
235
  }
233
236
  }
234
- const raws: RawIntakeItem[] = repos.map((row) => ({
237
+ const raws: RawIntakeItem[] = repos.map((row, rank) => ({
235
238
  url: row.url,
236
239
  title: row.title,
237
240
  // 모든 행 첫 줄에 라이선스: SPDX · 확인된 부재는 «없음» · 응답이 알려 주지 않으면 «미상»(없음으로 읽지 않는다).
@@ -240,6 +243,8 @@ export async function collectGithubStars(
240
243
  stars: row.stars,
241
244
  ...(row.starsDelta !== undefined ? { starsDelta: row.starsDelta } : {}),
242
245
  ...(row.starsPerDay !== undefined ? { starsPerDay: row.starsPerDay } : {}),
246
+ // 급등 상위 3 행(README 를 싣는 그 셋)만 1위 3 · 2위 2 · 3위 1 — pickAbsorbQueue 가 `.score` 로 앞세운다.
247
+ ...(rank < GITHUB_SURGE_TOP ? { 'surge.score': GITHUB_SURGE_TOP - rank } : {}),
243
248
  },
244
249
  }));
245
250
  const result: CollectGithubResult = {
@@ -43,8 +43,13 @@ export interface AnnotateIntakeLensResult {
43
43
  capped: boolean;
44
44
  }
45
45
 
46
+ /** 렌즈가 판정하는 갈래 — 하루 상한을 갈래별로 번갈아 나눈다(한 갈래가 많아도 다른 갈래가 0 이 되지 않게). */
47
+ export type LensLane = 'outbox' | 'github' | 'x';
48
+ export const LENS_LANES: readonly LensLane[] = ['outbox', 'github', 'x'];
49
+
46
50
  interface GroupedItem {
47
51
  id: string;
52
+ lane?: LensLane;
48
53
  facts: { fact: string; current: string }[];
49
54
  url?: string;
50
55
  }
@@ -88,7 +93,7 @@ function groupOutbox(root: string, day: string): GroupedItem[] {
88
93
  if (!id || !fact) continue;
89
94
  let group = groups.get(id);
90
95
  if (!group) {
91
- group = { id, facts: [] };
96
+ group = { id, lane: 'outbox', facts: [] };
92
97
  groups.set(id, group);
93
98
  order.push(id);
94
99
  }
@@ -113,12 +118,39 @@ function ledgerLensItems(root: string, day: string, existing: ReadonlySet<string
113
118
  .map((fact) => ({ fact, current: '' }));
114
119
  if (!facts.length) continue;
115
120
  seen.add(item.id);
116
- items.push({ id: item.id, facts, url: item.url });
121
+ items.push({ id: item.id, lane: source, facts, url: item.url });
117
122
  }
118
123
  }
119
124
  return items;
120
125
  }
121
126
 
127
+ /**
128
+ * 남은 몫(remaining)을 갈래별로 번갈아 채운다 — 매 칸마다 «이미 판정된 수 ⊕ 이번에 고른 수»가 가장 적은 갈래에서
129
+ * 하나를 꺼낸다(동점이면 LENS_LANES 순서). 비거나 다 쓴 갈래의 몫은 남은 갈래로 넘어간다. 총량은 remaining 을 넘지 않는다.
130
+ */
131
+ export function fairLensBatch<T extends { id: string; lane?: LensLane }>(
132
+ pending: readonly T[],
133
+ doneByLane: Readonly<Partial<Record<LensLane, number>>>,
134
+ remaining: number,
135
+ ): T[] {
136
+ const queues = new Map<LensLane, T[]>(LENS_LANES.map((lane) => [lane, []]));
137
+ for (const item of pending) queues.get(item.lane ?? 'outbox')!.push(item);
138
+ const used = new Map<LensLane, number>(LENS_LANES.map((lane) => [lane, doneByLane[lane] ?? 0]));
139
+ const picked = new Set<string>();
140
+ for (let n = 0; n < remaining; n++) {
141
+ let best: LensLane | undefined;
142
+ for (const lane of LENS_LANES) {
143
+ if (!queues.get(lane)!.length) continue;
144
+ if (best === undefined || used.get(lane)! < used.get(best)!) best = lane;
145
+ }
146
+ if (best === undefined) break;
147
+ picked.add(queues.get(best)!.shift()!.id);
148
+ used.set(best, used.get(best)! + 1);
149
+ }
150
+ // 원래 순서를 지킨다(흡수 → GitHub → X).
151
+ return pending.filter((item) => picked.has(item.id));
152
+ }
153
+
122
154
  function judgedIds(file: string): Set<string> {
123
155
  return new Set(readJsonl(file).flatMap((row) => typeof row.id === 'string' && row.id ? [row.id] : []));
124
156
  }
@@ -171,10 +203,20 @@ export async function annotateIntakeLens(
171
203
  const pending = items.filter((item) => !done.has(item.id));
172
204
  const remaining = Math.max(0, LENS_DAILY_CAP - done.size);
173
205
  const capped = pending.length > remaining;
174
- const batch = pending.slice(0, remaining);
206
+ const doneByLane: Partial<Record<LensLane, number>> = {};
207
+ for (const item of items) {
208
+ if (!done.has(item.id)) continue;
209
+ const lane = item.lane ?? 'outbox';
210
+ doneByLane[lane] = (doneByLane[lane] ?? 0) + 1;
211
+ }
212
+ const batch = capped ? fairLensBatch(pending, doneByLane, remaining) : pending;
175
213
  if (capped) {
176
- const skippedIds = pending.slice(remaining).map((item) => item.id);
214
+ const chosen = new Set(batch.map((item) => item.id));
215
+ const skippedIds = pending.filter((item) => !chosen.has(item.id)).map((item) => item.id);
216
+ const byLane = (list: readonly GroupedItem[]) => Object.fromEntries(LENS_LANES.map((lane) =>
217
+ [lane, list.filter((item) => (item.lane ?? 'outbox') === lane).length]));
177
218
  log('capped', { day, total: pending.length, judged: batch.length, skippedIds,
219
+ pendingByLane: byLane(pending), judgedByLane: byLane(batch), doneByLane,
178
220
  ...(skippedIds.length ? { marker: `외 ${skippedIds.length}건 · 원장 \`elanous intake items\`` } : {}) });
179
221
  }
180
222
  const judgeOne = deps.judge ?? ((input: LensJudgeInput) => defaultJudge(input));
@@ -12,6 +12,7 @@ import { getUserConfig } from '../user-config.js';
12
12
  import { dateKey } from '../time/format.js';
13
13
  import { cardIndexPath, CardStore, type TaskCard } from '../task-cards/card-store.js';
14
14
  import { loadIntakeLedger, type IntakeItem } from './items.js';
15
+ import { RequirementLedger } from '../requirements/requirement-ledger.js';
15
16
  import { parseRubric, rubricGrade, rubricScore } from '../release-loop/rubric.js';
16
17
 
17
18
  export type RequirementSource = 'directive' | 'intake' | 'grounding' | 'coordination' | 'linear';
@@ -67,6 +68,8 @@ export interface FunnelOptions {
67
68
  allowedLicenses?: readonly string[];
68
69
  placement?: PlacementDeps;
69
70
  adopt?: (candidate: RequirementCandidate, version: string, cellId: string, evidence: string) => void;
71
+ /** REQ-INTAKE-ALL (0.2.25) piece 1: REQ-LEDGER side-record — every candidate captured once (idempotent on candidate id); adopted decisions fold to `placed`. */
72
+ ledger?: RequirementLedger;
70
73
  }
71
74
 
72
75
  /** How many of the last 24 hours' unlinked directives the single P0 brief line names (the full backlog is one count). */
@@ -170,6 +173,15 @@ export function runRequirementFunnel(options: FunnelOptions): RequirementFunnelR
170
173
  cellId, version: placement.version, rubric });
171
174
  if (!isDirective) used++;
172
175
  }
176
+ // REQ-INTAKE-ALL (0.2.25) piece 1: record every funnel candidate into the REQ-LEDGER side-ledger
177
+ // (idempotent on candidate id). The ledger is a side-record — a capture failure must not change the
178
+ // funnel result or any other command's default behavior (preservation contract).
179
+ if (options.ledger) {
180
+ try { captureFunnelCandidates(decisions, options.ledger); }
181
+ catch (error) {
182
+ debug.log('intake.requirement-funnel', 'ledger-capture-failed', { error: error instanceof Error ? error.message : String(error) });
183
+ }
184
+ }
173
185
  const unlinkedDirectives = [...directiveCandidates(options.historicalDirectives ?? []).filter(candidate =>
174
186
  candidate.text && Number.isFinite(Date.parse(candidate.receivedAt)) && Date.parse(candidate.receivedAt) <= now.getTime()
175
187
  && !linkFor(candidate, cells) && !arrivals.some(arrival => arrival.id === candidate.id)),
@@ -202,7 +214,46 @@ export function runRequirementFunnel(options: FunnelOptions): RequirementFunnelR
202
214
  return { counts, candidates: groups.size, decisions, unlinkedDirectives, briefItems };
203
215
  }
204
216
 
205
- /** Existing ledgers only; no source collector or sender is started here. */
217
+ /**
218
+ * REQ-INTAKE-ALL (0.2.25) piece 1 — record the funnel's five entrances (directive · intake · grounding ·
219
+ * coordination · linear) into the REQ-LEDGER. Each decision captures one row per candidate (its `sources`
220
+ * members) with status `captured`, kind fixed to `fr`, source {kind, at: receivedAt}, statement = one-line
221
+ * text and tags = [priority] (the funnel's own P1 default when the candidate carries none). Idempotent on
222
+ * candidate id — re-running adds no rows. Adopted decisions fold their rows to `placed`. Per source with
223
+ * fresh rows it emits debug.log('requirements.intake', 'captured', {source, count}). Ledger validation
224
+ * (secret-shape rejection, allowlist) stays REQ-LEDGER's share; kind classification (REQ-KINDS) is a later
225
+ * piece — kind is fixed to `fr` here.
226
+ */
227
+ export function captureFunnelCandidates(candidates: readonly RequirementDecision[], ledger: RequirementLedger): void {
228
+ const statuses = new Map(ledger.list().map(row => [row.id, row.status] as const));
229
+ const fresh = new Map<RequirementSource, number>();
230
+ for (const decision of candidates) {
231
+ for (const candidate of decision.sources) {
232
+ if (statuses.has(candidate.id)) continue;
233
+ // One bad candidate (secret-shaped text · unparseable time) must not stop the rest of the capture.
234
+ try {
235
+ const at = new Date(candidate.receivedAt).toISOString(); // ledger takes UTC `…Z` only; sources may carry offsets
236
+ ledger.capture({ id: candidate.id, statement: oneLine(candidate.text), kind: 'fr',
237
+ source: { kind: candidate.source, at }, tags: [candidate.priority ?? 'P1'] });
238
+ } catch (error) {
239
+ debug.log('intake.requirement-funnel', 'ledger-capture-failed', { id: candidate.id, source: candidate.source,
240
+ error: error instanceof Error ? error.message : String(error) });
241
+ continue;
242
+ }
243
+ statuses.set(candidate.id, 'captured');
244
+ fresh.set(candidate.source, (fresh.get(candidate.source) ?? 0) + 1);
245
+ }
246
+ if (decision.status !== 'adopted') continue;
247
+ for (const candidate of decision.sources) {
248
+ if (statuses.get(candidate.id) !== 'captured') continue;
249
+ ledger.place(candidate.id);
250
+ statuses.set(candidate.id, 'placed');
251
+ }
252
+ }
253
+ for (const [source, count] of fresh) debug.log('requirements.intake', 'captured', { source, count });
254
+ }
255
+
256
+ /** Existing ledgers only; no source collector or sender is started here. Side effect: captures every candidate into this universe's REQ-LEDGER (REQ-INTAKE-ALL). */
206
257
  export function readRequirementFunnel(options: { stateDir?: string; now?: Date; mode?: 'shadow' | 'live'; dailyCap?: number;
207
258
  allowedLicenses?: readonly string[]; grounding?: readonly IncomingRequirement[]; coordination?: readonly IncomingRequirement[];
208
259
  linear?: readonly IncomingRequirement[]; placement?: PlacementDeps } = {}): RequirementFunnelResult {
@@ -276,6 +327,7 @@ export function readRequirementFunnel(options: { stateDir?: string; now?: Date;
276
327
  grounding: today(options.grounding ?? fromQueue('outbox/grounding.jsonl')),
277
328
  coordination: today(options.coordination ?? cardRequests.coordination), linear: today(options.linear ?? cardRequests.linear) }, historicalDirectives, cells, now, mode,
278
329
  dailyCap, adoptedToday: todayCount, allowedLicenses, placement: { ...options.placement, schedules },
330
+ ledger: new RequirementLedger({ stateDir }),
279
331
  adopt: (candidate, version, cellId, evidence) => {
280
332
  placeCell({ id: cellId, title: candidate.text, owner: candidate.owner ?? 'OP', priority: candidate.priority ?? 'P1',
281
333
  predecessors: [], ...(candidate.deadlineVersion ? { deadlineVersion: candidate.deadlineVersion } : {}) }, { ...options.placement, now, schedules });