elanous 0.2.35 → 0.2.36

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 (686) 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/chunks/{d06f9160.a3d9062f95de8ad7.js → 053a429e.9a63436527cc751c.js} +1 -1
  4. package/apps/pwa/out/_next/static/chunks/109.f196abf3484bb97f.js +287 -0
  5. package/apps/pwa/out/_next/static/chunks/{4346.8601952e73bf5803.js → 1201.afbfc5b1c5e5cbe4.js} +1 -1
  6. package/apps/pwa/out/_next/static/chunks/1517.9275b89572098ff3.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/1574.ad11f8db8396ab45.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/1614.7a8c5c40aee0261f.js +1 -0
  9. package/apps/pwa/out/_next/static/chunks/1871-f1eb29d8dbb4065b.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/190.285c832bd9626f8c.js +64 -0
  11. package/apps/pwa/out/_next/static/chunks/2193.0ea24c4a7aa1d004.js +36 -0
  12. package/apps/pwa/out/_next/static/chunks/223-ad865c1e80491d78.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/2265-f0d90b6dbec05f81.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/2267.eb4a62a209f09ec4.js +149 -0
  15. package/apps/pwa/out/_next/static/chunks/2341-86cd06c0cf01aa33.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/2352.9abc42422bade876.js +1 -0
  17. package/apps/pwa/out/_next/static/chunks/2397-c1653a816061842d.js +1 -0
  18. package/apps/pwa/out/_next/static/chunks/{3103.0df8da390948bb84.js → 2500.cbc1257b774aae52.js} +1 -1
  19. package/apps/pwa/out/_next/static/chunks/{7644.17e37ba6f1d4226e.js → 2683.c9773a0c589b031b.js} +3 -3
  20. package/apps/pwa/out/_next/static/chunks/2709.8e1889034255fc5f.js +24 -0
  21. package/apps/pwa/out/_next/static/chunks/{4718-17d2af636796a330.js → 275-02ea4c2a33980422.js} +3 -3
  22. package/apps/pwa/out/_next/static/chunks/2812ca6a.3b9f4a7a08885744.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/284.ac77c0db55bfd3a8.js +1 -0
  24. package/apps/pwa/out/_next/static/chunks/{8714.ff0b7ce3ec3e3ae2.js → 2941.3c3546f96bc6efa7.js} +1 -1
  25. package/apps/pwa/out/_next/static/chunks/2976.b000698a3c6512dc.js +24 -0
  26. package/apps/pwa/out/_next/static/chunks/{9214.63a510d39178e997.js → 2986.45d7652e4f13557e.js} +2 -2
  27. package/apps/pwa/out/_next/static/chunks/3031-85328a92fcce4da6.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/3136.30aaaa5fa03662a3.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/{3677-4215f826f6aa68e5.js → 3148-98efd4869d660a87.js} +1 -1
  30. package/apps/pwa/out/_next/static/chunks/3155.2587a55196ecb394.js +226 -0
  31. package/apps/pwa/out/_next/static/chunks/3277.785db1cf09f98601.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/3320-f9c77381f85a2c0a.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/3324.a09703033abcbd2f.js +34 -0
  34. package/apps/pwa/out/_next/static/chunks/3386-91049feabff9a94e.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/339.80afb7e8839372af.js +8 -0
  36. package/apps/pwa/out/_next/static/chunks/3410.7f9af5ab77cbe65f.js +115 -0
  37. package/apps/pwa/out/_next/static/chunks/3538.a445e50bb359d068.js +32 -0
  38. package/apps/pwa/out/_next/static/chunks/3540c645.2595a6af01a97672.js +1 -0
  39. package/apps/pwa/out/_next/static/chunks/3621.581b2054cc14bee4.js +286 -0
  40. package/apps/pwa/out/_next/static/chunks/3676.8c28d16fd84ca843.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/{9512.5a76207a730e0491.js → 3727.7949ccaacaa71242.js} +2 -2
  42. package/apps/pwa/out/_next/static/chunks/375-b84540853523fe52.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/{8557-e7898769499cd56f.js → 3757-180308bc61021b05.js} +1 -1
  44. package/apps/pwa/out/_next/static/chunks/379.ee262e37586fe1ae.js +74 -0
  45. package/apps/pwa/out/_next/static/chunks/{359-2250789a2d3499e7.js → 3840-5825d56d46976a92.js} +1 -1
  46. package/apps/pwa/out/_next/static/chunks/3969-81054381eaec4c4c.js +1 -0
  47. package/apps/pwa/out/_next/static/chunks/{da5176c6.6773b6c5994e1d99.js → 3a3d9966.cc4d4585a2708e7c.js} +1 -1
  48. package/apps/pwa/out/_next/static/chunks/4067-bf9aa60547972937.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/4116.a84a92a2492c080e.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/4176.e5729c93c29151eb.js +104 -0
  51. package/apps/pwa/out/_next/static/chunks/4227-e6c84686bc8946ca.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/{9952.5daf5f94063a2b3e.js → 4286.b70c4520306817e8.js} +1 -1
  53. package/apps/pwa/out/_next/static/chunks/4304.e9b2512834a9e23e.js +23 -0
  54. package/apps/pwa/out/_next/static/chunks/4327.b9e08a71c0009348.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/{938.66ad1ef0e5abae1c.js → 4615.8525eb0add35eba6.js} +1 -1
  56. package/apps/pwa/out/_next/static/chunks/4946.bd106eafd668f248.js +148 -0
  57. package/apps/pwa/out/_next/static/chunks/5085-bce4904931767ca6.js +1 -0
  58. package/apps/pwa/out/_next/static/chunks/5125.2eb9968b83767193.js +93 -0
  59. package/apps/pwa/out/_next/static/chunks/5128-75b733fd74a9a1eb.js +1 -0
  60. package/apps/pwa/out/_next/static/chunks/{6236.e18cced2d5ba6afb.js → 528.38ce20ef8aa251ff.js} +16 -16
  61. package/apps/pwa/out/_next/static/chunks/5489f3fe.4bb1458b09f6dead.js +122 -0
  62. package/apps/pwa/out/_next/static/chunks/{3408.21d1570602f4b6c0.js → 552.b7d061ad91eeac51.js} +2 -2
  63. package/apps/pwa/out/_next/static/chunks/5560-2a4648f6a30f16e7.js +1 -0
  64. package/apps/pwa/out/_next/static/chunks/5711.957b095705c12560.js +1 -0
  65. package/apps/pwa/out/_next/static/chunks/{1530.0e612369b6fd7ea0.js → 575.d929793a53f27c4b.js} +1 -1
  66. package/apps/pwa/out/_next/static/chunks/5772-e29e14f8ff127122.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/5887.5b2f5b44ce0f7e9a.js +1 -0
  68. package/apps/pwa/out/_next/static/chunks/5899-4c112a2d908cf97f.js +1 -0
  69. package/apps/pwa/out/_next/static/chunks/599.c39c571b6733f2a2.js +41 -0
  70. package/apps/pwa/out/_next/static/chunks/6041.1b65efb796ebc2a5.js +79 -0
  71. package/apps/pwa/out/_next/static/chunks/6057-765c0a26028c86b2.js +1 -0
  72. package/apps/pwa/out/_next/static/chunks/6142.f289e0d039f453a6.js +1 -0
  73. package/apps/pwa/out/_next/static/chunks/6199-6bcd61d2a3910e04.js +1 -0
  74. package/apps/pwa/out/_next/static/chunks/6236.cdf7293e710a9b2d.js +1 -0
  75. package/apps/pwa/out/_next/static/chunks/6387-237e079dac9a3ae6.js +1 -0
  76. package/apps/pwa/out/_next/static/chunks/6448-b6d272d074276e14.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/6466-92e65a48490b68a9.js +1 -0
  78. package/apps/pwa/out/_next/static/chunks/6566.926a1d1b7c911442.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/6580-cdc0e4a634ce4708.js +1 -0
  80. package/apps/pwa/out/_next/static/chunks/6659-b242dc31b20b3f29.js +1 -0
  81. package/apps/pwa/out/_next/static/chunks/6690.c5d9b321b1f79384.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/671-e9b6ad0c771c5514.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/6862.bcbf89dd0f4496b3.js +27 -0
  84. package/apps/pwa/out/_next/static/chunks/6912-7b375ee48732c767.js +1 -0
  85. package/apps/pwa/out/_next/static/chunks/6925.562d532110879886.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/{7385.50a308a477bdfc21.js → 6943.c6b24124853a47b2.js} +1 -1
  87. package/apps/pwa/out/_next/static/chunks/{630.fe5a46428d63b013.js → 727.7deb87749b0a343a.js} +1 -1
  88. package/apps/pwa/out/_next/static/chunks/{2018.a741297bce759490.js → 7481.39f7a4654907bf6e.js} +1 -1
  89. package/apps/pwa/out/_next/static/chunks/7545.b1aa42cd15503319.js +1 -0
  90. package/apps/pwa/out/_next/static/chunks/7551-416d298c2dc4a9ab.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/{8444.4c26b379ca2b9596.js → 771.c3cdb6c1f7f47c02.js} +17 -17
  92. package/apps/pwa/out/_next/static/chunks/7784.1f0ac4a16d190cf4.js +1 -0
  93. package/apps/pwa/out/_next/static/chunks/7870-309de463786ac1fc.js +1 -0
  94. package/apps/pwa/out/_next/static/chunks/7888-e29b151bb6a3bb8b.js +1 -0
  95. package/apps/pwa/out/_next/static/chunks/{3589.5444a06bcf6e775c.js → 7891.03f910124a737985.js} +1 -1
  96. package/apps/pwa/out/_next/static/chunks/7905-6ba78d9234608f79.js +1 -0
  97. package/apps/pwa/out/_next/static/chunks/8037.e254fd797aa224d1.js +1 -0
  98. package/apps/pwa/out/_next/static/chunks/8207.f527886b7c464529.js +1 -0
  99. package/apps/pwa/out/_next/static/chunks/856.50bda61439d465e6.js +62 -0
  100. package/apps/pwa/out/_next/static/chunks/{b2f6ba4d.fb56fdbbf798df33.js → 873d6c12.09bd499f57171543.js} +1 -1
  101. package/apps/pwa/out/_next/static/chunks/{5101.e32282718f99ed6f.js → 8904.7d51af2dc033965c.js} +2 -2
  102. package/apps/pwa/out/_next/static/chunks/9031-92e9b487edb681ee.js +1 -0
  103. package/apps/pwa/out/_next/static/chunks/9060.5410d9f6a95f6287.js +90 -0
  104. package/apps/pwa/out/_next/static/chunks/{5637.281e5dec4ea6ecf1.js → 914.8abefd48d579547b.js} +2 -2
  105. package/apps/pwa/out/_next/static/chunks/9187-c87a2207d4ac5d46.js +1 -0
  106. package/apps/pwa/out/_next/static/chunks/{4705-194e64e47ca0fbdb.js → 9250-072df22eaadaa6b5.js} +1 -1
  107. package/apps/pwa/out/_next/static/chunks/9289.3e92f278821e18e0.js +1 -0
  108. package/apps/pwa/out/_next/static/chunks/9319.7816d3cc741cd34f.js +1 -0
  109. package/apps/pwa/out/_next/static/chunks/9327-e016bb9f1674d24f.js +1 -0
  110. package/apps/pwa/out/_next/static/chunks/9365.3de48bf75193ff9a.js +77 -0
  111. package/apps/pwa/out/_next/static/chunks/9383.5b5e9aa56b5fea97.js +1 -0
  112. package/apps/pwa/out/_next/static/chunks/9387-cb929573ef436f39.js +1 -0
  113. package/apps/pwa/out/_next/static/chunks/9489.c27becacc3283dec.js +1 -0
  114. package/apps/pwa/out/_next/static/chunks/{8637.47f5b35afcae5e6b.js → 9514.131c52cc75fe6439.js} +1 -1
  115. package/apps/pwa/out/_next/static/chunks/9536.28962663c7734376.js +1 -0
  116. package/apps/pwa/out/_next/static/chunks/9686-12286f5bbf15a5a0.js +1 -0
  117. package/apps/pwa/out/_next/static/chunks/9776.289d40cc5a4c342a.js +1 -0
  118. package/apps/pwa/out/_next/static/chunks/{1674.2a65fd5668e1cc5f.js → 9789.60f723d18097ec30.js} +1 -1
  119. package/apps/pwa/out/_next/static/chunks/989.f0c17523c5e61f65.js +1 -0
  120. package/apps/pwa/out/_next/static/chunks/9972-1df393aa8d4f7d52.js +1 -0
  121. package/apps/pwa/out/_next/static/chunks/9f31e478.fefcbcd3c388ebc5.js +1 -0
  122. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-96750aba7430959f.js +1 -0
  123. package/apps/pwa/out/_next/static/chunks/app/approvals/page-4105e5bbbb043024.js +1 -0
  124. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-5d4fa75c2acb113e.js +1 -0
  125. package/apps/pwa/out/_next/static/chunks/app/board/page-a79a9bdb3b2142bf.js +1 -0
  126. package/apps/pwa/out/_next/static/chunks/app/botlab/page-f1c2047484992a35.js +1 -0
  127. package/apps/pwa/out/_next/static/chunks/app/bots/page-15ffc49b2d8c70e2.js +1 -0
  128. package/apps/pwa/out/_next/static/chunks/app/ceo/page-67d53a3fc8734135.js +1 -0
  129. package/apps/pwa/out/_next/static/chunks/app/chat/page-e30c8dc696491336.js +1 -0
  130. package/apps/pwa/out/_next/static/chunks/app/consult/page-2136e04fa77696e2.js +1 -0
  131. package/apps/pwa/out/_next/static/chunks/app/control/page-fecd2814790c2e12.js +1 -0
  132. package/apps/pwa/out/_next/static/chunks/app/decisions/page-280aa4a98fc5bb44.js +1 -0
  133. package/apps/pwa/out/_next/static/chunks/app/design-check/page-c14e96b65fb4b883.js +1 -0
  134. package/apps/pwa/out/_next/static/chunks/app/editor/page-187dac74825ed6bf.js +1 -0
  135. package/apps/pwa/out/_next/static/chunks/app/exec/page-6bc7246ea8c92448.js +1 -0
  136. package/apps/pwa/out/_next/static/chunks/app/field/page-083747f1d4518f61.js +1 -0
  137. package/apps/pwa/out/_next/static/chunks/app/healthz/route-96750aba7430959f.js +1 -0
  138. package/apps/pwa/out/_next/static/chunks/app/inside/page-15ca95a16ec96e1f.js +1 -0
  139. package/apps/pwa/out/_next/static/chunks/app/intake/page-a8ac031b3810eb64.js +1 -0
  140. package/apps/pwa/out/_next/static/chunks/app/layout-8835f93110494cda.js +1 -0
  141. package/apps/pwa/out/_next/static/chunks/app/live/page-e2de2e59111c9aad.js +1 -0
  142. package/apps/pwa/out/_next/static/chunks/app/live-run/page-f2b2e4bf6e981450.js +1 -0
  143. package/apps/pwa/out/_next/static/chunks/app/loops/page-5b92b7f75df20948.js +1 -0
  144. package/apps/pwa/out/_next/static/chunks/app/market/page-468eddf2b1a84ecb.js +1 -0
  145. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-2af16e62c12f22df.js +1 -0
  146. package/apps/pwa/out/_next/static/chunks/app/morning/page-18b40867a77a5793.js +1 -0
  147. package/apps/pwa/out/_next/static/chunks/app/not-found-fe934f2979f5a4a2.js +1 -0
  148. package/apps/pwa/out/_next/static/chunks/app/observatory/page-3eec435537357170.js +1 -0
  149. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-ff88cbfd2aa99fc8.js +1 -0
  150. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-a5b39fb780c70ab5.js +1 -0
  151. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ae465dde1d1b3933.js +1 -0
  152. package/apps/pwa/out/_next/static/chunks/app/outputs/page-e7abc34a48a6f71e.js +1 -0
  153. package/apps/pwa/out/_next/static/chunks/app/page-cab9674fde9ead26.js +1 -0
  154. package/apps/pwa/out/_next/static/chunks/app/reflection/page-1da49bc8712284d0.js +1 -0
  155. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5e8aa657551ac912.js +1 -0
  156. package/apps/pwa/out/_next/static/chunks/app/sessions/page-fcc36f36c6dc1fe2.js +1 -0
  157. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-d22db22f2a7296ca.js +1 -0
  158. package/apps/pwa/out/_next/static/chunks/app/settings/page-d12dc7b1773878f0.js +1 -0
  159. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-99debec9ea7fbec0.js +1 -0
  160. package/apps/pwa/out/_next/static/chunks/app/setup/layout-96750aba7430959f.js +1 -0
  161. package/apps/pwa/out/_next/static/chunks/app/setup/page-2a088a78bad7e924.js +1 -0
  162. package/apps/pwa/out/_next/static/chunks/app/share/page-2e8ed57db7e69993.js +1 -0
  163. package/apps/pwa/out/_next/static/chunks/app/showroom/page-4b3a16213c2ae8fe.js +1 -0
  164. package/apps/pwa/out/_next/static/chunks/app/tasks/page-f098747ddf38c98b.js +1 -0
  165. package/apps/pwa/out/_next/static/chunks/app/term/page-c15958835534404b.js +1 -0
  166. package/apps/pwa/out/_next/static/chunks/app/today/page-68279e3c843c1fd7.js +1 -0
  167. package/apps/pwa/out/_next/static/chunks/app/trace/page-a34a74453367a39d.js +1 -0
  168. package/apps/pwa/out/_next/static/chunks/app/vault/page-8767a7db2155a5bd.js +1 -0
  169. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-bd5976683460d7f2.js +1 -0
  170. package/apps/pwa/out/_next/static/chunks/app/workflows/page-b7364835e7f2ef54.js +1 -0
  171. package/apps/pwa/out/_next/static/chunks/app/workspace/page-311af16b3ee0ffca.js +1 -0
  172. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-fb670757274ae990.js +1 -0
  173. package/apps/pwa/out/_next/static/chunks/{0368f25d-ad84af92fefee68f.js → ccae1c4b-0cf414f5eff1b10d.js} +1 -1
  174. package/apps/pwa/out/_next/static/chunks/{cbe38a15.5a032598e39970c6.js → ceba0382.650712b56b85b582.js} +1 -1
  175. package/apps/pwa/out/_next/static/chunks/{b6705a4f-b9a9047de9eecfd0.js → da5ecc5c-b005ad8cac737d57.js} +1 -1
  176. package/apps/pwa/out/_next/static/chunks/{56d372f2.681ab4ec4c998fae.js → f9a61e4d.1fc2c1dbdd49fe46.js} +1 -1
  177. package/apps/pwa/out/_next/static/chunks/framework-6d497cbf1eef04c6.js +1 -0
  178. package/apps/pwa/out/_next/static/chunks/main-app-012f5edec932f337.js +1 -0
  179. package/apps/pwa/out/_next/static/chunks/main-da5aeb809edc94a2.js +1 -0
  180. package/apps/pwa/out/_next/static/chunks/pages/_app-5ee319af6f749dfe.js +1 -0
  181. package/apps/pwa/out/_next/static/chunks/pages/_error-4bc84653a718d6c6.js +1 -0
  182. package/apps/pwa/out/_next/static/chunks/webpack-8a96cf6775c73d6e.js +1 -0
  183. package/apps/pwa/out/_next/static/{T1mBQqmkwKDLGtyisDCOd → uC-N0emedeNOFuaBQFv-I}/_buildManifest.js +1 -1
  184. package/apps/pwa/out/approvals/index.html +1 -1
  185. package/apps/pwa/out/approvals/index.txt +22 -22
  186. package/apps/pwa/out/autopilot/index.html +1 -1
  187. package/apps/pwa/out/autopilot/index.txt +22 -22
  188. package/apps/pwa/out/board/index.html +1 -1
  189. package/apps/pwa/out/board/index.txt +22 -22
  190. package/apps/pwa/out/botlab/index.html +1 -1
  191. package/apps/pwa/out/botlab/index.txt +21 -21
  192. package/apps/pwa/out/bots/index.html +1 -1
  193. package/apps/pwa/out/bots/index.txt +21 -21
  194. package/apps/pwa/out/ceo/index.html +1 -1
  195. package/apps/pwa/out/ceo/index.txt +22 -22
  196. package/apps/pwa/out/chat/index.html +1 -1
  197. package/apps/pwa/out/chat/index.txt +21 -21
  198. package/apps/pwa/out/consult/index.html +1 -1
  199. package/apps/pwa/out/consult/index.txt +22 -22
  200. package/apps/pwa/out/control/index.html +1 -1
  201. package/apps/pwa/out/control/index.txt +22 -22
  202. package/apps/pwa/out/decisions/index.html +1 -1
  203. package/apps/pwa/out/decisions/index.txt +21 -21
  204. package/apps/pwa/out/design-check/index.html +1 -1
  205. package/apps/pwa/out/design-check/index.txt +22 -22
  206. package/apps/pwa/out/editor/index.html +1 -1
  207. package/apps/pwa/out/editor/index.txt +22 -22
  208. package/apps/pwa/out/exec/index.html +1 -1
  209. package/apps/pwa/out/exec/index.txt +22 -22
  210. package/apps/pwa/out/field/index.html +1 -1
  211. package/apps/pwa/out/field/index.txt +22 -22
  212. package/apps/pwa/out/healthz +1 -1
  213. package/apps/pwa/out/index.html +1 -1
  214. package/apps/pwa/out/index.txt +21 -21
  215. package/apps/pwa/out/inside/index.html +1 -1
  216. package/apps/pwa/out/inside/index.txt +21 -21
  217. package/apps/pwa/out/intake/index.html +1 -1
  218. package/apps/pwa/out/intake/index.txt +22 -22
  219. package/apps/pwa/out/live/index.html +1 -1
  220. package/apps/pwa/out/live/index.txt +22 -22
  221. package/apps/pwa/out/live-run/index.html +1 -1
  222. package/apps/pwa/out/live-run/index.txt +22 -22
  223. package/apps/pwa/out/loops/index.html +1 -1
  224. package/apps/pwa/out/loops/index.txt +21 -21
  225. package/apps/pwa/out/market/index.html +1 -1
  226. package/apps/pwa/out/market/index.txt +21 -21
  227. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  228. package/apps/pwa/out/missions/placeholder/index.txt +21 -21
  229. package/apps/pwa/out/morning/index.html +1 -1
  230. package/apps/pwa/out/morning/index.txt +22 -22
  231. package/apps/pwa/out/observatory/index.html +1 -1
  232. package/apps/pwa/out/observatory/index.txt +22 -22
  233. package/apps/pwa/out/ops/checklist/index.html +1 -1
  234. package/apps/pwa/out/ops/checklist/index.txt +21 -21
  235. package/apps/pwa/out/ops/release/index.html +1 -1
  236. package/apps/pwa/out/ops/release/index.txt +21 -21
  237. package/apps/pwa/out/ops/seats/index.html +1 -1
  238. package/apps/pwa/out/ops/seats/index.txt +21 -21
  239. package/apps/pwa/out/outputs/index.html +1 -1
  240. package/apps/pwa/out/outputs/index.txt +21 -21
  241. package/apps/pwa/out/reflection/index.html +1 -1
  242. package/apps/pwa/out/reflection/index.txt +22 -22
  243. package/apps/pwa/out/scheduler/index.html +1 -1
  244. package/apps/pwa/out/scheduler/index.txt +22 -22
  245. package/apps/pwa/out/sessions/index.html +1 -1
  246. package/apps/pwa/out/sessions/index.txt +21 -21
  247. package/apps/pwa/out/settings/devices/index.html +1 -1
  248. package/apps/pwa/out/settings/devices/index.txt +22 -22
  249. package/apps/pwa/out/settings/index.html +1 -1
  250. package/apps/pwa/out/settings/index.txt +22 -22
  251. package/apps/pwa/out/setup/done/index.html +1 -1
  252. package/apps/pwa/out/setup/done/index.txt +22 -22
  253. package/apps/pwa/out/setup/index.html +1 -1
  254. package/apps/pwa/out/setup/index.txt +22 -22
  255. package/apps/pwa/out/share/index.html +1 -1
  256. package/apps/pwa/out/share/index.txt +22 -22
  257. package/apps/pwa/out/showroom/index.html +1 -1
  258. package/apps/pwa/out/showroom/index.txt +21 -21
  259. package/apps/pwa/out/tasks/index.html +1 -1
  260. package/apps/pwa/out/tasks/index.txt +22 -22
  261. package/apps/pwa/out/term/index.html +1 -1
  262. package/apps/pwa/out/term/index.txt +22 -22
  263. package/apps/pwa/out/today/index.html +1 -1
  264. package/apps/pwa/out/today/index.txt +22 -22
  265. package/apps/pwa/out/trace/index.html +1 -1
  266. package/apps/pwa/out/trace/index.txt +22 -22
  267. package/apps/pwa/out/vault/index.html +1 -1
  268. package/apps/pwa/out/vault/index.txt +22 -22
  269. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  270. package/apps/pwa/out/workflows/chat-ui/index.txt +22 -22
  271. package/apps/pwa/out/workflows/index.html +1 -1
  272. package/apps/pwa/out/workflows/index.txt +22 -22
  273. package/apps/pwa/out/workspace/index.html +1 -1
  274. package/apps/pwa/out/workspace/index.txt +22 -22
  275. package/apps/pwa/out/worktrees/index.html +1 -1
  276. package/apps/pwa/out/worktrees/index.txt +22 -22
  277. package/docs/goal-context/05-authoring-lessons.jsonl +47 -0
  278. package/docs/goal-context/README.md +3 -0
  279. package/graphs/default-loop.yaml +6 -1
  280. package/graphs/implement-loop.yaml +24 -0
  281. package/graphs/release/recipes.yaml +6 -0
  282. package/graphs/release/release-loop.yaml +17 -4
  283. package/graphs/wizard/recipes.yaml +44 -0
  284. package/graphs/wizard/wizard-loop.yaml +44 -0
  285. package/graphs/work/research-report.yaml +2 -0
  286. package/package.json +1 -1
  287. package/scripts/ci-typecheck-changed.ts +139 -5
  288. package/scripts/coord-role-pack.ts +1 -1
  289. package/scripts/first10-gate.ts +416 -0
  290. package/scripts/fleet/wsl-node-setup.sh +432 -0
  291. package/scripts/release-loop/docs-node.ts +204 -8
  292. package/scripts/release-loop/gate-node.ts +249 -53
  293. package/scripts/release-loop/node-verdict.ts +2 -0
  294. package/scripts/release-loop/resume-cap.ts +14 -34
  295. package/scripts/release-loop/resume-release.ts +37 -11
  296. package/scripts/release-loop/traffic-node.ts +59 -0
  297. package/scripts/release-loop/traffic-transition.ts +159 -0
  298. package/scripts/rhythm/daily.ts +137 -3
  299. package/scripts/ux-sim.ts +53 -0
  300. package/skills/README.md +1 -0
  301. package/src/acp/core-turn-bridge.ts +48 -6
  302. package/src/agent/delegate-hint.ts +16 -0
  303. package/src/agent/runner.ts +82 -2
  304. package/src/agent/task-notification.ts +56 -10
  305. package/src/agent/types.ts +4 -0
  306. package/src/agent-substrate/pr-reviewer.ts +55 -3
  307. package/src/agent-substrate/review-intent.ts +29 -2
  308. package/src/agent-substrate/review-observation.ts +3 -0
  309. package/src/agent-substrate/self-review-cli.ts +168 -16
  310. package/src/autopilot/mission-codebase-gate.ts +141 -12
  311. package/src/autopilot/pr-manager.ts +25 -5
  312. package/src/boot/daemon-tools/self-implement.ts +1 -0
  313. package/src/budget/usage-outcomes.ts +8 -4
  314. package/src/capture/tui-self-report.ts +102 -0
  315. package/src/chat/goal-continue-verdict.ts +41 -0
  316. package/src/chat/index.ts +30 -4
  317. package/src/chat/internal-turn-origin.ts +1 -0
  318. package/src/chat/paste-fold.ts +86 -0
  319. package/src/chat/tool-render/block.ts +32 -0
  320. package/src/chat/tool-render/dispatch.ts +2 -20
  321. package/src/chat/tool-render/result-text.ts +98 -0
  322. package/src/chat/turn-typeahead.ts +70 -7
  323. package/src/cli/config-audit.ts +119 -0
  324. package/src/cli/doctor-cli.ts +22 -0
  325. package/src/cli/guardian-cli.ts +10 -0
  326. package/src/cli/herdr-cli.ts +34 -0
  327. package/src/cli/light-entry-route.ts +6 -3
  328. package/src/cli/log-event-names.ts +2 -0
  329. package/src/cli/make-cli.ts +247 -11
  330. package/src/cli/msg-cli.ts +117 -3
  331. package/src/cli/pr-cli.ts +29 -16
  332. package/src/cli/pr-land-base-read.ts +11 -2
  333. package/src/cli/pr-land-heavy-remote.ts +6 -3
  334. package/src/cli/pr-land-overlap-evidence.ts +23 -4
  335. package/src/cli/pr-land-recovery.ts +117 -1
  336. package/src/cli/pty-takeover-cli.ts +8 -7
  337. package/src/cli/release-cli.ts +21 -5
  338. package/src/cli/release-single-flight.ts +1 -1
  339. package/src/cli/tasks-card-show.ts +162 -0
  340. package/src/cli/tasks-cli.ts +574 -356
  341. package/src/cli/tasks-read-cli.ts +197 -0
  342. package/src/core-turn/run-core-turn.ts +4 -2
  343. package/src/core-turn/run-goal-loop.ts +73 -16
  344. package/src/core-turn/types.ts +6 -1
  345. package/src/dashboard/context/keys.ts +8 -31
  346. package/src/dashboard/index.ts +202 -49
  347. package/src/dashboard/input/agent-wake.ts +7 -1
  348. package/src/dashboard/input/chat-main-plain-turn-runtime.ts +146 -3
  349. package/src/dashboard/input/chat-main-slash-command.ts +4 -2
  350. package/src/dashboard/input/goal-continue.ts +210 -0
  351. package/src/dashboard/input/goal-interim.ts +2 -0
  352. package/src/dashboard/input/internal-turn.ts +2 -8
  353. package/src/dashboard/input/seat-autowake.ts +9 -7
  354. package/src/dashboard/input/turn-autoheal.ts +52 -0
  355. package/src/dashboard/seat-boot-preamble.ts +132 -5
  356. package/src/dashboard/slash-runtime/chat-persona.ts +65 -8
  357. package/src/dashboard/slash-runtime/dashboard-handlers.ts +3 -2
  358. package/src/dashboard/slash-runtime/model-choices.ts +15 -0
  359. package/src/dashboard/stale-install-check.ts +3 -99
  360. package/src/debug/batch-queue.ts +119 -0
  361. package/src/debug/tui-log-tag.ts +67 -0
  362. package/src/display/agent-surface.ts +7 -0
  363. package/src/domains/standalone-log-sink.ts +15 -2
  364. package/src/esc-abort-gate.ts +69 -0
  365. package/src/git-fs/worktree.ts +95 -1
  366. package/src/graph-runner/graph-cli.ts +18 -0
  367. package/src/graph-runner/runner.ts +20 -11
  368. package/src/graph-wizard/generate.ts +108 -4
  369. package/src/graph-wizard/steps.ts +15 -0
  370. package/src/grounding/proactive-ground.ts +86 -0
  371. package/src/harness/control-inbox.ts +49 -1
  372. package/src/harness/harness-cli-command.ts +51 -7
  373. package/src/harness/harness-incidents.ts +52 -1
  374. package/src/harness/pod-control-send.ts +33 -5
  375. package/src/harness/self-send-remote.ts +69 -0
  376. package/src/harness/self-send-routing-guard.ts +6 -0
  377. package/src/harness/self-send-target.ts +4 -3
  378. package/src/index.ts +327 -12
  379. package/src/input-core/context-key-runtime.ts +21 -0
  380. package/src/light-cli.ts +6 -1
  381. package/src/llm-wellformed.ts +70 -0
  382. package/src/llm.ts +35 -4
  383. package/src/loops/msg-wake.ts +35 -39
  384. package/src/loops/orchestrator/inbox.ts +59 -11
  385. package/src/loops/orchestrator/knowhow-pack.ts +364 -0
  386. package/src/loops/orchestrator/tick.ts +5 -1
  387. package/src/maturity/feature-maturity.ts +1 -1
  388. package/src/models/prompts.ts +17 -2
  389. package/src/msg/msg-post-office.ts +116 -0
  390. package/src/mss/logging/log-store.ts +79 -22
  391. package/src/nexus/api/decisions-route.ts +38 -18
  392. package/src/nexus/api/graph-wizard-api.ts +20 -2
  393. package/src/nexus/boot/register-mcp-clients.ts +263 -38
  394. package/src/nexus/onboarding/first-boot-wizard.ts +56 -8
  395. package/src/onboarding/first-run.ts +37 -6
  396. package/src/onboarding/web-first.ts +43 -11
  397. package/src/ops/overview-collect.ts +12 -6
  398. package/src/ops/overview.ts +3 -3
  399. package/src/persona/loader.ts +11 -0
  400. package/src/persona/types.ts +8 -0
  401. package/src/prompt-library/session-guidance.ts +14 -0
  402. package/src/provider-summary.ts +8 -0
  403. package/src/pty-shell/herdr-agent-report.ts +118 -9
  404. package/src/pty-shell/herdr-prompt.ts +266 -0
  405. package/src/pty-shell/pty-control-ipc.ts +151 -8
  406. package/src/pty-shell/pty-special-keys.ts +42 -2
  407. package/src/pty-shell/stale-install-check.ts +99 -0
  408. package/src/pty-shell/tui-run-state.ts +14 -2
  409. package/src/release-loop/auto-start.ts +20 -2
  410. package/src/release-loop/checklist.ts +76 -4
  411. package/src/release-loop/rehearsal.ts +36 -20
  412. package/src/repl/index.ts +19 -1
  413. package/src/seat-loop/knowhow-lint.ts +1 -1
  414. package/src/self-dev/decompose-proposal.ts +172 -20
  415. package/src/self-dev/decompose.ts +61 -0
  416. package/src/self-dev/dev-cli.ts +37 -3
  417. package/src/self-dev/dev-pipeline.ts +8 -2
  418. package/src/self-dev/draft-triage-rules.ts +31 -0
  419. package/src/self-dev/glm-credential-guard.ts +77 -0
  420. package/src/self-dev/graph-journey-nodes.ts +1 -0
  421. package/src/self-dev/graph-journey-route.ts +12 -2
  422. package/src/self-dev/orchestrate-cli.ts +68 -3
  423. package/src/self-dev/orchestrate.ts +116 -17
  424. package/src/self-dev/run-supervisor.ts +55 -2
  425. package/src/self-dev/run-types.ts +1 -1
  426. package/src/self-health/autoheal.ts +153 -0
  427. package/src/self-health/signatures.ts +6 -0
  428. package/src/self-implement/device-first.ts +116 -0
  429. package/src/self-implement/doctor-visit.ts +239 -1
  430. package/src/self-implement/evidence-command-budget.ts +80 -0
  431. package/src/self-implement/goal-author-cli.ts +1 -0
  432. package/src/self-implement/goal-author-decompose.ts +265 -4
  433. package/src/self-implement/goal-author.ts +33 -8
  434. package/src/self-implement/goal-elaborate.ts +176 -22
  435. package/src/self-implement/goal-refine.ts +3 -0
  436. package/src/self-implement/graph-variant.ts +40 -6
  437. package/src/self-implement/headless-elanous-driver.ts +19 -3
  438. package/src/self-implement/off-diff-evidence.ts +58 -6
  439. package/src/self-implement/orchestrator.ts +222 -21
  440. package/src/self-implement/pod-warm-pool-profile.ts +1 -0
  441. package/src/self-implement/pwa-import-graph.ts +1 -1
  442. package/src/self-implement/rework-policy.ts +30 -0
  443. package/src/self-implement/run-ledger.ts +108 -0
  444. package/src/self-implement/run-ttl.ts +38 -24
  445. package/src/self-implement/scope-adjacency.ts +3 -1
  446. package/src/self-implement/seams.ts +60 -4
  447. package/src/self-implement/wiring-check.ts +358 -0
  448. package/src/shell-env-bootstrap.ts +11 -4
  449. package/src/skills/runner.ts +4 -2
  450. package/src/skills/tools/agent.ts +290 -48
  451. package/src/skills/tools/schedule-wakeup.ts +23 -4
  452. package/src/skills/tools/shell.ts +61 -6
  453. package/src/skills/tools/terminal-modal-inject.ts +1 -2
  454. package/src/skills/tools/terminal-modal.ts +10 -8
  455. package/src/skills/url-router.ts +41 -1
  456. package/src/smart-wizard/run.ts +66 -0
  457. package/src/status/bar.ts +34 -6
  458. package/src/status/status-provider-info.ts +37 -6
  459. package/src/steward/rejudge-tick.ts +10 -2
  460. package/src/steward/ta-repair-event-collect.ts +17 -6
  461. package/src/task-agent/actions.ts +3 -1
  462. package/src/task-agent/land-queue.ts +21 -8
  463. package/src/task-agent/live-moves.ts +22 -6
  464. package/src/task-agent/mission.ts +30 -0
  465. package/src/task-agent/rejudge-on-head.ts +15 -0
  466. package/src/task-agent/repair-cycle.ts +138 -32
  467. package/src/task-agent/repair-next-move.ts +31 -3
  468. package/src/task-agent/repair-outcomes.ts +29 -0
  469. package/src/task-agent/repair-worker.ts +14 -4
  470. package/src/task-agent/shadow.ts +41 -3
  471. package/src/task-agent/task-card-prefix.ts +2 -0
  472. package/src/task-agent/task-hand.ts +477 -22
  473. package/src/task-agent/task-parent-role-llm.ts +36 -0
  474. package/src/task-agent/tier-split.ts +78 -9
  475. package/src/task-orchestrator/surfaces/pod-account-broker.ts +9 -0
  476. package/src/task-orchestrator/surfaces/pod-child-reuse.ts +146 -0
  477. package/src/task-orchestrator/surfaces/pod-command-job.ts +86 -5
  478. package/src/task-orchestrator/surfaces/pod-failure-reason.ts +215 -3
  479. package/src/task-orchestrator/surfaces/pod-launch-history.ts +133 -0
  480. package/src/task-orchestrator/surfaces/pod-manifest-test-normalize.ts +11 -0
  481. package/src/task-orchestrator/surfaces/pod-pool.ts +76 -4
  482. package/src/task-orchestrator/surfaces/pod-provenance.ts +8 -2
  483. package/src/task-orchestrator/surfaces/pod-repair-commit.ts +18 -3
  484. package/src/task-orchestrator/surfaces/pod-si-warm-entry.ts +16 -0
  485. package/src/task-orchestrator/surfaces/pod-si-warm-host.ts +224 -0
  486. package/src/task-orchestrator/surfaces/pod-si-warm-protocol.ts +201 -0
  487. package/src/task-orchestrator/surfaces/pod-si-warm-provider.ts +444 -0
  488. package/src/task-orchestrator/surfaces/pod-si-warm-runner.ts +387 -0
  489. package/src/task-orchestrator/surfaces/pod-si-warm-transport.ts +157 -0
  490. package/src/task-orchestrator/surfaces/pod-warm-worker-protocol.ts +4 -0
  491. package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +485 -36
  492. package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +3 -0
  493. package/src/task-orchestrator/surfaces/self-implement-pod.ts +396 -19
  494. package/src/task-orchestrator/surfaces/self-implement.ts +42 -2
  495. package/src/tool-runtime/index.ts +15 -2
  496. package/src/tool-runtime/mcp-proxy-bootstrap.ts +29 -0
  497. package/src/tty-foreground.ts +155 -0
  498. package/src/tui/chat/goal-interim.ts +173 -0
  499. package/src/tui/chat/log-view.ts +205 -18
  500. package/src/tui/chat/self-health-status.ts +232 -0
  501. package/src/tui/entry.ts +370 -81
  502. package/src/tui/input/composer.ts +8 -1
  503. package/src/tui/slash/compact-command.ts +7 -0
  504. package/src/tui/slash/compact.ts +1 -7
  505. package/src/tui/slash/resume.ts +75 -0
  506. package/src/tui-client/local-chat-turn.ts +45 -2
  507. package/src/tui-client/next-dashboard-runtime.ts +8 -0
  508. package/src/tui-client/next-loop-command.ts +70 -0
  509. package/src/tui-client/next-wakeup.ts +191 -0
  510. package/src/tui.ts +37 -0
  511. package/src/ui/modal-adapter.ts +2 -2
  512. package/src/ux-sim/classic-tui-seat-scenarios.ts +516 -0
  513. package/src/ux-sim/cli-config-audit-device.ts +121 -0
  514. package/src/ux-sim/dashboard-event-loop-stall-monitor-device.ts +238 -0
  515. package/src/ux-sim/event-monkey.ts +3 -2
  516. package/src/ux-sim/fake-bin.ts +45 -0
  517. package/src/ux-sim/fake-herdr.ts +238 -0
  518. package/src/ux-sim/fake-llm.ts +111 -6
  519. package/src/ux-sim/fault-glm-no-credential.ts +116 -0
  520. package/src/ux-sim/fault-nextmove-dispatch.ts +102 -1
  521. package/src/ux-sim/fault-scope-escape-lift.ts +33 -6
  522. package/src/ux-sim/fault-tui-400-autoheal.ts +297 -0
  523. package/src/ux-sim/goal-device.ts +619 -0
  524. package/src/ux-sim/in-process-cli.ts +22 -5
  525. package/src/ux-sim/mock-authoring-first-run-child.ts +35 -0
  526. package/src/ux-sim/mock-authoring-first-run.ts +97 -0
  527. package/src/ux-sim/mock-seat-pty-frame-child.ts +29 -0
  528. package/src/ux-sim/mock-seat-pty-frame.ts +297 -0
  529. package/src/ux-sim/mock-seat-pty-sequence-child.ts +21 -0
  530. package/src/ux-sim/mock-seat-pty-sequence.ts +206 -0
  531. package/src/ux-sim/next-tui-seat-scenarios.ts +631 -0
  532. package/src/ux-sim/onboarding-first-run-device.ts +269 -0
  533. package/src/ux-sim/pty-key-modifiers-device.ts +85 -0
  534. package/src/ux-sim/subagent-tools-device.ts +81 -0
  535. package/src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.ts +250 -0
  536. package/src/ux-sim/tty-foreground-steal-child.ts +21 -0
  537. package/src/version/packed-revision.json +1 -1
  538. package/apps/pwa/out/_next/static/chunks/1165.bad13fc9151a7288.js +0 -1
  539. package/apps/pwa/out/_next/static/chunks/13.02a07436dec15f89.js +0 -32
  540. package/apps/pwa/out/_next/static/chunks/1540.af38731fa7c4a3e0.js +0 -41
  541. package/apps/pwa/out/_next/static/chunks/1850.f2b470ba5a471da0.js +0 -24
  542. package/apps/pwa/out/_next/static/chunks/193.62da94cd0b88323b.js +0 -74
  543. package/apps/pwa/out/_next/static/chunks/1975.260f6d249fac5f7c.js +0 -1
  544. package/apps/pwa/out/_next/static/chunks/1982-67cd8dfe8682325f.js +0 -1
  545. package/apps/pwa/out/_next/static/chunks/1993-c0007b7ad0c0ef41.js +0 -1
  546. package/apps/pwa/out/_next/static/chunks/1999-bb415351c8a2846c.js +0 -1
  547. package/apps/pwa/out/_next/static/chunks/1c735de4.f993a30bbd3c57c4.js +0 -1
  548. package/apps/pwa/out/_next/static/chunks/1dc5a567.9b092bfae3d7099b.js +0 -1
  549. package/apps/pwa/out/_next/static/chunks/2085.8f950b4bda1cbbc7.js +0 -1
  550. package/apps/pwa/out/_next/static/chunks/2159-6179a961376956b9.js +0 -1
  551. package/apps/pwa/out/_next/static/chunks/216.b5c2a421aa1d28a5.js +0 -1
  552. package/apps/pwa/out/_next/static/chunks/2251.49fbe369f74c372c.js +0 -148
  553. package/apps/pwa/out/_next/static/chunks/2286-2939577360d3dcc0.js +0 -1
  554. package/apps/pwa/out/_next/static/chunks/2625.5d870aa999f33db1.js +0 -34
  555. package/apps/pwa/out/_next/static/chunks/2668.34d21539e62bf111.js +0 -77
  556. package/apps/pwa/out/_next/static/chunks/2833-0fe47af99ed13c29.js +0 -1
  557. package/apps/pwa/out/_next/static/chunks/2930.d0edb4f108787ef7.js +0 -1
  558. package/apps/pwa/out/_next/static/chunks/2973.77318e7d85f59477.js +0 -62
  559. package/apps/pwa/out/_next/static/chunks/3123.2bee9ba15d320bd2.js +0 -90
  560. package/apps/pwa/out/_next/static/chunks/3162-6cf652bf7124d8cf.js +0 -1
  561. package/apps/pwa/out/_next/static/chunks/3577-7340009f7007a795.js +0 -1
  562. package/apps/pwa/out/_next/static/chunks/3618.f514792d6c59d7fd.js +0 -36
  563. package/apps/pwa/out/_next/static/chunks/3669.343f9119aa276001.js +0 -1
  564. package/apps/pwa/out/_next/static/chunks/3736.c2efad489604cc3b.js +0 -79
  565. package/apps/pwa/out/_next/static/chunks/3817.f9aeab2bb6675d73.js +0 -1
  566. package/apps/pwa/out/_next/static/chunks/3f7c4ee5.3dde54f01a816613.js +0 -122
  567. package/apps/pwa/out/_next/static/chunks/4182-0b9b1251c29cc0cf.js +0 -1
  568. package/apps/pwa/out/_next/static/chunks/4441-875b97f5821ed58a.js +0 -1
  569. package/apps/pwa/out/_next/static/chunks/4582.bd68683c076649e3.js +0 -286
  570. package/apps/pwa/out/_next/static/chunks/4605-6e623f55aec77422.js +0 -1
  571. package/apps/pwa/out/_next/static/chunks/4607.5cc27468628eb4bf.js +0 -1
  572. package/apps/pwa/out/_next/static/chunks/4627.f07508b3936fd6c0.js +0 -24
  573. package/apps/pwa/out/_next/static/chunks/4747-c22262c093e46807.js +0 -1
  574. package/apps/pwa/out/_next/static/chunks/4775-178215aed0daba61.js +0 -1
  575. package/apps/pwa/out/_next/static/chunks/4815-6ffb8c3c991cc45d.js +0 -1
  576. package/apps/pwa/out/_next/static/chunks/4834-beca8b47ad29a898.js +0 -1
  577. package/apps/pwa/out/_next/static/chunks/5023-fb4802b6d2492b02.js +0 -1
  578. package/apps/pwa/out/_next/static/chunks/5154.a118f3957ed14e36.js +0 -1
  579. package/apps/pwa/out/_next/static/chunks/5210-a2e0015e3d4d5d9c.js +0 -1
  580. package/apps/pwa/out/_next/static/chunks/5356.84ac712cc15928bf.js +0 -1
  581. package/apps/pwa/out/_next/static/chunks/5401.22352141b6fd336e.js +0 -23
  582. package/apps/pwa/out/_next/static/chunks/5483-dd5d7697f6bdb106.js +0 -1
  583. package/apps/pwa/out/_next/static/chunks/5662.02eaa029af05ad46.js +0 -1
  584. package/apps/pwa/out/_next/static/chunks/5760.22456f433c6f42c0.js +0 -1
  585. package/apps/pwa/out/_next/static/chunks/5852.db1f7449f4f74612.js +0 -287
  586. package/apps/pwa/out/_next/static/chunks/5891-0f11a7d7362a9072.js +0 -1
  587. package/apps/pwa/out/_next/static/chunks/5943.264d14a44ca32513.js +0 -1
  588. package/apps/pwa/out/_next/static/chunks/604-1b3c39df083c02aa.js +0 -1
  589. package/apps/pwa/out/_next/static/chunks/6121-5f97072330738caf.js +0 -1
  590. package/apps/pwa/out/_next/static/chunks/6193.07d8ca5af4b09086.js +0 -1
  591. package/apps/pwa/out/_next/static/chunks/6203-b3fea3a60d69ff14.js +0 -1
  592. package/apps/pwa/out/_next/static/chunks/6286.d638fb5953e2e757.js +0 -8
  593. package/apps/pwa/out/_next/static/chunks/6301.ae0245f507e4395e.js +0 -1
  594. package/apps/pwa/out/_next/static/chunks/6673.fbbe5699f6ea5991.js +0 -27
  595. package/apps/pwa/out/_next/static/chunks/6777-f6d301efb5de828d.js +0 -1
  596. package/apps/pwa/out/_next/static/chunks/6786.423f24c88de034c7.js +0 -93
  597. package/apps/pwa/out/_next/static/chunks/6854-cef64a948c5e122d.js +0 -1
  598. package/apps/pwa/out/_next/static/chunks/6866-79aa5b4e47cac6aa.js +0 -1
  599. package/apps/pwa/out/_next/static/chunks/6b89c8bd.24df687a820500b3.js +0 -1
  600. package/apps/pwa/out/_next/static/chunks/7037-fe27f001db30d323.js +0 -1
  601. package/apps/pwa/out/_next/static/chunks/7080.2d826860534fd88e.js +0 -1
  602. package/apps/pwa/out/_next/static/chunks/7118.8731be28c3ebb14b.js +0 -1
  603. package/apps/pwa/out/_next/static/chunks/7196.44241bc1df3e26fe.js +0 -149
  604. package/apps/pwa/out/_next/static/chunks/7235.c7c4e6cb5c693c2d.js +0 -104
  605. package/apps/pwa/out/_next/static/chunks/7706-58bfb1546637f217.js +0 -1
  606. package/apps/pwa/out/_next/static/chunks/7839.5b91455338c9fd3f.js +0 -1
  607. package/apps/pwa/out/_next/static/chunks/7857-31f13ee96f4011aa.js +0 -1
  608. package/apps/pwa/out/_next/static/chunks/81.f74cb60312fe4001.js +0 -1
  609. package/apps/pwa/out/_next/static/chunks/8219.baa715d1deee80e2.js +0 -1
  610. package/apps/pwa/out/_next/static/chunks/8256.e3ac8421a71f82f4.js +0 -1
  611. package/apps/pwa/out/_next/static/chunks/8310-444a6a895c402f12.js +0 -1
  612. package/apps/pwa/out/_next/static/chunks/8423.f7dda8aca4fcaae5.js +0 -1
  613. package/apps/pwa/out/_next/static/chunks/8437-8d5492094b166cfa.js +0 -1
  614. package/apps/pwa/out/_next/static/chunks/8496.75649af8652c74f4.js +0 -226
  615. package/apps/pwa/out/_next/static/chunks/8576.65bb654b524f3614.js +0 -1
  616. package/apps/pwa/out/_next/static/chunks/8609.558ce2f8f9aea2be.js +0 -64
  617. package/apps/pwa/out/_next/static/chunks/8614.caec96cfb91f4ae7.js +0 -1
  618. package/apps/pwa/out/_next/static/chunks/8732.367f44a916202353.js +0 -1
  619. package/apps/pwa/out/_next/static/chunks/9141-7fd1f73a5400bdc2.js +0 -1
  620. package/apps/pwa/out/_next/static/chunks/921.c4267d0d69a65404.js +0 -1
  621. package/apps/pwa/out/_next/static/chunks/9261.3962c3321b047691.js +0 -115
  622. package/apps/pwa/out/_next/static/chunks/936-26efd1a0efdd44d3.js +0 -1
  623. package/apps/pwa/out/_next/static/chunks/9627-4b9efe616b27e2e2.js +0 -1
  624. package/apps/pwa/out/_next/static/chunks/967-2aa39b2d04b4c690.js +0 -1
  625. package/apps/pwa/out/_next/static/chunks/9734.40eb1e558c29ccea.js +0 -1
  626. package/apps/pwa/out/_next/static/chunks/9908.3aa54f7a586a73dc.js +0 -1
  627. package/apps/pwa/out/_next/static/chunks/9954-ca8d29752bdbb45a.js +0 -1
  628. package/apps/pwa/out/_next/static/chunks/9974-507fa67cb94066dd.js +0 -1
  629. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-ce9e00f7fb45506a.js +0 -1
  630. package/apps/pwa/out/_next/static/chunks/app/approvals/page-fa59d6d17daa3389.js +0 -1
  631. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-53f68bbe7bd4b774.js +0 -1
  632. package/apps/pwa/out/_next/static/chunks/app/board/page-1c500fbb9f4a7a04.js +0 -1
  633. package/apps/pwa/out/_next/static/chunks/app/botlab/page-99d72673aa5c307c.js +0 -1
  634. package/apps/pwa/out/_next/static/chunks/app/bots/page-d2d5adc1e9484c88.js +0 -1
  635. package/apps/pwa/out/_next/static/chunks/app/ceo/page-c607c5aae637f1cc.js +0 -1
  636. package/apps/pwa/out/_next/static/chunks/app/chat/page-fa8c23596d555c0f.js +0 -1
  637. package/apps/pwa/out/_next/static/chunks/app/consult/page-bdab8c5e855c8416.js +0 -1
  638. package/apps/pwa/out/_next/static/chunks/app/control/page-406b47745b53f269.js +0 -1
  639. package/apps/pwa/out/_next/static/chunks/app/decisions/page-a4276386b7051f50.js +0 -1
  640. package/apps/pwa/out/_next/static/chunks/app/design-check/page-8a26bab9ad375f25.js +0 -1
  641. package/apps/pwa/out/_next/static/chunks/app/editor/page-775f48aa1dc7a2d5.js +0 -1
  642. package/apps/pwa/out/_next/static/chunks/app/exec/page-1c4dd5f959d0c558.js +0 -1
  643. package/apps/pwa/out/_next/static/chunks/app/field/page-c48938a8377c9f70.js +0 -1
  644. package/apps/pwa/out/_next/static/chunks/app/healthz/route-ce9e00f7fb45506a.js +0 -1
  645. package/apps/pwa/out/_next/static/chunks/app/inside/page-c6e7905859425aa9.js +0 -1
  646. package/apps/pwa/out/_next/static/chunks/app/intake/page-c280f4252452e830.js +0 -1
  647. package/apps/pwa/out/_next/static/chunks/app/layout-cf8c57498f20970a.js +0 -1
  648. package/apps/pwa/out/_next/static/chunks/app/live/page-ca3a17caf409fc83.js +0 -1
  649. package/apps/pwa/out/_next/static/chunks/app/live-run/page-26e6c18a1a750cf6.js +0 -1
  650. package/apps/pwa/out/_next/static/chunks/app/loops/page-3abc872cc6aeee39.js +0 -1
  651. package/apps/pwa/out/_next/static/chunks/app/market/page-f7481b7b2174fe3d.js +0 -1
  652. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1ae7ef8077680337.js +0 -1
  653. package/apps/pwa/out/_next/static/chunks/app/morning/page-47c5d4db587266bd.js +0 -1
  654. package/apps/pwa/out/_next/static/chunks/app/not-found-415f1e243c7ccb13.js +0 -1
  655. package/apps/pwa/out/_next/static/chunks/app/observatory/page-73f380f17b76f95c.js +0 -1
  656. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-2991073ad66ee2d9.js +0 -1
  657. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-1f5a60f70cb4dd0c.js +0 -1
  658. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fbad60d1e358fb2c.js +0 -1
  659. package/apps/pwa/out/_next/static/chunks/app/outputs/page-bac7dee94e5eae4a.js +0 -1
  660. package/apps/pwa/out/_next/static/chunks/app/page-398047d6949e8ca5.js +0 -1
  661. package/apps/pwa/out/_next/static/chunks/app/reflection/page-2d33a2231540ca89.js +0 -1
  662. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5bf1e6bf70bcb96c.js +0 -1
  663. package/apps/pwa/out/_next/static/chunks/app/sessions/page-ba59c19376a0917d.js +0 -1
  664. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-111f187139add30f.js +0 -1
  665. package/apps/pwa/out/_next/static/chunks/app/settings/page-acaae197d5be5779.js +0 -1
  666. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-0df20b0f546a0d7d.js +0 -1
  667. package/apps/pwa/out/_next/static/chunks/app/setup/layout-ce9e00f7fb45506a.js +0 -1
  668. package/apps/pwa/out/_next/static/chunks/app/setup/page-27e1202d24b8fe35.js +0 -1
  669. package/apps/pwa/out/_next/static/chunks/app/share/page-bda78c50a78363e5.js +0 -1
  670. package/apps/pwa/out/_next/static/chunks/app/showroom/page-da592691293d9c9f.js +0 -1
  671. package/apps/pwa/out/_next/static/chunks/app/tasks/page-f832994317a2e9f0.js +0 -1
  672. package/apps/pwa/out/_next/static/chunks/app/term/page-dc0a532f5b9196ec.js +0 -1
  673. package/apps/pwa/out/_next/static/chunks/app/today/page-cfccbbeae0473404.js +0 -1
  674. package/apps/pwa/out/_next/static/chunks/app/trace/page-527e2073af84c81b.js +0 -1
  675. package/apps/pwa/out/_next/static/chunks/app/vault/page-bac86e9112671357.js +0 -1
  676. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-6d59dff410e9d76a.js +0 -1
  677. package/apps/pwa/out/_next/static/chunks/app/workflows/page-53a61f8be09f02d2.js +0 -1
  678. package/apps/pwa/out/_next/static/chunks/app/workspace/page-db8f559e763c17f9.js +0 -1
  679. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-c02aa4cc66455093.js +0 -1
  680. package/apps/pwa/out/_next/static/chunks/framework-50e6acebc630849b.js +0 -1
  681. package/apps/pwa/out/_next/static/chunks/main-7a1ae342d5ed75e6.js +0 -1
  682. package/apps/pwa/out/_next/static/chunks/main-app-7ad7d505ba1f92b4.js +0 -1
  683. package/apps/pwa/out/_next/static/chunks/pages/_app-02edba75232cb235.js +0 -1
  684. package/apps/pwa/out/_next/static/chunks/pages/_error-97d6ebae3e8eee4a.js +0 -1
  685. package/apps/pwa/out/_next/static/chunks/webpack-e986adaa429163e8.js +0 -1
  686. /package/apps/pwa/out/_next/static/{T1mBQqmkwKDLGtyisDCOd → uC-N0emedeNOFuaBQFv-I}/_ssgManifest.js +0 -0
@@ -328,6 +328,7 @@ import { composeDashboardKeyHandlers, dispatchDashboardKey } from './input/key-d
328
328
  import { runDashboardChatMainEntry } from './input/chat-main-entry-runtime.js';
329
329
  import { createMirrorDrawThrottle } from './mirror-draw-throttle.js';
330
330
  import { runDashboardChatMainPlainTurn } from './input/chat-main-plain-turn-runtime.js';
331
+ import { createDashboardTurnAutoheal } from './input/turn-autoheal.js';
331
332
  import {
332
333
  createDashboardChatMainTurnSubmit,
333
334
  runDashboardChatMainSubmitIntent,
@@ -451,7 +452,7 @@ import { FoldStack } from '../fold-stack.js';
451
452
  import { getSkillIndex, reloadSkillIndex, applySkillFilter, skillIndexProblems } from '../skills/index.js';
452
453
  import { skillRepairNotice } from '../skills/repair.js';
453
454
  import type { DetectResult } from '../skills/router.js';
454
- import { detectUrlRoute } from '../skills/url-router.js';
455
+ import { detectUrlRoute, extractUrls, workContextGuardReason } from '../skills/url-router.js';
455
456
  import {
456
457
  observeDevRequestRouteFailSoft,
457
458
  type DevRequestRoutingConfig,
@@ -541,6 +542,54 @@ export function settleEscAbortPendingLines(lines: string[], fromIndex: number):
541
542
  }
542
543
  }
543
544
 
545
+ export interface EscAbortPendingSoftStopDeps {
546
+ /** Live foreground harness space for this turn — null when unidentified or multiple runs. */
547
+ getActiveHarnessSpace: () => string | null;
548
+ /** Push a line into the chat transcript. */
549
+ pushChatLine: (line: string) => void;
550
+ /** Self-implement hint line; returns true when it consumed the event. */
551
+ showHarnessEscHint: (targets: readonly string[]) => boolean;
552
+ }
553
+
554
+ export type EscAbortPendingSoftStopOutcome = 'stopped' | 'failed' | 'hint' | 'waiting';
555
+
556
+ export interface EscAbortPendingSoftStopResult {
557
+ outcome: EscAbortPendingSoftStopOutcome;
558
+ /** Harness space that received the durable stop marker, when any. */
559
+ stoppedHarnessSpace: string | null;
560
+ }
561
+
562
+ /**
563
+ * ⭐ TUI-ESC-EXIT production seam — the ESC soft-stop callback that
564
+ * `attachChatStreamingKeys` wires into `createEscAbortGate`'s
565
+ * `onAbortPending`, extracted as a directly callable export so the incident
566
+ * test (test/esc-harness-stop.test.ts) exercises the same function the
567
+ * dashboard executes. Identified foreground harness space → enqueue the real
568
+ * durable soft-stop marker (`enqueueSoftStop`) and verify it
569
+ * (`readSoftStopRequestStatus`), pushing the Korean stopped/failure line;
570
+ * unidentified/multiple-run falls back to the self-implement hint, else the
571
+ * caller paints the waiting line (`waiting`).
572
+ */
573
+ export function runEscAbortPendingSoftStop(
574
+ targets: readonly string[],
575
+ deps: EscAbortPendingSoftStopDeps,
576
+ ): EscAbortPendingSoftStopResult {
577
+ const spaceId = deps.getActiveHarnessSpace();
578
+ if (spaceId) {
579
+ try {
580
+ enqueueSoftStop(spaceId);
581
+ if (readSoftStopRequestStatus(spaceId).status !== 'present') throw new Error('soft-stop marker not persisted');
582
+ deps.pushChatLine(' ⏹ 멈췄다 — 해당 하니스 런에 중단 요청을 보냈습니다.');
583
+ return { outcome: 'stopped', stoppedHarnessSpace: spaceId };
584
+ } catch {
585
+ deps.pushChatLine(' ⚠ 하니스 런 중단 요청을 보내지 못했습니다. /harness runs 에서 확인해 주세요.');
586
+ return { outcome: 'failed', stoppedHarnessSpace: null };
587
+ }
588
+ }
589
+ if (deps.showHarnessEscHint(targets)) return { outcome: 'hint', stoppedHarnessSpace: null };
590
+ return { outcome: 'waiting', stoppedHarnessSpace: null };
591
+ }
592
+
544
593
  export type DashboardToolDispatchSignalSource = 'parent-turn' | 'fallback';
545
594
 
546
595
  export interface DashboardToolDispatchSignalObservation {
@@ -646,7 +695,7 @@ import { getModelFamily, getModelTier } from '../models/prompts.js';
646
695
  import { buildPromptInjection, getPromptBankStore } from '../prompt-bank/index.js';
647
696
  import { getInputHistoryStore } from '../input-history.js';
648
697
  import { inspectActiveProvider } from '../provider-summary.js';
649
- import { createStatusProviderInfoReader } from '../status/status-provider-info.js';
698
+ import { createStatusProviderInfoReader, statusModelActual } from '../status/status-provider-info.js';
650
699
  import { activeCodexAccountView } from '../oauth/codex-account-store.js';
651
700
  import { buildDashboardStatusLines, readDashboardSeatsNow, type DashboardStatusLinesInput } from './dashboard-status-lines.js';
652
701
  import { buildFirstScreenBand, resolveTuiDaemonLink, type TuiDaemonLink } from './first-screen-band.js';
@@ -1039,7 +1088,9 @@ import { createQuitConfirmationState, gracefulQuit, type QuitConfirmationState }
1039
1088
  import { consumeTurnEndInterrupted, handoffTurnTypeaheadAtTurnEnd, releaseTurnTypeaheadPending, runTurnTypeaheadPushNow, steerLastTurnTypeaheadSubmission } from './input/turn-steer-bridge.js';
1040
1089
  import { abortTurnOnly } from '../turn-abort-scope.js';
1041
1090
  import { consumeInternalTurnYield, createInternalTurnGate, formatInternalTurnBanner, resolveInternalTurnSubmitIntent, type InternalTurnRequest } from './input/internal-turn.js';
1091
+ import { createClassicInterimFold } from './input/goal-interim.js';
1042
1092
  import { createSeatAutowake } from './input/seat-autowake.js';
1093
+ import { createGoalContinue } from './input/goal-continue.js';
1043
1094
  import { createDashboardWakeupScheduler, registerScheduleWakeupHostTool } from '../skills/tools/schedule-wakeup.js';
1044
1095
  import { createAttachmentRowMap } from '../log-pane/attachment-row-map.js';
1045
1096
  import { createAttachmentPopup, type AttachmentPopupAction } from '../log-pane/attachment-popup.js';
@@ -1067,7 +1118,7 @@ import {
1067
1118
  AGENT_ACTIVITY_SEGMENT_KEY,
1068
1119
  PULSE_HALF_PERIOD_MS,
1069
1120
  } from '../agent-activity-hud.js';
1070
- import { DASHBOARD_CLARIFICATION_REQUEST, consumeStreamingTopModalEscape, createEscAbortGate, createHarnessEscHint, routeStreamingEscapeKey } from '../esc-abort-gate.js';
1121
+ import { DASHBOARD_CLARIFICATION_REQUEST, consumeStreamingTopModalEscape, createEscAbortGate, createEscAbortPendingGate, createHarnessEscHint, routeStreamingEscapeKey } from '../esc-abort-gate.js';
1071
1122
  import { enqueueSoftStop, readSoftStopRequestStatus } from '../harness/control-inbox.js';
1072
1123
  import { setSelfImplementSoftStopSpaceObserver } from '../self-implement/self-implement-runtime.js';
1073
1124
  import { createViEditor, type ViEditorHandle } from '../vi-editor.js';
@@ -1161,7 +1212,7 @@ import { agentBatchScratchTitle, renderAgentBatchScratch } from '../display/agen
1161
1212
  import { type ExecutionSurfaceHandle } from '../display/index.js';
1162
1213
  import { AgentSurfaceStore, renderAgentDetail, renderAgentRoster, type AgentSurfaceState } from '../display/agent-surface.js';
1163
1214
  import { globalAgentFlash } from '../display/agent-flash.js';
1164
- import { globalTaskNotificationQueue } from '../agent/task-notification.js';
1215
+ import { globalTaskNotificationQueue, type TaskNotificationQueue, type PendingTaskNotification } from '../agent/task-notification.js';
1165
1216
  import { createDashboardAgentWakeNotify, installAgentWake, wrapAgentWakePort } from './input/agent-wake.js';
1166
1217
  import { renderDebugEventDetail, renderDebugEventRows, renderDebugStack, renderPromptInjectionDebug } from '../display/debug-surface.js';
1167
1218
  import { buildDebugCallStack } from '../debug/call-stack.js';
@@ -1169,6 +1220,25 @@ import { buildAstGrepHostTool } from '../skills/tools/ast-grep.js';
1169
1220
  import { buildLspHostTool } from '../skills/tools/lsp/index.js';
1170
1221
  import { PluginHost } from '../plugins/core/host.js';
1171
1222
 
1223
+ /** Keep wake notifications immediate; display completed results only when a turn drains them. */
1224
+ export function subscribeDashboardAgentResults(
1225
+ queue: TaskNotificationQueue,
1226
+ listener: (notification: PendingTaskNotification) => void,
1227
+ pushHistoryLine: (line: string) => void,
1228
+ ): () => void {
1229
+ const offWake = queue.onEnqueue(listener);
1230
+ const offDrain = queue.onDrain((items) => {
1231
+ for (const notification of items) {
1232
+ if (notification.resultPath) {
1233
+ pushHistoryLine(` Agent result · full result: ${notification.resultPath} · summary: ${notification.output}`);
1234
+ } else if (notification.preservationError) {
1235
+ pushHistoryLine(` Agent result preservation failed: ${notification.preservationError} · ${notification.output}`);
1236
+ }
1237
+ }
1238
+ });
1239
+ return () => { offWake(); offDrain(); };
1240
+ }
1241
+
1172
1242
  /** Register the same L2 host tools used by the live TUI before each turn's catalog is assembled. */
1173
1243
  export function registerDashboardCoreHostTools(host: Pick<PluginHost, 'registerHostTool'>): void {
1174
1244
  const coreMod = require('../domains/core-tools.js') as typeof import('../domains/core-tools.js');
@@ -1403,6 +1473,10 @@ const isPluginBusy = (host: { active(): { plugin: { isBusy?: (s: any) => boolean
1403
1473
  // ── Main dashboard ──
1404
1474
 
1405
1475
  export interface ShowDashboardOptions {
1476
+ /** Internal startup timing signal for the completed synchronous setup: persona load,
1477
+ * input-core bootstrap, plugin discovery and the widget host. This is the pre-frame block
1478
+ * that `onFirstFrameRendered` used to hide behind one number. Elapsed ms since entry. */
1479
+ onSyncSetupComplete?: (elapsedMs: number) => void;
1406
1480
  /** Internal startup timing signal for the first successfully flushed dashboard frame. */
1407
1481
  onFirstFrameRendered?: () => void;
1408
1482
  /** Force debug sinks on at launch (file + mirror). Equivalent to
@@ -1877,7 +1951,34 @@ export function applyDashboardStreamingTypeaheadKey(
1877
1951
  return applyTurnTypeaheadKey(state, key, isImmediate);
1878
1952
  }
1879
1953
 
1954
+ /** TUI-BOOT-TIMING-HOLES — show-dashboard 동기 셋업 창(첫 프레임 직전) 계측기.
1955
+ * `finish()` 는 한 번만 보고하고, 보고가 던져도 부팅을 막지 않는다(fail-open). */
1956
+ export interface SyncSetupWindow {
1957
+ /** 셋업이 끝난 지점에서 호출 — 진입 이후 경과 ms 를 보고한다. */
1958
+ finish(): void;
1959
+ }
1960
+
1961
+ export function openSyncSetupWindow(
1962
+ report: ((elapsedMs: number) => void) | undefined,
1963
+ now: () => number = () => performance.now(),
1964
+ ): SyncSetupWindow {
1965
+ const startedAt = now();
1966
+ let finished = false;
1967
+ return {
1968
+ finish(): void {
1969
+ if (finished) return;
1970
+ finished = true;
1971
+ if (!report) return;
1972
+ try {
1973
+ report(now() - startedAt);
1974
+ } catch { /* timing signal must never break boot */ }
1975
+ },
1976
+ };
1977
+ }
1978
+
1880
1979
  export async function showDashboard(opts: ShowDashboardOptions = {}): Promise<DashboardAction> {
1980
+ // TUI-BOOT-TIMING-HOLES — 첫 프레임 직전 동기 셋업 구간을 여기서 연다(셋업 종료 지점에서 닫는다).
1981
+ const syncSetupWindow = openSyncSetupWindow(opts.onSyncSetupComplete);
1881
1982
  let firstDashboardFrameRendered = false;
1882
1983
  await awaitGlobalPersonaLoad().catch(() => {});
1883
1984
  const dashboardQuitConfirmationState = createQuitConfirmationState();
@@ -3357,7 +3458,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
3357
3458
  // ⭐ H2 내부 턴 문(TUI-H2-INTERNAL-TURN) — 자율 재개(H3·H4·H5)가 지나갈 «문 하나». 판정은 모듈,
3358
3459
  // 여기선 상태를 읽어 넘기기만 한다(⚠️ promptCtl·가시성 함수는 아래에서 선언 — 호출 시점엔 있다).
3359
3460
  const internalTurnGate = createInternalTurnGate({
3360
- isTurnRunning: () => streamingInFlight,
3461
+ isTurnRunning: () => streamingInFlight || dashboardAcpChat.isBusy() || internalTurnGate.isInternalTurnActive(),
3361
3462
  isInputForeground: () =>
3362
3463
  chatMainInputVisibilityState().inputOwnership?.owner === 'chat-main' && !topBlockingForegroundModal(),
3363
3464
  getBufferText: () => promptCtl.getBufferText?.(),
@@ -3373,7 +3474,21 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
3373
3474
  });
3374
3475
  // Set only by the failed-turn callback and consumed by that turn's streaming cleanup.
3375
3476
  let autowakeTurnFailureRaw: string | null = null;
3376
- const internalTurnYieldPort = wrapAgentWakePort(seatAutowake.wrapPort(internalTurnGate.port));
3477
+ // ⭐ TURN-END-BEFORE-GOAL 골 이어가기 — 답이 «…하겠습니다/해야 합니다» 로 끝났는데 결과물이 없으면 H2 문으로 한 턴 더.
3478
+ // 판정·상한은 모듈(goal-continue.ts), 여기선 배선만(입력칸 무접촉).
3479
+ const goalContinue = createGoalContinue({
3480
+ startTurnIfIdle: (text, opts) => internalTurnGate.startTurnIfIdle(text, opts),
3481
+ notify: (line) => { chatLines.push(C.muted(line)); draw(); },
3482
+ });
3483
+ const internalTurnYieldPort = wrapAgentWakePort(goalContinue.wrapPort(seatAutowake.wrapPort(internalTurnGate.port)));
3484
+ // ⭐ TUI-GOAL-INTERIM-QUIET — 이어가기 내부 턴이 열리면 «바로 앞» 중간 보고(못 했다·약속) 문단을 한 줄로 접는다.
3485
+ // 끼워 넣은 사람 에코가 있으면 줄 위치를 믿지 않고 접지 않는다(판정·관측은 goal-interim.ts).
3486
+ const goalInterimFold = createClassicInterimFold({ canFold: () => liveTypeaheadEchoes.length === 0 });
3487
+ /** 지금 턴의 스트림 런타임 — 턴 끝에 «마지막 답 블록» 시작을 읽는다(없으면 null → 접지 않는다). */
3488
+ let latestTurnStream: { getAssistantStart(): number } | null = null;
3489
+ const latestTurnReplyStart = (): number | null => {
3490
+ try { return latestTurnStream?.getAssistantStart() ?? null; } catch { return null; }
3491
+ };
3377
3492
  // ⭐ H5 자기 예약 깨움(TUI-H5-SCHEDULE-WAKEUP) — 프로세스 안 타이머가 그 시각에 H2 문으로 한 턴을 청한다.
3378
3493
  // 직전 회차 판정 = 그 예약이 연 내부 턴이 아직 도나. 도구 등록은 아래 host tool 자리(하니스 자식 제외).
3379
3494
  const wakeupScheduler = createDashboardWakeupScheduler(internalTurnGate, {
@@ -3741,7 +3856,8 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
3741
3856
  return mouseWiring.buildStatusLine({
3742
3857
  swd,
3743
3858
  gitState,
3744
- providerInfo: readStatusProviderInfo(activeAcpRuntimeModel()),
3859
+ // TUI-MODEL-BADGE-ACTUAL (10-16) — 배지의 «지금» 은 이번 턴 실제 실행(폴백이면 «처음 → 실제»).
3860
+ providerInfo: readStatusProviderInfo(activeAcpRuntimeModel(), statusModelActual('dashboard')),
3745
3861
  contextUsedTokens: metrics.lastContextUsed,
3746
3862
  tmuxLabel: tmuxStatusLabel,
3747
3863
  sshLabel: sshStatusLabel,
@@ -6582,7 +6698,9 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
6582
6698
  });
6583
6699
  let clarificationModalId: string | null = null;
6584
6700
 
6585
- const attachChatStreamingKeys = (abortCtrl: AbortController): () => void => {
6701
+ // `turnEnd: false` — a phase inside a turn (skill-route detection) that attaches the same keys: its teardown is
6702
+ // not a turn end (TUI-ORPHAN-AUTO-RESUME-STOP E4 · 10-23: it reset seat-autowake's orphan-400 streak every turn).
6703
+ const attachChatStreamingKeys = (abortCtrl: AbortController, phase: { turnEnd?: boolean } = {}): () => void => {
6586
6704
  const chatLinesStartIndex = chatLines.length;
6587
6705
  userScrolledDuringStream = false;
6588
6706
  const SCROLL_KEYS = new Set(['j', 'k', 'down', 'up', 'pageup', 'pagedown', 'home', 'end', 'g', 'G']);
@@ -6592,8 +6710,20 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
6592
6710
  // so the user can make an informed call.
6593
6711
  let abortGateModalId: string | null = null;
6594
6712
  const showHarnessEscHint = createHarnessEscHint((line) => pushChatLine(line));
6595
- let stoppedHarnessSpace: string | null = null;
6596
6713
  const activeHarnessSpace = (): string | null => activeEscHarnessSpace(escAbortToolState, escHarnessSpacesByCallId);
6714
+ // ⭐ TUI-ESC-EXIT — `createEscAbortPendingGate` is the production
6715
+ // onAbortPending/onAbortRepeat seam shared with the incident test in
6716
+ // test/esc-harness-stop.test.ts; `runEscAbortPendingSoftStop` remains the
6717
+ // production soft-stop callback. The gate keeps an earlier successful
6718
+ // stopped space across later waiting/hint/failed callbacks.
6719
+ const escAbortPendingGate = createEscAbortPendingGate({
6720
+ runSoftStop: runEscAbortPendingSoftStop,
6721
+ formatWaitingTargets: formatEscAbortWaitingTargets,
6722
+ getActiveHarnessSpace: activeHarnessSpace,
6723
+ pushChatLine: (line) => pushChatLine(line),
6724
+ showHarnessEscHint,
6725
+ afterAbortEvent: () => { chatScrollOffset = -1; },
6726
+ });
6597
6727
  const escGate = createEscAbortGate({
6598
6728
  abortCtrl,
6599
6729
  getRunningCount: () => getEscAbortRunningCount(escAbortToolState),
@@ -6608,28 +6738,11 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
6608
6738
  getTheme: () => currentThemeTokens(),
6609
6739
  getWaitingTargetNames: () => getEscAbortWaitingToolNames(escAbortToolState),
6610
6740
  shouldAbortImmediately: () => activeHarnessSpace() !== null,
6611
- onAbortPending: ({ targets }) => {
6612
- const spaceId = activeHarnessSpace();
6613
- if (spaceId) {
6614
- try {
6615
- enqueueSoftStop(spaceId);
6616
- if (readSoftStopRequestStatus(spaceId).status !== 'present') throw new Error('soft-stop marker not persisted');
6617
- stoppedHarnessSpace = spaceId;
6618
- pushChatLine(' ⏹ 멈췄다 — 해당 하니스 런에 중단 요청을 보냈습니다.');
6619
- } catch {
6620
- pushChatLine(' ⚠ 하니스 런 중단 요청을 보내지 못했습니다. /harness runs 에서 확인해 주세요.');
6621
- }
6622
- } else if (!showHarnessEscHint(targets)) {
6623
- pushChatLine(` ⏳ 중단 요청됨 — ${formatEscAbortWaitingTargets(targets)} 종료를 기다리는 중입니다.`);
6624
- }
6625
- chatScrollOffset = -1;
6626
- },
6627
- onAbortRepeat: ({ repeat, targets }) => {
6628
- if (!stoppedHarnessSpace && !showHarnessEscHint(targets)) {
6629
- pushChatLine(` ⏳ ESC 재시도 ${repeat}회 — ${formatEscAbortWaitingTargets(targets)} 종료를 기다리는 중입니다.`);
6630
- }
6631
- chatScrollOffset = -1;
6632
- },
6741
+ // ⭐ TUI-ESC-EXIT — `runEscAbortPendingSoftStop` is the production
6742
+ // soft-stop callback seam; the incident test in
6743
+ // test/esc-harness-stop.test.ts exercises this same function.
6744
+ onAbortPending: escAbortPendingGate.onAbortPending,
6745
+ onAbortRepeat: escAbortPendingGate.onAbortRepeat,
6633
6746
  // ⭐⭐⭐ 턴을 멈추기 «전»에 살아남을 자식을 백그라운드 라우팅으로 넘긴다(`R4a` · 2026-08-19).
6634
6747
  // ⛔ 없으면 `R1` 이후 자식이 «고아»가 된다 — 살아 있는데 완료를 실어 나를 채널이 없다
6635
6748
  // (`task-notification` 은 background 만 본다 · 부모 툴 루프는 턴과 함께 사라졌다).
@@ -6874,6 +6987,8 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
6874
6987
  const r = applyDashboardStreamingTypeaheadKey(turnTypeaheadRef.state, k, isStreamingImmediateSlash);
6875
6988
  if (r.consumed) {
6876
6989
  turnTypeaheadRef.state = r.state;
6990
+ // TUI-PASTE-WHILE-STREAMING — 턴 중 붙여넣기를 버퍼가 받았다(종전엔 조용히 버려졌다).
6991
+ if (r.pasted) { try { debug.log('tui.paste', r.pasted.folded ? 'folded' : 'kept', { during: 'streaming', lines: r.pasted.lines, chars: r.pasted.chars }); } catch { /* fail-soft */ } }
6877
6992
  if (r.submissionDisposition) {
6878
6993
  debug.log('dashboard.turn-typeahead', 'submission-classified', {
6879
6994
  length: (r.immediateSubmission ?? turnTypeaheadRef.state.queuedSubmissions.at(-1))?.length ?? 0,
@@ -7171,7 +7286,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
7171
7286
  runTurnTeardownStep('stream-keys-detach', cleanup);
7172
7287
  runTurnTeardownStep('esc-gate-dispose', () => { escGate.dispose(); });
7173
7288
  try {
7174
- if (!stoppedHarnessSpace) settleEscAbortPendingLines(chatLines, chatLinesStartIndex);
7289
+ if (!escAbortPendingGate.getStoppedHarnessSpace()) settleEscAbortPendingLines(chatLines, chatLinesStartIndex);
7175
7290
  } catch (err) {
7176
7291
  const message = err instanceof Error ? err.message : String(err);
7177
7292
  const stackHead = err instanceof Error ? err.stack?.split('\n')[1]?.trim() : undefined;
@@ -7184,7 +7299,18 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
7184
7299
  reportTuiTurn('idle');
7185
7300
  const failedTurnRaw = autowakeTurnFailureRaw;
7186
7301
  autowakeTurnFailureRaw = null;
7187
- seatAutowake.noteTurnEnded({ sessionId: currentChatPersonaSessionId(), lastLine: chatLines.at(-1) ?? '', errorDetail: failedTurnRaw ?? undefined });
7302
+ if (phase.turnEnd !== false) seatAutowake.noteTurnEnded({ sessionId: currentChatPersonaSessionId(), lastLine: chatLines.at(-1) ?? '', errorDetail: failedTurnRaw ?? undefined });
7303
+ try {
7304
+ // «이번 턴»이 그린 줄만 본다 — 앞 턴의 ✘·취소 표시가 이번 턴 판정에 새지 않게(r1 must-fix).
7305
+ const turnLines = chatLines.slice(chatLinesStartIndex);
7306
+ const tailLines = turnLines.slice(-16);
7307
+ // 실패(✘)·취소로 끝난 턴은 이어가지 않는다 — 사람이 판단할 자리다.
7308
+ const failed = failedTurnRaw !== null || turnLines.some((line) => /✘ 실패|응답 취소|취소됨/.test(line));
7309
+ // 마지막 답 블록만 — 스트림 applier 의 assistantStart(이번 턴 범위 안일 때). 도구 줄은 그 앞에 남는다.
7310
+ const replyStart = latestTurnReplyStart();
7311
+ goalInterimFold.noteTurnEnded(chatLines, replyStart !== null && replyStart >= chatLinesStartIndex ? replyStart : chatLines.length);
7312
+ goalContinue.noteTurnEnded({ lines: tailLines, failed });
7313
+ } catch { /* fail-soft: 골 이어가기는 턴 정리를 막지 않는다 */ }
7188
7314
  }
7189
7315
  };
7190
7316
  };
@@ -11552,8 +11678,16 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
11552
11678
  const frameCursorDecision = display.cursorDecision();
11553
11679
  renderDashboardFrame(baseLines, composeDashboardFrameWithCoordinatorModal(display, {
11554
11680
  onFrameWriteComplete: firstDashboardFrameRendered ? undefined : (error) => {
11555
- if (error || firstDashboardFrameRendered) return;
11681
+ if (firstDashboardFrameRendered) return;
11682
+ // TUI-BOOT-TIMING-HOLES — 셋업 창은 «첫 프레임 flush 완료» 에 닫는다(진입~flush).
11683
+ // 실패한 flush 도 창을 닫아 신호가 영영 오지 않는 일을 막는다(재시도 의미론은 그대로:
11684
+ // 첫 프레임 신호는 다음 성공 flush 가 낸다).
11685
+ if (error) {
11686
+ syncSetupWindow.finish();
11687
+ return;
11688
+ }
11556
11689
  firstDashboardFrameRendered = true;
11690
+ syncSetupWindow.finish();
11557
11691
  try { opts.onFirstFrameRendered?.(); } catch { /* timing must not break dashboard */ }
11558
11692
  },
11559
11693
  overlay: modalFrame,
@@ -13134,7 +13268,9 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
13134
13268
  // 채팅 한 줄 «✓ 위임 끝: <이름> — 다음 턴에 결과» · 결과는 다음 턴 preamble 이 싣는다.
13135
13269
  // ⛔ 입력칸·injectKey·pty 주입 0(대표 비침투). dedupe·수명은 모듈, 여기선 배선만.
13136
13270
  const agentWake = installAgentWake({
13137
- subscribe: (listener) => globalTaskNotificationQueue.onEnqueue(listener),
13271
+ subscribe: (listener) => subscribeDashboardAgentResults(
13272
+ globalTaskNotificationQueue, listener, (line) => { pushChatLine(C.muted(line)); draw(); },
13273
+ ),
13138
13274
  // 그리기 실패는 삼키지 않는다 — 모듈이 잡아 notified{shown:false} 로 남긴다.
13139
13275
  notify: createDashboardAgentWakeNotify((line) => { chatLines.push(C.muted(line)); }, () => draw()),
13140
13276
  // 조각 2 — 자리 TUI ∧ 유휴면 H2 문으로 다음 턴(origin child-complete) · 판정은 모듈.
@@ -14841,7 +14977,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
14841
14977
  let acpDispatchToolSelf: CoreTurnDispatchTool | null = null;
14842
14978
  let acpToolDispatchCount = 0;
14843
14979
  const trMod = await import('../tool-runtime/index.js');
14844
- trMod.registerAllDefaultToolRuntimes();
14980
+ trMod.registerAllDefaultToolRuntimes({ mcpLazyBoot: true });
14845
14981
  acpToolRuntime = trMod;
14846
14982
  acpPersistToolOutputPreview = (
14847
14983
  await import('../tool-runtime/truncation-store.js')
@@ -16240,6 +16376,8 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
16240
16376
  // those tokens into the initial buffer so the user can just type
16241
16377
  // their question next to the pre-filled [PDF #N] tokens.
16242
16378
  let nextInitial: string | undefined = inputEntry.initialText;
16379
+ // TUI-PASTE-WHILE-STREAMING — 턴 중 접은 붙여넣기 토큰의 원문(넘김 입력창이 넘겨받는다 · 글에 토큰이 없으면 버린다).
16380
+ let nextInitialPastes: Array<[string, string]> = [];
16243
16381
  let exitInputLoop = false;
16244
16382
  let lastTurnFinalStatus: 'completed' | 'interrupted' | 'failed' | undefined;
16245
16383
 
@@ -16271,6 +16409,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
16271
16409
  });
16272
16410
  lastTurnFinalStatus = undefined;
16273
16411
  nextInitial = drained.nextInitial;
16412
+ nextInitialPastes = [...nextInitialPastes, ...(drained.initialPastes ?? [])].filter(([token]) => nextInitial?.includes(token));
16274
16413
  const queuedTurnEndText = drained.injectEnter ? drained.nextInitial : undefined;
16275
16414
  if (interrupted && queuedBeforeDrain > 0) {
16276
16415
  debug.log('dashboard.turn-typeahead', 'restored-after-interrupt', { count: queuedBeforeDrain });
@@ -16310,6 +16449,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
16310
16449
  debugLog: debug.enabled ? (event, label, payload) => debug.log(event, label, payload) : undefined,
16311
16450
  textInputOpts: {
16312
16451
  internalTurnYield: internalTurnYieldPort,
16452
+ ...(nextInitialPastes.length ? { initialPastes: nextInitialPastes } : {}),
16313
16453
  onScrollKey: (name) => {
16314
16454
  const { rows } = termSize();
16315
16455
  const viewport = computePromptFrameLogViewportBounds(
@@ -16808,7 +16948,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
16808
16948
 
16809
16949
  // Save to durable input history. Up/down reads the in-memory
16810
16950
  // tail, while slash/LLM tools can search the full store.
16811
- if (!internalTurn) internalTurnGate.noteHumanTurn();
16951
+ if (!internalTurn) { internalTurnGate.noteHumanTurn(); goalContinue.noteHumanTurn(); goalInterimFold.noteHumanTurn(); }
16812
16952
  if (postTurn.historyRecord && !internalTurn) {
16813
16953
  inputHistoryStore.record(postTurn.historyRecord);
16814
16954
  refreshInputHistory();
@@ -17713,18 +17853,14 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
17713
17853
  setWorkingFocusPreview: () => { setWorkingFocus('preview', 'slash-term-move-preview'); },
17714
17854
  nextTerminalVwSlotId: (terminalId) => `term-slot:${terminalId}`,
17715
17855
  },
17716
- // TUI-LOOP-COMMAND — /loop <간격> <프롬프트> · 쉬는 동안만 발사
17717
- // (src/dashboard/loop-scheduler.ts · 판정: idle 발사 1 · busy 미룸 · stop 0).
17718
- // idle/busy 신호는 대시보드 루프가 이미 쓰는 것을 그대로 쓴다 —
17719
- // 스트리밍 턴(streamingInFlight · reportTuiTurn busy/idle) +
17720
- // ACP 세션 바쁨(dashboardAcpChat.isBusy()). 프롬프트 제출은
17721
- // 플러그인 submitDashboardText 와 같은 기존 제출 틈
17722
- // (dispatchDashboardSubmitText)으로 낸다 — 새 제출 경로를 만들지 않는다.
17856
+ // TUI-LOOP-COMMAND — the scheduler ticks; H2 alone judges whether
17857
+ // an internal turn can open. A rejection waits for the next tick.
17723
17858
  loopCommand: {
17724
- isIdle: () => !streamingInFlight && !dashboardAcpChat.isBusy(),
17859
+ isIdle: () => true,
17725
17860
  submitPrompt: (prompt: string) => {
17726
- if (dispatchDashboardSubmitText) dispatchDashboardSubmitText(prompt);
17727
- else chatLines.push(C.muted(' /loop: 입력 루프가 아직 제출을 받지 않는다 — 다음 틱을 기다린다'));
17861
+ const result = internalTurnGate.startTurnIfIdle(prompt, { origin: 'scheduled', reason: '/loop' });
17862
+ if (result.opened) debug.log('dashboard.loop', 'fired', { turnId: result.turnId });
17863
+ else debug.log('dashboard.loop', 'rejected', { reason: result.reason });
17728
17864
  },
17729
17865
  schedulerRef: dashboardLoopSchedulerRef,
17730
17866
  },
@@ -18176,6 +18312,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
18176
18312
  // array but doesn't paint until after the skill router's
18177
18313
  // classifier LLM call returns (~1-2s of visual silence).
18178
18314
  if (internalTurn) {
18315
+ try { goalInterimFold.foldBeforeInternalTurn(chatLines, internalTurn.origin, C.muted); } catch { /* fail-soft: 접기는 턴을 막지 않는다 */ }
18179
18316
  chatLines.push(C.muted(` ${formatInternalTurnBanner(internalTurn)}`));
18180
18317
  chatScrollOffset = -1;
18181
18318
  } else {
@@ -18221,6 +18358,10 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
18221
18358
  // through to keyword routing in those cases.
18222
18359
  {
18223
18360
  const urlDec = detectUrlRoute(tok.text, getUserConfig().skills.urlRouting);
18361
+ const urlGuard = urlDec ? null : workContextGuardReason(tok.text);
18362
+ if (urlGuard && extractUrls(tok.text).length > 0) {
18363
+ debug.log('skill.router', 'url-route-guarded', { reason: urlGuard, textLength: tok.text.length });
18364
+ }
18224
18365
  if (urlDec) {
18225
18366
  debug.log('skill.router', 'url-route', {
18226
18367
  kind: urlDec.kind, skill: urlDec.skill, absorb: urlDec.absorb,
@@ -18272,7 +18413,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
18272
18413
  const detectTier = getModelTier(getUserConfig().llm.provider, getUserConfig().llm.model);
18273
18414
  const routeStartedAt = Date.now();
18274
18415
  const route = await runAbortableDashboardSkillRoute({
18275
- attachKeys: attachChatStreamingKeys,
18416
+ attachKeys: (ctrl: AbortController) => attachChatStreamingKeys(ctrl, { turnEnd: false }),
18276
18417
  detect: (signal) => detectDashboardSkillRoute(tok.text, visibleIndex, {
18277
18418
  llmFallback: userCfg.llmFallback,
18278
18419
  keywordScoreThreshold: userCfg.keywordScoreThreshold,
@@ -18537,7 +18678,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
18537
18678
  return buildDashboardOptionalToolSpecs({
18538
18679
  userConfig: uc,
18539
18680
  termSize,
18540
- registerAllDefaultToolRuntimes: () => { toolRuntime.registerAllDefaultToolRuntimes(); },
18681
+ registerAllDefaultToolRuntimes: () => { toolRuntime.registerAllDefaultToolRuntimes({ mcpLazyBoot: true }); },
18541
18682
  setTerminalModalRuntimeDeps: (deps) => { toolRuntime.setTerminalModalRuntimeDeps(deps); },
18542
18683
  ...buildDefaultDashboardToolBuilders(),
18543
18684
  }) as unknown[];
@@ -18584,6 +18725,7 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
18584
18725
  renderedToolRuntime,
18585
18726
  brainIcon: ICONS.brain,
18586
18727
  });
18728
+ latestTurnStream = turnStreamRuntime;
18587
18729
  return {
18588
18730
  ...turnStreamRuntime,
18589
18731
  onText: (chunk, accumulated) => {
@@ -18642,6 +18784,17 @@ Mode- and sync-specific instructions are injected per-turn when relevant — do
18642
18784
  },
18643
18785
  resetAcpTurnRef: () => resetDashboardAcpTurnRef(acpTurnRef),
18644
18786
  acpSession: dashboardAcpSession,
18787
+ // TUI-400-AUTOHEAL-FALLBACK(대표 10-22) — 400(대화 기록 어긋남)이면 ① 새 세션 ⊕ 요약 ② 다음 공급자로 스스로 회복.
18788
+ autoheal: createDashboardTurnAutoheal({
18789
+ session: dashboardAcpSession,
18790
+ getCwd: getSessionCwd,
18791
+ onRenewed: (sessionId) => {
18792
+ acpSessionIdRef.current = sessionId;
18793
+ observeSessionStart({ surface: 'tui', origin: 'new', reason: 'autoheal-400', sessionId });
18794
+ },
18795
+ remote: daemonAttached,
18796
+ activeModel: () => resolveDashboardActiveModel(tok.text) ?? undefined,
18797
+ }),
18645
18798
  control: {
18646
18799
  signalBus: dashboardControlSignals,
18647
18800
  },
@@ -172,7 +172,13 @@ export function createAgentWake(deps: AgentWakeDeps): AgentWakeController {
172
172
  return;
173
173
  }
174
174
  tryOpen(n, 'input-mounted');
175
- } catch { /* fail-soft: 깨움은 입력을 막지 않는다 */ }
175
+ } catch (error) {
176
+ // fail-soft: 깨움은 입력을 막지 않는다 — 다만 «조용히 죽은» 이유는 TF 가 봐야 한다(거부는 사유 로그).
177
+ log('tui.agent-wake', 'rejected', {
178
+ taskId: n.taskId, agent: n.agentName, state: n.state, trigger: 'input-mounted', reason: 'error',
179
+ detail: error instanceof Error ? error.message : String(error),
180
+ });
181
+ }
176
182
  });
177
183
  },
178
184
  };