elanous 0.2.38 → 0.2.40

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 (615) 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/{RrjXTwz-urRAbChP1bX02 → HjeK7zONHfR7op1hKXp4k}/_buildManifest.js +1 -1
  4. package/apps/pwa/out/_next/static/chunks/{7954.4f7a8832663ee979.js → 1060.014f1f01a17aec26.js} +1 -1
  5. package/apps/pwa/out/_next/static/chunks/{8911.bf5e712acb25fb6c.js → 1281.d81877e35b9068f4.js} +1 -1
  6. package/apps/pwa/out/_next/static/chunks/{2104.70e086d5174a4736.js → 1350.59f40e39e02d91b1.js} +1 -1
  7. package/apps/pwa/out/_next/static/chunks/1415.79821ec7ae99acdb.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/1452.162bb2d9d699e82a.js +1 -0
  9. package/apps/pwa/out/_next/static/chunks/147.f92f63bbc5e85fa5.js +286 -0
  10. package/apps/pwa/out/_next/static/chunks/1537-6bb97b5214928ea9.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/1661.fb425a1d8a065b72.js +149 -0
  12. package/apps/pwa/out/_next/static/chunks/1671-1c22b40b50b208f2.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/1758.0204d3f48783c49d.js +90 -0
  14. package/apps/pwa/out/_next/static/chunks/1806.027bf78b6a94d340.js +104 -0
  15. package/apps/pwa/out/_next/static/chunks/2047.8f23e210995d4548.js +2 -0
  16. package/apps/pwa/out/_next/static/chunks/2061-7f2bbc53ae96c88b.js +1 -0
  17. package/apps/pwa/out/_next/static/chunks/{1632.7d87f998e714bede.js → 2066.a77257c8c350770a.js} +1 -1
  18. package/apps/pwa/out/_next/static/chunks/2096-a938496bc996dcbd.js +1 -0
  19. package/apps/pwa/out/_next/static/chunks/{8019.21ca554a821dad01.js → 2177.df8547f9d7215c4e.js} +3 -3
  20. package/apps/pwa/out/_next/static/chunks/2200-9a453b8f99687d49.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/{3528.e4b8ab70d339f965.js → 2226.2cf61ec781827219.js} +2 -2
  22. package/apps/pwa/out/_next/static/chunks/2281-b8cede695c6c650e.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/{6493.27ad77de7aac7966.js → 2499.02fbfd18126c10c0.js} +1 -1
  24. package/apps/pwa/out/_next/static/chunks/{7628.6b16863ac3972333.js → 2522.f2766b76d22c8bdf.js} +1 -1
  25. package/apps/pwa/out/_next/static/chunks/{3086.fb14b60ce98b53d3.js → 2566.beaffc3a5e1fcd2e.js} +1 -1
  26. package/apps/pwa/out/_next/static/chunks/{9299.24e2a7d9b6d1f91b.js → 261.0d471e8aded799f3.js} +3 -3
  27. package/apps/pwa/out/_next/static/chunks/2615.3c9738153de3ef3f.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/2727.e703d99ac414916d.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/2752.7904b8df0254d0ae.js +27 -0
  30. package/apps/pwa/out/_next/static/chunks/2762-5051a862dfa40e99.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/2767-31784bfedf8e245d.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/2774-719820e3f5b2a3eb.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/2812-f016aa0dda149287.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/2829-734fe8bf2eee7347.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/311-32dcac79970985e8.js +1 -0
  36. package/apps/pwa/out/_next/static/chunks/3175-f93f7495cd28253c.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/3184.8da993f5502d2140.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/3231-d7c981db0ff8bdcc.js +1 -0
  39. package/apps/pwa/out/_next/static/chunks/3250.151309c5176d6b4b.js +1 -0
  40. package/apps/pwa/out/_next/static/chunks/{7524.ce973525d30b3d52.js → 3330.7443183b7e6fdbdf.js} +1 -1
  41. package/apps/pwa/out/_next/static/chunks/3517.a5aa1797a9dbf2ee.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/3567-45f676877ed9e8a5.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/{3124-561f7f037943cde2.js → 3746-f80a78f220bf37b5.js} +1 -1
  44. package/apps/pwa/out/_next/static/chunks/3819.8a1de79b2e8c7298.js +24 -0
  45. package/apps/pwa/out/_next/static/chunks/39.9b37b0be4c128a83.js +77 -0
  46. package/apps/pwa/out/_next/static/chunks/{bb6987f9.3647e1a23b0e3217.js → 3b355b3d.6f73c98bf6f9c749.js} +1 -1
  47. package/apps/pwa/out/_next/static/chunks/4023.a19045970a9ce16a.js +36 -0
  48. package/apps/pwa/out/_next/static/chunks/{8994d93e.33ba491f95345fc2.js → 409c787b.e48c5bec8ec10456.js} +1 -1
  49. package/apps/pwa/out/_next/static/chunks/{5041-5aada92ca215ffdd.js → 413-24c8284bda08241d.js} +1 -1
  50. package/apps/pwa/out/_next/static/chunks/4135.e45d6ebc29e20647.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/4283.65502f5d0e6ff6c0.js +287 -0
  52. package/apps/pwa/out/_next/static/chunks/4305-4e28fa92a7b34a5b.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/4335-50efa61fd7613142.js +1 -0
  54. package/apps/pwa/out/_next/static/chunks/4351.0f37a6db2b34d50b.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/{5638.107314dc479e2f37.js → 470.51a72a2348306455.js} +2 -2
  56. package/apps/pwa/out/_next/static/chunks/4720.ecbd1693fa151068.js +1 -0
  57. package/apps/pwa/out/_next/static/chunks/{8487.291666583bebe640.js → 4769.9fd582071301f382.js} +1 -1
  58. package/apps/pwa/out/_next/static/chunks/{8509.3a54d4e61893d7cb.js → 483.725e4a61be922788.js} +1 -1
  59. package/apps/pwa/out/_next/static/chunks/{9fe1b809.738da85c8b17e3fb.js → 4864a2ca.1c1c280a7772c5e5.js} +1 -1
  60. package/apps/pwa/out/_next/static/chunks/4969-4b209d7307410c00.js +1 -0
  61. package/apps/pwa/out/_next/static/chunks/5068-c7f53862f83c0917.js +1 -0
  62. package/apps/pwa/out/_next/static/chunks/5315.bc96711c24dfefe2.js +74 -0
  63. package/apps/pwa/out/_next/static/chunks/{8879.ac06755bcf3e44a1.js → 5383.bdfa5d886e39a826.js} +1 -1
  64. package/apps/pwa/out/_next/static/chunks/{6142.913b44e260a3f925.js → 5436.fdf6fa8ae3e9588d.js} +1 -1
  65. package/apps/pwa/out/_next/static/chunks/5542.efbf14f16baed4dd.js +1 -0
  66. package/apps/pwa/out/_next/static/chunks/5622.94893f5aea7185d0.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/5644.8f401a25601d05fc.js +1 -0
  68. package/apps/pwa/out/_next/static/chunks/5658.35f70eb9871a54bf.js +1 -0
  69. package/apps/pwa/out/_next/static/chunks/5721.7bdc0e904c76ab51.js +8 -0
  70. package/apps/pwa/out/_next/static/chunks/5790-eef0ca20884a6bdf.js +1 -0
  71. package/apps/pwa/out/_next/static/chunks/5802.ef0d8598ca68fe84.js +62 -0
  72. package/apps/pwa/out/_next/static/chunks/5890.fb974729788dcb71.js +1 -0
  73. package/apps/pwa/out/_next/static/chunks/5924.5ef25cddd36d5dbf.js +1 -0
  74. package/apps/pwa/out/_next/static/chunks/5979-e59c099ebf8d1f35.js +1 -0
  75. package/apps/pwa/out/_next/static/chunks/6020.714cfeada2315e2e.js +94 -0
  76. package/apps/pwa/out/_next/static/chunks/6027-dfe0349d8c50f698.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/{7161-8f22db3ec5ed005e.js → 6051-0ae955eedb10adb9.js} +3 -3
  78. package/apps/pwa/out/_next/static/chunks/6178.bc4730c86cf74536.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/{3291.f6c1005387d514bd.js → 6257.c0037b8949239f5e.js} +2 -2
  80. package/apps/pwa/out/_next/static/chunks/6273.d808b0dcb3c2b155.js +1 -0
  81. package/apps/pwa/out/_next/static/chunks/6292.6ef1df64fa6a4c8a.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/647-af8dd920ba46533c.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/6541-170dc5c59e135c0c.js +1 -0
  84. package/apps/pwa/out/_next/static/chunks/6624.981ef7caeb680560.js +32 -0
  85. package/apps/pwa/out/_next/static/chunks/6742-a1ad4a94ba7bc37a.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/{5203.51e5d8b5f1dcfe53.js → 6749.0744ce6eb08d40e9.js} +3 -3
  87. package/apps/pwa/out/_next/static/chunks/6836-493dc55c39187949.js +1 -0
  88. package/apps/pwa/out/_next/static/chunks/6856-53ac421c06039a18.js +1 -0
  89. package/apps/pwa/out/_next/static/chunks/{1938.0e6c60ee91c4d7f5.js → 6908.06008c67f6380ea9.js} +2 -2
  90. package/apps/pwa/out/_next/static/chunks/6915.096931864206f522.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/6925.5e181fb7dcf90193.js +1 -0
  92. package/apps/pwa/out/_next/static/chunks/{de8b930d.d94c0f42acf807fc.js → 6cc1d1d6.9a98dd4622f1afc6.js} +1 -1
  93. package/apps/pwa/out/_next/static/chunks/7203-800e11037adc41eb.js +1 -0
  94. package/apps/pwa/out/_next/static/chunks/7219-15bdd9a80661af8e.js +1 -0
  95. package/apps/pwa/out/_next/static/chunks/7279.6170f591105936bb.js +93 -0
  96. package/apps/pwa/out/_next/static/chunks/7349-373165c7fbdcc3df.js +1 -0
  97. package/apps/pwa/out/_next/static/chunks/7514-a533ba0ca1cae4f4.js +1 -0
  98. package/apps/pwa/out/_next/static/chunks/7515.1ad6efe157fa4448.js +1 -0
  99. package/apps/pwa/out/_next/static/chunks/7521.d919cc1fab80c1d9.js +24 -0
  100. package/apps/pwa/out/_next/static/chunks/7538.90e97bbdf9178cff.js +1 -0
  101. package/apps/pwa/out/_next/static/chunks/7611.85f045bf232053ac.js +1 -0
  102. package/apps/pwa/out/_next/static/chunks/7825-39203196a12579b2.js +1 -0
  103. package/apps/pwa/out/_next/static/chunks/7869.5e1a9a12fd70d6c7.js +1 -0
  104. package/apps/pwa/out/_next/static/chunks/8086.1ab9103c41be884f.js +1 -0
  105. package/apps/pwa/out/_next/static/chunks/8099.1cccf31c1baa7e1c.js +1 -0
  106. package/apps/pwa/out/_next/static/chunks/8179-e61fffbdb70f1152.js +1 -0
  107. package/apps/pwa/out/_next/static/chunks/8265.bdeb991b34db6a06.js +1 -0
  108. package/apps/pwa/out/_next/static/chunks/{1026-44010f405704050c.js → 8272-025653884f9645d2.js} +1 -1
  109. package/apps/pwa/out/_next/static/chunks/{5307.d7328020227880c2.js → 8357.1aaa713b052a78b1.js} +4 -4
  110. package/apps/pwa/out/_next/static/chunks/8638-e42615f2166165b5.js +1 -0
  111. package/apps/pwa/out/_next/static/chunks/{4199-f7c6eb40cd0322f8.js → 8639-92c11d069792429e.js} +1 -1
  112. package/apps/pwa/out/_next/static/chunks/8691.54e22831d5e8ccf8.js +1 -0
  113. package/apps/pwa/out/_next/static/chunks/8d173e38.18a2f7b4e1848bdb.js +1 -0
  114. package/apps/pwa/out/_next/static/chunks/9069.657590a84afb8fac.js +41 -0
  115. package/apps/pwa/out/_next/static/chunks/9125-ae588d88a0293b93.js +1 -0
  116. package/apps/pwa/out/_next/static/chunks/9175.2de5209a5ce6f68a.js +1 -0
  117. package/apps/pwa/out/_next/static/chunks/9184.45afbf44fec87574.js +1 -0
  118. package/apps/pwa/out/_next/static/chunks/{eaad0cba.771200940c529df7.js → 9189505a.980427ac048c8c60.js} +1 -1
  119. package/apps/pwa/out/_next/static/chunks/9311.f9f641a46a508611.js +1 -0
  120. package/apps/pwa/out/_next/static/chunks/9371-a6fee8378ebfa3ee.js +1 -0
  121. package/apps/pwa/out/_next/static/chunks/9421-3aa9ff4fa7f63d8a.js +1 -0
  122. package/apps/pwa/out/_next/static/chunks/9992.07ce73c10bd5e6a1.js +79 -0
  123. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-76394dc618d322c8.js +1 -0
  124. package/apps/pwa/out/_next/static/chunks/app/approvals/page-1b948637c37b3abd.js +1 -0
  125. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-c63400f1bcf3e47c.js +1 -0
  126. package/apps/pwa/out/_next/static/chunks/app/board/page-95d0957267819586.js +1 -0
  127. package/apps/pwa/out/_next/static/chunks/app/botlab/{page-866aac5ff226a7f3.js → page-ba957ff875a026a0.js} +1 -1
  128. package/apps/pwa/out/_next/static/chunks/app/bots/page-bb6fd0714879cb87.js +1 -0
  129. package/apps/pwa/out/_next/static/chunks/app/ceo/page-8f9038520d2acbef.js +1 -0
  130. package/apps/pwa/out/_next/static/chunks/app/chat/page-d4b48397e05fce2c.js +1 -0
  131. package/apps/pwa/out/_next/static/chunks/app/consult/page-72d5744245dc0c27.js +1 -0
  132. package/apps/pwa/out/_next/static/chunks/app/control/page-37625dc8300fa43a.js +1 -0
  133. package/apps/pwa/out/_next/static/chunks/app/decisions/page-fbef9d160272dbc1.js +1 -0
  134. package/apps/pwa/out/_next/static/chunks/app/design-check/page-58424168df84928e.js +1 -0
  135. package/apps/pwa/out/_next/static/chunks/app/editor/page-72c12ba430ac57c0.js +1 -0
  136. package/apps/pwa/out/_next/static/chunks/app/exec/page-d53f3e9ed806d7e0.js +1 -0
  137. package/apps/pwa/out/_next/static/chunks/app/field/page-4d2fbd45feee0829.js +1 -0
  138. package/apps/pwa/out/_next/static/chunks/app/healthz/route-76394dc618d322c8.js +1 -0
  139. package/apps/pwa/out/_next/static/chunks/app/inside/page-8783dc0ed7590a2c.js +1 -0
  140. package/apps/pwa/out/_next/static/chunks/app/intake/page-3706cb390606e930.js +1 -0
  141. package/apps/pwa/out/_next/static/chunks/app/layout-9b0a86598e0111fd.js +1 -0
  142. package/apps/pwa/out/_next/static/chunks/app/live/page-4edb8df90f4537ce.js +1 -0
  143. package/apps/pwa/out/_next/static/chunks/app/live-run/page-83d27757e2b8060a.js +1 -0
  144. package/apps/pwa/out/_next/static/chunks/app/loops/page-47398b9ba1cc5e1b.js +1 -0
  145. package/apps/pwa/out/_next/static/chunks/app/market/page-fb86f55cfe2e681d.js +1 -0
  146. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-e22345fc8fd47b1b.js +1 -0
  147. package/apps/pwa/out/_next/static/chunks/app/morning/page-fca2e59a81744d9e.js +1 -0
  148. package/apps/pwa/out/_next/static/chunks/app/not-found-6e96bda63100b31e.js +1 -0
  149. package/apps/pwa/out/_next/static/chunks/app/observatory/page-4d17ad8e0db8cea4.js +1 -0
  150. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-121f92766c33beaa.js +1 -0
  151. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-43f14212c545f92d.js +1 -0
  152. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ccec2023e7a974ec.js +1 -0
  153. package/apps/pwa/out/_next/static/chunks/app/outputs/page-b04f33f548b89a94.js +1 -0
  154. package/apps/pwa/out/_next/static/chunks/app/page-c8792823c0917021.js +1 -0
  155. package/apps/pwa/out/_next/static/chunks/app/reflection/page-8c0e32782ceef4cb.js +1 -0
  156. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-94bd3922eb230ce8.js +1 -0
  157. package/apps/pwa/out/_next/static/chunks/app/sessions/page-bca565887bafa03c.js +1 -0
  158. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-ac1dffafe649fc6c.js +1 -0
  159. package/apps/pwa/out/_next/static/chunks/app/settings/page-52374edb5e23e455.js +1 -0
  160. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ad4ebca120d43ca7.js +1 -0
  161. package/apps/pwa/out/_next/static/chunks/app/setup/layout-76394dc618d322c8.js +1 -0
  162. package/apps/pwa/out/_next/static/chunks/app/setup/page-718b89ce4b4ae4e4.js +1 -0
  163. package/apps/pwa/out/_next/static/chunks/app/share/page-204eca33eeeaddec.js +1 -0
  164. package/apps/pwa/out/_next/static/chunks/app/showroom/page-e58ba9bcdb9ac0f9.js +1 -0
  165. package/apps/pwa/out/_next/static/chunks/app/tasks/page-98f6dd50bafd7734.js +1 -0
  166. package/apps/pwa/out/_next/static/chunks/app/term/page-139d722de1dcd6c1.js +1 -0
  167. package/apps/pwa/out/_next/static/chunks/app/today/page-5a4bdd72bff27057.js +1 -0
  168. package/apps/pwa/out/_next/static/chunks/app/trace/page-6f6ab17d44f984ce.js +1 -0
  169. package/apps/pwa/out/_next/static/chunks/app/vault/page-aabb7bd15fb72da9.js +1 -0
  170. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-e4322319164a4436.js +1 -0
  171. package/apps/pwa/out/_next/static/chunks/app/workflows/page-e9efc0c8f32e2371.js +1 -0
  172. package/apps/pwa/out/_next/static/chunks/app/workspace/page-ccde99f07aaf71f7.js +1 -0
  173. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-80464aced9614390.js +1 -0
  174. package/apps/pwa/out/_next/static/chunks/{b7478fef.5917716286213fcc.js → b84cad00.594027ebe0531fe2.js} +1 -1
  175. package/apps/pwa/out/_next/static/chunks/c696986b.5dc8bb1143af16d1.js +1 -0
  176. package/apps/pwa/out/_next/static/chunks/{b7459770.6539b11860eb8a9c.js → ca3702f8.2913182e73889fa2.js} +7 -7
  177. package/apps/pwa/out/_next/static/chunks/{3f0de3de-2340c532c00395db.js → d5d3cefc-373c4eb722ed848b.js} +1 -1
  178. package/apps/pwa/out/_next/static/chunks/{89d6c04f-6b8ab341748e468a.js → d8de0de2-dd0f4ac8e5ab1832.js} +1 -1
  179. package/apps/pwa/out/_next/static/chunks/{framework-4b12a946f352cee2.js → framework-002b472a66935d31.js} +1 -1
  180. package/apps/pwa/out/_next/static/chunks/main-49b88d47292c0476.js +1 -0
  181. package/apps/pwa/out/_next/static/chunks/main-app-fff2549cb10a133f.js +1 -0
  182. package/apps/pwa/out/_next/static/chunks/pages/_app-32abbbba3f3b76b7.js +1 -0
  183. package/apps/pwa/out/_next/static/chunks/pages/_error-9d9cfef60c60dd7a.js +1 -0
  184. package/apps/pwa/out/_next/static/chunks/webpack-cc7f483fa294034a.js +1 -0
  185. package/apps/pwa/out/approvals/index.html +1 -1
  186. package/apps/pwa/out/approvals/index.txt +22 -22
  187. package/apps/pwa/out/autopilot/index.html +1 -1
  188. package/apps/pwa/out/autopilot/index.txt +22 -22
  189. package/apps/pwa/out/board/index.html +1 -1
  190. package/apps/pwa/out/board/index.txt +22 -22
  191. package/apps/pwa/out/botlab/index.html +1 -1
  192. package/apps/pwa/out/botlab/index.txt +21 -21
  193. package/apps/pwa/out/bots/index.html +1 -1
  194. package/apps/pwa/out/bots/index.txt +21 -21
  195. package/apps/pwa/out/ceo/index.html +1 -1
  196. package/apps/pwa/out/ceo/index.txt +22 -22
  197. package/apps/pwa/out/chat/index.html +1 -1
  198. package/apps/pwa/out/chat/index.txt +21 -21
  199. package/apps/pwa/out/consult/index.html +1 -1
  200. package/apps/pwa/out/consult/index.txt +22 -22
  201. package/apps/pwa/out/control/index.html +1 -1
  202. package/apps/pwa/out/control/index.txt +22 -22
  203. package/apps/pwa/out/decisions/index.html +1 -1
  204. package/apps/pwa/out/decisions/index.txt +21 -21
  205. package/apps/pwa/out/design-check/index.html +1 -1
  206. package/apps/pwa/out/design-check/index.txt +22 -22
  207. package/apps/pwa/out/editor/index.html +1 -1
  208. package/apps/pwa/out/editor/index.txt +22 -22
  209. package/apps/pwa/out/exec/index.html +1 -1
  210. package/apps/pwa/out/exec/index.txt +22 -22
  211. package/apps/pwa/out/field/index.html +1 -1
  212. package/apps/pwa/out/field/index.txt +22 -22
  213. package/apps/pwa/out/healthz +1 -1
  214. package/apps/pwa/out/index.html +1 -1
  215. package/apps/pwa/out/index.txt +21 -21
  216. package/apps/pwa/out/inside/index.html +1 -1
  217. package/apps/pwa/out/inside/index.txt +21 -21
  218. package/apps/pwa/out/intake/index.html +1 -1
  219. package/apps/pwa/out/intake/index.txt +22 -22
  220. package/apps/pwa/out/live/index.html +1 -1
  221. package/apps/pwa/out/live/index.txt +22 -22
  222. package/apps/pwa/out/live-run/index.html +1 -1
  223. package/apps/pwa/out/live-run/index.txt +22 -22
  224. package/apps/pwa/out/loops/index.html +1 -1
  225. package/apps/pwa/out/loops/index.txt +21 -21
  226. package/apps/pwa/out/market/index.html +1 -1
  227. package/apps/pwa/out/market/index.txt +21 -21
  228. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  229. package/apps/pwa/out/missions/placeholder/index.txt +21 -21
  230. package/apps/pwa/out/morning/index.html +1 -1
  231. package/apps/pwa/out/morning/index.txt +22 -22
  232. package/apps/pwa/out/observatory/index.html +1 -1
  233. package/apps/pwa/out/observatory/index.txt +22 -22
  234. package/apps/pwa/out/ops/checklist/index.html +1 -1
  235. package/apps/pwa/out/ops/checklist/index.txt +21 -21
  236. package/apps/pwa/out/ops/release/index.html +1 -1
  237. package/apps/pwa/out/ops/release/index.txt +21 -21
  238. package/apps/pwa/out/ops/seats/index.html +1 -1
  239. package/apps/pwa/out/ops/seats/index.txt +21 -21
  240. package/apps/pwa/out/outputs/index.html +1 -1
  241. package/apps/pwa/out/outputs/index.txt +21 -21
  242. package/apps/pwa/out/reflection/index.html +1 -1
  243. package/apps/pwa/out/reflection/index.txt +22 -22
  244. package/apps/pwa/out/scheduler/index.html +1 -1
  245. package/apps/pwa/out/scheduler/index.txt +22 -22
  246. package/apps/pwa/out/sessions/index.html +1 -1
  247. package/apps/pwa/out/sessions/index.txt +21 -21
  248. package/apps/pwa/out/settings/devices/index.html +1 -1
  249. package/apps/pwa/out/settings/devices/index.txt +22 -22
  250. package/apps/pwa/out/settings/index.html +1 -1
  251. package/apps/pwa/out/settings/index.txt +22 -22
  252. package/apps/pwa/out/setup/done/index.html +1 -1
  253. package/apps/pwa/out/setup/done/index.txt +22 -22
  254. package/apps/pwa/out/setup/index.html +1 -1
  255. package/apps/pwa/out/setup/index.txt +22 -22
  256. package/apps/pwa/out/share/index.html +1 -1
  257. package/apps/pwa/out/share/index.txt +22 -22
  258. package/apps/pwa/out/showroom/index.html +1 -1
  259. package/apps/pwa/out/showroom/index.txt +21 -21
  260. package/apps/pwa/out/tasks/index.html +1 -1
  261. package/apps/pwa/out/tasks/index.txt +22 -22
  262. package/apps/pwa/out/term/index.html +1 -1
  263. package/apps/pwa/out/term/index.txt +22 -22
  264. package/apps/pwa/out/today/index.html +1 -1
  265. package/apps/pwa/out/today/index.txt +22 -22
  266. package/apps/pwa/out/trace/index.html +1 -1
  267. package/apps/pwa/out/trace/index.txt +22 -22
  268. package/apps/pwa/out/vault/index.html +1 -1
  269. package/apps/pwa/out/vault/index.txt +22 -22
  270. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  271. package/apps/pwa/out/workflows/chat-ui/index.txt +22 -22
  272. package/apps/pwa/out/workflows/index.html +1 -1
  273. package/apps/pwa/out/workflows/index.txt +22 -22
  274. package/apps/pwa/out/workspace/index.html +1 -1
  275. package/apps/pwa/out/workspace/index.txt +22 -22
  276. package/apps/pwa/out/worktrees/index.html +1 -1
  277. package/apps/pwa/out/worktrees/index.txt +22 -22
  278. package/graphs/demo/persona-marketer/fixtures/marketer-scenario.yaml +10 -0
  279. package/graphs/demo/persona-marketer/persona-marketer.yaml +25 -0
  280. package/graphs/demo/persona-marketer/recipes.yaml +19 -0
  281. package/graphs/video/explainer-line.yaml +4 -1
  282. package/package.json +1 -1
  283. package/scripts/dead-code/report.ts +169 -0
  284. package/scripts/lib/morning-report-options.ts +3 -4
  285. package/scripts/lib/tui-regress-evidence.ts +56 -0
  286. package/scripts/morning-report.ts +5 -1
  287. package/scripts/public-export.ts +15 -7
  288. package/scripts/release-loop/export-check-node.ts +21 -3
  289. package/scripts/release-loop/gate-node.ts +379 -48
  290. package/scripts/release-loop/gate-shard-dispatch.ts +128 -0
  291. package/scripts/release-loop/gate-shard-receipts.ts +89 -0
  292. package/scripts/release-loop/gate-wall.ts +5 -5
  293. package/scripts/release-loop/preflight.ts +6 -2
  294. package/scripts/release-loop/resume-release.ts +20 -5
  295. package/scripts/release-loop/resume.ts +48 -0
  296. package/scripts/release-loop/version-node.ts +7 -2
  297. package/scripts/release-story/draft.ts +1 -1
  298. package/scripts/research-bench/README.md +53 -0
  299. package/scripts/research-bench/questions.json +66 -0
  300. package/scripts/research-bench/rubric.md +33 -0
  301. package/scripts/research-bench/run.ts +523 -0
  302. package/scripts/tui-regress.ts +85 -10
  303. package/src/acp/core-turn-bridge.ts +8 -0
  304. package/src/agent/autonomous-tools.ts +10 -3
  305. package/src/agent/monad-agent-turn.ts +4 -1
  306. package/src/agent/registry.ts +26 -2
  307. package/src/agent/shared-app-tools.ts +1 -1
  308. package/src/agent/surface-ux/build.ts +12 -3
  309. package/src/agent/surface-ux/types.ts +1 -1
  310. package/src/agent/task-notification.ts +75 -6
  311. package/src/agent/types.ts +3 -0
  312. package/src/agent-mission/driver.ts +29 -3
  313. package/src/agent-mission/mission-cli.ts +2 -1
  314. package/src/agent-substrate/review-context-pack.ts +365 -0
  315. package/src/agent-substrate/self-review-cli.ts +226 -17
  316. package/src/ask-user-question/index.ts +6 -0
  317. package/src/ask-user-question/inline-resolver.ts +49 -0
  318. package/src/auto-research/question-ladder-contract.ts +22 -3
  319. package/src/auto-research/research-turn.ts +350 -17
  320. package/src/autopilot/agent-loop.ts +1 -1
  321. package/src/autopilot/pty-control-loop.ts +8 -1
  322. package/src/boot/daemon-tools/index.ts +4 -3
  323. package/src/boot/daemon-tools/self-implement.ts +270 -2
  324. package/src/boot/daemon-tools/types.ts +2 -0
  325. package/src/budget/llm-cost.ts +44 -5
  326. package/src/budget/unified-usage.ts +17 -1
  327. package/src/capture/tui-self-report.ts +14 -0
  328. package/src/chat/index.ts +33 -7
  329. package/src/cli/agent-cli.ts +43 -8
  330. package/src/cli/intake-cli.ts +22 -1
  331. package/src/cli/lesson-cli.ts +19 -3
  332. package/src/cli/log-event-names.ts +1 -0
  333. package/src/cli/pod-cli.ts +17 -2
  334. package/src/cli/pty-takeover-cli.ts +67 -7
  335. package/src/cli/release-cli.ts +52 -6
  336. package/src/cli/repo-cli.ts +2 -1
  337. package/src/cli/tasks-cli.ts +36 -9
  338. package/src/control-plane/ledger.ts +21 -4
  339. package/src/core-turn/run-core-turn.ts +44 -3
  340. package/src/core-turn/run-goal-loop.ts +152 -8
  341. package/src/core-turn/types.ts +9 -0
  342. package/src/dashboard/chat/acp-chat.ts +2 -2
  343. package/src/dashboard/classic-sigquit.ts +16 -0
  344. package/src/dashboard/index.ts +321 -27
  345. package/src/dashboard/input/chat-main-interaction-opts.ts +3 -0
  346. package/src/dashboard/input/chat-main-plain-turn-runtime.ts +7 -2
  347. package/src/dashboard/input/chat-main-slash-command.ts +7 -0
  348. package/src/dashboard/input/dashboard-plain-turn-stream.ts +4 -0
  349. package/src/dashboard/input/dashboard-priority-key-route.ts +21 -5
  350. package/src/dashboard/input/external-input-host.ts +2 -0
  351. package/src/dashboard/sidetab-runtime.ts +228 -0
  352. package/src/dashboard/slash-runtime/ask-clarification.ts +7 -1
  353. package/src/dashboard/slash-runtime/dashboard-handlers.ts +20 -8
  354. package/src/dashboard/slash-runtime/help-from-registry.ts +2 -2
  355. package/src/dashboard/term-slash-runtime.ts +16 -18
  356. package/src/dashboard/turn-preamble.ts +2 -0
  357. package/src/domains/knowledge.ts +1 -1
  358. package/src/esc-abort-gate.ts +33 -1
  359. package/src/execution-loop/launch-gate.ts +206 -1
  360. package/src/graph-runner/graph-cli.ts +6 -4
  361. package/src/graph-runner/runner.ts +31 -9
  362. package/src/graph-wizard/generate.ts +16 -7
  363. package/src/graph-wizard/mission-compose.ts +201 -0
  364. package/src/grok/agent-search.ts +8 -2
  365. package/src/grok/credential.ts +5 -0
  366. package/src/grounding/ref-index.ts +11 -0
  367. package/src/grounding/ref-vector.ts +61 -0
  368. package/src/grounding/sources-cli.ts +2 -2
  369. package/src/grounding/sources.ts +15 -1
  370. package/src/harness/harness-cli-command.ts +38 -9
  371. package/src/harness/harness-pod-dispatch.ts +7 -1
  372. package/src/index.ts +18 -4
  373. package/src/input/external-input-queue.ts +10 -0
  374. package/src/intake-plane/collect-telegram-saved.ts +36 -1
  375. package/src/intake-plane/intake-to-tasks.ts +246 -3
  376. package/src/lessons/friction-ledger.ts +154 -0
  377. package/src/live-supply/collector.ts +149 -0
  378. package/src/live-supply/probes.ts +52 -0
  379. package/src/live-supply/snapshot.ts +40 -0
  380. package/src/llm.ts +431 -76
  381. package/src/loops/orchestrator/tick.ts +8 -0
  382. package/src/nexus/api/harness-api.ts +2 -1
  383. package/src/pty/snapshot.py +132 -0
  384. package/src/pty-shell/pty-control-ipc.ts +29 -2
  385. package/src/pty-shell/pty-manifest.ts +59 -3
  386. package/src/pty-shell/registry.ts +2 -0
  387. package/src/pty-shell/tui-run-state.ts +80 -3
  388. package/src/release-loop/gate-host-reservation.ts +13 -4
  389. package/src/release-loop/gate-shard-ledger.ts +68 -0
  390. package/src/release-loop/merged-pr-checklist.ts +25 -2
  391. package/src/release-loop/rehearsal-shard-plan.ts +6 -1
  392. package/src/release-loop/rehearsal.ts +27 -0
  393. package/src/research/edge-decision.ts +124 -15
  394. package/src/research/gap-followup.ts +249 -0
  395. package/src/research/lenses/counter-evidence.ts +100 -0
  396. package/src/research/lenses/working-backwards.ts +89 -0
  397. package/src/research/plugin-discovery.ts +242 -0
  398. package/src/research-bridge/invoke.ts +4 -2
  399. package/src/research-bridge/types.ts +2 -0
  400. package/src/self-dev/ask-launch-flow.ts +34 -106
  401. package/src/self-dev/dev-cli.ts +2 -0
  402. package/src/self-dev/dev-pipeline.ts +8 -4
  403. package/src/self-dev/graph-journey-route.ts +10 -2
  404. package/src/self-dev/launch-preflight-text.ts +2 -2
  405. package/src/self-dev/launch-preflight.ts +38 -7
  406. package/src/self-dev/orchestrate-cli.ts +1 -0
  407. package/src/self-dev/run-supervisor.ts +19 -0
  408. package/src/self-implement/device-first.ts +8 -2
  409. package/src/self-implement/doctor-visit.ts +76 -58
  410. package/src/self-implement/gate-artifacts.ts +3 -0
  411. package/src/self-implement/gate-baseline.ts +75 -4
  412. package/src/self-implement/gate-cli.ts +317 -9
  413. package/src/self-implement/gate-receipt-registry.ts +180 -0
  414. package/src/self-implement/gate-remote.ts +145 -22
  415. package/src/self-implement/goal-author-clarification.ts +178 -24
  416. package/src/self-implement/goal-author-decompose.ts +24 -15
  417. package/src/self-implement/goal-author.ts +9 -5
  418. package/src/self-implement/host-regate.ts +120 -45
  419. package/src/self-implement/impl-findings-feedback.ts +188 -0
  420. package/src/self-implement/knowhow-pack.ts +189 -10
  421. package/src/self-implement/off-diff-evidence.ts +124 -0
  422. package/src/self-implement/orchestrator.ts +85 -7
  423. package/src/self-implement/run-ledger.ts +46 -8
  424. package/src/self-implement/run-stop.ts +12 -0
  425. package/src/self-implement/seams.ts +6 -3
  426. package/src/self-implement/self-implement-cli.ts +4 -2
  427. package/src/session/chat.ts +89 -15
  428. package/src/session-runtime/provider-circuit.ts +140 -0
  429. package/src/shell-runner/file-engine.ts +1 -0
  430. package/src/shell-runner/types.ts +4 -0
  431. package/src/sidetab-core/model.ts +176 -0
  432. package/src/skills/tools/schedule-wakeup.ts +23 -1
  433. package/src/skills/tools/shell.ts +51 -5
  434. package/src/steward/directive-audit.ts +354 -0
  435. package/src/surface/child-process.ts +31 -0
  436. package/src/surface/tui-stderr-owner.ts +48 -0
  437. package/src/task-agent/cover.ts +30 -12
  438. package/src/task-agent/judge.ts +56 -0
  439. package/src/task-agent/postland-card.ts +35 -2
  440. package/src/task-agent/rejudge-on-head.ts +46 -2
  441. package/src/task-agent/repair-cycle.ts +1 -1
  442. package/src/task-agent/task-hand.ts +129 -24
  443. package/src/task-agent/tier-split.ts +105 -21
  444. package/src/task-orchestrator/surfaces/pod-command-job.ts +330 -2
  445. package/src/task-orchestrator/surfaces/pod-config-snapshot.ts +123 -0
  446. package/src/task-orchestrator/surfaces/pod-failure-reason.ts +27 -2
  447. package/src/task-orchestrator/surfaces/pod-mirror-seed.ts +11 -8
  448. package/src/task-orchestrator/surfaces/pod-si-warm-protocol.ts +1 -1
  449. package/src/task-orchestrator/surfaces/pod-source-receive.ts +74 -6
  450. package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +2 -1
  451. package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +56 -15
  452. package/src/task-orchestrator/surfaces/self-implement-pod.ts +186 -33
  453. package/src/tool-runtime/skill-exec-runtime.ts +95 -5
  454. package/src/tui/entry.ts +15 -2
  455. package/src/tui/inline-choice.ts +188 -0
  456. package/src/tui/sidetab/list.ts +2 -176
  457. package/src/tui/slash/term.ts +12 -1
  458. package/src/tui-client/dashboard-session.ts +7 -1
  459. package/src/user-config.ts +34 -4
  460. package/src/ux-sim/classic-tui-seat-scenarios.ts +1 -7
  461. package/src/ux-sim/fake-land-queue.ts +88 -0
  462. package/src/ux-sim/gate-shard-host-reroute.ts +82 -0
  463. package/src/ux-sim/goal-interim-trace.ts +24 -0
  464. package/src/ux-sim/next-tui-seat-scenarios.ts +8 -13
  465. package/src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.ts +4 -1
  466. package/src/version/packed-revision.json +1 -1
  467. package/src/video-pipeline/recipes/explainer.ts +54 -2
  468. package/src/web-search/grok.ts +32 -6
  469. package/src/web-search/index.ts +8 -7
  470. package/src/workflow-runtime/node-catalog.ts +53 -4
  471. package/apps/pwa/out/_next/static/chunks/1118.a8a74ea29aac3e46.js +0 -27
  472. package/apps/pwa/out/_next/static/chunks/1204-2aa830479adf80f4.js +0 -1
  473. package/apps/pwa/out/_next/static/chunks/1341-43b7d2dc77d45c9d.js +0 -1
  474. package/apps/pwa/out/_next/static/chunks/1440-c3ea8882badfd9bf.js +0 -1
  475. package/apps/pwa/out/_next/static/chunks/1698-9c11cbf97f13717e.js +0 -1
  476. package/apps/pwa/out/_next/static/chunks/1770-3b1fc92253ef9f2f.js +0 -1
  477. package/apps/pwa/out/_next/static/chunks/1923-5c1695332240246a.js +0 -1
  478. package/apps/pwa/out/_next/static/chunks/213-20675f20673ba22a.js +0 -1
  479. package/apps/pwa/out/_next/static/chunks/214.186a430da28338f1.js +0 -1
  480. package/apps/pwa/out/_next/static/chunks/2277.3bd4c0ac7f1b5996.js +0 -93
  481. package/apps/pwa/out/_next/static/chunks/240.e09f433f71c78ff4.js +0 -104
  482. package/apps/pwa/out/_next/static/chunks/2415.738b777642a02233.js +0 -1
  483. package/apps/pwa/out/_next/static/chunks/2417.02151393605a7cd0.js +0 -1
  484. package/apps/pwa/out/_next/static/chunks/2463.cd2641a76daaa9ff.js +0 -1
  485. package/apps/pwa/out/_next/static/chunks/2576.b9e9c629c4b84c52.js +0 -1
  486. package/apps/pwa/out/_next/static/chunks/265-c021de53f0865bd9.js +0 -1
  487. package/apps/pwa/out/_next/static/chunks/2998-b1cc13956cd6a6e7.js +0 -1
  488. package/apps/pwa/out/_next/static/chunks/2e4782d3.ba2f0ab2b63a53e7.js +0 -1
  489. package/apps/pwa/out/_next/static/chunks/3130.626b54382b4dc379.js +0 -1
  490. package/apps/pwa/out/_next/static/chunks/3221-1bb3f99a55088613.js +0 -1
  491. package/apps/pwa/out/_next/static/chunks/3280.24edb1ffd03a7f3f.js +0 -24
  492. package/apps/pwa/out/_next/static/chunks/3288-eb3c22a1cbf2ae68.js +0 -1
  493. package/apps/pwa/out/_next/static/chunks/33.ef99e8374f96c6c4.js +0 -36
  494. package/apps/pwa/out/_next/static/chunks/3341-f09b9efbd7a82f70.js +0 -1
  495. package/apps/pwa/out/_next/static/chunks/3389.012c70767a872f9b.js +0 -1
  496. package/apps/pwa/out/_next/static/chunks/3410-d7c0f14b329d6fda.js +0 -1
  497. package/apps/pwa/out/_next/static/chunks/3421.c87d6313a7d670f7.js +0 -287
  498. package/apps/pwa/out/_next/static/chunks/3422-83a3953f9bd67e26.js +0 -1
  499. package/apps/pwa/out/_next/static/chunks/3587-002e24e368c515a9.js +0 -1
  500. package/apps/pwa/out/_next/static/chunks/3644.f12a7d821ab940af.js +0 -1
  501. package/apps/pwa/out/_next/static/chunks/3660.d7516588e2d875c3.js +0 -1
  502. package/apps/pwa/out/_next/static/chunks/3695.b82e2610f4cd4ea9.js +0 -1
  503. package/apps/pwa/out/_next/static/chunks/3858.ca1f5bc0f577eac9.js +0 -94
  504. package/apps/pwa/out/_next/static/chunks/3959-e6ac4a139d9d4bcc.js +0 -1
  505. package/apps/pwa/out/_next/static/chunks/4032.53f62176514ec0ea.js +0 -1
  506. package/apps/pwa/out/_next/static/chunks/4204-ef8484cbecd5d62f.js +0 -1
  507. package/apps/pwa/out/_next/static/chunks/4259-163129ca79913c4b.js +0 -1
  508. package/apps/pwa/out/_next/static/chunks/428-eaa77df3d0c85969.js +0 -1
  509. package/apps/pwa/out/_next/static/chunks/4432-97e400ffa1e161f5.js +0 -1
  510. package/apps/pwa/out/_next/static/chunks/449-aa427cf2cbb75f50.js +0 -1
  511. package/apps/pwa/out/_next/static/chunks/4491-39a0fd32bbaf3840.js +0 -1
  512. package/apps/pwa/out/_next/static/chunks/4588.b7cf06d382953979.js +0 -1
  513. package/apps/pwa/out/_next/static/chunks/4690.70ec8060825366ab.js +0 -32
  514. package/apps/pwa/out/_next/static/chunks/4804.6012b5cd33c22792.js +0 -90
  515. package/apps/pwa/out/_next/static/chunks/4881.e4d22d730e3b9df5.js +0 -1
  516. package/apps/pwa/out/_next/static/chunks/4937.ce2e340dc29cad3e.js +0 -79
  517. package/apps/pwa/out/_next/static/chunks/5-bb1c08d84bd71df3.js +0 -1
  518. package/apps/pwa/out/_next/static/chunks/5005.de98df23b37cdf3c.js +0 -1
  519. package/apps/pwa/out/_next/static/chunks/5035.dc64a89cad5573cc.js +0 -74
  520. package/apps/pwa/out/_next/static/chunks/5207.1a224035455790fd.js +0 -1
  521. package/apps/pwa/out/_next/static/chunks/5255-1b60d50eabe9f057.js +0 -1
  522. package/apps/pwa/out/_next/static/chunks/5269.d0436ee6d773382a.js +0 -286
  523. package/apps/pwa/out/_next/static/chunks/5300.677c97e0393742e6.js +0 -1
  524. package/apps/pwa/out/_next/static/chunks/5309.3367c4d50f52b489.js +0 -1
  525. package/apps/pwa/out/_next/static/chunks/552-689827d49780fa00.js +0 -1
  526. package/apps/pwa/out/_next/static/chunks/5539.34cc9d60622cb69b.js +0 -8
  527. package/apps/pwa/out/_next/static/chunks/5568.218dea0c00ca2ec7.js +0 -1
  528. package/apps/pwa/out/_next/static/chunks/5645.b7e3b055455a04ea.js +0 -1
  529. package/apps/pwa/out/_next/static/chunks/5662.18cc0f30353cbd96.js +0 -1
  530. package/apps/pwa/out/_next/static/chunks/5671.da24fc9dc5e98325.js +0 -1
  531. package/apps/pwa/out/_next/static/chunks/5b141171.324c40fd49cb6821.js +0 -1
  532. package/apps/pwa/out/_next/static/chunks/6175-d4621f6a10b0cfab.js +0 -1
  533. package/apps/pwa/out/_next/static/chunks/6290.3eb53a20746b72ce.js +0 -1
  534. package/apps/pwa/out/_next/static/chunks/6415-9307f3eafa90837f.js +0 -1
  535. package/apps/pwa/out/_next/static/chunks/6579-3de35d00aacd71b5.js +0 -1
  536. package/apps/pwa/out/_next/static/chunks/680-2f324c4e039a5b67.js +0 -1
  537. package/apps/pwa/out/_next/static/chunks/6845-331b3c7481da3ba3.js +0 -1
  538. package/apps/pwa/out/_next/static/chunks/7000.28157393caaf5343.js +0 -62
  539. package/apps/pwa/out/_next/static/chunks/7311-60a7ea80d23c7521.js +0 -1
  540. package/apps/pwa/out/_next/static/chunks/7401.525d0a12f7d02c06.js +0 -1
  541. package/apps/pwa/out/_next/static/chunks/7438.c2cf72b66dca6aa4.js +0 -1
  542. package/apps/pwa/out/_next/static/chunks/7488.966b116789f3d41a.js +0 -1
  543. package/apps/pwa/out/_next/static/chunks/7573.2376e13c9c21f1f8.js +0 -77
  544. package/apps/pwa/out/_next/static/chunks/7577.ea6e9ac72e035520.js +0 -1
  545. package/apps/pwa/out/_next/static/chunks/7657.8d1fb3d2f7ebe273.js +0 -1
  546. package/apps/pwa/out/_next/static/chunks/7903-1435d5d2f0dd7807.js +0 -1
  547. package/apps/pwa/out/_next/static/chunks/7978-30a91192c5dbe3c2.js +0 -1
  548. package/apps/pwa/out/_next/static/chunks/8025-8795821525cf1a07.js +0 -1
  549. package/apps/pwa/out/_next/static/chunks/8191.3674a00f0b565c23.js +0 -1
  550. package/apps/pwa/out/_next/static/chunks/8217-604955d8885c5ef2.js +0 -1
  551. package/apps/pwa/out/_next/static/chunks/8298-eed6f5f2585a63f4.js +0 -1
  552. package/apps/pwa/out/_next/static/chunks/8758.ac421f726a189125.js +0 -1
  553. package/apps/pwa/out/_next/static/chunks/891.d6c723a51a067b36.js +0 -149
  554. package/apps/pwa/out/_next/static/chunks/9223.cbcc88e0e9950426.js +0 -41
  555. package/apps/pwa/out/_next/static/chunks/9317.6a9869039c231bb3.js +0 -24
  556. package/apps/pwa/out/_next/static/chunks/9383.e4755f275b3c11ff.js +0 -1
  557. package/apps/pwa/out/_next/static/chunks/9581.da63ddf41acfad46.js +0 -1
  558. package/apps/pwa/out/_next/static/chunks/9715.8c5529a0a5c41a36.js +0 -1
  559. package/apps/pwa/out/_next/static/chunks/9817.3009d65f0889ef1f.js +0 -2
  560. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-76873dd80da4f715.js +0 -1
  561. package/apps/pwa/out/_next/static/chunks/app/approvals/page-ed32b6ec5dea8f23.js +0 -1
  562. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-fdd40e15babf3d25.js +0 -1
  563. package/apps/pwa/out/_next/static/chunks/app/board/page-384efc78e85e400b.js +0 -1
  564. package/apps/pwa/out/_next/static/chunks/app/bots/page-d91809c5aeed319a.js +0 -1
  565. package/apps/pwa/out/_next/static/chunks/app/ceo/page-128f3522f89a81ab.js +0 -1
  566. package/apps/pwa/out/_next/static/chunks/app/chat/page-595961abf3b43ad1.js +0 -1
  567. package/apps/pwa/out/_next/static/chunks/app/consult/page-f41dccb76d8c0263.js +0 -1
  568. package/apps/pwa/out/_next/static/chunks/app/control/page-a3205c2e28b7d0d9.js +0 -1
  569. package/apps/pwa/out/_next/static/chunks/app/decisions/page-c39a80277814a3f4.js +0 -1
  570. package/apps/pwa/out/_next/static/chunks/app/design-check/page-1ab3f98194513195.js +0 -1
  571. package/apps/pwa/out/_next/static/chunks/app/editor/page-a5246f7e254d77d0.js +0 -1
  572. package/apps/pwa/out/_next/static/chunks/app/exec/page-0f92287bdb81217d.js +0 -1
  573. package/apps/pwa/out/_next/static/chunks/app/field/page-5a37131ff63793ef.js +0 -1
  574. package/apps/pwa/out/_next/static/chunks/app/healthz/route-76873dd80da4f715.js +0 -1
  575. package/apps/pwa/out/_next/static/chunks/app/inside/page-ac4bd14bb2348bfd.js +0 -1
  576. package/apps/pwa/out/_next/static/chunks/app/intake/page-c348a3959c5b5fc6.js +0 -1
  577. package/apps/pwa/out/_next/static/chunks/app/layout-2addd81c0d3e2906.js +0 -1
  578. package/apps/pwa/out/_next/static/chunks/app/live/page-da6b765f58a3eefb.js +0 -1
  579. package/apps/pwa/out/_next/static/chunks/app/live-run/page-0661e40f8780c32c.js +0 -1
  580. package/apps/pwa/out/_next/static/chunks/app/loops/page-b89af1b1c8e4875b.js +0 -1
  581. package/apps/pwa/out/_next/static/chunks/app/market/page-da8aeb82ba751cdb.js +0 -1
  582. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-cc71317b239439db.js +0 -1
  583. package/apps/pwa/out/_next/static/chunks/app/morning/page-bde7fc1d64ffe369.js +0 -1
  584. package/apps/pwa/out/_next/static/chunks/app/not-found-e2797214f713fa58.js +0 -1
  585. package/apps/pwa/out/_next/static/chunks/app/observatory/page-2a35bcda70defaf6.js +0 -1
  586. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-3af03deedde45032.js +0 -1
  587. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-d1d1210f99f620ae.js +0 -1
  588. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-46d1b5500885861d.js +0 -1
  589. package/apps/pwa/out/_next/static/chunks/app/outputs/page-291ab19fe2acb173.js +0 -1
  590. package/apps/pwa/out/_next/static/chunks/app/page-7f569e533ddeecba.js +0 -1
  591. package/apps/pwa/out/_next/static/chunks/app/reflection/page-990129c9fee46d8f.js +0 -1
  592. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-7737f785ebb1cdaf.js +0 -1
  593. package/apps/pwa/out/_next/static/chunks/app/sessions/page-9f3c73a4f7ffd2f8.js +0 -1
  594. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-03be7fb347f01058.js +0 -1
  595. package/apps/pwa/out/_next/static/chunks/app/settings/page-96b0280625e4df2b.js +0 -1
  596. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-56855545049eb56d.js +0 -1
  597. package/apps/pwa/out/_next/static/chunks/app/setup/layout-76873dd80da4f715.js +0 -1
  598. package/apps/pwa/out/_next/static/chunks/app/setup/page-79a909c9981f0338.js +0 -1
  599. package/apps/pwa/out/_next/static/chunks/app/share/page-a9d9a3e66459c1e0.js +0 -1
  600. package/apps/pwa/out/_next/static/chunks/app/showroom/page-c383cbf2013f7069.js +0 -1
  601. package/apps/pwa/out/_next/static/chunks/app/tasks/page-f57c6a2e54dbdca4.js +0 -1
  602. package/apps/pwa/out/_next/static/chunks/app/term/page-6b140f77593576eb.js +0 -1
  603. package/apps/pwa/out/_next/static/chunks/app/today/page-6b767ae2d9d0adfc.js +0 -1
  604. package/apps/pwa/out/_next/static/chunks/app/trace/page-116d6198d5da0e3d.js +0 -1
  605. package/apps/pwa/out/_next/static/chunks/app/vault/page-b9c9b778c7501370.js +0 -1
  606. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-a6c78392ab8f6335.js +0 -1
  607. package/apps/pwa/out/_next/static/chunks/app/workflows/page-455183deb4ed0cfe.js +0 -1
  608. package/apps/pwa/out/_next/static/chunks/app/workspace/page-6a63e99526bd63d0.js +0 -1
  609. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-31c22caafe788c08.js +0 -1
  610. package/apps/pwa/out/_next/static/chunks/main-941155250ed2644b.js +0 -1
  611. package/apps/pwa/out/_next/static/chunks/main-app-f8b6765abed6d149.js +0 -1
  612. package/apps/pwa/out/_next/static/chunks/pages/_app-78432194c85388f9.js +0 -1
  613. package/apps/pwa/out/_next/static/chunks/pages/_error-cdf7390829512b1b.js +0 -1
  614. package/apps/pwa/out/_next/static/chunks/webpack-d5f0964a9c2e92d2.js +0 -1
  615. /package/apps/pwa/out/_next/static/{RrjXTwz-urRAbChP1bX02 → HjeK7zONHfR7op1hKXp4k}/_ssgManifest.js +0 -0
@@ -134,6 +134,7 @@ export interface DashboardChatMainPlainTurnRuntimeDeps {
134
134
  onToolResult: (call: unknown) => void;
135
135
  onUsage: (usage: unknown) => void;
136
136
  onThought?: (text: string) => void;
137
+ onStatus?: (line: string) => void;
137
138
  /** ACP `_meta` — 자동 회복 ② 가 «다음 공급자로» 표지를 싣는다. */
138
139
  meta?: Record<string, unknown>;
139
140
  }): Promise<unknown>;
@@ -174,7 +175,7 @@ export interface DashboardChatMainPlainTurnRuntimeDeps {
174
175
  autoheal?: DashboardTurnAutoheal;
175
176
  /** 실패 지문이 맞은 오류: 화면엔 한국어 처방 한 줄, 원문은 여기(`/detail`)로. 없으면 원문을 그대로 낸다. */
176
177
  pushFailureNotice?: (notice: string, raw: string) => void;
177
- finalizeTurn: (status: 'completed' | 'interrupted' | 'failed', error?: string) => void;
178
+ finalizeTurn: (status: 'completed' | 'interrupted' | 'failed', error?: string) => void | Promise<void>;
178
179
  }
179
180
 
180
181
  /** Select a safe, actionable message for a failed dashboard chat turn. */
@@ -618,6 +619,10 @@ ${summary}` }] : []),
618
619
  deps.runTurnUsageRuntime(usage);
619
620
  },
620
621
  onThought: (text) => { turnStreamRuntime.onThought?.(text); },
622
+ onStatus: (line) => {
623
+ deps.pushChatLine(` · ${line}`);
624
+ deps.draw();
625
+ },
621
626
  autoTts: deps.autoTts,
622
627
  voiceChat: deps.voiceChat,
623
628
  drainCooldownMs: userConfig.voice.tts.drainCooldownMs,
@@ -725,7 +730,7 @@ ${summary}` }] : []),
725
730
  try {
726
731
  cleanupEsc();
727
732
  } finally {
728
- deps.finalizeTurn(finalStatus, finalError);
733
+ await deps.finalizeTurn(finalStatus, finalError);
729
734
  }
730
735
  }
731
736
  }
@@ -17,6 +17,13 @@ export function resolveDashboardChatMainSlashCommand(
17
17
  args = command === undefined ? ['new'] : ['new', command];
18
18
  }
19
19
 
20
+ // `/harness ask` is prose, not a whitespace-delimited command. Keep its raw
21
+ // tail intact so pasted path labels stay on the first line for ask preflight.
22
+ if (cmdLower === 'harness' && args[0]?.toLowerCase() === 'ask') {
23
+ const rawAsk = /^\S+\s+ask(?:\s+([\s\S]*))?$/i.exec(commandText.slice(1))?.[1];
24
+ args = rawAsk === undefined ? ['ask'] : ['ask', rawAsk];
25
+ }
26
+
20
27
  // Top-level alias: `/resume <id>` → `/session load <id>`.
21
28
  // Reuses the existing /session subcommand handler so the resume
22
29
  // flow stays in one place. A bare `/resume` is NOT rewritten: it must reach
@@ -40,6 +40,7 @@ export interface DashboardPlainTurnAcpSend {
40
40
  onToolResult: (call: unknown) => void;
41
41
  onUsage: (usage: unknown) => void;
42
42
  onThought?: (text: string) => void;
43
+ onStatus?: (line: string) => void;
43
44
  }): Promise<unknown>;
44
45
  }
45
46
 
@@ -58,6 +59,8 @@ export interface DashboardPlainTurnStreamDeps {
58
59
  onUsage: (usage: unknown) => void;
59
60
  /** TUI-TURN-NARRATION — 추론 요약 문단(선택). */
60
61
  onThought?: (text: string) => void;
62
+ /** Transient runtime status (for example, a stream retry notice). */
63
+ onStatus?: (line: string) => void;
61
64
 
62
65
  /** Auto-TTS hooks. `pushChunk` is fired on every text delta;
63
66
  * `commit` / `cancel` are called by the settle sink in the
@@ -177,6 +180,7 @@ export async function runDashboardPlainTurnStream(
177
180
  },
178
181
  onUsage: (usage) => deps.onUsage(usage),
179
182
  ...(deps.onThought ? { onThought: (text: string) => deps.onThought!(text) } : {}),
183
+ ...(deps.onStatus ? { onStatus: (line: string) => deps.onStatus!(line) } : {}),
180
184
  });
181
185
  settled = deps.abortCtrl.signal.aborted ? 'cancelled' : 'end_turn';
182
186
  // Return the cumulative full response so commit / metrics / autocopy
@@ -28,12 +28,15 @@ function trace(step: string, key: Key, claimed: boolean | string): void {
28
28
  }
29
29
 
30
30
  export interface DashboardPriorityKeyRouteDeps<Action> {
31
+ /** Classic-dashboard Ctrl+\\ is a recoverable guidance action, not
32
+ * a process quit. Claim it before the global force-quit matcher. */
33
+ routeClassicSigquitChord?: (key: Key) => boolean;
31
34
  /** Step 0 — global force-quit chord that fires from ANYWHERE,
32
35
  * including inside popup terminals + bell modal + dashboard
33
36
  * scenes. Plain Ctrl+Q has too many child-app bindings (e.g.
34
- * emacs quoted-insert), so the true escape hatches live on
35
- * chords that terminal-resident apps are less likely to own:
36
- * Ctrl+Shift+Q and Ctrl+\ . Returns true when the matcher
37
+ * emacs quoted-insert), so Ctrl+Shift+Q is the force-quit escape
38
+ * hatch. Ctrl+\\ is reserved by the classic dashboard for guidance.
39
+ * Returns true when the matcher
37
40
  * fires; the route then short-circuits to `{type:'quit'}`
38
41
  * regardless of any other state. */
39
42
  isForceQuitChord: (key: Key) => boolean;
@@ -70,6 +73,8 @@ export interface DashboardPriorityKeyRouteDeps<Action> {
70
73
  * the controller is idle so legacy dispatch paths stay reachable. */
71
74
  routeVoiceChatActiveKey: (key: Key) => boolean | Promise<boolean>;
72
75
  routeBellKey: (key: Key) => boolean | Promise<boolean>;
76
+ /** Classic sidetab prefix keys must be seen before an exclusive shell modal. */
77
+ routeSidetabKey?: (key: Key) => boolean;
73
78
  inputOwner?: InputOwner;
74
79
  dispatchPreKey: (key: Key, targetHandlerName?: string) => boolean | Promise<boolean>;
75
80
  routeExclusiveTerminalModalKey: (key: Key) => boolean | Promise<boolean>;
@@ -86,8 +91,9 @@ export async function routeDashboardPriorityKey<Action>(
86
91
  deps: DashboardPriorityKeyRouteDeps<Action>,
87
92
  ): Promise<DashboardPriorityKeyRouteResult> {
88
93
  // Step 0: global force-quit. Wins over EVERYTHING — bell modal,
89
- // popup terminal, drag interceptors. Bound to Ctrl+Shift+Q and
90
- // Ctrl+\ (both rare terminal-app bindings) to preserve the
94
+ // popup terminal, drag interceptors. Bound to Ctrl+Shift+Q;
95
+ // Ctrl+\\ has already been claimed by the classic guidance route.
96
+ // This preserves the
91
97
  // "elanous escape hatch" concept the user explicitly wanted to keep:
92
98
  // "ctrl+q 전체 강제 종료 컨셉은 남았으면 좋겠습니다.
93
99
  // 터미널모드에서는 잘 사용하지 않을 복잡 패턴으로 리 어사인 해도 됩니다."
@@ -101,6 +107,11 @@ export async function routeDashboardPriorityKey<Action>(
101
107
  const tracing = debug.isKeyTraceEnabled();
102
108
  if (tracing) trace('begin', key, 'pending');
103
109
 
110
+ if (deps.routeClassicSigquitChord?.(key)) {
111
+ if (tracing) trace('routeClassicSigquitChord', key, true);
112
+ return { type: 'handled' };
113
+ }
114
+
104
115
  if (deps.isForceQuitChord(key)) {
105
116
  if (tracing) trace('isForceQuitChord', key, 'quit');
106
117
  return { type: 'quit' };
@@ -137,6 +148,11 @@ export async function routeDashboardPriorityKey<Action>(
137
148
  return { type: 'handled' };
138
149
  }
139
150
 
151
+ if (deps.routeSidetabKey?.(key)) {
152
+ if (tracing) trace('routeSidetabKey', key, true);
153
+ return { type: 'handled' };
154
+ }
155
+
140
156
  // Step 2: popup terminal modal — when active, the user is interacting
141
157
  // with a child PTY (plain shell, /claude, /codex). The router forwards
142
158
  // every key except Ctrl+G + typed `exit\n`, which are intentional
@@ -20,6 +20,7 @@ export interface DashboardExternalInputHostDeps {
20
20
  setQueueNotice: (line: string | null) => void;
21
21
  /** 지금 턴의 ESC 중단 경로(escGate) — 턴 밖이면 null. 외부 `/stop` 이 이것을 부른다. */
22
22
  getTurnStop?: () => (() => void) | null;
23
+ handleInlineChoice?: (text: string) => boolean;
23
24
  /** 미소비 키 수 — 기본 tui.ts 키 큐. */
24
25
  pendingKeyCount?: () => number;
25
26
  }
@@ -61,6 +62,7 @@ export function createDashboardExternalInputHost(deps: DashboardExternalInputHos
61
62
  stop();
62
63
  return true;
63
64
  },
65
+ handleInlineChoice: (text) => deps.handleInlineChoice?.(text) ?? false,
64
66
  onExternalStop: (result) => {
65
67
  deps.pushNotice(result === 'stopped' ? '⏹ 외부 /stop — 대기열을 건너뛰고 이 턴에 중단을 요청했습니다'
66
68
  : result === 'no-turn' ? '⏹ 외부 /stop — 도는 턴이 없어 무시했습니다'
@@ -0,0 +1,228 @@
1
+ import { createVwFilterPickerModal } from '../ui/vw-filter-picker-modal.js';
2
+ import type { ModalSurface } from '../display/modal-stack.js';
3
+ import type { Key } from '../tui.js';
4
+ import { loadSidetabRows, type SidetabRow } from '../sidetab-core/model.js';
5
+
6
+ export interface DashboardSidetabRuntimeDeps {
7
+ currentSessionId: () => string | undefined;
8
+ termSize: () => { cols: number; rows: number };
9
+ loadRows?: (sessionId?: string) => SidetabRow[];
10
+ pushModal: (surface: ModalSurface) => { dispose: () => void };
11
+ attach: (row: SidetabRow) => void;
12
+ spawnShell: () => void;
13
+ detach: (row: SidetabRow | null) => void;
14
+ kill: (row: SidetabRow) => void;
15
+ returnToParent: () => void;
16
+ status: (message: string) => void;
17
+ }
18
+
19
+ export interface DashboardSidetabRuntime {
20
+ routeKey: (key: Key) => boolean;
21
+ beginPrefix: () => void;
22
+ close: () => void;
23
+ }
24
+
25
+ /** Classic dashboard controls for the shared sidetab model. */
26
+ export function createDashboardSidetabRuntime(
27
+ deps: DashboardSidetabRuntimeDeps,
28
+ ): DashboardSidetabRuntime {
29
+ const getRows = deps.loadRows ?? ((sessionId) => loadSidetabRows(false, sessionId));
30
+ let prefixPending = false;
31
+ let modalDispose: (() => void) | null = null;
32
+ let panel: ReturnType<typeof createVwFilterPickerModal> | null = null;
33
+ let panelRows: SidetabRow[] = [];
34
+
35
+ const closePanel = (): void => {
36
+ const dispose = modalDispose;
37
+ modalDispose = null;
38
+ panel = null;
39
+ panelRows = [];
40
+ dispose?.();
41
+ };
42
+
43
+ const attach = (row: SidetabRow): void => {
44
+ closePanel();
45
+ if (row.currentProcess) {
46
+ deps.returnToParent();
47
+ return;
48
+ }
49
+ deps.attach(row);
50
+ };
51
+
52
+ const selectedRow = (): SidetabRow | null => {
53
+ const item = panel?.state().items[panel.state().selectedIdx];
54
+ return item?.payload && typeof item.payload === 'object'
55
+ ? item.payload as SidetabRow
56
+ : null;
57
+ };
58
+
59
+ const confirmKill = (row: SidetabRow | null): void => {
60
+ if (!row || row.currentProcess) {
61
+ deps.status('현재 classic TUI 세션은 종료할 수 없습니다');
62
+ return;
63
+ }
64
+ closePanel();
65
+ let dispose: (() => void) | null = null;
66
+ const confirm = createVwFilterPickerModal({
67
+ id: `classic-sidetab-kill-${Date.now().toString(36)}`,
68
+ bounds: { row: 3, col: 2, width: Math.min(52, Math.max(24, deps.termSize().cols - 4)), height: 7 },
69
+ title: `종료 확인 · ${row.label}`,
70
+ width: Math.min(52, Math.max(24, deps.termSize().cols - 4)),
71
+ maxVisible: 2,
72
+ primaryActionLabel: '선택',
73
+ cancelActionLabel: '취소',
74
+ footerHint: '기본 취소 · 종료를 선택해야 PTY를 끝냅니다',
75
+ onQuery: () => [
76
+ { label: '취소', payload: 'cancel' },
77
+ { label: '종료', payload: 'kill' },
78
+ ],
79
+ onAccept: (item) => {
80
+ dispose?.();
81
+ dispose = null;
82
+ if (item.payload === 'kill') deps.kill(row);
83
+ },
84
+ onCancel: () => {
85
+ dispose?.();
86
+ dispose = null;
87
+ },
88
+ });
89
+ dispose = deps.pushModal(confirm.surface).dispose;
90
+ };
91
+
92
+ const openPanel = (): void => {
93
+ if (modalDispose) {
94
+ closePanel();
95
+ deps.returnToParent();
96
+ return;
97
+ }
98
+ const { cols, rows } = deps.termSize();
99
+ if (cols < 34 || rows < 12) {
100
+ deps.status('사이드탭은 최소 34칸 × 12줄이 필요합니다');
101
+ return;
102
+ }
103
+ const sessionId = deps.currentSessionId();
104
+ panelRows = getRows(sessionId).filter((row) => row.badge !== 'exited');
105
+ const width = Math.min(64, cols - 4);
106
+ const maxVisible = Math.max(1, Math.min(8, rows - 10));
107
+ const panelHeight = Math.min(rows - 2, 8 + Math.min(maxVisible, panelRows.length));
108
+ panel = createVwFilterPickerModal({
109
+ id: `classic-sidetab-${Date.now().toString(36)}`,
110
+ bounds: { row: Math.max(1, Math.floor((rows - panelHeight) / 2)), col: Math.max(1, Math.floor((cols - width) / 2)), width, height: panelHeight },
111
+ title: 'Classic sidetab · this session and children',
112
+ width,
113
+ maxVisible,
114
+ primaryActionLabel: '연결',
115
+ cancelActionLabel: '닫기',
116
+ footerHint: 'Enter 연결 · n 새 셸 · d 분리 · k 종료 · Esc 닫기',
117
+ onQuery: (query) => {
118
+ const normalized = query.trim().toLocaleLowerCase();
119
+ return panelRows
120
+ .filter((row) => !normalized || `${row.label} ${row.kind} ${row.badge}`.toLocaleLowerCase().includes(normalized))
121
+ .map((row) => ({ label: `${row.currentProcess ? '● 현재' : '○'} ${row.badge} ${row.label}`, payload: row }));
122
+ },
123
+ onAccept: (item) => {
124
+ const row = item.payload as SidetabRow;
125
+ attach(row);
126
+ },
127
+ onCancel: closePanel,
128
+ });
129
+ const defaultOnKey = panel.surface.onKey;
130
+ panel.surface.onKey = (event) => {
131
+ if (!event.ctrl && !event.alt && event.name.toLowerCase() === 'n') {
132
+ closePanel();
133
+ deps.spawnShell();
134
+ return 'consumed';
135
+ }
136
+ if (!event.ctrl && !event.alt && event.name.toLowerCase() === 'd') {
137
+ const row = selectedRow();
138
+ closePanel();
139
+ deps.detach(row);
140
+ return 'consumed';
141
+ }
142
+ if (!event.ctrl && !event.alt && event.name.toLowerCase() === 'k') {
143
+ confirmKill(selectedRow());
144
+ return 'consumed';
145
+ }
146
+ return defaultOnKey?.(event) ?? 'passthrough';
147
+ };
148
+ modalDispose = deps.pushModal(panel.surface).dispose;
149
+ };
150
+
151
+ const chooseIndex = (index: number): void => {
152
+ const rows = getRows(deps.currentSessionId()).filter((row) => row.badge !== 'exited');
153
+ const row = rows[index];
154
+ if (!row) {
155
+ deps.status(`사이드탭 ${index + 1}번 항목 없음`);
156
+ return;
157
+ }
158
+ attach(row);
159
+ };
160
+
161
+ const beginPrefix = (): void => {
162
+ if (prefixPending) return;
163
+ closePanel();
164
+ prefixPending = true;
165
+ deps.status('사이드탭 키 대기 · s/p/1–9/n/d/k/Esc');
166
+ };
167
+
168
+ const routeKey = (key: Key): boolean => {
169
+ if (panel) {
170
+ const panelResult = panel.surface.onKey?.(key as never);
171
+ if (panelResult && panelResult !== 'passthrough') return true;
172
+ }
173
+ if (prefixPending) {
174
+ prefixPending = false;
175
+ const name = key.name.toLowerCase();
176
+ if (key.name === 'escape' || key.name === 'esc') {
177
+ closePanel();
178
+ deps.returnToParent();
179
+ return true;
180
+ }
181
+ if (!key.ctrl && !key.alt && name === 's') {
182
+ openPanel();
183
+ return true;
184
+ }
185
+ if (!key.ctrl && !key.alt && name === 'p') {
186
+ closePanel();
187
+ deps.returnToParent();
188
+ return true;
189
+ }
190
+ if (!key.ctrl && !key.alt && /^[1-9]$/.test(key.name)) {
191
+ chooseIndex(Number(key.name) - 1);
192
+ return true;
193
+ }
194
+ if (!key.ctrl && !key.alt && name === 'n') {
195
+ closePanel();
196
+ deps.spawnShell();
197
+ return true;
198
+ }
199
+ if (!key.ctrl && !key.alt && name === 'd') {
200
+ closePanel();
201
+ deps.detach(null);
202
+ return true;
203
+ }
204
+ if (!key.ctrl && !key.alt && name === 'k') {
205
+ const row = getRows(deps.currentSessionId()).filter((item) => item.badge !== 'exited')
206
+ .find((item) => !item.currentProcess) ?? null;
207
+ confirmKill(row);
208
+ return true;
209
+ }
210
+ deps.status('사이드탭 키: s 목록 · p 부모 · 1–9 연결 · n 새 셸 · d 분리 · k 종료');
211
+ return true;
212
+ }
213
+ if (key.ctrl && !key.alt && (key.name === '\\' || key.name === 'backslash')) {
214
+ beginPrefix();
215
+ return true;
216
+ }
217
+ return false;
218
+ };
219
+
220
+ return {
221
+ routeKey,
222
+ beginPrefix,
223
+ close() {
224
+ prefixPending = false;
225
+ closePanel();
226
+ },
227
+ };
228
+ }
@@ -2,6 +2,9 @@ import type { SurfaceUx } from '../../agent/surface-ux/types.js';
2
2
  import type { AskUserQuestionRequest } from '../../ask-user-question/types.js';
3
3
  import { DASHBOARD_CLARIFICATION_REQUEST } from '../../esc-abort-gate.js';
4
4
  import type { GoalDocumentClarification } from '../../self-implement/goal-author-clarification.js';
5
+ import { getUserConfig, resolveTuiUnattended } from '../../user-config.js';
6
+
7
+ export const DASHBOARD_CLARIFICATION_TIMEOUT_MS = 60_000;
5
8
 
6
9
  /**
7
10
  * Converts the line-oriented self-dev clarification seam into the existing
@@ -14,6 +17,7 @@ export async function readDashboardAskClarification(
14
17
  clarification: GoalDocumentClarification,
15
18
  surfaceUx: Pick<SurfaceUx, 'question'> | undefined,
16
19
  notify?: (line: string) => void,
20
+ unattended = resolveTuiUnattended(getUserConfig()),
17
21
  ): Promise<string> {
18
22
  if (!surfaceUx) return '';
19
23
  const request: AskUserQuestionRequest = {
@@ -30,7 +34,9 @@ export async function readDashboardAskClarification(
30
34
  };
31
35
  Object.defineProperty(request, DASHBOARD_CLARIFICATION_REQUEST, { value: true });
32
36
  try {
33
- const pending = surfaceUx.question(request);
37
+ const pending = surfaceUx.question(request, unattended
38
+ ? { timeoutMs: DASHBOARD_CLARIFICATION_TIMEOUT_MS }
39
+ : undefined);
34
40
  const id = clarification.questionId;
35
41
  notify?.('하니스가 묻는다 — 창에서 고르거나 Esc 로 답 없이 진행');
36
42
  const result = await pending;
@@ -308,6 +308,7 @@ import {
308
308
  } from '../../user-config.js';
309
309
  import { listProviders } from '../../llm.js';
310
310
  import { enabledModels, loadCatalog } from '../../intelligence-map/model-catalog.js';
311
+ import { readTuiSlashAudience, slashMaturity } from '../../maturity/tui-slash-maturity.js';
311
312
  import { selfOrchestrateRuntime } from '../../self-dev/self-orchestrate-runtime.js';
312
313
  import type { ToolRuntime } from '../../tool-runtime/types.js';
313
314
  import { getSessionCwd } from '../../session/working-dir.js';
@@ -383,8 +384,7 @@ import { resolveLocalEndpoints, runLocalLLMCompat } from '../../local-llm-test.j
383
384
  import { registerTermSlash, type TermSlashHost } from '../../tui/slash/term.js';
384
385
  // 옛 입구 re-export shim 은 slash-runtime/index.ts 한 곳뿐(RFC A5 · /mission 과 같은 꼴).
385
386
  import { SlashCommandRegistry } from './registry.js';
386
- import { readDashboardAskClarification } from './ask-clarification.js';
387
- export { readDashboardAskClarification };
387
+ export { readDashboardAskClarification } from './ask-clarification.js';
388
388
  import { createLoopScheduler, type LoopScheduler } from '../loop-scheduler.js';
389
389
  import { registerShellSlash } from './shell-slash.js';
390
390
  import { registerClassicSideSlash } from '../side-basic-runtime.js';
@@ -1199,6 +1199,15 @@ export const DASHBOARD_SLASH_CATALOG_BASELINE = {
1199
1199
  'skills-reload', 'spend', 'squeeze',
1200
1200
  'tk', 'tokens',
1201
1201
  'undo', 'w', 'wd',
1202
+ 'ad', 'agent-room', 'api', 'api-allow', 'auto-tts', 'autotts',
1203
+ 'board', 'capture', 'chat', 'claude', 'codex', 'control', 'conv',
1204
+ 'dash', 'dashboard', 'debug', 'default', 'delta', 'design', 'design-check', 'diffs',
1205
+ 'directive', 'export', 'fork', 'gemini', 'handoff', 'hist', 'history', 'inject', 'inputs',
1206
+ 'lane', 'll', 'local', 'log', 'loops', 'mission', 'p', 'paste', 'persona', 'plan', 'plugin',
1207
+ 'plugins', 'prompt', 'prompts', 'provider', 'qc', 'r', 'reasoning', 'rebind', 'relay',
1208
+ 'reply', 'research', 'resume-turn', 'rewind', 'rs', 'run', 'run-skill', 's', 'showroom',
1209
+ 'surface', 'sync', 'tablet', 'telegram', 'term', 'terminal', 'tg', 'theme', 'think', 'tts',
1210
+ 'vc', 'voice-chat', 'widget', 'widgets', 'wish',
1202
1211
  ],
1203
1212
  listedOnly: [
1204
1213
  'acp', 'rsh', 'sr',
@@ -1496,6 +1505,12 @@ export function buildDashboardSlashRegistry(nowDeps?: ContextNowDeps, decideLedg
1496
1505
  });
1497
1506
 
1498
1507
  registry.register('directive', async (args, ctx) => {
1508
+ const { role } = readTuiSlashAudience();
1509
+ if (slashMaturity('directive') === 'ops' && role === 'general') {
1510
+ ctx.pushChatLine(ctx.warning(' /directive는 ops 등급 기능이라 general 역할에서는 실행할 수 없습니다.'));
1511
+ ctx.setChatScrollOffset(-1);
1512
+ return;
1513
+ }
1499
1514
  try {
1500
1515
  const { addDirective } = await import('../../steward/directive.js');
1501
1516
  const result = await addDirective(args.join(' '), { source: 'tui' });
@@ -2300,7 +2315,9 @@ export function buildDashboardSlashRegistry(nowDeps?: ContextNowDeps, decideLedg
2300
2315
  return;
2301
2316
  }
2302
2317
  if (sub === 'ask') {
2303
- const say = args.slice(1).join(' ').replace(/^["'“]|["'”]$/g, '').trim();
2318
+ // `/harness ask` arrives as one raw tail so a pasted path header keeps its line boundary.
2319
+ const askTail = args.length === 2 ? args[1]! : args.slice(1).join(' ');
2320
+ const say = askTail.replace(/^["'“]|["'”]$/g, '').trim();
2304
2321
  ctx.chatLines.push('');
2305
2322
  ctx.chatLines.push(ctx.accent('❯ /harness ask'));
2306
2323
  if (!say) {
@@ -2346,11 +2363,6 @@ export function buildDashboardSlashRegistry(nowDeps?: ContextNowDeps, decideLedg
2346
2363
  print: (line) => { for (const part of line.split('\n')) ctx.chatLines.push(` ${part}`); },
2347
2364
  log: (event, data, level) => debug.log('dev-pipeline', event, { ...data, surface: 'tui-slash' }, { level }),
2348
2365
  readLine: async () => '',
2349
- readClarification: (clarification) => readDashboardAskClarification(clarification, ctx.surfaceUx, (line) => {
2350
- ctx.pushChatLine(line);
2351
- ctx.setChatScrollOffset(-1);
2352
- ctx.draw();
2353
- }),
2354
2366
  readFile: (file) => readFileSync(file, 'utf8'),
2355
2367
  writeFile: (file, data) => writeFileSync(file, data, 'utf8'),
2356
2368
  cwd: () => process.cwd(),
@@ -47,7 +47,7 @@ export function buildEssentialHelpLines({
47
47
  maxRows,
48
48
  }: {
49
49
  names: readonly string[];
50
- descriptions: readonly Pick<SlashCommand, 'name' | 'aliases' | 'description'>[];
50
+ descriptions: readonly Pick<SlashCommand, 'name' | 'aliases' | 'description' | 'hidden'>[];
51
51
  width: number;
52
52
  audience?: { role: Role; showBeta: boolean };
53
53
  /** The modal's row budget. When the readable layout overflows it, add columns (shorter descriptions)
@@ -56,7 +56,7 @@ export function buildEssentialHelpLines({
56
56
  }): string[] {
57
57
  const registered = new Set(names);
58
58
  const entries = descriptions
59
- .filter((command) => registered.has(command.name) &&
59
+ .filter((command) => !command.hidden && registered.has(command.name) &&
60
60
  ((audience.role === 'owner' && slashMaturity(command.name) === undefined) || slashVisibleFor(command.name, audience.role, { showBeta: audience.showBeta })))
61
61
  .map((command) => {
62
62
  const aliases = [...new Set(command.aliases ?? [])].filter((alias) => registered.has(alias) && alias !== command.name);
@@ -45,6 +45,7 @@ export interface DashboardTermSlashRuntimeDeps {
45
45
 
46
46
  export interface DashboardTermSlashRuntime {
47
47
  helpLines(): string[];
48
+ experimentalHelpLines(): string[];
48
49
  terminalSessionsEmptyLine(): string;
49
50
  terminalSessionLine(entry: DashboardTerminalListEntry): string;
50
51
  shellRunnerSectionDividerLine(): string;
@@ -122,7 +123,7 @@ export function createDashboardTermSlashRuntime(
122
123
  helpLines: () => [
123
124
  '',
124
125
  deps.accent('\u276f /term'),
125
- deps.muted('Usage:'),
126
+ deps.muted('Formal commands:'),
126
127
  deps.muted(' /term new [command] Open a shell PTY (Ctrl+Shift+T or Alt+T).'),
127
128
  deps.muted(' /term list List all alive sessions (fg / bg / exited).'),
128
129
  deps.muted(' /term attach <id> Bring a backgrounded session to foreground.'),
@@ -132,27 +133,24 @@ export function createDashboardTermSlashRuntime(
132
133
  deps.muted(' /term switch Open the session picker modal.'),
133
134
  deps.muted(' /term kill <id> Stop the PTY and remove the session.'),
134
135
  deps.muted(' /term snapshot <id> [tail [bytes]] Capture current grid (snapshot) or last N bytes (tail).'),
135
- deps.muted(' /term move <id> bg|modal|preview|vw Move terminal between placements (vw uses current foreground VW).'),
136
- deps.muted(' /term matrix Show matrix-wide view (term:<N> | character | placement).'),
137
- deps.muted(' /term group list Show groups + members.'),
138
- deps.muted(' /term group join <id> <group> Add terminal to a broadcast group.'),
139
- deps.muted(' /term group leave <id> <group> Remove terminal from a broadcast group.'),
140
- deps.muted(' /term group send <group> <text> Broadcast raw bytes to the group.'),
141
- deps.muted(' /term channel list Show IPC channels + stats.'),
142
- deps.muted(' /term channel pub <channel> <text> Publish on a channel.'),
143
- deps.muted(' /term channel tail <id> <channel> [--replay] Subscribe <id> — msgs stream into PTY stdin.'),
144
- deps.muted(' /term channel snapshot <channel> [N=10] Show last N buffered messages (read-only).'),
145
- deps.muted(' /term pipe <id> <channel> [--line] Publish <id> stdout onto <channel> (raw|line).'),
146
- deps.muted(' /term unpipe <pipeId> Detach a pipe started with /term pipe.'),
147
- deps.muted(' /term pipes List every active stdout → channel pipe.'),
148
- deps.muted(' /term readonly <id> [on|off] Toggle read-only (matrix writeTo drops writes).'),
149
- deps.muted(' /term recharacter <id> <shell|claude|codex|custom:<name>> Swap character + reexec.'),
150
- deps.muted(' /term vw-sync <windowId> <text> Broadcast to every terminal-slot in a VW.'),
151
- deps.muted(' /term vw-bar [windowId] [on|off] Toggle per-VW sync input bar (default: current).'),
136
+ deps.muted(' /term resume <id> Re-spawn a saved terminal session.'),
137
+ deps.muted(' /term help experimental Show experimental commands.'),
152
138
  deps.muted(''),
153
139
  deps.muted('Shell-runner handles (RunShell) — separate registry:'),
154
140
  deps.muted(' /shell list|kill|attach See /shell help.'),
155
141
  ],
142
+ experimentalHelpLines: () => [
143
+ '',
144
+ deps.accent('\u276f /term help experimental'),
145
+ deps.muted('Experimental commands — behavior may change:'),
146
+ deps.muted(' /term matrix Show matrix-wide view.'),
147
+ deps.muted(' /term move <id> bg|modal|preview Move terminal between placements.'),
148
+ deps.muted(' /term group list|join|leave|send Coordinate terminal groups.'),
149
+ deps.muted(' /term channel list|pub|tail|snapshot Manage terminal channels.'),
150
+ deps.muted(' /term pipe|unpipe|pipes Pipe terminal output to channels.'),
151
+ deps.muted(' /term readonly <id> [on|off] Toggle read-only.'),
152
+ deps.muted(' /term recharacter <id> <character> Change terminal character.'),
153
+ ],
156
154
  terminalSessionsEmptyLine: () => deps.muted(' No terminal sessions.'),
157
155
  terminalSessionLine: (entry) => {
158
156
  const brand = entry.agentBrand ? ` [${entry.agentBrand}]` : '';
@@ -209,6 +209,8 @@ function buildDashboardTurnPreambleUnmeasured(
209
209
  gitSnapshotStaleMs: DASHBOARD_GIT_SNAPSHOT_STALE_MS,
210
210
  }));
211
211
  const turnProfile = ctx.turnProfile;
212
+ // Keep the synchronous preamble on the already-resolved surface. Shared
213
+ // research-intent routing and Bloom evidence guidance are added by core-turn.
212
214
  const researchTurn = turnProfile?.surface.id === 'research/agent';
213
215
  const surfaceSystemMsgs = turnProfile
214
216
  ? timed(builderMs, 'surface', () => buildSessionRuntimeTurnSystemMessages(turnProfile, ctx.userText))
@@ -52,7 +52,7 @@ export interface KnowledgeDoc {
52
52
  // 의미검색으로 회상(domain='elanous'). [[self-awareness]].
53
53
  // memory = M3 consolidation(2026-07-08): 흐린 에피소드 다수를 의미 umbrella 1건으로
54
54
  // 압축·영속(에피소드→의미·수면 공고화). 원본은 consolidated 마킹.
55
- kind: 'signal' | 'dig' | 'alpha' | 'xreport' | 'morning' | 'outbound' | 'docs' | 'memory' | 'taste';
55
+ kind: 'signal' | 'dig' | 'alpha' | 'xreport' | 'morning' | 'outbound' | 'docs' | 'memory' | 'taste' | 'reference';
56
56
  sector_tags: string | null;
57
57
  text: string;
58
58
  source_ref: string | null;
@@ -33,7 +33,7 @@ import type { ModalBounds, ModalSurface } from './display/modal-stack.js';
33
33
  import type { KeyEvent } from './display/types.js';
34
34
  import type { ThemeTokens } from './theme/tokens.js';
35
35
  import { debug } from './debug/log.js';
36
- import { abortTurnOnly } from './turn-abort-scope.js';
36
+ import { abortAndKillChildren, abortTurnOnly } from './turn-abort-scope.js';
37
37
  import { SELF_IMPLEMENT_TOOL_NAMES } from './boot/daemon-tools/self-implement-names.js';
38
38
 
39
39
  export const DASHBOARD_CLARIFICATION_REQUEST = Symbol.for('elanous.dashboard.clarification-request');
@@ -57,6 +57,10 @@ export interface EscAbortGateDeps {
57
57
  getWaitingTargetNames?: () => readonly string[];
58
58
  /** Only an identified foreground harness run may bypass the sub-agent confirmation. */
59
59
  shouldAbortImmediately?: () => boolean;
60
+ /** Seat mode can have no operator to answer a confirmation: Esc stops this turn and its children without opening a modal. */
61
+ forceStopWithoutModal?: () => boolean;
62
+ /** Non-modal replacement for the approval surface in unattended TUI mode. Timeout/cancel resolves false. */
63
+ confirmStopInline?: () => Promise<boolean>;
60
64
  /** Called before abortTurnOnly so the UI can paint a visible pending state immediately. */
61
65
  onAbortPending?: (event: { running: number; repeat: number; targets: readonly string[] }) => void;
62
66
  /** Called when another Escape arrives after the first abort request. */
@@ -218,7 +222,9 @@ export function createEscAbortGate(deps: EscAbortGateDeps): EscAbortGate {
218
222
  let current: ApprovalModalHandle | null = null;
219
223
  let currentDispose: (() => void) | null = null;
220
224
  let abortPending = false;
225
+ let inlineConfirmationPending = false;
221
226
  let escapePresses = 0;
227
+ let disposed = false;
222
228
 
223
229
  const redraw = (): void => {
224
230
  try { deps.requestRedraw?.(); } catch { /* ignore */ }
@@ -282,6 +288,31 @@ export function createEscAbortGate(deps: EscAbortGateDeps): EscAbortGate {
282
288
  return;
283
289
  }
284
290
  const running = deps.getRunningCount();
291
+ if (running > 0 && deps.forceStopWithoutModal?.()) {
292
+ if (inlineConfirmationPending) return;
293
+ if (!deps.confirmStopInline) {
294
+ debug.log('esc.abort', 'unattended-force-stop', { running, repeat: Math.max(0, escapePresses - 1) });
295
+ abortAndKillChildren(deps.abortCtrl);
296
+ redraw();
297
+ return;
298
+ }
299
+ inlineConfirmationPending = true;
300
+ debug.log('esc.abort', 'unattended-inline-confirmation', { running, repeat: Math.max(0, escapePresses - 1) });
301
+ void deps.confirmStopInline().then((confirmed) => {
302
+ if (confirmed && !disposed && !deps.abortCtrl.signal.aborted) {
303
+ debug.log('esc.abort', 'unattended-inline-confirmed', { running });
304
+ abortAndKillChildren(deps.abortCtrl);
305
+ } else {
306
+ debug.log('esc.abort', 'unattended-inline-cancelled', { running, reason: 'declined-or-timeout' });
307
+ resetAbortRequestState();
308
+ }
309
+ }).catch((error) => {
310
+ debug.log('esc.abort', 'unattended-inline-failed', { reason: error instanceof Error ? error.message : String(error) }, { level: 'warn' });
311
+ resetAbortRequestState();
312
+ }).finally(() => { inlineConfirmationPending = false; redraw(); });
313
+ redraw();
314
+ return;
315
+ }
285
316
  if (running <= 0 || deps.shouldAbortImmediately?.()) {
286
317
  debug.log('esc.abort', 'abort-immediately', { running, repeat: Math.max(0, escapePresses - 1) });
287
318
  abortPendingTurn(running);
@@ -347,6 +378,7 @@ export function createEscAbortGate(deps: EscAbortGateDeps): EscAbortGate {
347
378
  resetAbortRequestState();
348
379
  },
349
380
  dispose(): void {
381
+ disposed = true;
350
382
  if (current) current.dispose(false);
351
383
  resetAbortRequestState();
352
384
  close();