elanous 0.2.37 → 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 (727) 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/{8kITumG9GAZ1LwT9POrAR → HjeK7zONHfR7op1hKXp4k}/_buildManifest.js +1 -1
  4. package/apps/pwa/out/_next/static/chunks/{1746.3563617ea64023a3.js → 1060.014f1f01a17aec26.js} +1 -1
  5. package/apps/pwa/out/_next/static/chunks/{9151.a2c51e93f9156dae.js → 1281.d81877e35b9068f4.js} +1 -1
  6. package/apps/pwa/out/_next/static/chunks/1350.59f40e39e02d91b1.js +1 -0
  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/{3578.4e9f9948a9a6f2f4.js → 2047.8f23e210995d4548.js} +2 -2
  16. package/apps/pwa/out/_next/static/chunks/2061-7f2bbc53ae96c88b.js +1 -0
  17. package/apps/pwa/out/_next/static/chunks/{7424.c0fe2a595d4232b5.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/{4931.95cc6dbd230774ca.js → 2177.df8547f9d7215c4e.js} +16 -16
  20. package/apps/pwa/out/_next/static/chunks/2200-9a453b8f99687d49.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/{6680.6a693c28aae4cd19.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/2499.02fbfd18126c10c0.js +1 -0
  24. package/apps/pwa/out/_next/static/chunks/{6252.240578f10952e091.js → 2522.f2766b76d22c8bdf.js} +1 -1
  25. package/apps/pwa/out/_next/static/chunks/{1262.a89bb27a5b2f844e.js → 2566.beaffc3a5e1fcd2e.js} +1 -1
  26. package/apps/pwa/out/_next/static/chunks/261.0d471e8aded799f3.js +226 -0
  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/{2318-450e75d07605b8fe.js → 2774-719820e3f5b2a3eb.js} +1 -1
  33. package/apps/pwa/out/_next/static/chunks/2812-f016aa0dda149287.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/{4725-34bed25720cc326b.js → 2829-734fe8bf2eee7347.js} +1 -1
  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/3330.7443183b7e6fdbdf.js +1 -0
  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/3746-f80a78f220bf37b5.js +1 -0
  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/{4337e36d.f42c3b391b3d8f20.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/{58edce7d.f1b0c72acf13b123.js → 409c787b.e48c5bec8ec10456.js} +1 -1
  49. package/apps/pwa/out/_next/static/chunks/413-24c8284bda08241d.js +1 -0
  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/{5046.7fd5cbd859299448.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/{2375.bf364c85dbb6f085.js → 4769.9fd582071301f382.js} +1 -1
  58. package/apps/pwa/out/_next/static/chunks/483.725e4a61be922788.js +1 -0
  59. package/apps/pwa/out/_next/static/chunks/{de8446d3.31b73eb239fecd7b.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/{4383.18e5c54db3a22c88.js → 5383.bdfa5d886e39a826.js} +1 -1
  64. package/apps/pwa/out/_next/static/chunks/5436.fdf6fa8ae3e9588d.js +64 -0
  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/{6745-5a63492933959dd9.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/{2283.edd9627b7bdfb546.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/{6819.be5c9c4d67f22922.js → 6749.0744ce6eb08d40e9.js} +16 -16
  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/6908.06008c67f6380ea9.js +148 -0
  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/6cc1d1d6.9a98dd4622f1afc6.js +1 -0
  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/{2002-a43a3f380df873ec.js → 8272-025653884f9645d2.js} +1 -1
  109. package/apps/pwa/out/_next/static/chunks/{7867.e8725745ddd1d940.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/8639-92c11d069792429e.js +1 -0
  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/{4313.76f232c304a15bde.js → 9175.2de5209a5ce6f68a.js} +1 -1
  117. package/apps/pwa/out/_next/static/chunks/9184.45afbf44fec87574.js +1 -0
  118. package/apps/pwa/out/_next/static/chunks/{8c58d09b.e8724a299658d86f.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-ba957ff875a026a0.js +1 -0
  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-3337c6a1328c2674.js → page-4edb8df90f4537ce.js} +1 -1
  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-1e5da297557d2354.js → page-fca2e59a81744d9e.js} +1 -1
  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-ac2c1e6169cfce57.js → page-139d722de1dcd6c1.js} +1 -1
  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-c1c80e345fa9d6f5.js → page-ccde99f07aaf71f7.js} +1 -1
  173. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-80464aced9614390.js +1 -0
  174. package/apps/pwa/out/_next/static/chunks/{d9815f84.4918f682a45a8502.js → b84cad00.594027ebe0531fe2.js} +3 -3
  175. package/apps/pwa/out/_next/static/chunks/c696986b.5dc8bb1143af16d1.js +1 -0
  176. package/apps/pwa/out/_next/static/chunks/{709a918c.4fd3b4e2a32cb4e3.js → ca3702f8.2913182e73889fa2.js} +1 -1
  177. package/apps/pwa/out/_next/static/chunks/d5d3cefc-373c4eb722ed848b.js +1 -0
  178. package/apps/pwa/out/_next/static/chunks/{5f6af561-f90b7a67f4f75d13.js → d8de0de2-dd0f4ac8e5ab1832.js} +1 -1
  179. package/apps/pwa/out/_next/static/chunks/framework-002b472a66935d31.js +1 -0
  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/release/recipes.yaml +9 -0
  282. package/graphs/release/release-loop.yaml +26 -18
  283. package/graphs/video/explainer-line.yaml +4 -1
  284. package/package.json +1 -1
  285. package/scripts/ask-op-inbox-once.ts +17 -0
  286. package/scripts/brand/check.ts +13 -4
  287. package/scripts/dead-code/report.ts +169 -0
  288. package/scripts/gate-0226-accepted-remaining-90.txt +91 -0
  289. package/scripts/gate-0226-failure-census.ts +39 -0
  290. package/scripts/intake-collect-telegram-saved-stage.ts +48 -0
  291. package/scripts/lib/morning-report-options.ts +3 -4
  292. package/scripts/lib/tui-regress-evidence.ts +56 -0
  293. package/scripts/morning-report.ts +5 -1
  294. package/scripts/provision-export-redactions.ts +15 -0
  295. package/scripts/public-copy-lint.ts +122 -0
  296. package/scripts/public-export.ts +77 -2
  297. package/scripts/ratchets/next-tui-entry-budget.ts +124 -0
  298. package/scripts/ratchets/train-side-invariants.sh +7 -1
  299. package/scripts/release-loop/cut-branch.ts +61 -12
  300. package/scripts/release-loop/export-check-node.ts +21 -3
  301. package/scripts/release-loop/gate-node.ts +527 -60
  302. package/scripts/release-loop/gate-partial.ts +82 -3
  303. package/scripts/release-loop/gate-prewarm-plan.ts +35 -0
  304. package/scripts/release-loop/gate-radius-live.ts +4 -2
  305. package/scripts/release-loop/gate-shard-dispatch.ts +128 -0
  306. package/scripts/release-loop/gate-shard-receipts.ts +89 -0
  307. package/scripts/release-loop/gate-wall.ts +5 -5
  308. package/scripts/release-loop/preflight.ts +6 -2
  309. package/scripts/release-loop/resume-cap.ts +2 -1
  310. package/scripts/release-loop/resume-release.ts +317 -13
  311. package/scripts/release-loop/resume.ts +61 -5
  312. package/scripts/release-loop/traffic-node.ts +12 -4
  313. package/scripts/release-loop/traffic-transition.ts +53 -13
  314. package/scripts/release-loop/version-node.ts +35 -5
  315. package/scripts/release-story/draft.ts +1 -1
  316. package/scripts/research-bench/README.md +53 -0
  317. package/scripts/research-bench/questions.json +66 -0
  318. package/scripts/research-bench/rubric.md +33 -0
  319. package/scripts/research-bench/run.ts +523 -0
  320. package/scripts/tui-regress.ts +85 -10
  321. package/scripts/ux-sim.ts +1 -1
  322. package/scripts/video-pipeline.ts +2 -2
  323. package/src/acp/core-turn-bridge.ts +14 -1
  324. package/src/agent/autonomous-tools.ts +10 -3
  325. package/src/agent/monad-agent-turn.ts +4 -1
  326. package/src/agent/registry.ts +26 -2
  327. package/src/agent/run-context.ts +1 -1
  328. package/src/agent/shared-app-tools.ts +1 -1
  329. package/src/agent/surface-ux/build.ts +12 -3
  330. package/src/agent/surface-ux/types.ts +1 -1
  331. package/src/agent/task-notification.ts +78 -7
  332. package/src/agent/types.ts +3 -0
  333. package/src/agent-mission/driver.ts +29 -3
  334. package/src/agent-mission/mission-cli.ts +2 -1
  335. package/src/agent-substrate/review-context-pack.ts +365 -0
  336. package/src/agent-substrate/review-observation.ts +10 -0
  337. package/src/agent-substrate/self-review-cli.ts +419 -42
  338. package/src/ask-user-question/index.ts +6 -0
  339. package/src/ask-user-question/inline-resolver.ts +49 -0
  340. package/src/auto-research/question-ladder-contract.ts +156 -0
  341. package/src/auto-research/research-turn.ts +467 -0
  342. package/src/autopilot/agent-loop.ts +1 -1
  343. package/src/autopilot/discovery/doc-lint.ts +1 -1
  344. package/src/autopilot/pty-control-loop.ts +8 -1
  345. package/src/boot/daemon-tools/index.ts +4 -3
  346. package/src/boot/daemon-tools/self-implement.ts +270 -2
  347. package/src/boot/daemon-tools/types.ts +2 -0
  348. package/src/bots/screen-probe.ts +1 -1
  349. package/src/budget/llm-cost.ts +44 -5
  350. package/src/budget/unified-usage.ts +17 -1
  351. package/src/capture/tui-self-report.ts +24 -2
  352. package/src/chat/index.ts +34 -7
  353. package/src/chat/tool-render/dispatch.ts +8 -1
  354. package/src/cli/agent-cli.ts +43 -8
  355. package/src/cli/guardian-cli.ts +3 -1
  356. package/src/cli/intake-cli.ts +70 -13
  357. package/src/cli/lesson-cli.ts +86 -10
  358. package/src/cli/log-event-names.ts +1 -0
  359. package/src/cli/pod-cli.ts +17 -2
  360. package/src/cli/pr-land-overlap-evidence.ts +38 -5
  361. package/src/cli/pr-land-refusal.ts +1 -1
  362. package/src/cli/pty-takeover-cli.ts +125 -12
  363. package/src/cli/release-checklist-read-cli.ts +5 -2
  364. package/src/cli/release-cli.ts +99 -15
  365. package/src/cli/repo-cli.ts +2 -1
  366. package/src/cli/review-carry.ts +77 -0
  367. package/src/cli/self-update.ts +1 -1
  368. package/src/cli/tasks-card-show.ts +31 -1
  369. package/src/cli/tasks-cli.ts +98 -32
  370. package/src/cli/tasks-read-cli.ts +13 -5
  371. package/src/context-bus/context-now.ts +86 -2
  372. package/src/control-plane/ledger.ts +21 -4
  373. package/src/core-turn/run-core-turn.ts +51 -3
  374. package/src/core-turn/run-goal-loop.ts +152 -8
  375. package/src/core-turn/types.ts +12 -0
  376. package/src/dashboard/chat/acp-chat.ts +2 -2
  377. package/src/dashboard/classic-sigquit.ts +16 -0
  378. package/src/dashboard/index.ts +339 -44
  379. package/src/dashboard/input/chat-main-interaction-opts.ts +3 -0
  380. package/src/dashboard/input/chat-main-plain-turn-runtime.ts +7 -2
  381. package/src/dashboard/input/chat-main-slash-command.ts +7 -0
  382. package/src/dashboard/input/dashboard-plain-turn-stream.ts +4 -0
  383. package/src/dashboard/input/dashboard-priority-key-route.ts +21 -5
  384. package/src/dashboard/input/external-input-host.ts +2 -0
  385. package/src/dashboard/input/terminal-modal-router.ts +8 -159
  386. package/src/dashboard/side-basic-runtime.ts +61 -0
  387. package/src/dashboard/sidetab-runtime.ts +228 -0
  388. package/src/dashboard/slash-runtime/ask-clarification.ts +7 -1
  389. package/src/dashboard/slash-runtime/dashboard-handlers.ts +22 -8
  390. package/src/dashboard/slash-runtime/help-from-registry.ts +2 -2
  391. package/src/dashboard/term-slash-runtime.ts +18 -18
  392. package/src/dashboard/turn-preamble.ts +30 -4
  393. package/src/domains/guardian-tick.ts +9 -0
  394. package/src/domains/knowledge.ts +1 -1
  395. package/src/esc-abort-gate.ts +33 -1
  396. package/src/execution-loop/launch-gate.ts +206 -1
  397. package/src/git-fs/watcher.ts +27 -22
  398. package/src/git-fs/worktree.ts +19 -3
  399. package/src/graph-runner/graph-cli.ts +6 -4
  400. package/src/graph-runner/graph-grow.ts +37 -9
  401. package/src/graph-runner/runner.ts +48 -11
  402. package/src/graph-wizard/generate.ts +16 -7
  403. package/src/graph-wizard/mission-compose.ts +201 -0
  404. package/src/grok/agent-search.ts +8 -2
  405. package/src/grok/credential.ts +112 -36
  406. package/src/grounding/ref-index.ts +11 -0
  407. package/src/grounding/ref-vector.ts +61 -0
  408. package/src/grounding/sources-cli.ts +2 -2
  409. package/src/grounding/sources.ts +15 -1
  410. package/src/harness/harness-cli-command.ts +38 -9
  411. package/src/harness/harness-pod-dispatch.ts +7 -1
  412. package/src/hq/fence-wrapper.ts +1 -1
  413. package/src/hq/transfer.ts +1 -1
  414. package/src/index.ts +60 -16
  415. package/src/input/external-input-queue.ts +10 -0
  416. package/src/intake-plane/collect-telegram-saved.ts +90 -6
  417. package/src/intake-plane/intake-to-tasks.ts +246 -3
  418. package/src/interactive-terminal-modal.ts +3 -0
  419. package/src/keybindings.ts +17 -22
  420. package/src/lessons/friction-ledger.ts +154 -0
  421. package/src/live-supply/collector.ts +149 -0
  422. package/src/live-supply/probes.ts +52 -0
  423. package/src/live-supply/snapshot.ts +40 -0
  424. package/src/llm/provider-credentials.ts +1 -1
  425. package/src/llm-tool-schema.ts +20 -0
  426. package/src/llm.ts +486 -61
  427. package/src/loops/orchestrator/inbox-once.ts +28 -0
  428. package/src/loops/orchestrator/inbox.ts +130 -1
  429. package/src/loops/orchestrator/tick.ts +14 -3
  430. package/src/maturity/feature-maturity.ts +1 -0
  431. package/src/nexus/api/channel-ask-op.ts +96 -0
  432. package/src/nexus/api/discord-trigger-bot.ts +28 -1
  433. package/src/nexus/api/harness-api.ts +2 -1
  434. package/src/nexus/api/telegram-trigger-bot.ts +24 -0
  435. package/src/nexus/api/terminals.ts +28 -6
  436. package/src/patents/ledger.ts +18 -1
  437. package/src/preview/terminal.ts +4 -2
  438. package/src/prompt-cache/anthropic.ts +2 -0
  439. package/src/prompt-enhance/enhance.ts +5 -0
  440. package/src/pty/snapshot.py +132 -0
  441. package/src/pty-shell/pty-control-ipc.ts +29 -2
  442. package/src/pty-shell/pty-manifest.ts +75 -5
  443. package/src/pty-shell/registry.ts +2 -0
  444. package/src/pty-shell/tui-run-state.ts +80 -3
  445. package/src/release-loop/gate-host-reservation.ts +13 -4
  446. package/src/release-loop/gate-shard-ledger.ts +68 -0
  447. package/src/release-loop/gate-shards.ts +61 -0
  448. package/src/release-loop/light-rc.ts +7 -4
  449. package/src/release-loop/merged-pr-checklist.ts +25 -2
  450. package/src/release-loop/rehearsal-shard-plan.ts +6 -1
  451. package/src/release-loop/rehearsal.ts +28 -1
  452. package/src/repl/index.ts +10 -0
  453. package/src/research/axis-fanout.ts +133 -0
  454. package/src/research/edge-decision.ts +197 -0
  455. package/src/research/gap-followup.ts +249 -0
  456. package/src/research/lenses/counter-evidence.ts +100 -0
  457. package/src/research/lenses/working-backwards.ts +89 -0
  458. package/src/research/output-router.ts +127 -0
  459. package/src/research/plugin-discovery.ts +242 -0
  460. package/src/research-bridge/format.ts +16 -1
  461. package/src/research-bridge/index.ts +1 -0
  462. package/src/research-bridge/invoke.ts +45 -7
  463. package/src/research-bridge/types.ts +2 -0
  464. package/src/self-dev/ask-launch-flow.ts +34 -106
  465. package/src/self-dev/decompose.ts +45 -9
  466. package/src/self-dev/dev-cli.ts +2 -0
  467. package/src/self-dev/dev-pipeline.ts +8 -4
  468. package/src/self-dev/draft-residue.ts +221 -2
  469. package/src/self-dev/draft-sweep.ts +29 -16
  470. package/src/self-dev/graph-journey-route.ts +10 -2
  471. package/src/self-dev/launch-preflight-text.ts +2 -2
  472. package/src/self-dev/launch-preflight.ts +38 -7
  473. package/src/self-dev/orchestrate-cli.ts +1 -0
  474. package/src/self-dev/orchestrate.ts +1 -0
  475. package/src/self-dev/run-supervisor.ts +41 -7
  476. package/src/self-dev/shard-run.ts +260 -3
  477. package/src/self-implement/comment-only-source.ts +54 -0
  478. package/src/self-implement/device-first.ts +8 -2
  479. package/src/self-implement/doctor-visit.ts +100 -57
  480. package/src/self-implement/gate-artifacts.ts +5 -2
  481. package/src/self-implement/gate-baseline.ts +119 -13
  482. package/src/self-implement/gate-cli.ts +466 -93
  483. package/src/self-implement/gate-failure-signature.ts +44 -0
  484. package/src/self-implement/gate-receipt-registry.ts +180 -0
  485. package/src/self-implement/gate-remote.ts +147 -22
  486. package/src/self-implement/goal-author-clarification.ts +178 -24
  487. package/src/self-implement/goal-author-decompose.ts +24 -15
  488. package/src/self-implement/goal-author.ts +82 -7
  489. package/src/self-implement/goal-doc/section.ts +22 -0
  490. package/src/self-implement/goal-supervisor-fill.ts +38 -4
  491. package/src/self-implement/host-regate.ts +120 -45
  492. package/src/self-implement/impl-findings-feedback.ts +188 -0
  493. package/src/self-implement/knowhow-pack.ts +301 -9
  494. package/src/self-implement/l8-merge-queue.ts +198 -32
  495. package/src/self-implement/off-diff-evidence.ts +147 -0
  496. package/src/self-implement/orchestrator.ts +137 -16
  497. package/src/self-implement/pod-inplace-worktree.ts +82 -0
  498. package/src/self-implement/pod-warm-pool-profile.ts +2 -2
  499. package/src/self-implement/premise-review.ts +7 -5
  500. package/src/self-implement/run-ledger.ts +304 -8
  501. package/src/self-implement/run-stop.ts +12 -0
  502. package/src/self-implement/seams.ts +39 -13
  503. package/src/self-implement/self-implement-cli.ts +30 -4
  504. package/src/session/channel-ask-op-envelope.ts +36 -0
  505. package/src/session/channel-op-reply-route.ts +200 -0
  506. package/src/session/chat.ts +92 -15
  507. package/src/session/index.ts +2 -0
  508. package/src/session-runtime/index.ts +9 -22
  509. package/src/session-runtime/provider-circuit.ts +140 -0
  510. package/src/shell-runner/file-engine.ts +1 -0
  511. package/src/shell-runner/types.ts +4 -0
  512. package/src/sidetab-core/model.ts +176 -0
  513. package/src/skills/runner.ts +7 -3
  514. package/src/skills/tools/dev-harness.ts +2 -2
  515. package/src/skills/tools/schedule-wakeup.ts +24 -7
  516. package/src/skills/tools/shell.ts +51 -5
  517. package/src/status/bar.ts +3 -3
  518. package/src/steward/directive-audit.ts +354 -0
  519. package/src/storage/file-lock.ts +17 -4
  520. package/src/surface/child-process.ts +31 -0
  521. package/src/surface/tui-stderr-owner.ts +48 -0
  522. package/src/task-agent/adopt-pr.ts +63 -2
  523. package/src/task-agent/cover.ts +30 -12
  524. package/src/task-agent/evidence-command-normalize.ts +42 -0
  525. package/src/task-agent/export-redactions-provision.ts +43 -0
  526. package/src/task-agent/judge.ts +56 -0
  527. package/src/task-agent/parent-host.ts +59 -12
  528. package/src/task-agent/postland-card.ts +35 -2
  529. package/src/task-agent/rejudge-on-head.ts +46 -2
  530. package/src/task-agent/repair-cycle.ts +68 -9
  531. package/src/task-agent/repair-worker.ts +37 -1
  532. package/src/task-agent/task-hand.ts +226 -33
  533. package/src/task-agent/tier-split.ts +142 -24
  534. package/src/task-orchestrator/surfaces/pod-command-job.ts +330 -2
  535. package/src/task-orchestrator/surfaces/pod-config-snapshot.ts +123 -0
  536. package/src/task-orchestrator/surfaces/pod-failure-reason.ts +57 -5
  537. package/src/task-orchestrator/surfaces/pod-mirror-seed.ts +11 -8
  538. package/src/task-orchestrator/surfaces/pod-pool.ts +27 -4
  539. package/src/task-orchestrator/surfaces/pod-si-warm-protocol.ts +1 -1
  540. package/src/task-orchestrator/surfaces/pod-source-receive.ts +74 -6
  541. package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +2 -1
  542. package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +56 -15
  543. package/src/task-orchestrator/surfaces/self-implement-pod.ts +310 -79
  544. package/src/task-orchestrator/surfaces/self-implement.ts +33 -2
  545. package/src/terminal/session-registry.ts +1 -0
  546. package/src/terminal/terminal-modal-router.ts +156 -0
  547. package/src/tool-hints/gate.ts +6 -4
  548. package/src/tool-hints/signals.ts +33 -1
  549. package/src/tool-runtime/skill-exec-runtime.ts +95 -5
  550. package/src/tui/chat/background-job-status.ts +8 -2
  551. package/src/tui/entry.ts +483 -32
  552. package/src/tui/inline-choice.ts +188 -0
  553. package/src/tui/sidetab/attach.ts +304 -0
  554. package/src/tui/sidetab/list.ts +2 -0
  555. package/src/tui/sidetab/nl-tool.ts +136 -0
  556. package/src/tui/slash/resume-command.ts +23 -0
  557. package/src/tui/slash/resume.ts +3 -23
  558. package/src/tui/slash/term-next.ts +2 -1
  559. package/src/tui/slash/term.ts +12 -1
  560. package/src/tui-client/dashboard-session.ts +7 -1
  561. package/src/tui-client/local-chat-turn.ts +29 -8
  562. package/src/user-config.ts +42 -3
  563. package/src/ux-sim/classic-tui-seat-scenarios.ts +1 -7
  564. package/src/ux-sim/fake-land-queue.ts +88 -0
  565. package/src/ux-sim/fake-llm.ts +11 -5
  566. package/src/ux-sim/gate-shard-host-reroute.ts +82 -0
  567. package/src/ux-sim/goal-interim-trace.ts +24 -0
  568. package/src/ux-sim/next-tui-seat-scenarios.ts +61 -14
  569. package/src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.ts +4 -1
  570. package/src/version/packed-revision.json +1 -1
  571. package/src/video-pipeline/recipes/explainer.ts +54 -2
  572. package/src/web-search/grok.ts +32 -6
  573. package/src/web-search/index.ts +8 -7
  574. package/src/workflow-runtime/node-catalog.ts +53 -4
  575. package/apps/pwa/out/_next/static/chunks/1041-5841aae848fb6403.js +0 -1
  576. package/apps/pwa/out/_next/static/chunks/1087.3177e54f672dc526.js +0 -1
  577. package/apps/pwa/out/_next/static/chunks/1105.efe1e13503ac7a33.js +0 -1
  578. package/apps/pwa/out/_next/static/chunks/1224.2ceca6c180d5130b.js +0 -62
  579. package/apps/pwa/out/_next/static/chunks/1417-1768233ac92f8a5d.js +0 -1
  580. package/apps/pwa/out/_next/static/chunks/1612.81bbc19af06af16c.js +0 -1
  581. package/apps/pwa/out/_next/static/chunks/1766.728d42053070bb2d.js +0 -1
  582. package/apps/pwa/out/_next/static/chunks/1773.d38e945481e04125.js +0 -1
  583. package/apps/pwa/out/_next/static/chunks/1974-c12f9600da3d3c26.js +0 -1
  584. package/apps/pwa/out/_next/static/chunks/1ed5e8af.cf424815c7c0efad.js +0 -1
  585. package/apps/pwa/out/_next/static/chunks/2061.7232dc9dc058417f.js +0 -1
  586. package/apps/pwa/out/_next/static/chunks/210.90b2cbd64926cf34.js +0 -32
  587. package/apps/pwa/out/_next/static/chunks/244-a810d282a20f1783.js +0 -1
  588. package/apps/pwa/out/_next/static/chunks/2479-fe7e188bd9402d14.js +0 -1
  589. package/apps/pwa/out/_next/static/chunks/2514.03b60f266531a015.js +0 -148
  590. package/apps/pwa/out/_next/static/chunks/2526-a657538869888604.js +0 -1
  591. package/apps/pwa/out/_next/static/chunks/2533-6f0341ff075809e9.js +0 -1
  592. package/apps/pwa/out/_next/static/chunks/2676.e7994c695ef0f30d.js +0 -1
  593. package/apps/pwa/out/_next/static/chunks/2734.3ffdf54254fb6f99.js +0 -27
  594. package/apps/pwa/out/_next/static/chunks/2770-23252bf3a37880b9.js +0 -1
  595. package/apps/pwa/out/_next/static/chunks/2969.66b8b545139d1544.js +0 -1
  596. package/apps/pwa/out/_next/static/chunks/3128.a9210d08800ea6a8.js +0 -1
  597. package/apps/pwa/out/_next/static/chunks/3199.6a1a9b0e6cd01dc6.js +0 -1
  598. package/apps/pwa/out/_next/static/chunks/3212.12179fd3eee8cef1.js +0 -1
  599. package/apps/pwa/out/_next/static/chunks/3760-2909ddb9279281cd.js +0 -1
  600. package/apps/pwa/out/_next/static/chunks/3825.1921b5901bf33dce.js +0 -36
  601. package/apps/pwa/out/_next/static/chunks/3994-63eb884ed0547011.js +0 -1
  602. package/apps/pwa/out/_next/static/chunks/4036.d54e55e1ebf5acdc.js +0 -90
  603. package/apps/pwa/out/_next/static/chunks/4115.5b438b99f0ae729f.js +0 -226
  604. package/apps/pwa/out/_next/static/chunks/4269.d8f9f34bb0fc6c43.js +0 -287
  605. package/apps/pwa/out/_next/static/chunks/431-4eed5bd2c5fe1719.js +0 -1
  606. package/apps/pwa/out/_next/static/chunks/4324.c99ba3e83eb1b691.js +0 -1
  607. package/apps/pwa/out/_next/static/chunks/4599-96eff3f2a9c242c1.js +0 -1
  608. package/apps/pwa/out/_next/static/chunks/4825-a9d9d4e9f5892309.js +0 -1
  609. package/apps/pwa/out/_next/static/chunks/4833-7934c592c5569f00.js +0 -1
  610. package/apps/pwa/out/_next/static/chunks/4879-68518f547a207aff.js +0 -1
  611. package/apps/pwa/out/_next/static/chunks/4896.f9b70285363b27b2.js +0 -24
  612. package/apps/pwa/out/_next/static/chunks/4937-28d437999b77c9dd.js +0 -1
  613. package/apps/pwa/out/_next/static/chunks/49aa54ab.80f39398e0ed0f30.js +0 -1
  614. package/apps/pwa/out/_next/static/chunks/5056.482687319b82638e.js +0 -104
  615. package/apps/pwa/out/_next/static/chunks/506.16b83d56a437a9ee.js +0 -1
  616. package/apps/pwa/out/_next/static/chunks/5260-20593b0a25d0afbc.js +0 -1
  617. package/apps/pwa/out/_next/static/chunks/5404.cc4e9fec26fd5925.js +0 -1
  618. package/apps/pwa/out/_next/static/chunks/576.485e83e3f3dec19a.js +0 -1
  619. package/apps/pwa/out/_next/static/chunks/5832-a6be14e663f65726.js +0 -1
  620. package/apps/pwa/out/_next/static/chunks/5854-56648a9fe646b9a0.js +0 -1
  621. package/apps/pwa/out/_next/static/chunks/5925.3b1f8b135710249b.js +0 -93
  622. package/apps/pwa/out/_next/static/chunks/5952.294fc574a8625184.js +0 -1
  623. package/apps/pwa/out/_next/static/chunks/6168.17749aa3905fa073.js +0 -74
  624. package/apps/pwa/out/_next/static/chunks/6416.5d50b8ec9986ca98.js +0 -1
  625. package/apps/pwa/out/_next/static/chunks/6758.e7fbf532953c0783.js +0 -1
  626. package/apps/pwa/out/_next/static/chunks/6795.0cb8a59730d99703.js +0 -149
  627. package/apps/pwa/out/_next/static/chunks/6877-84d47b7e85d0c41e.js +0 -1
  628. package/apps/pwa/out/_next/static/chunks/6971-fb5f9dc0a2cb5d2d.js +0 -1
  629. package/apps/pwa/out/_next/static/chunks/717.522b08685979b814.js +0 -1
  630. package/apps/pwa/out/_next/static/chunks/7191.e41eb8f455c7f089.js +0 -41
  631. package/apps/pwa/out/_next/static/chunks/7233.8e744b7513119409.js +0 -1
  632. package/apps/pwa/out/_next/static/chunks/7238-97c2226f80504bd8.js +0 -1
  633. package/apps/pwa/out/_next/static/chunks/7285.307963afcf7e7660.js +0 -24
  634. package/apps/pwa/out/_next/static/chunks/7299-fbe4b8c47a87614a.js +0 -1
  635. package/apps/pwa/out/_next/static/chunks/7314.df0d95930b0c3f50.js +0 -1
  636. package/apps/pwa/out/_next/static/chunks/7406.c0589fdf2ee66629.js +0 -1
  637. package/apps/pwa/out/_next/static/chunks/752-90e3e7daad3d8e39.js +0 -1
  638. package/apps/pwa/out/_next/static/chunks/7524-bcd3d9928c6842d9.js +0 -1
  639. package/apps/pwa/out/_next/static/chunks/7549.9a4de3bf231cfc52.js +0 -1
  640. package/apps/pwa/out/_next/static/chunks/757-4fbaf50942b8c424.js +0 -1
  641. package/apps/pwa/out/_next/static/chunks/765.76ae970ceb597b5b.js +0 -1
  642. package/apps/pwa/out/_next/static/chunks/7893-e444a1b0809cd1e4.js +0 -1
  643. package/apps/pwa/out/_next/static/chunks/7956-33748cabb3a05562.js +0 -1
  644. package/apps/pwa/out/_next/static/chunks/7c5ed21f-f286708e57cf88f7.js +0 -1
  645. package/apps/pwa/out/_next/static/chunks/8030-aa66b478b53dbfca.js +0 -1
  646. package/apps/pwa/out/_next/static/chunks/8051.c88c07dacbbc5f21.js +0 -8
  647. package/apps/pwa/out/_next/static/chunks/8080-40d781e7704d3671.js +0 -1
  648. package/apps/pwa/out/_next/static/chunks/8149.80e402d4345e8dae.js +0 -77
  649. package/apps/pwa/out/_next/static/chunks/8205.50a5268f4e12ba0b.js +0 -1
  650. package/apps/pwa/out/_next/static/chunks/8231.a128feaa6f8b6079.js +0 -1
  651. package/apps/pwa/out/_next/static/chunks/85.4ddb1dda2ea3ffa2.js +0 -286
  652. package/apps/pwa/out/_next/static/chunks/8537.26517a09e8247beb.js +0 -1
  653. package/apps/pwa/out/_next/static/chunks/8595-e9b7081ab773a61f.js +0 -1
  654. package/apps/pwa/out/_next/static/chunks/8821-30cc65a61a60951f.js +0 -1
  655. package/apps/pwa/out/_next/static/chunks/8905.b3385aadb7b133e6.js +0 -79
  656. package/apps/pwa/out/_next/static/chunks/8983.246bb3a1ac38f50f.js +0 -1
  657. package/apps/pwa/out/_next/static/chunks/9072.18342f5941a1f3ec.js +0 -1
  658. package/apps/pwa/out/_next/static/chunks/9123.9df04866b2d6e00f.js +0 -1
  659. package/apps/pwa/out/_next/static/chunks/9175-7d383df15a82e2be.js +0 -1
  660. package/apps/pwa/out/_next/static/chunks/9181-bf89c07ce5b8f599.js +0 -1
  661. package/apps/pwa/out/_next/static/chunks/920-429bbc4504b45f71.js +0 -1
  662. package/apps/pwa/out/_next/static/chunks/9207.625edf45d656151c.js +0 -1
  663. package/apps/pwa/out/_next/static/chunks/9378.d2575c6ffd6dd756.js +0 -94
  664. package/apps/pwa/out/_next/static/chunks/957.db5b5c4d32a35240.js +0 -1
  665. package/apps/pwa/out/_next/static/chunks/958.53a8dcf4729e6997.js +0 -64
  666. package/apps/pwa/out/_next/static/chunks/9647.8f0cd0898c592a29.js +0 -1
  667. package/apps/pwa/out/_next/static/chunks/9665-26abb02665704c2c.js +0 -1
  668. package/apps/pwa/out/_next/static/chunks/9703.e7d81b6faef1050a.js +0 -1
  669. package/apps/pwa/out/_next/static/chunks/9882-7a9164b3c2dacbe5.js +0 -1
  670. package/apps/pwa/out/_next/static/chunks/9998.b74e033efadecd10.js +0 -1
  671. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-c604fb980a634d88.js +0 -1
  672. package/apps/pwa/out/_next/static/chunks/app/approvals/page-ec2d8a4979ca9075.js +0 -1
  673. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-cb6add08ad3c7660.js +0 -1
  674. package/apps/pwa/out/_next/static/chunks/app/board/page-e2eaa321ec223fe6.js +0 -1
  675. package/apps/pwa/out/_next/static/chunks/app/botlab/page-5b8a09c475b5f844.js +0 -1
  676. package/apps/pwa/out/_next/static/chunks/app/bots/page-91a77daedfbac191.js +0 -1
  677. package/apps/pwa/out/_next/static/chunks/app/ceo/page-f37fc5e974bda39b.js +0 -1
  678. package/apps/pwa/out/_next/static/chunks/app/chat/page-91429a0b78415a94.js +0 -1
  679. package/apps/pwa/out/_next/static/chunks/app/consult/page-b95798b58263b910.js +0 -1
  680. package/apps/pwa/out/_next/static/chunks/app/control/page-763d53e175e17aa1.js +0 -1
  681. package/apps/pwa/out/_next/static/chunks/app/decisions/page-d55023204055b12f.js +0 -1
  682. package/apps/pwa/out/_next/static/chunks/app/design-check/page-89d2140d78abc810.js +0 -1
  683. package/apps/pwa/out/_next/static/chunks/app/editor/page-82dc069abfe27f55.js +0 -1
  684. package/apps/pwa/out/_next/static/chunks/app/exec/page-25d9eee7beb552c0.js +0 -1
  685. package/apps/pwa/out/_next/static/chunks/app/field/page-770b4594c713ee97.js +0 -1
  686. package/apps/pwa/out/_next/static/chunks/app/healthz/route-c604fb980a634d88.js +0 -1
  687. package/apps/pwa/out/_next/static/chunks/app/inside/page-ba8e0dcae4f83985.js +0 -1
  688. package/apps/pwa/out/_next/static/chunks/app/intake/page-5c112c6d7c33656e.js +0 -1
  689. package/apps/pwa/out/_next/static/chunks/app/layout-09788e1aa9a87db6.js +0 -1
  690. package/apps/pwa/out/_next/static/chunks/app/live-run/page-89acd5d68c0bc560.js +0 -1
  691. package/apps/pwa/out/_next/static/chunks/app/loops/page-5c13e2c76371d797.js +0 -1
  692. package/apps/pwa/out/_next/static/chunks/app/market/page-653a9f18642825c6.js +0 -1
  693. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-fe986fe79b107546.js +0 -1
  694. package/apps/pwa/out/_next/static/chunks/app/not-found-91ea9f5869a40943.js +0 -1
  695. package/apps/pwa/out/_next/static/chunks/app/observatory/page-7824e21b999962e2.js +0 -1
  696. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-53d00a60cc75a922.js +0 -1
  697. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-88a1edbff62eaf1d.js +0 -1
  698. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-4e931248b3f9574b.js +0 -1
  699. package/apps/pwa/out/_next/static/chunks/app/outputs/page-443364c9e4a23b31.js +0 -1
  700. package/apps/pwa/out/_next/static/chunks/app/page-b9af2ac1c4737ce8.js +0 -1
  701. package/apps/pwa/out/_next/static/chunks/app/reflection/page-25ab9c614c14129b.js +0 -1
  702. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-dbcdcfac0a395a8a.js +0 -1
  703. package/apps/pwa/out/_next/static/chunks/app/sessions/page-bf1de6645089ec58.js +0 -1
  704. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-c4201761a5e839c9.js +0 -1
  705. package/apps/pwa/out/_next/static/chunks/app/settings/page-c304f469ea5d70e4.js +0 -1
  706. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-8e5a238cf5e50c9c.js +0 -1
  707. package/apps/pwa/out/_next/static/chunks/app/setup/layout-c604fb980a634d88.js +0 -1
  708. package/apps/pwa/out/_next/static/chunks/app/setup/page-32b526069ee50b3c.js +0 -1
  709. package/apps/pwa/out/_next/static/chunks/app/share/page-fb9e639c107f5f72.js +0 -1
  710. package/apps/pwa/out/_next/static/chunks/app/showroom/page-84220c776608cedc.js +0 -1
  711. package/apps/pwa/out/_next/static/chunks/app/tasks/page-e475618cbfd5ca2b.js +0 -1
  712. package/apps/pwa/out/_next/static/chunks/app/today/page-fccd3020af2f8806.js +0 -1
  713. package/apps/pwa/out/_next/static/chunks/app/trace/page-9c0d7198ff7b5a91.js +0 -1
  714. package/apps/pwa/out/_next/static/chunks/app/vault/page-d54b1ec9b9c6430d.js +0 -1
  715. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-8c4bef1791d732ca.js +0 -1
  716. package/apps/pwa/out/_next/static/chunks/app/workflows/page-46fcc0b0bbc6fbfe.js +0 -1
  717. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-7dfda00afd172f5b.js +0 -1
  718. package/apps/pwa/out/_next/static/chunks/f21fd540.63ac75328926ed30.js +0 -1
  719. package/apps/pwa/out/_next/static/chunks/framework-77fdcc873519a6cd.js +0 -1
  720. package/apps/pwa/out/_next/static/chunks/main-app-d0d620d2ce235713.js +0 -1
  721. package/apps/pwa/out/_next/static/chunks/main-e0ef79c79337ba90.js +0 -1
  722. package/apps/pwa/out/_next/static/chunks/pages/_app-84b1bc71e3f9ce6a.js +0 -1
  723. package/apps/pwa/out/_next/static/chunks/pages/_error-2acb61f1363128cb.js +0 -1
  724. package/apps/pwa/out/_next/static/chunks/webpack-462ff5727ceb7824.js +0 -1
  725. package/scripts/migrate-monad-to-elanous.ts +0 -195
  726. package/scripts/rebrand-elanous.ts +0 -242
  727. /package/apps/pwa/out/_next/static/{8kITumG9GAZ1LwT9POrAR → HjeK7zONHfR7op1hKXp4k}/_ssgManifest.js +0 -0
@@ -18,6 +18,7 @@ export type DashboardChatMainInteractionOpts = Pick<
18
18
  | 'onPasteImage'
19
19
  | 'onKey'
20
20
  | 'onPreKey'
21
+ | 'onQuitChord'
21
22
  | 'onMouse'
22
23
  >;
23
24
 
@@ -46,6 +47,7 @@ export interface CreateDashboardChatMainInteractionOptsDeps {
46
47
  * instead of "<transcript>a" (PR #1109 review fix). */
47
48
  routeLongPressDictation?: (key: Key) => 'consumed' | 'passthrough' | Promise<'consumed' | 'passthrough'>;
48
49
  routeInputKey: NonNullable<DashboardChatMainInteractionOpts['onKey']>;
50
+ routeQuitChord?: NonNullable<DashboardChatMainInteractionOpts['onQuitChord']>;
49
51
  shouldRouteInputDispatcherKey?: (key: Key) => boolean;
50
52
  hasActiveStatusPopup: () => boolean;
51
53
  hasTerminalModal: () => boolean;
@@ -73,6 +75,7 @@ export function createDashboardChatMainInteractionOpts(
73
75
  }
74
76
  return await deps.routeInputKey(key);
75
77
  },
78
+ onQuitChord: deps.routeQuitChord,
76
79
  onPreKey: async (key) => {
77
80
  if (deps.routeVoiceKey) {
78
81
  const voiceRoute = await deps.routeVoiceKey(key);
@@ -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 — 도는 턴이 없어 무시했습니다'
@@ -1,159 +1,8 @@
1
- // Dashboard key routing for interactive terminal modals.
2
- //
3
- // Holds singleton state for "which interactive terminal modal is
4
- // currently foregrounded" + the key-intercept policy:
5
- //
6
- // • while a modal is present, ESC / Ctrl-G dispose it
7
- // • all other keys forward to modal.surface.onKey(ev) so the PTY
8
- // receives them without the chat readKey loop trying to
9
- // interpret them
10
- //
11
- // Kept as a standalone module so the policy is unit-testable
12
- // without standing up the full dashboard. dashboard.ts imports and
13
- // wires it into the top of its stdin handler in a follow-up commit.
14
- //
15
- // P10 will extend this with Ctrl-B prefix handling (d=detach,
16
- // s=switch, etc.) once a session registry exists to act on.
17
-
18
- import type { InteractiveTerminalModalHandle } from '../../interactive-terminal-modal.js';
19
- import type { KeyEvent } from '../../display/types.js';
20
- import { debug } from '../../debug/log.js';
21
-
22
- export type KeyRouteResult = 'consumed' | 'passthrough' | 'closed';
23
-
24
- export interface TerminalModalRouter {
25
- current(): InteractiveTerminalModalHandle | null;
26
- /** Install a modal handle. Optional closePolicy controls what
27
- * ESC/Ctrl-G does: 'kill' disposes the modal + PTY (default);
28
- * 'detach' calls handle.dispose({keepPreview:true}) so the PTY
29
- * survives for re-attach (session registry flow). An explicit
30
- * onClose hook wins over closePolicy — that's how dashboard
31
- * wires sessionRegistry.detach(session.id) on Esc. */
32
- set(
33
- handle: InteractiveTerminalModalHandle | null,
34
- opts?: { closePolicy?: 'kill' | 'detach'; onClose?: () => void },
35
- ): void;
36
- close(): void;
37
- handleKey(ev: KeyEvent): KeyRouteResult;
38
- }
39
-
40
- // `exit` typed cleanly + Enter closes the popup. claude / codex don't
41
- // recognize plain `exit` (their command is /exit or /quit), so a user
42
- // typing `exit\n` would otherwise be stuck — the popup stays open
43
- // because the child never exits, and the typed text just becomes chat
44
- // input. elanous intercepts the exact sequence at the router so:
45
- // • plain shell: same end result (we close before shell evaluates)
46
- // • claude / codex: popup closes as the user expected
47
- // Sequence is reset on any non-letter key (other than backspace, which
48
- // rewinds), Ctrl/Alt modifiers, or any character outside `e/x/i/t` —
49
- // so genuine words containing "exit" (e.g. typing "exit this loop"
50
- // into a claude prompt without Enter) DON'T trigger the close. The
51
- // trigger is specifically `e`, `x`, `i`, `t`, Enter with nothing else.
52
- const EXIT_CHARS = ['e', 'x', 'i', 't'] as const;
53
-
54
- export function createTerminalModalRouter(): TerminalModalRouter {
55
- let handle: InteractiveTerminalModalHandle | null = null;
56
- let closePolicy: 'kill' | 'detach' = 'kill';
57
- let onClose: (() => void) | null = null;
58
- let exitProgress = 0; // how many of EXIT_CHARS have been typed in order
59
-
60
- const close = (): void => {
61
- if (!handle) return;
62
- const h = handle;
63
- const cb = onClose;
64
- if (debug.enabled) debug.log('window.terminalModalRouter.close', h.id, { id: h.id, closePolicy, hasOnClose: !!cb });
65
- handle = null;
66
- onClose = null;
67
- exitProgress = 0;
68
- try {
69
- if (cb) cb();
70
- else if (closePolicy === 'detach') h.dispose({ keepPreview: true });
71
- else h.dispose();
72
- } catch { /* already disposed */ }
73
- closePolicy = 'kill';
74
- };
75
-
76
- return {
77
- current: () => handle,
78
- set: (h, opts) => {
79
- if (handle && h && handle.id !== h.id) close();
80
- handle = h;
81
- closePolicy = opts?.closePolicy ?? 'kill';
82
- onClose = opts?.onClose ?? null;
83
- exitProgress = 0;
84
- if (debug.enabled) {
85
- debug.log('window.terminalModalRouter.set', h?.id ?? '(null)', {
86
- id: h?.id ?? null,
87
- closePolicy,
88
- hasOnClose: !!onClose,
89
- });
90
- }
91
- },
92
- close,
93
- handleKey: (ev) => {
94
- if (!handle) return 'passthrough';
95
- const name = (ev.name ?? '').toLowerCase();
96
- // ESC must NOT close the modal — claude / codex inside the popup
97
- // use ESC to cancel an in-progress chat / tool turn. Closing the
98
- // wrapper window on ESC made the only-way-to-cancel kill the
99
- // whole popup. iTerm / ghostty don't close their own windows on
100
- // ESC either; the wrapper should match. Modal close is reserved
101
- // for: Ctrl+G (close + focus log), Ctrl+Shift+T (toggle off),
102
- // typed `exit\n`, and the child's own `exit`. ESC just forwards.
103
- if (ev.ctrl && (name === 'g' || name === 'ㅎ')) {
104
- if (debug.enabled) debug.log('window.terminalModalRouter.handleKey.close', 'ctrl-g', { id: handle.id });
105
- close();
106
- return 'closed';
107
- }
108
-
109
- // Track typed `exit` followed by Enter so the user's natural
110
- // mental model ("type exit to quit") works inside agent popups
111
- // (claude / codex) where the child app doesn't recognize a bare
112
- // `exit` command. See EXIT_CHARS comment above for false-positive
113
- // avoidance.
114
- const noMods = !ev.ctrl && !ev.alt;
115
- if (noMods && name === 'enter' && exitProgress === EXIT_CHARS.length) {
116
- if (debug.enabled) {
117
- debug.log('window.terminalModalRouter.handleKey.close', 'typed-exit', {
118
- id: handle.id,
119
- });
120
- }
121
- close();
122
- return 'closed';
123
- }
124
- if (noMods && name === 'backspace') {
125
- if (exitProgress > 0) exitProgress--;
126
- } else if (noMods && name.length === 1 && exitProgress < EXIT_CHARS.length && name === EXIT_CHARS[exitProgress]) {
127
- exitProgress++;
128
- } else if (noMods && name === 'enter') {
129
- // Enter without a complete `exit` prefix — reset and forward.
130
- exitProgress = 0;
131
- } else if (name.length === 1 || name === 'space' || ev.ctrl || ev.alt) {
132
- // Any other printable key OR a modifier keystroke breaks the
133
- // streak. Multi-char named keys (arrow / fn / etc.) leave the
134
- // streak alone — the child may consume them without affecting
135
- // the user's typed prompt buffer.
136
- exitProgress = 0;
137
- }
138
-
139
- if (debug.enabled) {
140
- debug.log('window.terminalModalRouter.handleKey.forward', name || '(empty)', {
141
- id: handle.id,
142
- name,
143
- ctrl: ev.ctrl ?? false,
144
- shift: ev.shift ?? false,
145
- alt: ev.alt ?? false,
146
- exitProgress,
147
- });
148
- }
149
- try {
150
- handle.surface.onKey?.(ev);
151
- } catch { /* surface disposed mid-event; treat as no-op */ }
152
- return 'consumed';
153
- },
154
- };
155
- }
156
-
157
- /** Singleton instance used by dashboard.ts. Exported as a separate
158
- * factory + singleton so tests can inject a fresh router per case. */
159
- export const terminalModalRouter = createTerminalModalRouter();
1
+ // Compatibility entry for dashboard-owned consumers. The routing policy is
2
+ // shared with the standalone Next TUI from src/terminal.
3
+ export {
4
+ createTerminalModalRouter,
5
+ terminalModalRouter,
6
+ type KeyRouteResult,
7
+ type TerminalModalRouter,
8
+ } from '../../terminal/terminal-modal-router.js';
@@ -0,0 +1,61 @@
1
+ import { loadSidetabRows, type SidetabRow } from '../tui/sidetab/list.js';
2
+ import { stripAnsi, termSize } from '../tui.js';
3
+ import { requestRemotePtyControl } from '../pty-shell/pty-control-ipc.js';
4
+ import type { SlashCommandRegistry } from './slash-runtime/registry.js';
5
+ import type { DashboardSlashContext, DashboardSlashReturn } from './slash-runtime/dashboard-handlers.js';
6
+
7
+ /** Classic /side: the Next TUI manifest is the sole source of list ordering. */
8
+ export function registerClassicSideSlash(
9
+ registry: SlashCommandRegistry<DashboardSlashContext, DashboardSlashReturn>,
10
+ loadRows: (sessionId?: string) => SidetabRow[] = (sessionId) => loadSidetabRows(false, sessionId),
11
+ snapshot: typeof requestRemotePtyControl = requestRemotePtyControl,
12
+ ): void {
13
+ registry.register(['side'], async (args, ctx) => {
14
+ const sub = (args[0] ?? 'list').toLowerCase();
15
+ if (sub === 'new') {
16
+ if (args.length > 1) ctx.chatLines.push(ctx.warning(' 사용법: /side new'));
17
+ else ctx.termSlash.openNewTerminal();
18
+ ctx.setChatScrollOffset(-1);
19
+ return;
20
+ }
21
+ if (sub !== 'list' && sub !== 'attach') {
22
+ ctx.chatLines.push(ctx.muted(' 사용법: /side [list] | new | attach <번호>'));
23
+ ctx.setChatScrollOffset(-1);
24
+ return;
25
+ }
26
+ // Use the same filtered manifest rows for display and numeric resolution;
27
+ // never let an exited row shift the number shown to the user.
28
+ const rows = loadRows(ctx.chatPersona?.sessionId()).filter(row => row.badge !== 'exited');
29
+ if (sub === 'list') {
30
+ if (rows.length === 0) ctx.chatLines.push(ctx.muted(' 사이드탭 없음'));
31
+ rows.forEach((row, i) => ctx.chatLines.push(ctx.muted(` ${i + 1}. ${row.badge} ${row.label}`)));
32
+ ctx.setChatScrollOffset(-1);
33
+ return;
34
+ }
35
+ const raw = args[1] ?? '';
36
+ const index = /^\d+$/.test(raw) ? Number(raw) - 1 : -1;
37
+ const row = rows[index];
38
+ if (args.length !== 2 || !row) {
39
+ ctx.chatLines.push(ctx.warning(' 사용법: /side attach <목록 번호>'));
40
+ } else if (row.currentProcess) {
41
+ ctx.chatLines.push(ctx.muted(' 현재 세션입니다'));
42
+ } else if (row.sessionId && ctx.termSlash.sessionRegistry.get(row.sessionId)) {
43
+ const { cols, rows: height } = termSize();
44
+ const session = ctx.termSlash.sessionRegistry.attach(row.sessionId, { termCols: cols, termRows: height });
45
+ if (session?.modal) ctx.termSlash.openSession(session);
46
+ else ctx.chatLines.push(ctx.warning(' PTY attach 실패'));
47
+ } else if (row.ptyId) {
48
+ try {
49
+ // A foreign child belongs to another PTY owner: snapshot only, no takeover.
50
+ const result = await snapshot(row.ptyId, 'snapshot', { ansi: false }, { timeoutMs: 450 });
51
+ if (result.status === 'success' && result.screen?.trim()) {
52
+ ctx.chatLines.push(ctx.muted(` ${row.label} · 읽기 전용 snapshot (입력은 전달되지 않습니다)`));
53
+ ctx.chatLines.push(...stripAnsi(result.screen).split('\n'));
54
+ } else ctx.chatLines.push(ctx.warning(` PTY 화면 읽기 실패 · ${result.status}`));
55
+ } catch (error) {
56
+ ctx.chatLines.push(ctx.warning(` PTY 화면 읽기 오류 · ${error instanceof Error ? error.message : String(error)}`));
57
+ }
58
+ } else ctx.chatLines.push(ctx.warning(' attach할 PTY가 없습니다'));
59
+ ctx.setChatScrollOffset(-1);
60
+ });
61
+ }
@@ -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;