elanous 0.2.28 → 0.2.29

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 (609) 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/{y1ltt7oCZxVpC6zVPhZ2O → cIpv5nU9AycwYWZI9H589}/_buildManifest.js +1 -1
  4. package/apps/pwa/out/_next/static/chunks/{ab4d57c2.e90bc2cb31949045.js → 058a98ba.7eb28d5e6dc03565.js} +1 -1
  5. package/apps/pwa/out/_next/static/chunks/{4565-67e4c620597965c8.js → 1015-9cba22a5a4554797.js} +1 -1
  6. package/apps/pwa/out/_next/static/chunks/1084-4e66af7376a18db7.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/1106.3a6410b7b0c70ad4.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/1127.32fc642f70423506.js +8 -0
  9. package/apps/pwa/out/_next/static/chunks/{1516.83dd2c1b86b4e507.js → 1142.65d002789ab3af7d.js} +2 -2
  10. package/apps/pwa/out/_next/static/chunks/1189-d9b8e1995a831fae.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/1224.6da98c7ad0eb7dd8.js +34 -0
  12. package/apps/pwa/out/_next/static/chunks/1370.4e3e2558f111fd5d.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/1514-b7da377fdc4eb17a.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/1516.dfaceff3fd2d0e0d.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/1577.3c24c32584e10d70.js +286 -0
  16. package/apps/pwa/out/_next/static/chunks/161.130a569855c4d68c.js +24 -0
  17. package/apps/pwa/out/_next/static/chunks/1782-59db1b5aa06df38a.js +1 -0
  18. package/apps/pwa/out/_next/static/chunks/{1743.563d3168e95825ef.js → 1852.7f7b53991fcb99ef.js} +2 -2
  19. package/apps/pwa/out/_next/static/chunks/1864.16da9556e78a9236.js +1 -0
  20. package/apps/pwa/out/_next/static/chunks/1b6f6b2a.aff090122be3726e.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/2341.e8a9135e5b910dd5.js +36 -0
  22. package/apps/pwa/out/_next/static/chunks/257.10afdbe3520f2fc2.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/2658.87550e692dc493f6.js +64 -0
  24. package/apps/pwa/out/_next/static/chunks/2673.85e2f02efae7a85f.js +1 -0
  25. package/apps/pwa/out/_next/static/chunks/2766-bee623b37472ed63.js +1 -0
  26. package/apps/pwa/out/_next/static/chunks/2794.6d836872b0bf43e2.js +1 -0
  27. package/apps/pwa/out/_next/static/chunks/2806.eb57ced1a528ed39.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/283.7a121c4910e6dad7.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/{65ebff95.081daeff622d238e.js → 285adb1a.5654e605dddf86d2.js} +1 -1
  30. package/apps/pwa/out/_next/static/chunks/2870.1dc29aa5fc01f09f.js +115 -0
  31. package/apps/pwa/out/_next/static/chunks/293.fd38e77ce5d48103.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/2993-5952a1cd3fd5d441.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/3160-95c96f4d2a21dd26.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/32-a523427c5bd5ed00.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/3280.af38002a6424a905.js +90 -0
  36. package/apps/pwa/out/_next/static/chunks/328bb3ab-6628a1114fe3fb3b.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/3292-5ddffdb2f517b44f.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/{9917-9e26abc5f7772735.js → 3396-97b97928c49190c9.js} +1 -1
  39. package/apps/pwa/out/_next/static/chunks/{6196.34d6b229079e9e28.js → 3403.7199205e65124486.js} +1 -1
  40. package/apps/pwa/out/_next/static/chunks/3523.d3231daaf7aba993.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/3763.577de3181e1e6ea0.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/4138-cc56b0938ef72783.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/419.736c0d6f426249a7.js +1 -0
  44. package/apps/pwa/out/_next/static/chunks/4255-8350c43d307a8875.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/{6def8a8e.c81f9ca41028eccf.js → 425cfc4d.fb91158e3971c39f.js} +1 -1
  46. package/apps/pwa/out/_next/static/chunks/4352.a4954693499c2714.js +1 -0
  47. package/apps/pwa/out/_next/static/chunks/4421-f2dcbc6fd80ec013.js +1 -0
  48. package/apps/pwa/out/_next/static/chunks/4513-51b94aeee37c9905.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/{16e57f67.3ea19e893461e611.js → 46bd8bea.2f4b4099172fcdb7.js} +1 -1
  50. package/apps/pwa/out/_next/static/chunks/{5081.a240b63fad28663a.js → 4759.1f76713aefb87db5.js} +1 -1
  51. package/apps/pwa/out/_next/static/chunks/4928-c3b72f99aa588699.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/4986-f9fc0283fb325219.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/5014.671a7b9f69c2b7b1.js +94 -0
  54. package/apps/pwa/out/_next/static/chunks/5137.d398e24710b3feb6.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/5298.0bea74885cabe754.js +1 -0
  56. package/apps/pwa/out/_next/static/chunks/5315.74c53a39739b11c4.js +1 -0
  57. package/apps/pwa/out/_next/static/chunks/5317-8b1df8d02105cd07.js +1 -0
  58. package/apps/pwa/out/_next/static/chunks/5358-33051f41a2b239af.js +1 -0
  59. package/apps/pwa/out/_next/static/chunks/5388.a2ec02501f714ad5.js +62 -0
  60. package/apps/pwa/out/_next/static/chunks/5395.e6ac948a2d15058d.js +1 -0
  61. package/apps/pwa/out/_next/static/chunks/5409-f282bf533c151849.js +1 -0
  62. package/apps/pwa/out/_next/static/chunks/5466.d0f4aba9d52acfa8.js +27 -0
  63. package/apps/pwa/out/_next/static/chunks/5564.3d28b353470fe305.js +104 -0
  64. package/apps/pwa/out/_next/static/chunks/{9974.e77b4ff4884557b3.js → 5591.a35e7a217734a8b9.js} +2 -2
  65. package/apps/pwa/out/_next/static/chunks/569.b0cbfb4dee4a167a.js +93 -0
  66. package/apps/pwa/out/_next/static/chunks/5835-72465b73a8bb8d74.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/5941.045d6093139e1f7a.js +1 -0
  68. package/apps/pwa/out/_next/static/chunks/{5492-e05e26a033ba80d2.js → 6013-2f769370d8b4c2c6.js} +3 -3
  69. package/apps/pwa/out/_next/static/chunks/6228.47cabb83564dfe54.js +24 -0
  70. package/apps/pwa/out/_next/static/chunks/6457-8d1993002a87d0fe.js +1 -0
  71. package/apps/pwa/out/_next/static/chunks/6513.ef54cfae52351982.js +2 -0
  72. package/apps/pwa/out/_next/static/chunks/{5408.377c8c543635b81f.js → 6534.1ab00f370db7b105.js} +1 -1
  73. package/apps/pwa/out/_next/static/chunks/6582.13d245bf87df69f1.js +148 -0
  74. package/apps/pwa/out/_next/static/chunks/6655.c33f6acc2c61bb89.js +149 -0
  75. package/apps/pwa/out/_next/static/chunks/6731-9d7195af289c8d4c.js +1 -0
  76. package/apps/pwa/out/_next/static/chunks/6733.0be05b1db9279fc5.js +79 -0
  77. package/apps/pwa/out/_next/static/chunks/6742-90937146253a8b9e.js +1 -0
  78. package/apps/pwa/out/_next/static/chunks/{8578.dff22d988cc2b106.js → 6767.1fcfc9b8be83975f.js} +16 -16
  79. package/apps/pwa/out/_next/static/chunks/6776.06ff1e3b464cc607.js +1 -0
  80. package/apps/pwa/out/_next/static/chunks/{9311.24c8f5ea793253dd.js → 6853.cc5174a9dee59593.js} +1 -1
  81. package/apps/pwa/out/_next/static/chunks/687-816858f77a396a4e.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/6888.72c7b8cfb02a7e61.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/6993.c17c828ac3ef3253.js +1 -0
  84. package/apps/pwa/out/_next/static/chunks/7076.9f27ef666b0cefdd.js +1 -0
  85. package/apps/pwa/out/_next/static/chunks/7113.1403c5d451804e8c.js +287 -0
  86. package/apps/pwa/out/_next/static/chunks/7169.9dd603c726c2cd7c.js +1 -0
  87. package/apps/pwa/out/_next/static/chunks/7247-e3ec21f761f86710.js +1 -0
  88. package/apps/pwa/out/_next/static/chunks/7261-a47b72f96f5199df.js +1 -0
  89. package/apps/pwa/out/_next/static/chunks/7335-5cda81ac90310077.js +1 -0
  90. package/apps/pwa/out/_next/static/chunks/7356-c2e4af090546e2d4.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/{94.4cfed21c0b781a06.js → 7375.050ea0d72968e49f.js} +16 -16
  92. package/apps/pwa/out/_next/static/chunks/738-59518742078fda71.js +1 -0
  93. package/apps/pwa/out/_next/static/chunks/7385.a7375f10db73243a.js +77 -0
  94. package/apps/pwa/out/_next/static/chunks/7445.cf1cf2fe109bcd96.js +1 -0
  95. package/apps/pwa/out/_next/static/chunks/7505.a2057432ab6ef99a.js +1 -0
  96. package/apps/pwa/out/_next/static/chunks/7515.31f45fac1f9c70cb.js +74 -0
  97. package/apps/pwa/out/_next/static/chunks/7658-d4ce8c72a9548a91.js +1 -0
  98. package/apps/pwa/out/_next/static/chunks/7725-4f83d5541fbdb81b.js +1 -0
  99. package/apps/pwa/out/_next/static/chunks/8107-0b1ae46bc5bcb788.js +1 -0
  100. package/apps/pwa/out/_next/static/chunks/8132.bfea2f016ce8d992.js +1 -0
  101. package/apps/pwa/out/_next/static/chunks/8332.6f0f49df772e163b.js +23 -0
  102. package/apps/pwa/out/_next/static/chunks/{7483.ba01c6c209b81bba.js → 8398.73a19b39715eda04.js} +1 -1
  103. package/apps/pwa/out/_next/static/chunks/{2846.d6a433b8663819a5.js → 8471.8d2a8c74f09c36ff.js} +3 -3
  104. package/apps/pwa/out/_next/static/chunks/8672.e299832bc7d18ee2.js +1 -0
  105. package/apps/pwa/out/_next/static/chunks/8735.f1ef798a5f260f6f.js +226 -0
  106. package/apps/pwa/out/_next/static/chunks/{5785-ea8d2c633b6688e3.js → 8767-2f6a634f5abeaa01.js} +1 -1
  107. package/apps/pwa/out/_next/static/chunks/8774-88f67f7d8d53d299.js +1 -0
  108. package/apps/pwa/out/_next/static/chunks/8782.252e5a405d86e4ed.js +32 -0
  109. package/apps/pwa/out/_next/static/chunks/8795.32573a185af18c7b.js +41 -0
  110. package/apps/pwa/out/_next/static/chunks/909-9ed7aa0dba804316.js +1 -0
  111. package/apps/pwa/out/_next/static/chunks/9100.22b0301256827007.js +1 -0
  112. package/apps/pwa/out/_next/static/chunks/9140-dde77575570bc71e.js +1 -0
  113. package/apps/pwa/out/_next/static/chunks/{4593.10f5b9bd702d4a6c.js → 9143.ff14585db1d275ff.js} +1 -1
  114. package/apps/pwa/out/_next/static/chunks/9292-a7ad9a01c7044b93.js +1 -0
  115. package/apps/pwa/out/_next/static/chunks/9517.00627dc51b02821c.js +1 -0
  116. package/apps/pwa/out/_next/static/chunks/9725.dcbb585652d8e9c5.js +1 -0
  117. package/apps/pwa/out/_next/static/chunks/9761.a3ebf5c389c24ddc.js +1 -0
  118. package/apps/pwa/out/_next/static/chunks/{4204.a409ab6250c0f6a8.js → 9907.49be0fcadaf214b5.js} +1 -1
  119. package/apps/pwa/out/_next/static/chunks/9972.834d2b2b7d48f1ed.js +1 -0
  120. package/apps/pwa/out/_next/static/chunks/9995-1a90486f5ae01546.js +1 -0
  121. package/apps/pwa/out/_next/static/chunks/{973cbf1b.3bbcf2b41548eca7.js → a435ad95.577add051b4facb2.js} +1 -1
  122. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-83372d8b5863ebf7.js +1 -0
  123. package/apps/pwa/out/_next/static/chunks/app/approvals/page-d69256d7613c140a.js +1 -0
  124. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-352c5e9ba3f9b858.js +1 -0
  125. package/apps/pwa/out/_next/static/chunks/app/board/page-69f1d725524201a8.js +1 -0
  126. package/apps/pwa/out/_next/static/chunks/app/botlab/{page-fa46d4588e8442c2.js → page-a5635eba0d73b84e.js} +1 -1
  127. package/apps/pwa/out/_next/static/chunks/app/bots/page-ad9181d84285e4ea.js +1 -0
  128. package/apps/pwa/out/_next/static/chunks/app/ceo/{page-66ad46ed0279feb9.js → page-86feb08080261a2f.js} +1 -1
  129. package/apps/pwa/out/_next/static/chunks/app/chat/page-ffa15987e4756d03.js +1 -0
  130. package/apps/pwa/out/_next/static/chunks/app/consult/page-11a3ab44ac327cc1.js +1 -0
  131. package/apps/pwa/out/_next/static/chunks/app/control/page-6309b11c4264d24d.js +1 -0
  132. package/apps/pwa/out/_next/static/chunks/app/decisions/page-8800472079612e87.js +1 -0
  133. package/apps/pwa/out/_next/static/chunks/app/design-check/page-d387bf3f2301882a.js +1 -0
  134. package/apps/pwa/out/_next/static/chunks/app/editor/page-048f88d8c8658da6.js +1 -0
  135. package/apps/pwa/out/_next/static/chunks/app/exec/page-6c14f9739b7f6880.js +1 -0
  136. package/apps/pwa/out/_next/static/chunks/app/field/page-2834f44f64e98d74.js +1 -0
  137. package/apps/pwa/out/_next/static/chunks/app/healthz/route-83372d8b5863ebf7.js +1 -0
  138. package/apps/pwa/out/_next/static/chunks/app/inside/page-a13df6f88e824887.js +1 -0
  139. package/apps/pwa/out/_next/static/chunks/app/intake/page-8a4397248754cf2b.js +1 -0
  140. package/apps/pwa/out/_next/static/chunks/app/layout-daf0bd329360a336.js +1 -0
  141. package/apps/pwa/out/_next/static/chunks/app/live/page-f7ef1c28764cb476.js +1 -0
  142. package/apps/pwa/out/_next/static/chunks/app/live-run/page-61e74f28b9353dac.js +1 -0
  143. package/apps/pwa/out/_next/static/chunks/app/loops/{page-646b50f63b6fe732.js → page-8aaa6dedc4c10dfb.js} +1 -1
  144. package/apps/pwa/out/_next/static/chunks/app/market/page-294602ba649be829.js +1 -0
  145. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-5fa5f41ed3fce323.js +1 -0
  146. package/apps/pwa/out/_next/static/chunks/app/morning/{page-6f131b51193a36f9.js → page-33bf667a5fb297bf.js} +1 -1
  147. package/apps/pwa/out/_next/static/chunks/app/not-found-5ae3cbd6e5dba515.js +1 -0
  148. package/apps/pwa/out/_next/static/chunks/app/observatory/page-eb867d16ad6fdede.js +1 -0
  149. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-1ab789fa68682f7e.js +1 -0
  150. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-6fd41b5b6ff13a71.js +1 -0
  151. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fb3d5f7642c99fba.js +1 -0
  152. package/apps/pwa/out/_next/static/chunks/app/outputs/page-70f705b2b5ed42ca.js +1 -0
  153. package/apps/pwa/out/_next/static/chunks/app/page-c9c93b358a7667b5.js +1 -0
  154. package/apps/pwa/out/_next/static/chunks/app/reflection/page-1563c556b81c96ed.js +1 -0
  155. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-ce89c20c45b3a673.js +1 -0
  156. package/apps/pwa/out/_next/static/chunks/app/sessions/page-423ae63d786f4ee9.js +1 -0
  157. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-591a5378a4c4447c.js +1 -0
  158. package/apps/pwa/out/_next/static/chunks/app/settings/page-a250496b19a5824b.js +1 -0
  159. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-c36a9277febc5911.js +1 -0
  160. package/apps/pwa/out/_next/static/chunks/app/setup/layout-83372d8b5863ebf7.js +1 -0
  161. package/apps/pwa/out/_next/static/chunks/app/setup/page-29900ed0011b2c83.js +1 -0
  162. package/apps/pwa/out/_next/static/chunks/app/share/page-a5de57edc6d7f942.js +1 -0
  163. package/apps/pwa/out/_next/static/chunks/app/showroom/page-16bdd4c9f40498df.js +1 -0
  164. package/apps/pwa/out/_next/static/chunks/app/tasks/page-75e946e6e71cc6d8.js +1 -0
  165. package/apps/pwa/out/_next/static/chunks/app/term/page-9eb56166774eb256.js +1 -0
  166. package/apps/pwa/out/_next/static/chunks/app/today/page-1c5f9ef35dbb22c5.js +1 -0
  167. package/apps/pwa/out/_next/static/chunks/app/trace/page-657ff9985e508498.js +1 -0
  168. package/apps/pwa/out/_next/static/chunks/app/vault/page-22dc72499da68fb2.js +1 -0
  169. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-9f92737b8766009a.js +1 -0
  170. package/apps/pwa/out/_next/static/chunks/app/workflows/page-094ad334e40f8169.js +1 -0
  171. package/apps/pwa/out/_next/static/chunks/app/workspace/page-8bcd379852ff6287.js +1 -0
  172. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-6b04413f280cd344.js +1 -0
  173. package/apps/pwa/out/_next/static/chunks/{f4dfbfc0.a69fb12f854882aa.js → bc324b7c.02a09dd93f6a399b.js} +1 -1
  174. package/apps/pwa/out/_next/static/chunks/de70ab42-d28d47437208d458.js +1 -0
  175. package/apps/pwa/out/_next/static/chunks/f800c5e3.46dbd7f2af8c3fce.js +1 -0
  176. package/apps/pwa/out/_next/static/chunks/f8bc19ad.47579f6d684b0760.js +122 -0
  177. package/apps/pwa/out/_next/static/chunks/framework-ca9ac4609fb9fed8.js +1 -0
  178. package/apps/pwa/out/_next/static/chunks/main-app-0dd08d32d15a030f.js +1 -0
  179. package/apps/pwa/out/_next/static/chunks/main-f0399d33955c4e01.js +1 -0
  180. package/apps/pwa/out/_next/static/chunks/pages/_app-d42caca6f8ac2211.js +1 -0
  181. package/apps/pwa/out/_next/static/chunks/pages/_error-42e713c13aa41ca8.js +1 -0
  182. package/apps/pwa/out/_next/static/chunks/webpack-8fbf8f61a377aa16.js +1 -0
  183. package/apps/pwa/out/approvals/index.html +1 -1
  184. package/apps/pwa/out/approvals/index.txt +22 -22
  185. package/apps/pwa/out/autopilot/index.html +1 -1
  186. package/apps/pwa/out/autopilot/index.txt +22 -22
  187. package/apps/pwa/out/board/index.html +1 -1
  188. package/apps/pwa/out/board/index.txt +22 -22
  189. package/apps/pwa/out/botlab/index.html +1 -1
  190. package/apps/pwa/out/botlab/index.txt +21 -21
  191. package/apps/pwa/out/bots/index.html +1 -1
  192. package/apps/pwa/out/bots/index.txt +21 -21
  193. package/apps/pwa/out/ceo/index.html +1 -1
  194. package/apps/pwa/out/ceo/index.txt +22 -22
  195. package/apps/pwa/out/chat/index.html +1 -1
  196. package/apps/pwa/out/chat/index.txt +21 -21
  197. package/apps/pwa/out/consult/index.html +1 -1
  198. package/apps/pwa/out/consult/index.txt +22 -22
  199. package/apps/pwa/out/control/index.html +1 -1
  200. package/apps/pwa/out/control/index.txt +22 -22
  201. package/apps/pwa/out/decisions/index.html +1 -1
  202. package/apps/pwa/out/decisions/index.txt +21 -21
  203. package/apps/pwa/out/design-check/index.html +1 -1
  204. package/apps/pwa/out/design-check/index.txt +22 -22
  205. package/apps/pwa/out/editor/index.html +1 -1
  206. package/apps/pwa/out/editor/index.txt +22 -22
  207. package/apps/pwa/out/exec/index.html +1 -1
  208. package/apps/pwa/out/exec/index.txt +22 -22
  209. package/apps/pwa/out/field/index.html +1 -1
  210. package/apps/pwa/out/field/index.txt +22 -22
  211. package/apps/pwa/out/healthz +1 -1
  212. package/apps/pwa/out/index.html +1 -1
  213. package/apps/pwa/out/index.txt +21 -21
  214. package/apps/pwa/out/inside/index.html +1 -1
  215. package/apps/pwa/out/inside/index.txt +21 -21
  216. package/apps/pwa/out/intake/index.html +1 -1
  217. package/apps/pwa/out/intake/index.txt +22 -22
  218. package/apps/pwa/out/live/index.html +1 -1
  219. package/apps/pwa/out/live/index.txt +22 -22
  220. package/apps/pwa/out/live-run/index.html +1 -1
  221. package/apps/pwa/out/live-run/index.txt +22 -22
  222. package/apps/pwa/out/loops/index.html +1 -1
  223. package/apps/pwa/out/loops/index.txt +21 -21
  224. package/apps/pwa/out/market/index.html +1 -1
  225. package/apps/pwa/out/market/index.txt +21 -21
  226. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  227. package/apps/pwa/out/missions/placeholder/index.txt +21 -21
  228. package/apps/pwa/out/morning/index.html +1 -1
  229. package/apps/pwa/out/morning/index.txt +22 -22
  230. package/apps/pwa/out/observatory/index.html +1 -1
  231. package/apps/pwa/out/observatory/index.txt +22 -22
  232. package/apps/pwa/out/ops/checklist/index.html +1 -1
  233. package/apps/pwa/out/ops/checklist/index.txt +21 -21
  234. package/apps/pwa/out/ops/release/index.html +1 -1
  235. package/apps/pwa/out/ops/release/index.txt +21 -21
  236. package/apps/pwa/out/ops/seats/index.html +1 -1
  237. package/apps/pwa/out/ops/seats/index.txt +21 -21
  238. package/apps/pwa/out/outputs/index.html +1 -1
  239. package/apps/pwa/out/outputs/index.txt +21 -21
  240. package/apps/pwa/out/reflection/index.html +1 -1
  241. package/apps/pwa/out/reflection/index.txt +22 -22
  242. package/apps/pwa/out/scheduler/index.html +1 -1
  243. package/apps/pwa/out/scheduler/index.txt +22 -22
  244. package/apps/pwa/out/sessions/index.html +1 -1
  245. package/apps/pwa/out/sessions/index.txt +21 -21
  246. package/apps/pwa/out/settings/devices/index.html +1 -1
  247. package/apps/pwa/out/settings/devices/index.txt +22 -22
  248. package/apps/pwa/out/settings/index.html +1 -1
  249. package/apps/pwa/out/settings/index.txt +22 -22
  250. package/apps/pwa/out/setup/done/index.html +1 -1
  251. package/apps/pwa/out/setup/done/index.txt +22 -22
  252. package/apps/pwa/out/setup/index.html +1 -1
  253. package/apps/pwa/out/setup/index.txt +22 -22
  254. package/apps/pwa/out/share/index.html +1 -1
  255. package/apps/pwa/out/share/index.txt +22 -22
  256. package/apps/pwa/out/showroom/index.html +1 -1
  257. package/apps/pwa/out/showroom/index.txt +21 -21
  258. package/apps/pwa/out/tasks/index.html +1 -1
  259. package/apps/pwa/out/tasks/index.txt +22 -22
  260. package/apps/pwa/out/term/index.html +1 -1
  261. package/apps/pwa/out/term/index.txt +22 -22
  262. package/apps/pwa/out/today/index.html +1 -1
  263. package/apps/pwa/out/today/index.txt +22 -22
  264. package/apps/pwa/out/trace/index.html +1 -1
  265. package/apps/pwa/out/trace/index.txt +22 -22
  266. package/apps/pwa/out/vault/index.html +1 -1
  267. package/apps/pwa/out/vault/index.txt +22 -22
  268. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  269. package/apps/pwa/out/workflows/chat-ui/index.txt +22 -22
  270. package/apps/pwa/out/workflows/index.html +1 -1
  271. package/apps/pwa/out/workflows/index.txt +22 -22
  272. package/apps/pwa/out/workspace/index.html +1 -1
  273. package/apps/pwa/out/workspace/index.txt +22 -22
  274. package/apps/pwa/out/worktrees/index.html +1 -1
  275. package/apps/pwa/out/worktrees/index.txt +22 -22
  276. package/graphs/release/release-loop.yaml +6 -2
  277. package/package.json +1 -1
  278. package/plugins/agent-team/agents/research.md +1 -0
  279. package/scripts/ci-typecheck-changed.ts +3 -2
  280. package/scripts/coord-channel-watch.sh +26 -6
  281. package/scripts/coord-role-pack.ts +143 -0
  282. package/scripts/lib/morning-report-options.ts +41 -0
  283. package/scripts/pr-land-extra-remote-gates.ts +49 -0
  284. package/scripts/release-loop/gate-batch-safe.ts +23 -0
  285. package/scripts/release-loop/gate-history.ts +422 -0
  286. package/scripts/release-loop/gate-node.ts +310 -46
  287. package/scripts/release-loop/gate-triage-node.ts +190 -0
  288. package/scripts/release-loop/spawn-lane.ts +68 -0
  289. package/scripts/release-loop/tui-node-checks.ts +23 -0
  290. package/scripts/release-loop/version-node.ts +62 -4
  291. package/scripts/test-deterministic.ts +41 -12
  292. package/scripts/usage-rollup.ts +11 -3
  293. package/src/acp/core-turn-bridge.ts +98 -22
  294. package/src/acp/elanous-extensions.ts +2 -0
  295. package/src/acp/server.ts +2 -0
  296. package/src/agent/ref-grounding.ts +18 -0
  297. package/src/agent-substrate/pr-reviewer.ts +29 -21
  298. package/src/budget/pty-usage-reemit.ts +7 -0
  299. package/src/budget/run-usage-rollup.ts +9 -0
  300. package/src/budget/usage-daily-store.ts +98 -0
  301. package/src/capture/tui-self-report.ts +22 -4
  302. package/src/chat/index.ts +31 -10
  303. package/src/chat/pickers/modal-runtime.ts +1 -0
  304. package/src/chat/pickers/modals.ts +3 -1
  305. package/src/chat/turn-typeahead.ts +123 -16
  306. package/src/cli/dashboard-name-flag.ts +48 -0
  307. package/src/cli/doctor-cli.ts +80 -0
  308. package/src/cli/log-event-names.ts +12 -0
  309. package/src/cli/msg-cli.ts +45 -2
  310. package/src/cli/pr-cli.ts +382 -105
  311. package/src/cli/pr-land-heavy-remote.ts +233 -0
  312. package/src/cli/pr-land-overlap-evidence.ts +104 -5
  313. package/src/cli/pty-takeover-cli.ts +125 -16
  314. package/src/cli/release-cli.ts +44 -2
  315. package/src/cli/remote-resolve.ts +2 -1
  316. package/src/cli/seat-cli.ts +26 -16
  317. package/src/cli/tasks-cli.ts +8 -2
  318. package/src/cli/usage-cli.ts +146 -12
  319. package/src/cli/usage-daily-cli.ts +84 -0
  320. package/src/context-bus/context-now.ts +82 -5
  321. package/src/core-turn/auth-rejected-notice.ts +41 -0
  322. package/src/core-turn/run-core-turn.ts +13 -2
  323. package/src/core-turn/run-goal-loop.ts +17 -1
  324. package/src/core-turn/short-question.ts +45 -12
  325. package/src/core-turn/types.ts +7 -0
  326. package/src/dashboard/acp-active-model.ts +40 -0
  327. package/src/dashboard/auto-compact-runtime.ts +2 -0
  328. package/src/dashboard/boot-banner.ts +80 -0
  329. package/src/dashboard/dashboard-status-lines.ts +11 -0
  330. package/src/dashboard/detail-viewer-runtime.ts +15 -2
  331. package/src/dashboard/event-loop-stall-monitor.ts +4 -0
  332. package/src/dashboard/goal-loop-thinking.ts +16 -0
  333. package/src/dashboard/hitl-boot.ts +9 -4
  334. package/src/dashboard/index.ts +228 -387
  335. package/src/dashboard/input/chat-main-entry-runtime.ts +2 -0
  336. package/src/dashboard/input/chat-main-log-actions.ts +4 -0
  337. package/src/dashboard/input/chat-main-log-command.ts +12 -1
  338. package/src/dashboard/input/chat-main-plain-turn-runtime.ts +172 -3
  339. package/src/dashboard/input/chat-main-session.ts +6 -2
  340. package/src/dashboard/input/chat-main-slash-command.ts +7 -0
  341. package/src/dashboard/input/chat-main-turn.ts +2 -1
  342. package/src/dashboard/input/compact-prepass-recovery.ts +97 -0
  343. package/src/dashboard/input/dashboard-chord-actions.ts +10 -1
  344. package/src/dashboard/input/dashboard-chord-runtime.ts +2 -0
  345. package/src/dashboard/input/external-input-host.ts +45 -0
  346. package/src/dashboard/input/log-fold-binding.ts +18 -0
  347. package/src/dashboard/input/mouse-wiring.ts +17 -4
  348. package/src/dashboard/input/turn-steer-bridge.ts +94 -0
  349. package/src/dashboard/log-click-runtime.ts +5 -3
  350. package/src/dashboard/running-build-status.ts +74 -0
  351. package/src/dashboard/seat-boot-preamble.ts +113 -0
  352. package/src/dashboard/seat-local-instructions.ts +305 -0
  353. package/src/dashboard/slash-runtime/dashboard-handlers.ts +100 -28
  354. package/src/dashboard/slash-runtime/model-choices.ts +35 -0
  355. package/src/dashboard/term-slash-runtime.ts +15 -0
  356. package/src/dashboard/turn-preamble.ts +30 -2
  357. package/src/dashboard/turn-session-layers.ts +176 -0
  358. package/src/dashboard/turn-stream-formatter.ts +14 -6
  359. package/src/dashboard/turn-stream-presentation-applier.ts +8 -0
  360. package/src/domains/release-tool.ts +8 -9
  361. package/src/domains/surface-events.ts +4 -1
  362. package/src/domains/watch-default-scheduler.ts +8 -9
  363. package/src/fold-stack.ts +24 -1
  364. package/src/git-fs/dirty.ts +32 -4
  365. package/src/git-fs/index.ts +43 -1
  366. package/src/graph-runner/runner.ts +1 -0
  367. package/src/harness/harness-gc.ts +32 -5
  368. package/src/index.ts +14 -1
  369. package/src/input/external-input-queue.ts +219 -0
  370. package/src/interactive-terminal-modal.ts +13 -0
  371. package/src/llm/route-decision.ts +25 -0
  372. package/src/llm-stream-retry-display.ts +59 -0
  373. package/src/llm.ts +253 -55
  374. package/src/log-entry.ts +3 -3
  375. package/src/log-pane/search.ts +29 -4
  376. package/src/loops/agent-reply.ts +256 -0
  377. package/src/loops/budget.ts +37 -7
  378. package/src/loops/loop-cli.ts +3 -2
  379. package/src/loops/msg-address.ts +57 -0
  380. package/src/loops/msg-wake.ts +282 -0
  381. package/src/loops/orchestrator/inbox.ts +60 -3
  382. package/src/loops/orchestrator/tick.ts +24 -4
  383. package/src/loops/registry.ts +42 -4
  384. package/src/memory.ts +20 -5
  385. package/src/native-tool-catalog.ts +125 -0
  386. package/src/nexus/api/http-server.ts +5 -0
  387. package/src/nexus/api/ops-api.ts +2 -0
  388. package/src/nexus/api/project-autopsy.ts +127 -0
  389. package/src/nexus/api/terminals.ts +3 -0
  390. package/src/nexus/api/workflow-approvals.ts +2 -0
  391. package/src/nexus/onboarding/first-boot-wizard.ts +56 -2
  392. package/src/oauth/codex-account-store.ts +15 -3
  393. package/src/oauth/codex-billing-route.ts +31 -0
  394. package/src/ops/overview-collect.ts +19 -2
  395. package/src/panes/log-pane.ts +67 -8
  396. package/src/persona/presets.ts +44 -0
  397. package/src/plugins/maker/wizard-generate.ts +6 -4
  398. package/src/preview/terminal.ts +14 -1
  399. package/src/prompt-cache/types.ts +2 -0
  400. package/src/prompt-enhance/enhance.ts +24 -8
  401. package/src/prompt-library/universal-preamble.ts +273 -56
  402. package/src/pty-shell/pty-control-ipc.ts +4 -1
  403. package/src/pty-shell/pty-manifest.ts +77 -5
  404. package/src/pty-shell/registry.ts +19 -2
  405. package/src/pty-shell/tui-run-state.ts +253 -0
  406. package/src/release-loop/light-rc.ts +28 -3
  407. package/src/release-loop/rehearsal.ts +1 -1
  408. package/src/render.ts +5 -1
  409. package/src/seat-loop/seat-report.ts +42 -2
  410. package/src/self-dev/run-supervisor.ts +71 -5
  411. package/src/self-dev/shard-aggregate.ts +2 -0
  412. package/src/self-dev/shard-run.ts +23 -2
  413. package/src/self-health/signatures.ts +132 -0
  414. package/src/self-implement/doctor-visit.ts +118 -0
  415. package/src/self-implement/gate-cli.ts +11 -2
  416. package/src/self-implement/goal-author-decompose.ts +80 -16
  417. package/src/self-implement/goal-author.ts +114 -72
  418. package/src/self-implement/goal-authoring-grounding.ts +1 -1
  419. package/src/self-implement/goal-file-name.ts +65 -0
  420. package/src/self-implement/ground-goal.ts +2 -1
  421. package/src/self-implement/host-regate.ts +14 -0
  422. package/src/self-implement/review-mustfix-class.ts +115 -0
  423. package/src/self-implement/run-ledger.ts +111 -7
  424. package/src/self-implement/running-runs.ts +10 -6
  425. package/src/self-implement/self-implement-runtime.ts +32 -0
  426. package/src/session/pending-input.ts +62 -11
  427. package/src/session-runtime/index.ts +7 -1
  428. package/src/skills/tools/ops-ledger.ts +707 -0
  429. package/src/skills/tools/persistent-grounding.ts +47 -7
  430. package/src/skills/tools/shell.ts +117 -1
  431. package/src/status/bar.ts +32 -2
  432. package/src/status/status-provider-info.ts +58 -0
  433. package/src/task-agent/rejudge-on-head.ts +4 -1
  434. package/src/task-agent/remote-rejudge-bind.ts +34 -5
  435. package/src/task-agent/repair-cycle.ts +13 -0
  436. package/src/task-orchestrator/surfaces/kubectl-transient-retry.ts +51 -0
  437. package/src/task-orchestrator/surfaces/pod-command-job.ts +63 -7
  438. package/src/task-orchestrator/surfaces/pod-install-slots.ts +6 -11
  439. package/src/task-orchestrator/surfaces/pod-mirror-seed.ts +76 -0
  440. package/src/task-orchestrator/surfaces/self-implement-pod.ts +107 -33
  441. package/src/terminal/session-registry.ts +6 -0
  442. package/src/thinking-line.ts +12 -3
  443. package/src/tool-runtime/index.ts +4 -0
  444. package/src/tool-runtime/ops-ledger-runtimes.ts +84 -0
  445. package/src/tool-runtime/ref-consult-runtime.ts +17 -2
  446. package/src/tool-runtime/run-shell-runtime.ts +4 -1
  447. package/src/tool-runtime/self-cognition-runtimes.ts +5 -1
  448. package/src/tui.ts +5 -0
  449. package/src/user-config.ts +54 -6
  450. package/src/ux-sim/fake-llm.ts +29 -0
  451. package/src/ux-sim/in-process-cli.ts +175 -0
  452. package/src/version/packed-revision.json +1 -1
  453. package/apps/pwa/out/_next/static/chunks/1027.a0f04663d24c2779.js +0 -1
  454. package/apps/pwa/out/_next/static/chunks/1038.676007ae505822e7.js +0 -1
  455. package/apps/pwa/out/_next/static/chunks/1113.a37eadf7f740d955.js +0 -1
  456. package/apps/pwa/out/_next/static/chunks/112-fa7c526c20ce1405.js +0 -1
  457. package/apps/pwa/out/_next/static/chunks/1144.5fa1fa1d48dbcd12.js +0 -36
  458. package/apps/pwa/out/_next/static/chunks/1146.80d15ea7c6e6ee95.js +0 -1
  459. package/apps/pwa/out/_next/static/chunks/1157.f08bf2b70915e176.js +0 -148
  460. package/apps/pwa/out/_next/static/chunks/119b405e.8fdd0e44d1ff37aa.js +0 -1
  461. package/apps/pwa/out/_next/static/chunks/1296.04560d98e73fbf51.js +0 -1
  462. package/apps/pwa/out/_next/static/chunks/1314-f604ba013ec535b0.js +0 -1
  463. package/apps/pwa/out/_next/static/chunks/1454-29d1d773d5996a49.js +0 -1
  464. package/apps/pwa/out/_next/static/chunks/1464.f3209af0d8ae4ff2.js +0 -1
  465. package/apps/pwa/out/_next/static/chunks/1729-d73dd25e564679d4.js +0 -1
  466. package/apps/pwa/out/_next/static/chunks/1843.5924c24295243261.js +0 -27
  467. package/apps/pwa/out/_next/static/chunks/1987.e28149724b92918b.js +0 -1
  468. package/apps/pwa/out/_next/static/chunks/2066-5ca18ffa5a4be68b.js +0 -1
  469. package/apps/pwa/out/_next/static/chunks/2240.d10a66695155fd93.js +0 -1
  470. package/apps/pwa/out/_next/static/chunks/2391.e2cbc98d4abbb41a.js +0 -1
  471. package/apps/pwa/out/_next/static/chunks/2528.3868070ef1be69f9.js +0 -24
  472. package/apps/pwa/out/_next/static/chunks/2566-734cb83bbd405886.js +0 -1
  473. package/apps/pwa/out/_next/static/chunks/2697.76ca2ac3efef6f3b.js +0 -1
  474. package/apps/pwa/out/_next/static/chunks/275.0e6bad414729bfa0.js +0 -32
  475. package/apps/pwa/out/_next/static/chunks/2803-33bdae771855a8d1.js +0 -1
  476. package/apps/pwa/out/_next/static/chunks/3143.257997a5f1ed79df.js +0 -34
  477. package/apps/pwa/out/_next/static/chunks/3259-86f3be56e43eaf6a.js +0 -1
  478. package/apps/pwa/out/_next/static/chunks/3280-e177c33bfbdcfb0a.js +0 -1
  479. package/apps/pwa/out/_next/static/chunks/3294-2b6a6d45a46a6c1c.js +0 -1
  480. package/apps/pwa/out/_next/static/chunks/3309.364573ceedbdfd5f.js +0 -1
  481. package/apps/pwa/out/_next/static/chunks/3522.758840fc5e7fe630.js +0 -287
  482. package/apps/pwa/out/_next/static/chunks/3525-a7c989c1a661e880.js +0 -1
  483. package/apps/pwa/out/_next/static/chunks/3694.b1a66387756458c0.js +0 -1
  484. package/apps/pwa/out/_next/static/chunks/370.124f9e678a76fc01.js +0 -1
  485. package/apps/pwa/out/_next/static/chunks/3797-9643105335e660fe.js +0 -1
  486. package/apps/pwa/out/_next/static/chunks/4084.15ecaf4240bd9e77.js +0 -286
  487. package/apps/pwa/out/_next/static/chunks/4089-b3382b8843114eee.js +0 -1
  488. package/apps/pwa/out/_next/static/chunks/4293.928a8d573c16aab7.js +0 -1
  489. package/apps/pwa/out/_next/static/chunks/4402.f9238a3b18a7bd43.js +0 -1
  490. package/apps/pwa/out/_next/static/chunks/4490-9b090b0f9427f902.js +0 -1
  491. package/apps/pwa/out/_next/static/chunks/4548.13502d0ca3b4f862.js +0 -8
  492. package/apps/pwa/out/_next/static/chunks/4599-548bc96cda44a5a7.js +0 -1
  493. package/apps/pwa/out/_next/static/chunks/4625.206574e33a9e7ae8.js +0 -104
  494. package/apps/pwa/out/_next/static/chunks/4862-392c9a71f0d8dfb4.js +0 -1
  495. package/apps/pwa/out/_next/static/chunks/5054.2906d1b02542edc5.js +0 -149
  496. package/apps/pwa/out/_next/static/chunks/5102-c822bbbee5a022a4.js +0 -1
  497. package/apps/pwa/out/_next/static/chunks/5194-8c93f2e7e4b6f717.js +0 -1
  498. package/apps/pwa/out/_next/static/chunks/5305-bacd7eca0b9a5848.js +0 -1
  499. package/apps/pwa/out/_next/static/chunks/5311.9071ee3f44fd7ff5.js +0 -1
  500. package/apps/pwa/out/_next/static/chunks/5369.9f34353442daa421.js +0 -1
  501. package/apps/pwa/out/_next/static/chunks/589-49d730cb8138b397.js +0 -1
  502. package/apps/pwa/out/_next/static/chunks/5904-264a6412ae3c9028.js +0 -1
  503. package/apps/pwa/out/_next/static/chunks/5980.728531d5c566535c.js +0 -1
  504. package/apps/pwa/out/_next/static/chunks/599-56f2c0a5cc4a7295.js +0 -1
  505. package/apps/pwa/out/_next/static/chunks/6011.f525002e21bef0ac.js +0 -23
  506. package/apps/pwa/out/_next/static/chunks/6132.4381ab93683f1acf.js +0 -1
  507. package/apps/pwa/out/_next/static/chunks/6149.2e698635e454d8f6.js +0 -1
  508. package/apps/pwa/out/_next/static/chunks/6356-0afafc4230cf9767.js +0 -1
  509. package/apps/pwa/out/_next/static/chunks/6406.64756073f7df35b8.js +0 -77
  510. package/apps/pwa/out/_next/static/chunks/6479-16e62aedafa0e310.js +0 -1
  511. package/apps/pwa/out/_next/static/chunks/6599.b5246b46a2453329.js +0 -64
  512. package/apps/pwa/out/_next/static/chunks/6610.5c26eec011565acb.js +0 -1
  513. package/apps/pwa/out/_next/static/chunks/666.37d18474edc1c552.js +0 -2
  514. package/apps/pwa/out/_next/static/chunks/6904.a0b5b1ed4f2d2c20.js +0 -1
  515. package/apps/pwa/out/_next/static/chunks/7247-1f4aba94aba50d9f.js +0 -1
  516. package/apps/pwa/out/_next/static/chunks/7274-e71a7c5b7760cd02.js +0 -1
  517. package/apps/pwa/out/_next/static/chunks/7290.1fcaeef3adb5d0d4.js +0 -1
  518. package/apps/pwa/out/_next/static/chunks/7477-2c64e42760f82f33.js +0 -1
  519. package/apps/pwa/out/_next/static/chunks/7505-47002b76ff1aef6c.js +0 -1
  520. package/apps/pwa/out/_next/static/chunks/7600-11884ca4da68e5d9.js +0 -1
  521. package/apps/pwa/out/_next/static/chunks/7607.40d8bb3689697ccb.js +0 -62
  522. package/apps/pwa/out/_next/static/chunks/7752.5cbdd0b433c54af9.js +0 -1
  523. package/apps/pwa/out/_next/static/chunks/7763.f51fcc19ca1414ec.js +0 -1
  524. package/apps/pwa/out/_next/static/chunks/7785.846140c859b1adf6.js +0 -1
  525. package/apps/pwa/out/_next/static/chunks/7807-a0fdac6393e0bf36.js +0 -1
  526. package/apps/pwa/out/_next/static/chunks/7837-20a63b4b7e9342b1.js +0 -1
  527. package/apps/pwa/out/_next/static/chunks/800.7815414cf280545d.js +0 -1
  528. package/apps/pwa/out/_next/static/chunks/8085-1e5fce59500a2cc2.js +0 -1
  529. package/apps/pwa/out/_next/static/chunks/8100.415f2105faa63e97.js +0 -1
  530. package/apps/pwa/out/_next/static/chunks/8290.701aa42ed13aa767.js +0 -226
  531. package/apps/pwa/out/_next/static/chunks/83a80514-b897b64df43ce108.js +0 -1
  532. package/apps/pwa/out/_next/static/chunks/8444.d9c74214a3145a43.js +0 -93
  533. package/apps/pwa/out/_next/static/chunks/8569.98c915534928c7f9.js +0 -24
  534. package/apps/pwa/out/_next/static/chunks/8591.b1c7f876e5ec7cfb.js +0 -1
  535. package/apps/pwa/out/_next/static/chunks/8715-f63756021d3ab989.js +0 -1
  536. package/apps/pwa/out/_next/static/chunks/8879.776c2ec7732aa114.js +0 -115
  537. package/apps/pwa/out/_next/static/chunks/8881.ddca15b3c82c490c.js +0 -1
  538. package/apps/pwa/out/_next/static/chunks/8946.5da5c87f32a2e1a8.js +0 -41
  539. package/apps/pwa/out/_next/static/chunks/9117.080b9b75be90e14d.js +0 -74
  540. package/apps/pwa/out/_next/static/chunks/9167.f3ecb28f367d6e69.js +0 -94
  541. package/apps/pwa/out/_next/static/chunks/9224.66095370ee28c93b.js +0 -1
  542. package/apps/pwa/out/_next/static/chunks/9238-0682b013c83d6449.js +0 -1
  543. package/apps/pwa/out/_next/static/chunks/9449.d3ed795da4befb1c.js +0 -1
  544. package/apps/pwa/out/_next/static/chunks/949.1e7d45ccb71580aa.js +0 -90
  545. package/apps/pwa/out/_next/static/chunks/9638-d268329f2c6f4f8d.js +0 -1
  546. package/apps/pwa/out/_next/static/chunks/9842-d6644eb53d3dc6bf.js +0 -1
  547. package/apps/pwa/out/_next/static/chunks/9863.94ca3263e760696e.js +0 -1
  548. package/apps/pwa/out/_next/static/chunks/9938.b23e4d4dfa0114cd.js +0 -79
  549. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-d9babd8795f396a5.js +0 -1
  550. package/apps/pwa/out/_next/static/chunks/app/approvals/page-5ab1e47978577c5e.js +0 -1
  551. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-24453f6a302816b4.js +0 -1
  552. package/apps/pwa/out/_next/static/chunks/app/board/page-6c131d30bb1cf871.js +0 -1
  553. package/apps/pwa/out/_next/static/chunks/app/bots/page-dc0772b11861af51.js +0 -1
  554. package/apps/pwa/out/_next/static/chunks/app/chat/page-5159dc8752c6cd29.js +0 -1
  555. package/apps/pwa/out/_next/static/chunks/app/consult/page-c5a2478861c08b87.js +0 -1
  556. package/apps/pwa/out/_next/static/chunks/app/control/page-f722a9dec084e08b.js +0 -1
  557. package/apps/pwa/out/_next/static/chunks/app/decisions/page-256ffd365d32e100.js +0 -1
  558. package/apps/pwa/out/_next/static/chunks/app/design-check/page-e0de78ae7b99f01c.js +0 -1
  559. package/apps/pwa/out/_next/static/chunks/app/editor/page-cfbdc44b708d9801.js +0 -1
  560. package/apps/pwa/out/_next/static/chunks/app/exec/page-4c741eb760f2f77c.js +0 -1
  561. package/apps/pwa/out/_next/static/chunks/app/field/page-e9ba98f5f1440a21.js +0 -1
  562. package/apps/pwa/out/_next/static/chunks/app/healthz/route-d9babd8795f396a5.js +0 -1
  563. package/apps/pwa/out/_next/static/chunks/app/inside/page-dafc901bb1b72b5f.js +0 -1
  564. package/apps/pwa/out/_next/static/chunks/app/intake/page-2f6f303fa114ec24.js +0 -1
  565. package/apps/pwa/out/_next/static/chunks/app/layout-1634081c5272006c.js +0 -1
  566. package/apps/pwa/out/_next/static/chunks/app/live/page-ced0bcfc6542b3fc.js +0 -1
  567. package/apps/pwa/out/_next/static/chunks/app/live-run/page-bb1f05cd51c38944.js +0 -1
  568. package/apps/pwa/out/_next/static/chunks/app/market/page-db069b48a59c8c00.js +0 -1
  569. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-f736324afa2117c1.js +0 -1
  570. package/apps/pwa/out/_next/static/chunks/app/not-found-435f5e2faf02bc01.js +0 -1
  571. package/apps/pwa/out/_next/static/chunks/app/observatory/page-497e0eedf20e7890.js +0 -1
  572. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-a8d28fdf995e16ea.js +0 -1
  573. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-8966452228753c5e.js +0 -1
  574. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fd5d18656cb432b6.js +0 -1
  575. package/apps/pwa/out/_next/static/chunks/app/outputs/page-5663779cb1a37609.js +0 -1
  576. package/apps/pwa/out/_next/static/chunks/app/page-66a67eb19ebd976b.js +0 -1
  577. package/apps/pwa/out/_next/static/chunks/app/reflection/page-3b492aa78cf3c4a6.js +0 -1
  578. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-c71267e7681da982.js +0 -1
  579. package/apps/pwa/out/_next/static/chunks/app/sessions/page-a21d1e1797172692.js +0 -1
  580. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-cb249e81ed339318.js +0 -1
  581. package/apps/pwa/out/_next/static/chunks/app/settings/page-781cfc5114e097da.js +0 -1
  582. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-478157214db6a023.js +0 -1
  583. package/apps/pwa/out/_next/static/chunks/app/setup/layout-d9babd8795f396a5.js +0 -1
  584. package/apps/pwa/out/_next/static/chunks/app/setup/page-86141f12cf090b7f.js +0 -1
  585. package/apps/pwa/out/_next/static/chunks/app/share/page-7256c73bb1c36751.js +0 -1
  586. package/apps/pwa/out/_next/static/chunks/app/showroom/page-5c738ca7adef3de5.js +0 -1
  587. package/apps/pwa/out/_next/static/chunks/app/tasks/page-0138c8091ec17224.js +0 -1
  588. package/apps/pwa/out/_next/static/chunks/app/term/page-cc2f24f16d85e735.js +0 -1
  589. package/apps/pwa/out/_next/static/chunks/app/today/page-979d318a534e92da.js +0 -1
  590. package/apps/pwa/out/_next/static/chunks/app/trace/page-182d394f7e6e096b.js +0 -1
  591. package/apps/pwa/out/_next/static/chunks/app/vault/page-21050928a697ed7a.js +0 -1
  592. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-44b9d807005a9030.js +0 -1
  593. package/apps/pwa/out/_next/static/chunks/app/workflows/page-601fb77340e63c9a.js +0 -1
  594. package/apps/pwa/out/_next/static/chunks/app/workspace/page-75d3fb5d47af0edf.js +0 -1
  595. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-11bf9e5725a72c22.js +0 -1
  596. package/apps/pwa/out/_next/static/chunks/dcf24383-2f82e35f2d827393.js +0 -1
  597. package/apps/pwa/out/_next/static/chunks/e117f801.e92bf10242653497.js +0 -1
  598. package/apps/pwa/out/_next/static/chunks/e87d89b9.2e71c0ae475d28a1.js +0 -122
  599. package/apps/pwa/out/_next/static/chunks/framework-bf135b997155e90e.js +0 -1
  600. package/apps/pwa/out/_next/static/chunks/main-5571537543bea91c.js +0 -1
  601. package/apps/pwa/out/_next/static/chunks/main-app-25c51c7df7f3a442.js +0 -1
  602. package/apps/pwa/out/_next/static/chunks/pages/_app-e3b2c1f5d82abd65.js +0 -1
  603. package/apps/pwa/out/_next/static/chunks/pages/_error-083f2e23e9bc3641.js +0 -1
  604. package/apps/pwa/out/_next/static/chunks/webpack-e94d22b7a028217b.js +0 -1
  605. package/src/dashboard/bench-slash-runtime.ts +0 -40
  606. package/src/dashboard/input/search-modal-router.ts +0 -9
  607. package/src/dashboard/modals/pane-key-router.ts +0 -27
  608. package/src/dashboard/view-slash-runtime.ts +0 -48
  609. /package/apps/pwa/out/_next/static/{y1ltt7oCZxVpC6zVPhZ2O → cIpv5nU9AycwYWZI9H589}/_ssgManifest.js +0 -0
package/src/chat/index.ts CHANGED
@@ -211,6 +211,8 @@ export interface TextInputHost {
211
211
  * exactly as if the user had typed Enter. Reset to undefined on
212
212
  * textInput return. */
213
213
  submit?: (request?: string | TextInputExternalSubmitRequest) => void;
214
+ /** Live buffer text while textInput is mounted; undefined after it returns. */
215
+ getBufferText?: () => string;
214
216
  };
215
217
  onLinesChange?: (visibleLines: number) => void;
216
218
  /** Preferred host seam for input-global shortcuts. textInput emits a
@@ -230,6 +232,7 @@ export interface ResolvedTextInputHost {
230
232
  repaint: () => void;
231
233
  insertAtCursor?: (text: string) => void;
232
234
  submit?: (request?: string | TextInputExternalSubmitRequest) => void;
235
+ getBufferText?: () => string;
233
236
  };
234
237
  onLinesChange?: (visibleLines: number) => void;
235
238
  dispatchGlobalAction?: (action: TextInputGlobalAction) => void | Promise<void>;
@@ -473,7 +476,7 @@ export const SLASH_COMMANDS: SlashCommand[] = [
473
476
  { name: 'sync', aliases: ['s'], description: 'Enter sync mode' },
474
477
  { name: 'plugin', aliases: ['plugins'], description: 'Manage plugins', subcommands: ['list', 'activate', 'deactivate', 'reload'] },
475
478
  { name: 'widget', aliases: ['widgets'], description: 'Manage widgets', subcommands: ['list', 'reload', 'instances'] },
476
- { name: 'log', aliases: [], description: 'Chat Log controls — size / clear / filter / search / freeze / solo / turn / fold / help', subcommands: ['size', 'clear', 'filter', 'search', 'freeze', 'solo', 'turn', 'fold', 'help'] },
479
+ { name: 'log', aliases: [], description: 'Chat Log controls — size / clear / filter / search / freeze / solo / turn / fold / unfold / help', subcommands: ['size', 'clear', 'filter', 'search', 'freeze', 'solo', 'turn', 'fold', 'unfold', 'help'] },
477
480
  { name: 'loops', aliases: [], description: '루프와 크론 상태 표 — /loops [owner]' },
478
481
  { name: 'board', aliases: [], description: '판 체크리스트 — /board [판]' },
479
482
  { name: 'memory', aliases: ['mem'], description: 'Memory ops — list / show / search / add / delete (see `elanous memory --help`)', subcommands: ['list', 'show', 'search', 'add', 'delete', 'index'] },
@@ -496,7 +499,7 @@ export const SLASH_COMMANDS: SlashCommand[] = [
496
499
  { name: 'telegram', aliases: ['tg'], description: 'Telegram bot — status / pair / send / pause / stop / attach / detach / sessions', subcommands: ['status', 'pair', 'setup', 'send', 'pause', 'stop', 'attach', 'detach', 'sessions'] },
497
500
  { name: 'tablet', aliases: [], description: 'Tablet mode — collapse layout to log + input', subcommands: ['on', 'off', 'toggle', 'auto', 'status', 'browser-preview', 'bp'] },
498
501
  { name: 'surface', aliases: [], description: 'Surface control — open a pane/catalog launcher (/surface catalog · browser · preview · log · scratch · obsidian · skill) OR set a preferred LLM surface (/surface coding-agent · research-agent · control-agent · ops-agent · … · clear · status)', subcommands: ['catalog', 'browser', 'preview', 'browser-preview', 'log', 'scratch', 'obsidian', 'skill', 'skill-file', 'agents', 'coding-agent', 'coding-chat', 'research-agent', 'research-chat', 'control-agent', 'ops-ui-agent', 'ops-fleet-agent', 'ops-agent', 'clear', 'status'] },
499
- { name: 'term', aliases: ['terminal'], description: 'Interactive terminal modal — spawn / list / attach / detach / switch / kill / snapshot / resume', subcommands: ['spawn', 'list', 'attach', 'detach', 'switch', 'kill', 'snapshot', 'resume'] },
502
+ { name: 'term', aliases: ['terminal'], description: 'Interactive terminal modal — new / list / attach / detach / switch / kill / snapshot / resume', subcommands: ['new', 'list', 'attach', 'detach', 'switch', 'kill', 'snapshot', 'resume'] },
500
503
  { name: 'claude', aliases: [], description: 'Spawn claude-code CLI in a terminal modal' },
501
504
  { name: 'codex', aliases: [], description: 'Spawn codex CLI in a terminal modal' },
502
505
  { name: 'gemini', aliases: [], description: 'Spawn gemini CLI in a terminal modal' },
@@ -693,6 +696,7 @@ export async function textInput(opts: {
693
696
  getRow?: () => number;
694
697
  col: number;
695
698
  width: number;
699
+ getWidth?: () => number;
696
700
  maxLines?: number;
697
701
  prompt?: string;
698
702
  placeholder?: string;
@@ -893,6 +897,7 @@ export async function textInput(opts: {
893
897
  host?: TextInputHost;
894
898
  }): Promise<InputResult> {
895
899
  const { row: initialRow, col, width, maxLines = 5, prompt = '\u276f ', placeholder = '' } = opts;
900
+ const getWidth = (): number => opts.getWidth?.() ?? width;
896
901
  const getRow = (): number => opts.getRow?.() ?? initialRow;
897
902
  const row = getRow();
898
903
  // P2.1: report the input's top row so writeTerminal scopes its
@@ -985,7 +990,7 @@ export async function textInput(opts: {
985
990
  picker,
986
991
  getBufferView: bufView,
987
992
  writeTerminal,
988
- getBounds: () => ({ row: getRow(), col, width, height: 1 }),
993
+ getBounds: () => ({ row: getRow(), col, width: getWidth(), height: 1 }),
989
994
  getInputZoneHeight: () => Math.min(lines.length, maxLines),
990
995
  onDispatchResult: async (dispatched) => processPickerDispatch(dispatched),
991
996
  });
@@ -1129,7 +1134,7 @@ export async function textInput(opts: {
1129
1134
  setInputPromptStartRow(row);
1130
1135
  const promptStr = C.accent(prompt);
1131
1136
  const promptW = visibleWidth(prompt);
1132
- const textW = width - promptW - 1;
1137
+ const textW = Math.max(0, getWidth() - promptW - 1);
1133
1138
  const numLines = lines.length;
1134
1139
  // Visible window: at most `maxLines` rows on screen, but the buffer
1135
1140
  // (`lines`) may exceed that. `firstVisibleIdx` keeps the cursor's
@@ -1194,7 +1199,7 @@ export async function textInput(opts: {
1194
1199
  prevDrawnLines = visibleLines;
1195
1200
 
1196
1201
  if (ctrlCHint) {
1197
- writeTerminal(ansi.moveTo(row + 2, col) + '\x1b[2K' + C.muted(truncate(ctrlCHint, width)));
1202
+ writeTerminal(ansi.moveTo(row + 2, col) + '\x1b[2K' + C.muted(truncate(ctrlCHint, getWidth())));
1198
1203
  ctrlCHintPainted = true;
1199
1204
  } else if (ctrlCHintPainted) {
1200
1205
  writeTerminal(ansi.moveTo(row + 2, col) + '\x1b[2K');
@@ -1248,7 +1253,7 @@ export async function textInput(opts: {
1248
1253
  };
1249
1254
 
1250
1255
  const pickerModalFamily = pickerModalRuntime.createFamily({
1251
- bounds: { row: getRow(), col, width, height: 1 },
1256
+ bounds: { row: getRow(), col, width: getWidth(), height: 1 },
1252
1257
  sources: createChatPickerFamilySources({
1253
1258
  // 명시 K — createChatPickerFamilySource<K> 의 K 를 pin. getItems 반환이
1254
1259
  // conditional 타입 ChatPickerItems<K> 라 역추론이 K 를 union(ChatPickerKind)
@@ -1282,7 +1287,7 @@ export async function textInput(opts: {
1282
1287
  pickerModalRuntime.syncFamily({
1283
1288
  activeKind: activePickerKind(),
1284
1289
  clearRows: MAX_PICKER + 3,
1285
- debugLayout: { row, col, width },
1290
+ debugLayout: { row: getRow(), col, width: getWidth() },
1286
1291
  family: pickerModalFamily,
1287
1292
  });
1288
1293
  };
@@ -1295,7 +1300,7 @@ export async function textInput(opts: {
1295
1300
  const searchRow = row;
1296
1301
  const promptStr = C.accent(prompt);
1297
1302
  const promptW = visibleWidth(prompt);
1298
- const textW = width - promptW - 1;
1303
+ const textW = Math.max(0, getWidth() - promptW - 1);
1299
1304
  const match = currentReverseSearchResult();
1300
1305
  const status = match ? 'reverse-i-search' : 'failed reverse-i-search';
1301
1306
  const prefixRaw = `(${status})\`${reverseSearch.query}': `;
@@ -1375,6 +1380,8 @@ export async function textInput(opts: {
1375
1380
  const drawAll = renderActions.repaintUserMutation;
1376
1381
  let pendingExternalSubmitSource: InputSourceRef | undefined;
1377
1382
  const finalizeInput = (result: InputResult): InputResult => {
1383
+ // 외부 주입 라우터가 «composer 가 안 떠 있다»를 알 수 있게 내린다.
1384
+ if (hostControl) hostControl.getBufferText = undefined;
1378
1385
  clearPicker();
1379
1386
  writeTerminal(endTextInputCursor(opts.cursorSink));
1380
1387
  return result;
@@ -1420,17 +1427,30 @@ export async function textInput(opts: {
1420
1427
  // Enter into the readKey queue so the main loop returns the
1421
1428
  // submit outcome exactly like a typed Enter. Reset to
1422
1429
  // undefined on textInput return.
1430
+ hostControl.getBufferText = () => lines.join('\n');
1423
1431
  hostControl.submit = (request?: string | TextInputExternalSubmitRequest) => {
1424
1432
  const nextText = typeof request === 'string' ? request : request?.text;
1433
+ // 합성 Enter 가 못 들어가면 버퍼·커서·출처를 «통째로» 되돌린다 — 외부 글이 composer 에 남아
1434
+ // 사용자 입력과 섞이거나 대기열이 다시 보내 중복되지 않게(원자적 제출).
1435
+ const before = { lines: [...lines], lineIdx, colIdx, source: pendingExternalSubmitSource };
1425
1436
  pendingExternalSubmitSource = typeof request === 'string' ? undefined : request?.source;
1426
1437
  if (nextText !== undefined) {
1427
1438
  const next = nextText.split('\n');
1428
1439
  lines = next.length > 0 ? next : [''];
1429
1440
  lineIdx = lines.length - 1;
1430
1441
  colIdx = lines[lineIdx]!.length;
1431
- drawAll();
1432
1442
  }
1433
- injectKey({ name: 'enter', ctrl: false, shift: false });
1443
+ // 반환값 = 합성 Enter 가 키 큐에 들어갔나(raw 모드가 아니면 false) — 외부 입력 대기열이 유실을 막는 데 쓴다.
1444
+ const accepted = injectKey({ name: 'enter', ctrl: false, shift: false });
1445
+ if (!accepted) {
1446
+ lines = before.lines; lineIdx = before.lineIdx; colIdx = before.colIdx;
1447
+ pendingExternalSubmitSource = before.source;
1448
+ }
1449
+ // 렌더 실패가 수락 결과를 뒤집으면 이미 큐에 든 Enter 와 대기열이 같은 글을 두 번 보낸다 — 삼킨다.
1450
+ if (nextText !== undefined) {
1451
+ try { drawAll(); } catch (error) { debug.log('chat.input', 'external-submit-draw-failed', { accepted, error: String(error) }); }
1452
+ }
1453
+ return accepted;
1434
1454
  };
1435
1455
  }
1436
1456
 
@@ -1650,6 +1670,7 @@ export async function textInput(opts: {
1650
1670
  // Host owns the focus swap; we return gotoPane:true so the
1651
1671
  // input loop exits cleanly and the dashboard's pane dispatcher
1652
1672
  // picks up the keys.
1673
+ if (hostControl) hostControl.getBufferText = undefined;
1653
1674
  return { text: '', submitted: false, gotoPane: true };
1654
1675
  }
1655
1676
  drawAll();
@@ -145,6 +145,7 @@ export function createChatPickerModalRuntime(deps: ChatPickerModalRuntimeDeps):
145
145
  maxVisible: spec.maxVisible,
146
146
  getInputZoneHeight: deps.getInputZoneHeight,
147
147
  width: deps.getBounds().width,
148
+ getWidth: () => deps.getBounds().width,
148
149
  onKey: makePickerOnKey(kind),
149
150
  onRowClick: makePickerOnRowClick(kind),
150
151
  });
@@ -107,6 +107,7 @@ export interface ChatPickerModalBindings {
107
107
  maxVisible: number;
108
108
  getInputZoneHeight: () => number;
109
109
  width: number;
110
+ getWidth?: () => number;
110
111
  onKey?: PickerOnKey;
111
112
  onRowClick?: PickerOnRowClick;
112
113
  }
@@ -122,6 +123,7 @@ type FramedPickerSpec<T> = {
122
123
  maxVisible: number;
123
124
  getInputZoneHeight: () => number;
124
125
  width: number;
126
+ getWidth?: () => number;
125
127
  onKey?: PickerOnKey;
126
128
  onRowClick?: PickerOnRowClick;
127
129
  };
@@ -140,7 +142,7 @@ function createFramedPickerModal<T>(spec: FramedPickerSpec<T>): ModalSurface {
140
142
  if (visibleCount <= 0) return null;
141
143
  const height = visibleCount + 3;
142
144
  const row = bottomRow - height + 1;
143
- return { row, col: spec.bounds.col, width: spec.width, height, startIdx, visibleCount };
145
+ return { row, col: spec.bounds.col, width: spec.getWidth?.() ?? spec.width, height, startIdx, visibleCount };
144
146
  };
145
147
 
146
148
  /** Phase 4.5a (substrate Occam · §4-pre.7 · 2026-05-03) — update
@@ -13,6 +13,55 @@ export interface TurnTypeaheadState {
13
13
  buffer: string;
14
14
  /** Enter 한 입력들. 턴 종료 뒤 입력 순서대로 자동 제출한다. */
15
15
  queuedSubmissions: string[];
16
+ /**
17
+ * `queuedSubmissions` 와 같은 순서의 짝 — 턴 «안» 주입 레지스트리(`session/pending-input`) 항목 id.
18
+ * `null`(또는 칸이 모자람) = 레지스트리에 안 넣은 항목. ⭐ 이 id 로 배수·되꺼내기·턴 종료 승격을
19
+ * «짝지어» 떨어낸다 — 위치·문자열로 짝지으면 같은 발화가 두 번 들어간다(10-14 중복 수리).
20
+ */
21
+ queuedPendingIds?: (string | null)[];
22
+ }
23
+
24
+ /** 큐 길이에 맞춘 id 짝(모자라면 null 로 채운다). 순수. */
25
+ export function turnTypeaheadPendingIds(state: TurnTypeaheadState): (string | null)[] {
26
+ const ids = state.queuedPendingIds ?? [];
27
+ return state.queuedSubmissions.map((_, i) => ids[i] ?? null);
28
+ }
29
+
30
+ function presentIds(ids: readonly (string | null)[]): string[] {
31
+ return ids.filter((id): id is string => typeof id === 'string');
32
+ }
33
+
34
+ /** 짝이 하나도 없으면 칸을 아예 안 둔다(`undefined` 키도 없이) — 레지스트리를 안 쓰는 경로의 상태 모양을 옛 그대로 둔다. */
35
+ function idsField(ids: readonly (string | null)[]): { queuedPendingIds?: (string | null)[] } {
36
+ return ids.some(id => id !== null) ? { queuedPendingIds: [...ids] } : {};
37
+ }
38
+
39
+ /** 상태에서 id 짝 칸을 뗀다 — `idsField` 와 함께 써서 옛 짝이 스프레드로 살아남지 않게 한다. */
40
+ function withoutIds(state: TurnTypeaheadState): TurnTypeaheadState {
41
+ if (!('queuedPendingIds' in state)) return state;
42
+ const { queuedPendingIds: _ids, ...rest } = state;
43
+ return rest;
44
+ }
45
+
46
+ /** 큐 index 번째 항목에 레지스트리 id 를 단다. 순수. 범위 밖이면 그대로. */
47
+ export function attachTurnTypeaheadPendingId(
48
+ state: TurnTypeaheadState,
49
+ index: number,
50
+ id: string,
51
+ ): TurnTypeaheadState {
52
+ if (index < 0 || index >= state.queuedSubmissions.length) return state;
53
+ const ids = turnTypeaheadPendingIds(state);
54
+ ids[index] = id;
55
+ return { ...withoutIds(state), ...idsField(ids) };
56
+ }
57
+
58
+ /**
59
+ * 턴 «안» 주입(steer) 대상인가. ⛔ 슬래시는 뺀다 — 명령은 턴이 끝난 뒤 FIFO 로만 실행한다
60
+ * (모델에 `/…` 문면이 발화로 들어가면 명령이 아니라 잡음이다 · Claude Code 도 같은 경계에서 뺀다).
61
+ */
62
+ export function isTurnTypeaheadSteerable(text: string): boolean {
63
+ const trimmed = text.trim();
64
+ return trimmed.length > 0 && !trimmed.startsWith('/');
16
65
  }
17
66
 
18
67
  export function createTurnTypeaheadState(): TurnTypeaheadState {
@@ -38,6 +87,8 @@ export type TurnTypeaheadKeyResult = {
38
87
  immediateSubmission?: string;
39
88
  /** 비어 있지 않은 Enter 입력의 제출 경로 분류. */
40
89
  submissionDisposition?: 'immediate' | 'fifo';
90
+ /** 큐에서 «다른 길»로 빠진 항목의 레지스트리 id — 호출측이 레지스트리에서도 떨어낸다(되꺼내기). */
91
+ releasedPendingIds?: string[];
41
92
  };
42
93
 
43
94
  /** 등록소 소유의 관측용 표시 조회. 이름·문법·실행 정책은 이 순수 판정기에 두지 않는다. */
@@ -82,7 +133,11 @@ export function applyTurnTypeaheadKey(
82
133
  // A registry lookup failure must preserve the typed input on the existing FIFO path.
83
134
  }
84
135
  return {
85
- state: { buffer: '', queuedSubmissions: [...state.queuedSubmissions, state.buffer] },
136
+ state: {
137
+ buffer: '',
138
+ queuedSubmissions: [...state.queuedSubmissions, state.buffer],
139
+ ...idsField([...turnTypeaheadPendingIds(state), null]),
140
+ },
86
141
  consumed: true,
87
142
  changed: true,
88
143
  submissionDisposition: 'fifo',
@@ -94,10 +149,16 @@ export function applyTurnTypeaheadKey(
94
149
  if (key.name === 'up' && key.ctrl && !key.alt && !key.shift && !key.meta) {
95
150
  const recalled = state.queuedSubmissions.at(-1);
96
151
  if (recalled === undefined) return { state, consumed: false, changed: false };
152
+ const ids = turnTypeaheadPendingIds(state);
97
153
  return {
98
- state: { buffer: state.buffer + recalled, queuedSubmissions: state.queuedSubmissions.slice(0, -1) },
154
+ state: {
155
+ buffer: state.buffer + recalled,
156
+ queuedSubmissions: state.queuedSubmissions.slice(0, -1),
157
+ ...idsField(ids.slice(0, -1)),
158
+ },
99
159
  consumed: true,
100
160
  changed: true,
161
+ ...(ids.at(-1) ? { releasedPendingIds: presentIds(ids.slice(-1)) } : {}),
101
162
  };
102
163
  }
103
164
 
@@ -114,13 +175,17 @@ export function restoreTurnTypeaheadSubmission(
114
175
  state: TurnTypeaheadState,
115
176
  text: string,
116
177
  ): TurnTypeaheadState {
117
- return { ...state, queuedSubmissions: [...state.queuedSubmissions, text] };
178
+ return {
179
+ ...withoutIds(state),
180
+ queuedSubmissions: [...state.queuedSubmissions, text],
181
+ ...idsField([...turnTypeaheadPendingIds(state), null]),
182
+ };
118
183
  }
119
184
 
120
185
  export type TurnTypeaheadHandoff =
121
186
  | { kind: 'none' }
122
187
  | { kind: 'prefill'; text: string }
123
- | { kind: 'submit'; text: string };
188
+ | { kind: 'submit'; text: string; pendingId?: string };
124
189
 
125
190
  /** 턴 종료 때 FIFO의 다음 항목 하나를 꺼낸다. 큐가 비면 미제출 buffer는 prefill한다. */
126
191
  export function dequeueTurnTypeaheadHandoff(
@@ -128,7 +193,11 @@ export function dequeueTurnTypeaheadHandoff(
128
193
  ): { handoff: TurnTypeaheadHandoff; state: TurnTypeaheadState } {
129
194
  const [next, ...queuedSubmissions] = state.queuedSubmissions;
130
195
  if (next !== undefined) {
131
- return { handoff: { kind: 'submit', text: next }, state: { ...state, queuedSubmissions } };
196
+ const [pendingId, ...queuedPendingIds] = turnTypeaheadPendingIds(state);
197
+ return {
198
+ handoff: pendingId ? { kind: 'submit', text: next, pendingId } : { kind: 'submit', text: next },
199
+ state: { ...withoutIds(state), queuedSubmissions, ...idsField(queuedPendingIds) },
200
+ };
132
201
  }
133
202
  if (!state.buffer) return { handoff: { kind: 'none' }, state };
134
203
  return { handoff: { kind: 'prefill', text: state.buffer }, state: createTurnTypeaheadState() };
@@ -143,21 +212,35 @@ export function drainTurnTypeaheadOnce(
143
212
  state: TurnTypeaheadState,
144
213
  carriedInitial: string | null | undefined,
145
214
  opts?: { interrupted?: boolean },
146
- ): { state: TurnTypeaheadState; nextInitial: string | undefined; injectEnter: boolean } {
215
+ ): {
216
+ state: TurnTypeaheadState;
217
+ nextInitial: string | undefined;
218
+ injectEnter: boolean;
219
+ /**
220
+ * ⭐ 이번 걸음에 큐를 «떠난» 항목의 레지스트리 id — 호출측이 레지스트리에서도 떨어낸다.
221
+ * 안 떨어내면 승격된 발화(새 프롬프트)가 다음 턴 둘째 바퀴에 «또» 들어가고(턴 종료),
222
+ * composer 로 돌아간 글이 고치기 전 문면으로 모델에 들어간다(중단 복원).
223
+ */
224
+ releasedPendingIds: string[];
225
+ } {
147
226
  if (opts?.interrupted && state.queuedSubmissions.length > 0) {
148
227
  const restored = [...state.queuedSubmissions, ...(state.buffer ? [state.buffer] : [])].join('\n');
149
228
  return {
150
229
  state: createTurnTypeaheadState(),
151
230
  nextInitial: carriedInitial ? `${carriedInitial}\n${restored}` : restored,
152
231
  injectEnter: false,
232
+ releasedPendingIds: presentIds(turnTypeaheadPendingIds(state)),
153
233
  };
154
234
  }
155
235
  const { handoff, state: remaining } = dequeueTurnTypeaheadHandoff(state);
156
- if (handoff.kind === 'none') return { state: remaining, nextInitial: carriedInitial ?? undefined, injectEnter: false };
236
+ if (handoff.kind === 'none') {
237
+ return { state: remaining, nextInitial: carriedInitial ?? undefined, injectEnter: false, releasedPendingIds: [] };
238
+ }
157
239
  return {
158
240
  state: remaining,
159
241
  nextInitial: carriedInitial ? `${carriedInitial}${handoff.text}` : handoff.text,
160
242
  injectEnter: handoff.kind === 'submit',
243
+ releasedPendingIds: handoff.kind === 'submit' && handoff.pendingId ? [handoff.pendingId] : [],
161
244
  };
162
245
  }
163
246
 
@@ -177,7 +260,7 @@ export function drainTurnTypeaheadQueue(
177
260
  ): { state: TurnTypeaheadState; drained: string[] } {
178
261
  if (state.queuedSubmissions.length === 0) return { state, drained: [] };
179
262
  return {
180
- state: { ...state, queuedSubmissions: [] },
263
+ state: { ...withoutIds(state), queuedSubmissions: [] },
181
264
  drained: [...state.queuedSubmissions],
182
265
  };
183
266
  }
@@ -185,8 +268,10 @@ export function drainTurnTypeaheadQueue(
185
268
  /**
186
269
  * ★ 라이브 턴 안으로 배수된 발화의 상태 전이 + 챗로그 문장. 순수.
187
270
  *
188
- * 대시보드 `enqueuePendingUserInput` onDrained 가 앞에서부터
189
- * `slice(drained.length)` 로 떨어내는 FIFO 와 같다.
271
+ * `items`(레지스트리 항목 · id 포함)를 주면 ***id 가 짝지어지는 항목만*** 떨어내고 문장도 그것만 적는다.
272
+ * ⛔ 앞에서부터 `slice(drained.length)` 하면 같은 버킷의 남의 항목(goal-loop 제어 메모)이나
273
+ * 이미 되꺼낸 항목 때문에 엉뚱한 대기 발화가 떨어진다(10-14 중복 수리).
274
+ * `items` 가 없으면 옛 계약(앞에서부터 떨어내기)을 지킨다.
190
275
  * 버퍼는 건드리지 않는다. 배수된 것이 없으면 문장도 없다.
191
276
  *
192
277
  * 문면은 `renderTurnTypeaheadQueueRow` 와 나란히 읽힌다:
@@ -199,15 +284,37 @@ export function drainTurnTypeaheadQueue(
199
284
  export function drainedIntoTurn(
200
285
  state: TurnTypeaheadState,
201
286
  drained: readonly string[],
202
- ): { state: TurnTypeaheadState; sentence: string | null } {
203
- if (drained.length === 0) return { state, sentence: null };
204
- const remaining = state.queuedSubmissions.slice(drained.length);
205
- const count = drained.length;
287
+ items?: readonly { id: string; text: string }[],
288
+ ): { state: TurnTypeaheadState; sentence: string | null; matched: string[] } {
289
+ if (drained.length === 0) return { state, sentence: null, matched: [] };
290
+ let next: TurnTypeaheadState;
291
+ let matched: string[];
292
+ if (items) {
293
+ const drainedIds = new Set(items.map(item => item.id));
294
+ const ids = turnTypeaheadPendingIds(state);
295
+ const keep = ids.map(id => id === null || !drainedIds.has(id));
296
+ matched = state.queuedSubmissions.filter((_, i) => !keep[i]);
297
+ next = {
298
+ ...withoutIds(state),
299
+ queuedSubmissions: state.queuedSubmissions.filter((_, i) => keep[i]),
300
+ ...idsField(ids.filter((_, i) => keep[i])),
301
+ };
302
+ } else {
303
+ matched = [...drained];
304
+ next = {
305
+ ...withoutIds(state),
306
+ queuedSubmissions: state.queuedSubmissions.slice(drained.length),
307
+ ...idsField(turnTypeaheadPendingIds(state).slice(drained.length)),
308
+ };
309
+ }
310
+ if (matched.length === 0) return { state: next, sentence: null, matched };
311
+ const count = matched.length;
206
312
  const label = count === 1 ? '⏳ 턴 안 1건' : `⏳ 턴 안 ${count}건`;
207
- const quoted = drained.map(text => `"${text}"`).join(' · ');
313
+ const quoted = matched.map(text => `"${text}"`).join(' · ');
208
314
  return {
209
- state: { ...state, queuedSubmissions: remaining },
315
+ state: next,
210
316
  sentence: `${label} · ${quoted} · 라이브 턴으로 전송`,
317
+ matched,
211
318
  };
212
319
  }
213
320
 
@@ -0,0 +1,48 @@
1
+ // `elanous --name <name>` — 맨 `elanous`(대시보드 TUI)가 자기 PTY manifest 행(`tui:<pid>`)에
2
+ // 별명을 달고 뜬다. 그러면 `elanous pty list` 에 그 이름이 보이고 `pty snapshot <name>` ·
3
+ // `pty text <name> …` 가 별명으로 해석된다(ref 해석은 이미 nickname 을 받는다).
4
+ //
5
+ // ⭐ 루트 «실행» 플래그다 — `--resume`·`--debug` 와 같은 규칙으로 Commander «전»에 걷어낸다.
6
+ // ⛔ 하위 명령 «뒤»의 `--name`(`elanous pty list --name x` · `elanous --debug session new --name x`)은 건드리지 않는다 — 그 명령이 `--name` 을
7
+ // 자기 옵션으로 가질 수 있다(가로채면 조용히 그 옵션을 먹는다).
8
+
9
+ import { ROOT_FLAGS_TAKING_VALUE } from './remote-resolve.js';
10
+
11
+ export interface DashboardNameFlag {
12
+ /** 걷어낸 뒤의 인자 — Commander·대시보드 필터로 넘긴다. */
13
+ readonly args: string[];
14
+ /** 준 이름(앞뒤 공백 제거). 플래그가 없으면 undefined. */
15
+ readonly name?: string;
16
+ /** 값이 없거나 빈 이름이면 사람에게 낼 오류 문면. */
17
+ readonly error?: string;
18
+ }
19
+
20
+ /** 루트 «선행 플래그 구간»에서 값을 받는 플래그 — 그 값 토큰은 하위 명령이 아니다. */
21
+ const LEADING_VALUE_FLAGS = new Set([...ROOT_FLAGS_TAKING_VALUE, '--resume']);
22
+
23
+ /** 루트 선행 플래그 구간 안의 `--name` 위치. 하위 명령(맨 위치 인자)이나 `--` 를 만나면 멈춘다 —
24
+ * `elanous --debug session new --name x` 의 `--name` 은 그 하위 명령의 것이다(리뷰 must-fix). */
25
+ function leadingNameIndex(rawArgs: readonly string[]): number {
26
+ for (let i = 0; i < rawArgs.length; i += 1) {
27
+ const arg = rawArgs[i]!;
28
+ if (arg === '--' || !arg.startsWith('-')) return -1;
29
+ if (arg === '--name' || arg.startsWith('--name=')) return i;
30
+ if (LEADING_VALUE_FLAGS.has(arg)) i += 1;
31
+ }
32
+ return -1;
33
+ }
34
+
35
+ export function readDashboardNameFlag(rawArgs: readonly string[]): DashboardNameFlag {
36
+ const idx = leadingNameIndex(rawArgs);
37
+ if (idx < 0) return { args: [...rawArgs] };
38
+ const flag = rawArgs[idx]!;
39
+ const inline = flag.startsWith('--name=');
40
+ const value = inline ? flag.slice('--name='.length) : rawArgs[idx + 1];
41
+ const args = rawArgs.filter((_, i) => i !== idx && (inline || i !== idx + 1));
42
+ if (value === undefined || (!inline && value.startsWith('-'))) {
43
+ return { args: rawArgs.filter((_, i) => i !== idx), error: 'elanous: --name needs a value (e.g. elanous --name op)' };
44
+ }
45
+ const name = value.trim();
46
+ if (!name) return { args, error: 'elanous: --name must not be empty' };
47
+ return { args, name };
48
+ }
@@ -40,6 +40,16 @@ import type { LlmInventory } from '../llm/local-manager/types.js';
40
40
  import { buildDoctorBundle } from './doctor-bundle.js';
41
41
  import { uploadDoctorBundle } from './doctor-bundle-upload.js';
42
42
  import { checkNodeModules, formatNodeModulesCheck, nodeModulesTrees } from './doctor-node-modules.js';
43
+ import {
44
+ DOCTOR_SYMPTOMS,
45
+ DOCTOR_VISIT_SOURCES,
46
+ doctorVisitRunExists,
47
+ isDoctorSymptom,
48
+ isDoctorVisitSource,
49
+ readDoctorVisits,
50
+ recordDoctorVisit,
51
+ type DoctorSymptom,
52
+ } from '../self-implement/doctor-visit.js';
43
53
  import { formatHostDoctorLines, runHostDoctor, type HostDoctorExpected, type HostDoctorOptions, type HostDoctorRemote } from '../fleet/host-doctor.js';
44
54
  import { listMachineResources } from './control-cli.js';
45
55
  import type { ResourceView } from '../control-plane/ledger.js';
@@ -210,6 +220,8 @@ export interface DoctorCliDeps extends DoctorOptions, Pick<DoctorFixDeps, 'home'
210
220
  hostDoctorMembership?: () => Promise<NonNullable<HostDoctorOptions['membership']>>;
211
221
  /** Nexus machine query seam; tests can exercise the default assembly without contacting a live service. */
212
222
  hostDoctorMachineResources?: () => Promise<ResourceView[]>;
223
+ /** `doctor visit`/`doctor status` 원장 디렉터리(시험 seam) — 기본 = `runLedgerDir()`. */
224
+ doctorVisitLedgerDir?: string;
213
225
  }
214
226
 
215
227
  const repositoryRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..');
@@ -1336,6 +1348,74 @@ export function registerDoctorCommand(program: Command, deps: DoctorCliDeps = {}
1336
1348
  out.log(json ? JSON.stringify(report, null, 2) : formatHostDoctorLines(report).join('\n'));
1337
1349
  if (!report.ok) setExitCode(1);
1338
1350
  });
1351
+ doctor.command('visit')
1352
+ .description('Record a doctor visit (triage symptom) in the run ledger of that run')
1353
+ .argument('<runId>', 'run id whose ledger receives the visit')
1354
+ .requiredOption('--symptom <symptom>', `closed symptom list: ${DOCTOR_SYMPTOMS.join(', ')}`)
1355
+ .requiredOption('--from <who>', `closed sender list: ${DOCTOR_VISIT_SOURCES.join(', ')}`)
1356
+ .option('--evidence <text>', 'free-text evidence recorded with the visit')
1357
+ .option('--json', 'structured output')
1358
+ .action((runId: string, opts: { symptom: string; from: string; evidence?: string; json?: boolean }, command: Command) => {
1359
+ const json = opts.json === true || command.parent?.opts().json === true;
1360
+ if (!isDoctorSymptom(opts.symptom)) {
1361
+ const reason = `unknown symptom: ${opts.symptom} — closed list: ${DOCTOR_SYMPTOMS.join(', ')}`;
1362
+ if (json) out.log(JSON.stringify({ status: 'rejected', reason }));
1363
+ else err.error(reason);
1364
+ setExitCode(1);
1365
+ return;
1366
+ }
1367
+ if (!isDoctorVisitSource(opts.from)) {
1368
+ const reason = `unknown from: ${opts.from} — closed list: ${DOCTOR_VISIT_SOURCES.join(', ')}`;
1369
+ if (json) out.log(JSON.stringify({ status: 'rejected', reason }));
1370
+ else err.error(reason);
1371
+ setExitCode(1);
1372
+ return;
1373
+ }
1374
+ try {
1375
+ const visit = recordDoctorVisit({
1376
+ runId,
1377
+ from: opts.from,
1378
+ symptom: opts.symptom,
1379
+ ...(opts.evidence !== undefined ? { evidence: opts.evidence } : {}),
1380
+ ...(deps.doctorVisitLedgerDir !== undefined ? { dir: deps.doctorVisitLedgerDir } : {}),
1381
+ });
1382
+ out.log(json ? JSON.stringify(visit) : `doctor visit recorded: runId=${runId} from=${opts.from} symptom=${opts.symptom}${visit.evidence !== undefined ? ` evidence=${visit.evidence}` : ''}`);
1383
+ } catch (error) {
1384
+ const reason = error instanceof Error ? error.message : String(error);
1385
+ if (json) out.log(JSON.stringify({ status: 'rejected', reason }));
1386
+ else err.error(reason);
1387
+ setExitCode(1);
1388
+ }
1389
+ });
1390
+ doctor.command('status')
1391
+ .description('Summarize recorded doctor visits by symptom with recent visit lines')
1392
+ .option('--run <runId>', 'limit the summary to one run ledger')
1393
+ .option('--json', 'structured output')
1394
+ .action((opts: { run?: string; json?: boolean }, command: Command) => {
1395
+ const json = opts.json === true || command.parent?.opts().json === true;
1396
+ const ledgerScope = deps.doctorVisitLedgerDir !== undefined ? { dir: deps.doctorVisitLedgerDir } : {};
1397
+ if (opts.run !== undefined && !doctorVisitRunExists(opts.run, ledgerScope)) {
1398
+ const reason = `없음: 런 원장이 없습니다 (runId=${opts.run})`;
1399
+ if (json) out.log(JSON.stringify({ status: 'rejected', reason }));
1400
+ else err.error(reason);
1401
+ setExitCode(1);
1402
+ return;
1403
+ }
1404
+ const visits = readDoctorVisits(opts.run, ledgerScope);
1405
+ const counts = Object.fromEntries(DOCTOR_SYMPTOMS.map((symptom: DoctorSymptom) => [symptom, 0])) as Record<DoctorSymptom, number>;
1406
+ for (const visit of visits) counts[visit.symptom] += 1;
1407
+ if (json) {
1408
+ out.log(JSON.stringify({ total: visits.length, counts, visits }, null, 2));
1409
+ return;
1410
+ }
1411
+ out.log([
1412
+ `Doctor visits: ${visits.length}`,
1413
+ ...DOCTOR_SYMPTOMS.map((symptom: DoctorSymptom) => ` ${symptom}: ${counts[symptom]}`),
1414
+ 'Recent visits:',
1415
+ ...visits.map((visit) => ` ${visit.timestamp ?? 'unknown-time'} runId=${visit.runId} from=${visit.from} symptom=${visit.symptom}${visit.evidence !== undefined ? ` evidence=${visit.evidence}` : ''}`),
1416
+ ...(visits.length === 0 ? [' none'] : []),
1417
+ ].join('\n'));
1418
+ });
1339
1419
  doctor
1340
1420
  .option('--credentials', 'show per-credential details in human-readable output')
1341
1421
  .option('--bundle', 'write a redacted diagnostics archive for support')
@@ -189,6 +189,8 @@ export const KNOWN_LOG_EVENT_NAMES: ReadonlySet<string> = new Set([
189
189
  "capture.push.skip",
190
190
  "capture.start.begin",
191
191
  "capture.start.return",
192
+ "card-injected",
193
+ "card-skipped",
192
194
  "carry",
193
195
  "cascade-threshold",
194
196
  "catalog-envkey-conflict",
@@ -283,6 +285,7 @@ export const KNOWN_LOG_EVENT_NAMES: ReadonlySet<string> = new Set([
283
285
  "control-processing-error",
284
286
  "control-result",
285
287
  "control-settled",
288
+ "conversation-start",
286
289
  "core-turn",
287
290
  "corpus",
288
291
  "cost.error",
@@ -290,6 +293,7 @@ export const KNOWN_LOG_EVENT_NAMES: ReadonlySet<string> = new Set([
290
293
  "cost.skip-unregistered",
291
294
  "coverage",
292
295
  "coverage-exhausted",
296
+ "create-skipped",
293
297
  "create.labels-omitted",
294
298
  "created",
295
299
  "credential",
@@ -444,6 +448,7 @@ export const KNOWN_LOG_EVENT_NAMES: ReadonlySet<string> = new Set([
444
448
  "edit.autorecovered",
445
449
  "edit.failed",
446
450
  "edit.path-resolved",
451
+ "edited",
447
452
  "effort-resolved",
448
453
  "emit",
449
454
  "emit-fail",
@@ -523,6 +528,7 @@ export const KNOWN_LOG_EVENT_NAMES: ReadonlySet<string> = new Set([
523
528
  "fanout.out",
524
529
  "feedback",
525
530
  "final",
531
+ "final-supplement-withheld",
526
532
  "final.received",
527
533
  "finalize",
528
534
  "finalize.error",
@@ -663,6 +669,7 @@ export const KNOWN_LOG_EVENT_NAMES: ReadonlySet<string> = new Set([
663
669
  "hold-wait-start",
664
670
  "hold-wait-timeout",
665
671
  "host-owned-passthrough",
672
+ "human-word-needs-provider",
666
673
  "idempotent",
667
674
  "identical-success-detected",
668
675
  "idle-pane-dispatch-consumed",
@@ -734,6 +741,8 @@ export const KNOWN_LOG_EVENT_NAMES: ReadonlySet<string> = new Set([
734
741
  "keyframe-fail",
735
742
  "kill.error",
736
743
  "kitty.write",
744
+ "last-session-skipped",
745
+ "last-session-written",
737
746
  "launch",
738
747
  "launch-overrides",
739
748
  "layered-load",
@@ -760,6 +769,7 @@ export const KNOWN_LOG_EVENT_NAMES: ReadonlySet<string> = new Set([
760
769
  "llm.error",
761
770
  "llm.input",
762
771
  "loaded",
772
+ "local-over-cap",
763
773
  "log-sink-failed",
764
774
  "log-zone-click",
765
775
  "long-lived-live",
@@ -1239,6 +1249,7 @@ export const KNOWN_LOG_EVENT_NAMES: ReadonlySet<string> = new Set([
1239
1249
  "session-list",
1240
1250
  "session-loaded",
1241
1251
  "session-new",
1252
+ "session-pin-cleared",
1242
1253
  "session-resume",
1243
1254
  "session-runtime-tool-specs.return",
1244
1255
  "session-update.error",
@@ -1395,6 +1406,7 @@ export const KNOWN_LOG_EVENT_NAMES: ReadonlySet<string> = new Set([
1395
1406
  "surface.resolve",
1396
1407
  "sweep",
1397
1408
  "swept",
1409
+ "switch",
1398
1410
  "switch-off",
1399
1411
  "sync",
1400
1412
  "syncLogWidgetState",