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
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7081],{8801:(e,t,s)=>{"use strict";s.d(t,{C:()=>c,DaemonProvider:()=>d,Q:()=>u});var a=s(77194),r=s(49954),n=s(9248),l=s(19631),o=s(49638),i=s(35857);let c=(0,r.createContext)(null);function d(e){let{children:t}=e,s={baseUrl:"",token:"",provider:""},[d,u]=(0,r.useState)(s),[m,p]=(0,r.useState)(""),[f]=(0,r.useState)(()=>new o.ki(s));(0,r.useEffect)(()=>{let e=(0,n.Fp)();u(e),f.updateConfig(e),p((0,l.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,r.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,n.Fp)();f.updateConfig(t),u(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let h=e=>{u(t=>{let s={...t,...e};return(0,n.Qc)(e),f.updateConfig(s),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),s})},x=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},g=(0,r.useMemo)(()=>({config:d,setConfig:h,client:f,sessionId:m,setSessionId:x}),[d,f,m]);return(0,a.jsx)(c.Provider,{value:g,children:t})}function u(){let e=(0,r.useContext)(c);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},12460:(e,t,s)=>{Promise.resolve().then(s.bind(s,35464))},19631:(e,t,s)=>{"use strict";s.d(t,{Zr:()=>l,f6:()=>r,oD:()=>n});let a="elanous.daemon.sessionId";function r(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function n(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(a,e),e):localStorage.getItem(a)}();if(e)return e;let t=r();return localStorage.setItem(a,t),t}function l(){let e=r();return localStorage.setItem(a,e),e}},35464:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>k});var a=s(77194),r=s(73158);function n(e){return e.map(e=>({...(0,r.cj)(e,[]),taskId:e.taskId,...e.wishReply?{wishReply:{surface:e.wishReply.surface,address:null}}:{}}))}var l=s(49954),o=s(8801);function i(e){var t;for(let t of[e.sections.triage,e.sections.intake]){let e=null==t?void 0:t.data.title;if("string"==typeof e&&e.trim())return e.trim()}return(null==(t=e.apiTitle)?void 0:t.trim())||e.taskId}var c=s(45785);let d={green:"순항",yellow:"진행 중",red:"막힘",done:"완료"},u=["intake","triage","gates","relations","memory","workspace","run","landing","release"];function m(e){return null==e?"—":"string"==typeof e?e:JSON.stringify(e)}function p(e){let{entry:t}=e;return(0,a.jsxs)("details",{className:"mt-2 text-xs",children:[(0,a.jsx)("summary",{className:"cursor-pointer text-muted-foreground",children:"JSON"}),(0,a.jsx)("pre",{className:"mt-2 max-h-64 overflow-auto rounded-lg bg-muted p-2 text-xs whitespace-pre-wrap break-all",children:JSON.stringify(t.data,null,2)})]})}function f(e){let{entry:t}=e,s=new Date(t.ts).toISOString();return(0,a.jsxs)("div",{className:"flex flex-wrap gap-x-3 gap-y-1 text-xs text-muted-foreground",children:[(0,a.jsxs)("span",{children:["Owner: ",t.owner]}),(0,a.jsx)("time",{dateTime:s,children:s})]})}function h(e){var t,s,r;let{card:n,placements:o,onClose:c,publicCapture:h=!1}=e,[x,g]=(0,l.useState)(""),[b,y]=(0,l.useState)(!1),[w,k]=(0,l.useState)(null),v=async e=>{if(e.preventDefault(),!(!c||!x.trim()||/[\r\n]/.test(x))&&!b){y(!0),k(null);try{await c(x.trim())}catch(e){k(e instanceof Error?e.message:String(e))}finally{y(!1)}}},j=null==(t=n.sections.gates)?void 0:t.data;return(0,a.jsxs)("section",{"aria-label":"Task card detail",className:"min-w-0 space-y-4 rounded-2xl border border-border bg-card p-4",children:[(0,a.jsxs)("header",{children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:i(n)}),(0,a.jsx)("p",{className:"break-all text-xs text-muted-foreground",children:n.taskId}),"closed"===n.status?(0,a.jsxs)("p",{role:"status",children:["닫힘 \xb7 ",null!=(s=n.closedReason)?s:"사유 없음"]}):!h&&c?(0,a.jsxs)("form",{onSubmit:v,className:"mt-3 flex flex-wrap items-end gap-2",children:[(0,a.jsxs)("label",{className:"text-sm",children:["닫기 사유 (한 줄)",(0,a.jsx)("input",{type:"text",required:!0,value:x,onChange:e=>g(e.target.value),className:"block rounded-md border border-border bg-background px-2 py-1"})]}),(0,a.jsx)("button",{type:"submit",disabled:b||!x.trim()||/[\r\n]/.test(x),className:"rounded-md border border-border px-3 py-1 text-sm",children:b?"닫는 중…":"닫기"}),w&&(0,a.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:w})]}):null]}),void 0!==n.wishReply&&(0,a.jsxs)("section",{"aria-label":"Wish reply destination",className:"rounded-xl border border-border p-3 text-sm",children:[(0,a.jsx)("h3",{className:"mb-1 font-semibold",children:"어디로 회신하나"}),(0,a.jsx)("p",{className:"break-all",children:n.wishReply?"".concat(null!=(r=({telegram:"텔레그램 대화",pwa:"PWA",tui:"TUI",linear:"Linear"})[n.wishReply.surface])?r:n.wishReply.surface).concat(n.wishReply.address?" \xb7 ".concat(n.wishReply.address):""):"회신 주소 없음"})]}),void 0!==n.wishReply&&(0,a.jsxs)("section",{"aria-label":"Wish reply history",className:"rounded-xl border border-border p-3 text-sm",children:[(0,a.jsx)("h3",{className:"mb-1 font-semibold",children:"회신 이력"}),(0,a.jsx)("p",{className:"text-muted-foreground",children:"카드 원장에는 회신 발송 이력이 기록되지 않습니다"})]}),o&&(0,a.jsxs)("p",{className:"overflow-x-auto whitespace-nowrap text-sm","aria-label":"Wish placement and progress",children:["배치 \xb7 ",o.length?o.map(e=>{let{cellId:t,cellTitle:s,version:a,status:r}=e;return"".concat(t," ").concat(s," \xb7 ").concat(a,"판 \xb7 ").concat(d[r])}).join(" / "):"아직 배치되지 않음"]}),j&&(0,a.jsxs)("p",{className:"overflow-x-auto whitespace-nowrap text-sm","aria-label":"Gate decisions",children:["Gate \xb7 budget: ",m(j.budget)," \xb7 location: ",m(j.location)]}),u.map(e=>{let t=n.sections[e];return t?(0,a.jsxs)("section",{"aria-label":"".concat(e," section"),className:"rounded-xl border border-border p-3",children:[(0,a.jsx)("h3",{className:"mb-1 text-sm font-semibold capitalize",children:e}),(0,a.jsx)(f,{entry:t}),(0,a.jsx)(p,{entry:t})]},e):null}),(0,a.jsxs)("section",{"aria-label":"Incidents",className:"space-y-2",children:[(0,a.jsxs)("h3",{className:"text-sm font-semibold",children:["Incidents (",n.incidents.length,")"]}),n.incidents.length?(0,a.jsx)("ol",{className:"space-y-2",children:n.incidents.map(e=>(0,a.jsxs)("li",{className:"rounded-xl border border-border p-3",children:[(0,a.jsx)(f,{entry:e}),(0,a.jsx)(p,{entry:e})]},e.key))}):(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"No incidents."})]})]})}let x=["steward","execution","landing","release","done"],g=new Set(["intake","triage","gates","relations","memory","workspace","run","landing","release","incidents"]);function b(e){let t=[],s=Date.parse(e.createdAt),a=e.sections.find(e=>"intake:reply:0"===e.key),r=null;if(a)try{let e=JSON.parse(a.content);if(e&&"object"==typeof e&&!Array.isArray(e)){let{surface:t,address:s}=e;"string"==typeof t&&("string"==typeof s||null===s)&&(r={surface:t,address:s})}}catch(e){}for(let a of e.sections){let r;if(!g.has(a.key))continue;try{let e=JSON.parse(a.content);r=e&&"object"==typeof e&&!Array.isArray(e)?e:{content:a.content}}catch(e){r={content:a.content}}let n=Date.parse(a.createdAt);t.push({taskId:e.id,section:a.key,key:"".concat(a.key,":").concat(a.createdAt,":").concat(t.length),owner:a.owner,ts:Number.isFinite(n)?n:s,data:r,..."string"==typeof r.runId?{runId:r.runId}:{}})}if(0===t.length&&t.push({taskId:e.id,section:"triage",key:"api:title",owner:"task-card API",ts:s,data:{title:e.title}}),"closed"===e.status){let a=t.filter(e=>"release"===e.section).sort((e,t)=>t.ts-e.ts)[0];t.push({taskId:e.id,section:"release",key:"api:closed",owner:"task-card API",ts:Math.max(s,...t.map(e=>e.ts)),data:{...null==a?void 0:a.data,status:"done"}})}return{...function(e){let t,s=e[0];if(!s)return null;let a={},r=[],n=new Set,l=s.ts,o=-1/0;for(let i of e)if(!(i.taskId!==s.taskId||n.has(i.key)))if(n.add(i.key),l=Math.max(l,i.ts),i.runId&&i.ts>=o&&(t=i.runId,o=i.ts),"incidents"===i.section)r.push(i);else{let e=a[i.section];(!e||i.ts>=e.ts)&&(a[i.section]=i)}return{taskId:s.taskId,sections:a,incidents:r,updatedAt:l,...t?{runId:t}:{}}}(t),apiTitle:e.title,status:e.status,...void 0===e.closedReason?{}:{closedReason:e.closedReason},...e.goalId.startsWith("wish:")?{wishReply:r}:{}}}function y(e){let{cards:t,selectedId:s,onSelect:r,selectedCard:n,detailError:l,placements:o,onCloseCard:c,publicCapture:d}=e,u=(null==n?void 0:n.taskId)===s?n:null;return(0,a.jsxs)("div",{className:"space-y-4 p-4",children:[(0,a.jsx)("h1",{className:"text-xl font-semibold",children:"보드"}),(0,a.jsx)("div",{className:"grid gap-3 md:grid-cols-2 xl:grid-cols-5",children:x.map(e=>(0,a.jsxs)("section",{"aria-label":"".concat(e," column"),className:"min-w-0 space-y-2 rounded-xl border border-border p-3",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold capitalize",children:e}),t.filter(t=>(function(e){var t;let s=null==(t=e.sections.release)?void 0:t.data;return(null==s?void 0:s.status)==="done"||(null==s?void 0:s.status)==="completed"?"done":s?"release":e.sections.landing?"landing":e.sections.run||e.sections.workspace||e.sections.gates||e.sections.relations||e.sections.memory?"execution":"steward"})(t)===e).map(e=>{var t,n;return(0,a.jsxs)("button",{type:"button",onClick:()=>r(e.taskId),"aria-pressed":s===e.taskId,className:"w-full rounded-lg border border-border bg-card p-3 text-left text-sm hover:bg-accent/40",children:[(0,a.jsx)("span",{className:"block font-medium",children:i(e)}),(0,a.jsx)("span",{className:"block text-xs text-muted-foreground",children:(0,a.jsx)("time",{dateTime:new Date(e.updatedAt).toISOString(),title:new Date(e.updatedAt).toLocaleString(),children:(t=function(e){let t=new Map;for(let a of e.incidents){var s;let e=null!=(s=a.data.incidentId)?s:a.data.id,r="string"==typeof e&&e.trim()?e:a.key,n=t.get(r);(!n||a.ts>=n.ts)&&t.set(r,a)}return Array.from(t.values()).filter(e=>"closed"!==e.data.status&&"resolved"!==e.data.status).length}(e),n=Date.now(),[...t>0?["사고 ".concat(t)]:[],...e.runId?["런 ".concat(e.runId.replace(/^run-/,"").slice(0,8))]:[],function(e,t,s){let a=Math.floor((t-e)/6e4);if(!Number.isFinite(a)||a<1)return"방금";if(a<60)return"".concat(a,"분 전");if(a<1440)return"".concat(Math.floor(a/60),"시간 전");let r=new Intl.DateTimeFormat("ko-KR",{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1,...s?{timeZone:s}:{}}).formatToParts(new Date(e)),n=e=>{var t,s;return null!=(s=null==(t=r.find(t=>t.type===e))?void 0:t.value)?s:""};return"".concat(n("month"),"/").concat(n("day")," ").concat(n("hour"),":").concat(n("minute"))}(e.updatedAt,n,void 0)]).join(" \xb7 ")})})]},e.taskId)})]},e))}),s&&(0,a.jsxs)("aside",{className:"max-w-3xl space-y-2","aria-label":"Selected card",children:[(0,a.jsx)("button",{type:"button",onClick:()=>r(null),"aria-label":"Close card detail",className:"text-sm text-muted-foreground",children:"Close"}),u?(0,a.jsx)(h,{card:u,placements:o,onClose:c,publicCapture:d}):(0,a.jsx)("p",{role:"status",children:null!=l?l:"Loading card detail…"})]})]})}function w(){let{config:e}=(0,o.Q)(),t=(0,l.useMemo)(()=>e.baseUrl?(0,c.xX)({baseUrl:e.baseUrl,...e.token?{token:e.token}:{}}):null,[e.baseUrl,e.token]),[s,i]=(0,l.useState)([]),[d,u]=(0,l.useState)(null),[m,p]=(0,l.useState)(null),[f,h]=(0,l.useState)(void 0),[x,g]=(0,l.useState)(null),[w,k]=(0,l.useState)(null),[v,j]=(0,l.useState)(!1);(0,l.useEffect)(()=>{"public"===new URLSearchParams(window.location.search).get("capture")&&j(!0)},[]);let N=(0,l.useMemo)(()=>v?n(s):s,[s,v]),I=v&&m?n([m])[0]:m,S=v&&f?(0,r.cj)(f,[]):f;(0,l.useEffect)(()=>{let e=!1;if(i([]),u(null),p(null),h(void 0),g(null),!t)return void k("Connect to NEXUS to load task cards.");k(null);let s=()=>t.getTaskCards().then(t=>{let{cards:s}=t;e||(i(s.map(b)),k(null))}).catch(t=>{e||k(t instanceof c.Iu&&404===t.status?"Task cards are not available yet (pre-E1).":t instanceof Error?t.message:String(t))});s();let a=setInterval(()=>{s()},1e4);return()=>{e=!0,clearInterval(a)}},[t]),(0,l.useEffect)(()=>{if(!t||!d)return;let e=!1;return p(null),h(void 0),g(null),t.getTaskCard(d).then(t=>{let{card:s,placements:a}=t;e||(h(a),p(b(s)))}).catch(t=>{e||g(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[t,d]);let C=async e=>{if(!t||!d||v)throw Error("Card close unavailable");let{card:s}=await t.closeTaskCard(d,e);p(e=>(null==e?void 0:e.taskId)===d?b(s):e),i(e=>e.map(e=>e.taskId===s.id?b(s):e))};return(0,a.jsxs)(a.Fragment,{children:[w&&(0,a.jsx)("p",{role:"status",className:"p-4 text-sm text-muted-foreground",children:w}),(0,a.jsx)(y,{cards:N,selectedId:d,selectedCard:I,detailError:x,placements:S,onSelect:e=>{(null===e||d!==e)&&(p(null),h(void 0),g(null),u(e))},onCloseCard:C,publicCapture:v})]})}function k(){return(0,a.jsx)(w,{})}},73158:(e,t,s)=>{"use strict";s.d(t,{Er:()=>r,cj:()=>c,dc:()=>l,yR:()=>i});let a=/^(oauth\.|harness\.decision|llm\.router)/;function r(e){let t=[],s=e=>{"string"==typeof e&&e.trim()&&!t.includes(e.trim())&&t.push(e.trim())};for(let t of e){var r;let e=null!=(r=t.data)?r:{};if(t.category.startsWith("oauth.")){for(let t of["from","to","name","account"])s(e[t]);if(Array.isArray(e.usage))for(let t of e.usage)s(null==t?void 0:t.name);continue}if(a.test(t.category))for(let t of(s(e.account),["what","why","reason"])){let a=e[t];if("string"==typeof a)for(let e of a.matchAll(/계정\s+([A-Za-z0-9][\w.-]*)/g))s(e[1])}}return t}function n(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function l(e){let t=new Map(e.map((e,t)=>[e,"account-".concat(t+1)])),s=e.length?RegExp("(^|[^\\w-])(".concat(e.map(n).sort((e,t)=>t.length-e.length).join("|"),")(?![\\w-])"),"g"):null,a=new Map;return(e,r)=>{let n=e.replace(/\b[a-z0-9-]+\.tail[0-9a-f]+\.ts\.net\b/gi,"tailnet-host").replace(/\bmsb\d+\b/gi,e=>(e=>{let t=e.toLowerCase();a.has(t)||a.set(t,"remote-".concat(a.size+1));let s=a.get(t);return e===e.toUpperCase()?s.toUpperCase():s})(e)).replace(/\bmbp\b/gi,e=>e===e.toUpperCase()?"LOCAL":"local").replace(/\/Users\/[^/\s"']+/g,"~").replace(/(크레딧|credits?|💳)(\s*[:=]?\s*)[\d][\d,.]*/gi,"$1$2•••").replace(/[\d][\d,.]*(\s*)(크레딧|credits?)/gi,"•••$1$2").replace(/\$\s?[\d][\d,.]*/g,"$•••").replace(/(잔량?|remaining|left)(\s*[:=]?\s*)(?:[A-Za-z0-9][\w.-]*\s+)?\d+(?:\.\d+)?\s?%/gi,"$1$2•••");return r&&s&&(n=n.replace(s,(e,s,a)=>{var r;return"".concat(s).concat(null!=(r=t.get(a))?r:"account")})),n}}function o(e,t){if("string"==typeof e)return t(e);if(Array.isArray(e))return e.map(e=>o(e,t));if(e&&"object"==typeof e){let s={};for(let[a,r]of Object.entries(e))"apiEquivalentUsd"===a||"usd"===a||/credit(s|Balance)?$/i.test(a)||(s[a]=o(r,t));return s}return e}function i(e){let t=l(r(e));return e.map(e=>{let s=a.test(e.category);return{...e,event:t(e.event,!1),data:e.data?o(e.data,e=>t(e,s)):e.data}})}function c(e,t){let s=l(t);return o(e,e=>s(e,!0))}}},e=>{e.O(0,[9638,5785,2201,6356,7358],()=>e(e.s=12460)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2885],{8801:(e,t,n)=>{"use strict";n.d(t,{C:()=>d,DaemonProvider:()=>u,Q:()=>c});var r=n(77194),l=n(49954),s=n(9248),a=n(19631),o=n(49638),i=n(35857);let d=(0,l.createContext)(null);function u(e){let{children:t}=e,n={baseUrl:"",token:"",provider:""},[u,c]=(0,l.useState)(n),[m,x]=(0,l.useState)(""),[f]=(0,l.useState)(()=>new o.ki(n));(0,l.useEffect)(()=>{let e=(0,s.Fp)();c(e),f.updateConfig(e),x((0,a.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,l.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,s.Fp)();f.updateConfig(t),c(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&x(t=>t===e.newValue?t:((0,i.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let h=e=>{c(t=>{let n={...t,...e};return(0,s.Qc)(e),f.updateConfig(n),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),n})},g=e=>{x(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},p=(0,l.useMemo)(()=>({config:u,setConfig:h,client:f,sessionId:m,setSessionId:g}),[u,f,m]);return(0,r.jsx)(d.Provider,{value:p,children:t})}function c(){let e=(0,l.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},19631:(e,t,n)=>{"use strict";n.d(t,{Zr:()=>a,f6:()=>l,oD:()=>s});let r="elanous.daemon.sessionId";function l(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(r,e),e):localStorage.getItem(r)}();if(e)return e;let t=l();return localStorage.setItem(r,t),t}function a(){let e=l();return localStorage.setItem(r,e),e}},63718:(e,t,n)=>{"use strict";n.d(t,{v:()=>a});var r=n(49954),l=n(35857);let s=null;function a(e){let[t,n]=(0,r.useState)(()=>s&&Date.now()-s.at<6e4?s.data:[]),[a,o]=(0,r.useState)(!1),[i,d]=(0,r.useState)(null),u=(0,r.useCallback)(async()=>{o(!0),d(null);try{let t=await e.listPersonas();s={at:Date.now(),data:t.personas},n(t.personas)}catch(e){d(e instanceof Error?e.message:String(e))}finally{o(!1)}},[e]);(0,r.useEffect)(()=>{if(s&&Date.now()-s.at<6e4)return void n(s.data);u()},[u]);let c=(0,r.useCallback)(async()=>{s=null,await u()},[u]);return(0,r.useEffect)(()=>{let t=e.personasEventsUrl();if(!t)return;let n=null;try{n=new EventSource(t)}catch(e){(0,l.cY)("showroom.personas.sse.construct-error",{error:String(e)});return}let r=e=>()=>{"hello"!==e&&((0,l.cY)("showroom.personas.sse.event",{kind:e}),s=null,u())};return n.addEventListener("hello",r("hello")),n.addEventListener("load-dir",r("load-dir")),n.addEventListener("reload-all",r("reload-all")),n.addEventListener("upsert",r("upsert")),n.addEventListener("remove",r("remove")),n.onerror=e=>{(0,l.cY)("showroom.personas.sse.error",{type:e.type})},()=>{try{null==n||n.close()}catch(e){}}},[e,u]),{personas:t,loading:a,error:i,reload:c}}},77902:(e,t,n)=>{"use strict";n.d(t,{BotsPageContent:()=>D});var r=n(77194),l=n(49954),s=n(8801),a=n(63718);function o(e){if(null==e)return null;let t=e.replace(/[,%\s]/g,"").replace(/\*/g,"").trim();if(""===t||"-"===t||"N/A"===t)return null;let n=Number(t);return Number.isFinite(n)?n:null}let i=e=>"string"==typeof e&&""!==e?e:null,d=e=>"number"==typeof e&&Number.isFinite(e)?e:null,u=e=>"boolean"==typeof e?e:null;function c(e){var t,n,r,l,s;let a=[],c=[];for(let t of null!=(n=e.artifacts)?n:[]){let e=null!=(r=i(null==t?void 0:t.name))?r:"(이름 없음)",n=i(null==t?void 0:t.text);if(null===n){c.push(e);continue}a.push(function(e,t){var n;let r=function(e){let t=e.split("\n").filter(e=>""!==e.trim()&&!e.includes("━")),n=t.slice(0,3).join(" / ").slice(0,160),r=t.slice(0,3).join("\n");return/^Traceback \(most recent call last\):/m.test(r)?{kindOf:"파이썬 예외(Traceback)",head:n}:/^⛔\s*.*(실패|failed|error)/mi.test(r)?{kindOf:"스킬이 \xab실패\xbb라고 말했다",head:n}:/^(Error|error):/m.test(r)?{kindOf:"오류",head:n}:/^\s*command not found|No such file or directory/m.test(r)?{kindOf:"명령\xb7파일이 \xab없다\xbb",head:n}:null}(t);if(null!==r)return{kind:"failure",name:e,kindOf:r.kindOf,head:r.head};let l=function(e){var t,n,r,l;let s=null!=(l=null!=(r=null==(t=/^대상:\s*(\S+)/m.exec(e))?void 0:t[1])?r:null==(n=/^##\s+(\S+)\s+Real-Time Quote/m.exec(e))?void 0:n[1])?l:null;if(null===s)return null;let a=t=>{var n,r;return null!=(r=null==(n=RegExp("\\*\\*".concat(t,":\\*\\*\\s*([-+0-9.,]+)"),"i").exec(e))?void 0:n[1])?r:null},i=/\*\*Change:\*\*\s*([-+0-9.,]+)\s*\(([-+0-9.]+)%\)/i.exec(e),d={symbol:s,close:o(a("Close")),change:i?o(i[1]):o(a("Change")),changePct:i?o(i[2]):null,open:o(a("Open")),high:o(a("High")),low:o(a("Low")),volume:o(a("Volume")),prevClose:o(a("Prev Close"))};return[d.close,d.change,d.open,d.high,d.low,d.volume,d.prevClose].some(e=>null!==e)?d:null}(t);if(null!==l)return{kind:"quote",name:e,quote:l};let s=null!=(n=function(e){var t,n,r,l,s,a,i,d;let u=e.split("\n"),c=u.findIndex(e=>e.includes("|")&&e.includes("외국인")&&e.includes("기관")&&e.includes("개인"));if(c<0)return null;let m=e=>e.split("|").map(e=>e.trim()).filter((e,t,n)=>""!==e||0!==t&&t!==n.length-1),x=m(u[c]),f=e=>x.findIndex(t=>t.includes(e)),[h,g,p,b]=[0,f("외국인"),f("기관"),f("개인")];if(g<0||p<0||b<0)return null;let j=[];for(let e=c+1;e<u.length;e+=1){let t=u[e];if(!t.includes("|")){if(j.length>0)break;continue}if(/^\s*\|?[\s:|-]+\|?\s*$/.test(t))continue;let n=m(t);if(n.length<=Math.max(g,p,b))continue;let r=(null!=(l=n[h])?l:"").trim();""!==r&&j.push({key:r,foreign:o(n[g]),institution:o(n[p]),individual:o(n[b])})}if(0===j.length)return null;let y="";for(let e=c;e>=0;e-=1){let t=/^#{2,3}\s+(.+)$/.exec((null!=(s=u[e])?s:"").trim());if(t){y=t[1];break}}return""===y&&(y=null!=(a=null==(t=u.find(e=>""!==e.trim()&&!e.includes("━")))?void 0:t.trim())?a:"(제목 없음)"),{title:y,unit:null!=(d=null==(n=/\((백만|천|억)\)/.exec(x.join(" ")))?void 0:n[1])?d:null!=(i=null==(r=/\(([^)]*원[^)]*)\)/.exec(x.join(" ")))?void 0:r[1])?i:null,rows:j}}(t))?n:function(e){let t,n=e.trimStart();if(!n.startsWith("{"))return null;try{t=JSON.parse(n)}catch(e){return null}let r=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];for(let t of n){let n=e[t];if("number"==typeof n&&Number.isFinite(n))return n}return null},l=[],s=t.periods;if("object"==typeof s&&null!==s&&!Array.isArray(s))for(let[e,t]of Object.entries(s))"object"==typeof t&&null!==t&&l.push({key:e,foreign:r(t,"frgn_net_shares","frgn_net_amount_million"),institution:r(t,"inst_net_shares","inst_net_amount_million"),individual:r(t,"prsn_net_shares","prsn_net_amount_million")});if(0===l.length&&Array.isArray(t.rows))for(let e of t.rows){if("object"!=typeof e||null===e)continue;let t="string"==typeof e.date?e.date:null;null!==t&&l.push({key:t,foreign:r(e,"frgn_net_shares","frgn_net_amount_million"),institution:r(e,"inst_net_shares","inst_net_amount_million"),individual:r(e,"prsn_net_shares","prsn_net_amount_million")})}if(0===l.length)return null;let a="string"==typeof t.ticker?t.ticker:null,o="string"==typeof t.name&&t.name!==a?t.name:null;return{title:null!==o&&null!==a?"".concat(o,"(").concat(a,") 투자자 수급"):null!==a?"".concat(a," 투자자 수급"):"투자자 수급",unit:"주",rows:l}}(t);if(null!==s)return{kind:"flow",name:e,flow:s};let a=function(e){let t,n=e.split("\n"),r=n.findIndex(e=>"---BEGIN_OMNI_CRAWL_JSON---"===e);if(r<0)return{news:null,why:null,fenced:!1};let l=n.findIndex((e,t)=>t>r&&"---END_OMNI_CRAWL_JSON---"===e);if(l<0)return{news:null,why:"Omni crawl JSON 끝 울타리를 \xab못 찾았다\xbb",fenced:!0};try{t=JSON.parse(n.slice(r+1,l).join("\n"))}catch(e){return{news:null,why:"Omni crawl 울타리 안 JSON을 \xab못 읽었다\xbb",fenced:!0}}if("object"!=typeof t||null===t||Array.isArray(t))return{news:null,why:"Omni crawl JSON 최상위가 객체가 아니다",fenced:!0};let s=t;if(!Array.isArray(s.results))return{news:null,why:"Omni crawl JSON에 results 배열이 없다",fenced:!0};let a=[];for(let e of s.results){if("object"!=typeof e||null===e||Array.isArray(e))continue;let t=e.items;if(Array.isArray(t))for(let e of t)"object"!=typeof e||null===e||Array.isArray(e)||a.push({title:"string"==typeof e.title?e.title:null,url:"string"==typeof e.url?e.url:null,date:"string"==typeof e.date?e.date:null})}return{news:{query:"string"==typeof s.query?s.query:null,items:a},why:null,fenced:!0}}(t);if(null!==a.news)return{kind:"news",name:e,news:a.news};let i=t.split("\n").filter(e=>""!==e.trim()&&!e.includes("━")).slice(0,2).join(" / ").slice(0,120);if(a.fenced)return{kind:"unparsed",name:e,why:a.why,head:i};let d=function(e){let t=e.split("\n").filter(e=>""!==e.trim()&&!e.includes("━"));if(t.length<2)return null;let n=[];for(let e of t.slice(1)){let t=/^\s{1,}(\S[^:]*?)\s+:\s+(.+?)\s*$/.exec(e);if(null===t)continue;let r=t[1].trim(),l=t[2].trim();""===r||""===l||r.includes("//")||n.push({label:r,value:l,num:o(l)})}return 0===n.length?null:{title:t[0].trim(),entries:n}}(t);return null!==d?{kind:"keyed",name:e,keyed:d}:{kind:"unparsed",name:e,why:"아는 꼴이 \xab아니다\xbb(시세\xb7수급표\xb7뉴스\xb7라벨:값 넷 다 아님)",head:i}}(e,n))}return{personaId:null!=(l=i(e.personaId))?l:"unknown",runId:i(e.runId),atUtc:i(e.atUtc),ok:u(e.ok),steps:d(e.steps),failed:d(e.failed),source:null!=(s=i(e.source))?s:"unknown",delivered:u(null==(t=e.delivery)?void 0:t.sent),artifacts:a,textless:c}}function m(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(null===e)return"—";let n=Math.abs(e)>=1e3?e.toLocaleString("en-US"):String(e);return!0===t.sign&&e>0?"+".concat(n):n}async function x(e,t,n){try{var r,l,s=await e.fetchJson("/v1/bots/rounds?persona=".concat(encodeURIComponent(t),"&limit=").concat(n));if("object"!=typeof s||null===s)return{kind:"error",reason:"라우트 응답을 \xab못 읽었다\xbb(객체가 아니다)"};if(!Array.isArray(s.rounds))return{kind:"error",reason:"`rounds` 가 \xab배열이 아니다\xbb — 「0건」과 \xab다른 값\xbb이다"};let a=s.unreadableBy,o=void 0===a?null:Object.entries(a).filter(e=>{let[t]=e;return"result-missing"!==t}).reduce((e,t)=>{var n;let[,r]=t;return e+(null!=(n=d(r))?n:0)},0);return{kind:"ready",rounds:s.rounds.map(c),unreadable:null!=(r=d(s.unreadable))?r:0,unreadableNow:null!=o?o:null!=(l=d(s.unreadable))?l:0}}catch(e){return{kind:"error",reason:e instanceof Error&&e.message?e.message:String(e)}}}function f(e){let{a:t}=e,n=t.quote,l=null!==n.changePct&&n.changePct>0,s=null!==n.changePct&&n.changePct<0;return(0,r.jsxs)("div",{className:"rounded-lg border border-border bg-background/60 p-3","data-testid":"quote-".concat(n.symbol),children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-baseline gap-x-3",children:[(0,r.jsx)("h4",{className:"font-mono text-sm font-semibold",children:n.symbol}),(0,r.jsx)("span",{className:"text-lg font-bold tabular-nums",children:m(n.close)}),(0,r.jsxs)("span",{className:"text-sm font-semibold tabular-nums ".concat(l?"text-emerald-600":s?"text-rose-600":"text-muted-foreground"),children:[m(n.change,{sign:!0}),null!==n.changePct&&" (".concat(m(n.changePct,{sign:!0}),"%)")]})]}),(0,r.jsx)("dl",{className:"mt-2 grid grid-cols-2 gap-x-4 gap-y-1 text-xs text-muted-foreground sm:grid-cols-4",children:[["시가",n.open],["고가",n.high],["저가",n.low],["전일",n.prevClose]].map(e=>{let[t,n]=e;return(0,r.jsxs)("div",{className:"flex justify-between gap-2",children:[(0,r.jsx)("dt",{children:t}),(0,r.jsx)("dd",{className:"tabular-nums text-foreground",children:m(n)})]},t)})})]})}function h(e){let{a:t}=e,n=t.flow;return(0,r.jsxs)("div",{className:"rounded-lg border border-border bg-background/60 p-3","data-testid":"flow-block",children:[(0,r.jsx)("h4",{className:"text-sm font-semibold",children:n.title}),null!==n.unit&&(0,r.jsxs)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:["단위: ",n.unit]}),(0,r.jsx)("div",{className:"mt-2 overflow-x-auto",children:(0,r.jsxs)("table",{className:"w-full min-w-[22rem] text-xs",children:[(0,r.jsx)("thead",{children:(0,r.jsxs)("tr",{className:"text-muted-foreground",children:[(0,r.jsx)("th",{className:"py-1 text-left font-medium",children:"기간"}),["외국인","기관","개인"].map(e=>(0,r.jsx)("th",{className:"py-1 text-right font-medium",children:e},e))]})}),(0,r.jsx)("tbody",{children:n.rows.slice(0,6).map(e=>(0,r.jsxs)("tr",{className:"border-t border-border/60",children:[(0,r.jsx)("td",{className:"py-1 font-mono",children:e.key}),[e.foreign,e.institution,e.individual].map((e,t)=>(0,r.jsx)("td",{className:"py-1 text-right tabular-nums ".concat(null===e?"text-muted-foreground":e>0?"text-emerald-600":e<0?"text-rose-600":""),children:m(e,{sign:!0})},t))]},e.key))})]})}),n.rows.length>6&&(0,r.jsxs)("p",{className:"mt-1 text-xs text-muted-foreground",children:["…",n.rows.length-6,"줄 더 (전체는 회차 원본에)"]})]})}function g(e){let{a:t}=e,n=t.keyed;return(0,r.jsxs)("div",{className:"rounded-lg border border-border bg-background/60 p-3","data-testid":"keyed-block",children:[(0,r.jsx)("h4",{className:"text-sm font-semibold",children:n.title}),(0,r.jsx)("dl",{className:"mt-2 grid gap-1 sm:grid-cols-2",children:n.entries.map(e=>(0,r.jsxs)("div",{className:"flex items-baseline justify-between gap-3 text-sm",children:[(0,r.jsx)("dt",{className:"text-muted-foreground",children:e.label}),(0,r.jsx)("dd",{className:"font-semibold tabular-nums",children:e.value})]},e.label))})]})}function p(e){let{a:t}=e;return(0,r.jsxs)("div",{className:"rounded-lg border border-border bg-background/60 p-3","data-testid":"news-block",children:[(0,r.jsx)("h4",{className:"text-sm font-semibold",children:null===t.news.query?"뉴스":"뉴스: ".concat(t.news.query)}),0===t.news.items.length?(0,r.jsx)("p",{className:"mt-2 text-sm text-muted-foreground",children:"수집된 기사가 0건이다."}):(0,r.jsx)("ul",{className:"mt-2 space-y-2",children:t.news.items.map((e,t)=>{var n,l,s,a;return(0,r.jsxs)("li",{className:"text-sm",children:[null===e.url?null!=(n=e.title)?n:"(제목 없음)":(0,r.jsx)("a",{className:"font-medium underline underline-offset-2",href:e.url,children:null!=(l=e.title)?l:e.url}),null!==e.date&&(0,r.jsx)("span",{className:"ml-2 text-xs text-muted-foreground",children:e.date})]},"".concat(null!=(a=null!=(s=e.url)?s:e.title)?a:"article","-").concat(t))})})]})}function b(e){let{a:t}=e;return(0,r.jsxs)("div",{className:"rounded-lg border border-rose-500/40 bg-rose-500/5 p-3","data-testid":"failure-block",children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-baseline gap-2",children:[(0,r.jsx)("h4",{className:"font-mono text-sm font-semibold",children:t.name}),(0,r.jsx)("span",{className:"rounded bg-rose-500/15 px-2 py-0.5 text-xs font-medium text-rose-700",children:"이 단계가 \xab실패\xbb했다"})]}),(0,r.jsx)("p",{className:"mt-1 text-xs text-rose-700",children:t.kindOf}),(0,r.jsx)("p",{className:"mt-1 break-words font-mono text-xs text-muted-foreground",children:t.head})]})}function j(e){let{a:t}=e;return(0,r.jsxs)("div",{className:"rounded-lg border border-dashed border-border bg-background/40 p-3","data-testid":"unparsed-block",children:[(0,r.jsx)("h4",{className:"font-mono text-sm",children:t.name}),(0,r.jsxs)("p",{className:"mt-1 text-xs text-amber-600",children:["⚠️ 이 산출을 \xab못 읽었다\xbb — ",t.why]}),(0,r.jsx)("p",{className:"mt-1 truncate text-xs text-muted-foreground",children:t.head})]})}function y(e){var t;let{round:n}=e,l=null!==n.failed&&n.failed>0;return(0,r.jsxs)("article",{className:"rounded-xl border border-border bg-card p-5","data-testid":"round-".concat(null!=(t=n.runId)?t:"unknown"),children:[(0,r.jsxs)("header",{className:"flex flex-wrap items-baseline justify-between gap-2",children:[(0,r.jsx)("h3",{className:"text-lg font-semibold",children:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Asia/Seoul";if(null===e)return"시각 \xab모름\xbb";let n=new Date(e);if(Number.isNaN(n.getTime()))return"시각을 \xab못 읽었다\xbb(".concat(e.slice(0,24),")");let r=new Intl.DateTimeFormat("ko-KR",{timeZone:t,month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1});return"".concat(r.format(n)," KST")}(n.atUtc)}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[(0,r.jsx)("span",{className:"rounded px-2 py-0.5 font-medium ".concat("cron"===n.source?"bg-emerald-500/15 text-emerald-700":"bg-muted text-muted-foreground"),children:"cron"===n.source?"무인(cron)":"manual"===n.source?"손":"출처 \xab모름\xbb"}),(0,r.jsxs)("span",{className:"rounded px-2 py-0.5 font-medium ".concat(l?"bg-rose-500/15 text-rose-700":"bg-muted text-muted-foreground"),children:[null===n.steps?"단계 \xab모름\xbb":"".concat(n.steps,"단계"),l&&" \xb7 실패 ".concat(n.failed)]}),(0,r.jsx)("span",{className:"rounded px-2 py-0.5 font-medium ".concat(!0===n.delivered?"bg-sky-500/15 text-sky-700":"bg-muted text-muted-foreground"),children:null===n.delivered?"배달 \xab모름\xbb":n.delivered?"폰에 갔다":"안 갔다"})]})]}),(0,r.jsxs)("div",{className:"mt-4 space-y-3",children:[n.artifacts.map((e,t)=>"quote"===e.kind?(0,r.jsx)(f,{a:e},t):"flow"===e.kind?(0,r.jsx)(h,{a:e},t):"news"===e.kind?(0,r.jsx)(p,{a:e},t):"keyed"===e.kind?(0,r.jsx)(g,{a:e},t):"failure"===e.kind?(0,r.jsx)(b,{a:e},t):(0,r.jsx)(j,{a:e},t)),0===n.artifacts.length&&0===n.textless.length&&(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"이 회차에 산출이 \xab없다\xbb."}),n.textless.length>0&&(0,r.jsxs)("p",{className:"text-xs text-muted-foreground",children:["본문을 \xab안 받은\xbb 산출 ",n.textless.length,"건: ",n.textless.join(" \xb7 ")]})]})]})}function N(e){let{client:t,persona:n,title:s,subtitle:a,limit:o=3}=e,[i,d]=(0,l.useState)({kind:"loading"});return(0,l.useEffect)(()=>{let e=!0;return d({kind:"loading"}),x(t,n,o).then(t=>{e&&d(t)}),()=>{e=!1}},[t,n,o]),(0,r.jsxs)("section",{className:"flex flex-col gap-4","aria-label":"".concat(n," rounds"),"data-testid":"rounds-".concat(n),children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("h2",{className:"text-xl font-bold",children:s}),(0,r.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:a})]}),"loading"===i.kind&&(0,r.jsx)("p",{role:"status",className:"text-sm text-muted-foreground",children:"투자 회차를 불러오는 중…"}),"error"===i.kind&&(0,r.jsxs)("div",{role:"alert",className:"rounded-lg border border-destructive/40 bg-destructive/5 p-3 text-sm",children:[(0,r.jsx)("p",{className:"font-medium text-destructive",children:"회차를 \xab못 받았다\xbb."}),(0,r.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:i.reason}),(0,r.jsxs)("p",{className:"mt-2 text-xs text-muted-foreground",children:["⚠️ 라우트 ",(0,r.jsx)("code",{className:"font-mono",children:"/v1/bots/rounds"})," 가 아직 \xab없을 수\xbb 있다(\uD83C\uDD63 축). 그때는 이 자리가 비는 것이 \xab맞다\xbb — 화면이 그것을 말하고 있다."]})]}),"ready"===i.kind&&0===i.rounds.length&&(0,r.jsxs)("p",{className:"text-sm text-muted-foreground",children:["회차가 \xab0건\xbb이다.",i.unreadable>0&&" (못 읽은 자리 ".concat(i.unreadable,"곳 — 「없다」가 아니다)")]}),"ready"===i.kind&&i.rounds.length>0&&(0,r.jsxs)(r.Fragment,{children:[i.unreadableNow>0?(0,r.jsxs)("p",{role:"alert",className:"text-xs text-amber-600",children:["⚠️ ***지금 못 읽는 자리 ",i.unreadableNow,"곳*** — 아래 수는 \xab과소\xbb다."]}):i.unreadable>0?(0,r.jsxs)("p",{className:"text-xs text-muted-foreground",children:["못 읽은 자리 ",i.unreadable,"곳(옛 회차) — 「지금 깨진 것」은 \xab없다\xbb."]}):null,(0,r.jsx)("div",{className:"flex flex-col gap-4",children:i.rounds.map(e=>{var t,n;return(0,r.jsx)(y,{round:e},null!=(n=null!=(t=e.runId)?t:e.atUtc)?n:Math.random())})})]})]})}function w(e){let{client:t,limit:n=3}=e;return(0,r.jsx)(N,{client:t,persona:"investor",limit:n,title:"\uD83D\uDCC8 투자 회차",subtitle:"봇이 \xab실제로 낸\xbb 산출이다. ⛔ 차트는 \xab일부러\xbb 안 그린다 — 글만 낸다."})}function v(e){let{client:t,limit:n=2}=e;return(0,r.jsx)(N,{client:t,persona:"assistant",limit:n,title:"\uD83D\uDDD3️ 비서 회차",subtitle:"안 읽은 메일\xb7앞으로의 일정. ⛔ 「0」도 \xab잰 값\xbb이라 그대로 보여 준다."})}function k(e){let{client:t,limit:n=2}=e;return(0,r.jsx)(N,{client:t,persona:"newsbot",limit:n,title:"\uD83D\uDCF0 뉴스 회차",subtitle:"⚠️ 이 봇의 산출은 꼴이 여럿이다 — 못 읽은 것은 \xab이름을 대고\xbb 남는다."})}async function _(e){try{let t=await e.fetchJson("/v1/bots/commands");return{kind:"ready",commands:t}}catch(e){return{kind:"error",reason:e instanceof Error&&e.message?e.message:"string"==typeof e&&e?e:"Unknown error"}}}function S(e){let{client:t}=e,n=(0,a.v)(t),[s,o]=(0,l.useState)({kind:"loading"});(0,l.useEffect)(()=>{let e=!0;return o({kind:"loading"}),_(t).then(t=>{e&&o(t)}),()=>{e=!1}},[t]);let i=n.error,d="error"===s.kind?s.reason:null,u=null!==i||null!==d,c=!u&&(n.loading||"loading"===s.kind),m="ready"===s.kind?s.commands:[],x=!c&&!u;return(0,r.jsxs)("main",{className:"mx-auto flex w-full max-w-5xl flex-col gap-6 px-6 py-10 sm:px-10","data-testid":"bots-panel",children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("p",{className:"text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground",children:"Bot directory"}),(0,r.jsx)("h1",{className:"mt-2 text-3xl font-bold",children:"Bots"}),(0,r.jsx)("p",{className:"mt-2 max-w-3xl text-sm text-muted-foreground",children:"Commands are global: every bot exposes the same catalog."}),(0,r.jsx)("p",{className:"mt-2 max-w-3xl text-sm text-muted-foreground",children:"This surface cannot send commands yet; it only shows what you can ask bots to do."})]}),c&&(0,r.jsx)("p",{role:"status",className:"text-sm text-muted-foreground",children:"Loading bot identities and command catalog…"}),i&&(0,r.jsxs)("p",{role:"alert",className:"text-sm text-destructive",children:["Unable to load bot identities: ",i]}),d&&(0,r.jsxs)("p",{role:"alert",className:"text-sm text-destructive",children:["Unable to load bot catalog: ",d]}),x&&0===n.personas.length&&(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"No bots are configured."}),x&&n.personas.length>0&&0===m.length&&(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"No bot commands are available."}),(0,r.jsx)(w,{client:t}),(0,r.jsx)(v,{client:t}),(0,r.jsx)(k,{client:t}),x&&n.personas.length>0&&m.length>0&&(0,r.jsx)("section",{className:"grid gap-4 md:grid-cols-2","aria-label":"Bot identities",children:n.personas.map(e=>{var t;return(0,r.jsxs)("article",{className:"rounded-xl border border-border bg-card p-5","data-testid":"bot-card-".concat(e.personaId),children:[(0,r.jsx)("h2",{className:"text-lg font-semibold",children:e.displayName}),(0,r.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:null!=(t=e.description)?t:"No description provided."}),(0,r.jsx)("h3",{className:"mt-5 text-sm font-semibold",children:"Available commands"}),(0,r.jsx)("ul",{className:"mt-3 space-y-3","aria-label":"Available bot commands",children:m.map(e=>(0,r.jsxs)("li",{className:"rounded-lg border border-border bg-background/60 p-3",children:[(0,r.jsx)("h4",{className:"font-mono text-sm font-semibold",children:e.name}),(0,r.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:e.description}),e.arguments.length>0?(0,r.jsx)("ul",{className:"mt-2 space-y-1","aria-label":"".concat(e.name," arguments"),children:e.arguments.map(e=>(0,r.jsxs)("li",{className:"text-xs text-muted-foreground",children:[(0,r.jsx)("code",{className:"font-semibold text-foreground",children:e.name}),e.required?" (required)":" (optional)"," — ",e.description]},e.name))}):(0,r.jsx)("p",{className:"mt-2 text-xs text-muted-foreground",children:"No arguments."})]},e.name))})]},e.personaId)})})]})}function D(){let{client:e}=(0,s.Q)();return(0,r.jsx)(S,{client:e})}},77942:(e,t,n)=>{Promise.resolve().then(n.bind(n,77902))}},e=>{e.O(0,[9638,2201,6356,7358],()=>e(e.s=77942)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8457],{10678:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(30728).A)("menu",[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]])},27475:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(30728).A)("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]])},30728:(e,t,r)=>{"use strict";r.d(t,{A:()=>c});var i=r(49954);let l=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return t.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim()},a=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,r)=>r?r.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let s=(0,i.createContext)({}),d=(0,i.forwardRef)((e,t)=>{var r,a,d;let{color:c,size:u,strokeWidth:o,absoluteStrokeWidth:h,className:p="",children:y,iconNode:k,...f}=e,{size:v=24,strokeWidth:g=2,absoluteStrokeWidth:b=!1,color:m="currentColor",className:x=""}=null!=(r=(0,i.useContext)(s))?r:{},w=(null!=h?h:b)?24*Number(null!=o?o:g)/Number(null!=u?u:v):null!=o?o:g;return(0,i.createElement)("svg",{ref:t,...n,width:null!=(a=null!=u?u:v)?a:n.width,height:null!=(d=null!=u?u:v)?d:n.height,stroke:null!=c?c:m,strokeWidth:w,className:l("lucide",x,p),...!y&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(f)&&{"aria-hidden":"true"},...f},[...k.map(e=>{let[t,r]=e;return(0,i.createElement)(t,r)}),...Array.isArray(y)?y:[y]])}),c=(e,t)=>{let r=(0,i.forwardRef)((r,n)=>{let{className:s,...c}=r;return(0,i.createElement)(d,{ref:n,iconNode:t,className:l("lucide-".concat(a(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),s),...c})});return r.displayName=a(e),r}},32576:(e,t,r)=>{"use strict";r.d(t,{p:()=>n});var i=r(77194);r(49954);var l=r(83525),a=r(35083);function n(e){let{className:t,type:r,...n}=e;return(0,i.jsx)(l.p,{type:r,"data-slot":"input",className:(0,a.cn)("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",t),...n})}},42499:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(30728).A)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},45335:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(30728).A)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]])},52540:(e,t,r)=>{Promise.resolve().then(r.bind(r,75102))},68394:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(30728).A)("ellipsis",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]])},95960:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(30728).A)("hand",[["path",{d:"M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2",key:"1fvzgz"}],["path",{d:"M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2",key:"1kc0my"}],["path",{d:"M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8",key:"10h0bg"}],["path",{d:"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15",key:"1s1gnw"}]])},98430:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(30728).A)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]])}},e=>{e.O(0,[8085,5194,4862,6479,3525,1314,7837,9638,5305,7807,4490,3797,4599,5102,2201,6356,7358],()=>e(e.s=52540)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3933],{8801:(e,t,s)=>{"use strict";s.d(t,{C:()=>i,DaemonProvider:()=>d,Q:()=>m});var a=s(77194),n=s(49954),r=s(9248),l=s(19631),o=s(49638),c=s(35857);let i=(0,n.createContext)(null);function d(e){let{children:t}=e,s={baseUrl:"",token:"",provider:""},[d,m]=(0,n.useState)(s),[u,p]=(0,n.useState)(""),[x]=(0,n.useState)(()=>new o.ki(s));(0,n.useEffect)(()=>{let e=(0,r.Fp)();m(e),x.updateConfig(e),p((0,l.oD)()),(0,c.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[x]),(0,n.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,r.Fp)();x.updateConfig(t),m(t),(0,c.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(t=>t===e.newValue?t:((0,c.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[x]);let f=e=>{m(t=>{let s={...t,...e};return(0,r.Qc)(e),x.updateConfig(s),(0,c.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),s})},h=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,c.cY)("webterm.provider.daemon.session-set",{sessionId:e})},g=(0,n.useMemo)(()=>({config:d,setConfig:f,client:x,sessionId:u,setSessionId:h}),[d,x,u]);return(0,a.jsx)(i.Provider,{value:g,children:t})}function m(){let e=(0,n.useContext)(i);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},19631:(e,t,s)=>{"use strict";s.d(t,{Zr:()=>l,f6:()=>n,oD:()=>r});let a="elanous.daemon.sessionId";function n(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function r(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(a,e),e):localStorage.getItem(a)}();if(e)return e;let t=n();return localStorage.setItem(a,t),t}function l(){let e=n();return localStorage.setItem(a,e),e}},50790:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>c});var a=s(77194),n=s(49954),r=s(8801);let l="user@elanvital.ai",o={name:"이름",org:"회사명",kind:"회사/개인",interest:"관심 분야",contact:"연락처",consent:"동의"};function c(){let{client:e}=(0,r.Q)(),[t,s]=(0,n.useState)(""),[c,i]=(0,n.useState)(""),[d,m]=(0,n.useState)("personal"),[u,p]=(0,n.useState)("A"),[x,f]=(0,n.useState)(""),[h,g]=(0,n.useState)(!1),[b,y]=(0,n.useState)(!1),[j,v]=(0,n.useState)(""),[k,N]=(0,n.useState)(!1);async function w(s){if(s.preventDefault(),!h||b)return;let a={name:t.trim(),..."company"===d?{org:c.trim()}:{},kind:d,interest:u,contact:x.trim(),consent:!0},n=a.name?"company"!==d||a.org?a.contact?null:"contact":"org":"name";if(n){N(!0),v("".concat(o[n]," 항목을 입력해 주세요."));return}y(!0),v("");try{let t=await e.submitConsultRequest(a);if("receiptId"in t)N(!1),v("접수했습니다 \xb7 ".concat(t.receiptId," — 곧 연락드리겠습니다"));else{var r;N(!0),v("".concat(null!=(r=o[t.field])?r:"필수"," 항목을 확인해 주세요."))}}catch(e){N(!0),v("접수하지 못했습니다. 서버 또는 연결 상태를 확인하고 다시 보내 주세요.")}finally{y(!1)}}return(0,a.jsxs)("main",{className:"mx-auto w-full max-w-xl px-5 py-10 sm:py-16",children:[(0,a.jsxs)("header",{className:"mb-8",children:[(0,a.jsx)("p",{className:"mb-2 text-sm font-medium text-primary",children:"AX \xb7 상담 문의"}),(0,a.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"어떤 도움이 필요하신가요?"}),(0,a.jsx)("p",{className:"mt-3 text-sm text-muted-foreground",children:"도입 상담이나 교육 과정에 대해 남겨 주세요. 확인 후 연락드리겠습니다."}),(0,a.jsxs)("p",{className:"mt-2 text-sm text-muted-foreground",children:["메일로 바로 문의: ",(0,a.jsx)("a",{className:"underline",href:"mailto:".concat(l),children:l})]})]}),(0,a.jsxs)("form",{onSubmit:w,noValidate:!0,className:"space-y-6 rounded-xl border border-border bg-card p-5 sm:p-8",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("label",{htmlFor:"consult-name",className:"block text-sm font-medium",children:"이름"}),(0,a.jsx)("input",{id:"consult-name",name:"name",required:!0,autoComplete:"name",value:t,onChange:e=>s(e.target.value),className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm"})]}),(0,a.jsxs)("fieldset",{className:"space-y-2",children:[(0,a.jsx)("legend",{className:"text-sm font-medium",children:"회사/개인"}),(0,a.jsxs)("div",{className:"flex gap-5 text-sm",children:[(0,a.jsxs)("label",{className:"flex items-center gap-2",children:[(0,a.jsx)("input",{type:"radio",name:"kind",value:"company",checked:"company"===d,onChange:()=>m("company")}),"회사"]}),(0,a.jsxs)("label",{className:"flex items-center gap-2",children:[(0,a.jsx)("input",{type:"radio",name:"kind",value:"personal",checked:"personal"===d,onChange:()=>m("personal")}),"개인"]})]})]}),"company"===d&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("label",{htmlFor:"consult-org",className:"block text-sm font-medium",children:"회사명"}),(0,a.jsx)("input",{id:"consult-org",name:"org",required:!0,autoComplete:"organization",value:c,onChange:e=>i(e.target.value),className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm"})]}),(0,a.jsxs)("fieldset",{className:"space-y-2",children:[(0,a.jsx)("legend",{className:"text-sm font-medium",children:"관심 분야"}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 text-sm",children:[(0,a.jsxs)("label",{className:"flex items-center gap-2",children:[(0,a.jsx)("input",{type:"radio",name:"interest",value:"A",checked:"A"===u,onChange:()=>p("A")}),"A \xb7 AX 도입 상담"]}),(0,a.jsxs)("label",{className:"flex items-center gap-2",children:[(0,a.jsx)("input",{type:"radio",name:"interest",value:"B",checked:"B"===u,onChange:()=>p("B")}),"B \xb7 과정\xb7교육 문의"]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("label",{htmlFor:"consult-contact",className:"block text-sm font-medium",children:"연락처 (메일 또는 전화)"}),(0,a.jsx)("input",{id:"consult-contact",name:"contact",required:!0,value:x,onChange:e=>f(e.target.value),className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm"})]}),(0,a.jsxs)("label",{className:"flex items-start gap-3 text-sm leading-6",children:[(0,a.jsx)("input",{type:"checkbox",name:"consent",checked:h,onChange:e=>g(e.target.checked),className:"mt-1"}),(0,a.jsx)("span",{children:"입력한 정보는 상담 연락을 위해 서버로 전송하며, 상담 연락에만 사용합니다"})]}),j&&(0,a.jsx)("p",{role:k?"alert":"status",className:k?"text-sm text-destructive":"text-sm text-primary",children:j}),(0,a.jsx)("button",{type:"submit",disabled:!h||b,className:"w-full rounded-md bg-primary px-4 py-2.5 text-sm font-medium text-primary-foreground disabled:cursor-not-allowed disabled:opacity-50",children:b?"보내는 중…":"보내기"})]})]})}},77116:(e,t,s)=>{Promise.resolve().then(s.bind(s,50790))}},e=>{e.O(0,[9638,2201,6356,7358],()=>e(e.s=77116)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2580],{6703:(e,t,r)=>{Promise.resolve().then(r.bind(r,29195))},8801:(e,t,r)=>{"use strict";r.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var a=r(77194),n=r(49954),s=r(9248),o=r(19631),i=r(49638),l=r(35857);let d=(0,n.createContext)(null);function c(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[c,u]=(0,n.useState)(r),[p,m]=(0,n.useState)(""),[g]=(0,n.useState)(()=>new i.ki(r));(0,n.useEffect)(()=>{let e=(0,s.Fp)();u(e),g.updateConfig(e),m((0,o.oD)()),(0,l.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[g]),(0,n.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,s.Fp)();g.updateConfig(t),u(t),(0,l.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&m(t=>t===e.newValue?t:((0,l.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[g]);let x=e=>{u(t=>{let r={...t,...e};return(0,s.Qc)(e),g.updateConfig(r),(0,l.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},v=e=>{m(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,l.cY)("webterm.provider.daemon.session-set",{sessionId:e})},f=(0,n.useMemo)(()=>({config:c,setConfig:x,client:g,sessionId:p,setSessionId:v}),[c,g,p]);return(0,a.jsx)(d.Provider,{value:f,children:t})}function u(){let e=(0,n.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},19631:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>o,f6:()=>n,oD:()=>s});let a="elanous.daemon.sessionId";function n(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(a,e),e):localStorage.getItem(a)}();if(e)return e;let t=n();return localStorage.setItem(a,t),t}function o(){let e=n();return localStorage.setItem(a,e),e}},29195:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var a=r(77194),n=r(61852);function s(){return(0,a.jsx)(n.U,{})}},32576:(e,t,r)=>{"use strict";r.d(t,{p:()=>o});var a=r(77194);r(49954);var n=r(83525),s=r(35083);function o(e){let{className:t,type:r,...o}=e;return(0,a.jsx)(n.p,{type:r,"data-slot":"input",className:(0,s.cn)("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",t),...o})}},35083:(e,t,r)=>{"use strict";r.d(t,{cn:()=>s});var a=r(44196),n=r(25080);function s(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,n.QP)((0,a.$)(t))}},44092:(e,t,r)=>{"use strict";r.d(t,{$:()=>l});var a=r(77194),n=r(51225),s=r(65106),o=r(35083);let i=(0,s.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function l(e){let{className:t,variant:r="default",size:s="default",...l}=e;return(0,a.jsx)(n.$,{"data-slot":"button",className:(0,o.cn)(i({variant:r,size:s,className:t})),...l})}},61852:(e,t,r)=>{"use strict";r.d(t,{U:()=>m});var a=r(77194),n=r(49954),s=r(8801),o=r(44092),i=r(32576);function l(e){let{items:t}=e;return 0===t.length?(0,a.jsx)("div",{className:"rounded-lg border border-dashed border-border p-6 text-center text-sm text-muted-foreground",children:"No control signals matched the current filter."}):(0,a.jsx)("ul",{className:"space-y-2",children:t.map((e,t)=>{var r,n,s,o,i;let l=[(null==(r=e.scope)?void 0:r.surface)&&"surface=".concat(e.scope.surface),(null==(n=e.scope)?void 0:n.channel)&&"channel=".concat(e.scope.channel),(null==(s=e.scope)?void 0:s.sessionId)&&"session=".concat(e.scope.sessionId)].filter(Boolean).join(" \xb7 ")||"unscoped";return(0,a.jsxs)("li",{className:"rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsxs)("div",{className:"text-sm font-medium",children:[e.kind," \xb7 ",e.urgency]}),(0,a.jsxs)("div",{className:"mt-0.5 font-mono text-[10px] text-muted-foreground",children:[function(e){let t=Date.now()-new Date(e).getTime();return t<6e4?"just now":t<36e5?"".concat(Math.floor(t/6e4),"m ago"):t<864e5?"".concat(Math.floor(t/36e5),"h ago"):"".concat(Math.floor(t/864e5),"d ago")}(e.createdAt)," \xb7 ",null!=(o=e.source)?o:"unknown"," \xb7 ",l]}),(0,a.jsx)("pre",{className:"mt-2 overflow-x-auto rounded-md bg-muted p-2 text-[11px]",children:JSON.stringify(null!=(i=e.payload)?i:{},null,2)})]},t)})})}let d=["background","quick-pass","normal","priority","critical"];class c{async list(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new URLSearchParams;Object.entries(e).forEach(e=>{let[r,a]=e;a&&t.set(r,a)});let r=t.toString();return this.client.fetchJson("/v1/control-signals".concat(r?"?".concat(r):""))}emit(e){return this.client.fetchJson("/v1/control-signals",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)})}constructor(e){this.client=e}}var u=r(46479),p=r(35857);function m(){var e,t,r,m;let{client:g}=(0,s.Q)(),x=(0,n.useMemo)(()=>new c(g),[g]),[v,f]=(0,n.useState)({items:[]}),[b,h]=(0,n.useState)(!1),[y,w]=(0,n.useState)(""),[k,j]=(0,n.useState)(""),[N,S]=(0,n.useState)(""),[C,z]=(0,n.useState)(""),[I,E]=(0,n.useState)(""),[U,D]=(0,n.useState)(""),[_,O]=(0,n.useState)("normal"),[P,J]=(0,n.useState)("operator"),[R,Y]=(0,n.useState)(""),[M,V]=(0,n.useState)(""),[$,F]=(0,n.useState)(""),[L,Q]=(0,n.useState)(""),[T,q]=(0,n.useState)(!1),A=(0,n.useCallback)(async()=>{(0,p.cY)("webterm.control.list.refresh",{kind:y,surface:k,minUrgency:N,sessionId:C,limit:I}),h(!0);try{let e=await x.list({kind:y||void 0,surface:k||void 0,minUrgency:N||void 0,sessionId:C||void 0,limit:I||void 0});f(e)}catch(e){u.oR.error("signals list failed: ".concat(e instanceof Error?e.message:e))}finally{h(!1)}},[x,y,k,N,C,I]);(0,n.useEffect)(()=>{A()},[A]);let B=async e=>{if(e.preventDefault(),!U.trim())return void u.oR.error("kind required");let t={};if(L.trim())try{t=JSON.parse(L)}catch(e){u.oR.error("payload must be valid JSON");return}let r={kind:U.trim(),urgency:_,source:P.trim()||"operator",mayPreempt:T,payload:t,scope:{...R?{surface:R}:{},...M?{channel:M}:{},...$?{sessionId:$}:{}}};(0,p.cY)("webterm.control.emit",{kind:r.kind,urgency:r.urgency});try{h(!0),await x.emit(r),u.oR.success("signal emitted"),Q(""),await A()}catch(e){u.oR.error("emit failed: ".concat(e instanceof Error?e.message:e))}finally{h(!1)}},K=null!=(e=v.countsByKind)?e:{};return(0,a.jsxs)("div",{className:"mx-auto max-w-5xl space-y-4 p-4",children:[(0,a.jsxs)("header",{className:"space-y-2",children:[(0,a.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Control signals"}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2 text-[11px] text-muted-foreground",children:[(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["total ",null!=(t=v.total)?t:0]}),(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:["latest ",null!=(r=v.latest)?r:"-"]}),Object.entries(K).map(e=>{let[t,r]=e;return(0,a.jsxs)("span",{className:"rounded-full border border-border px-2 py-0.5",children:[t," ",r]},t)})]})]}),(0,a.jsxs)("form",{onSubmit:e=>{e.preventDefault(),A()},className:"flex flex-wrap items-center gap-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsx)(i.p,{value:y,onChange:e=>w(e.target.value),placeholder:"kind",className:"flex-1 min-w-[140px]"}),(0,a.jsx)(i.p,{value:k,onChange:e=>j(e.target.value),placeholder:"surface",className:"flex-1 min-w-[140px]"}),(0,a.jsxs)("select",{value:N,onChange:e=>S(e.target.value),className:"h-9 flex-1 min-w-[170px] rounded-md border border-input bg-background px-2 text-sm",children:[(0,a.jsx)("option",{value:"",children:"min urgency (any)"}),d.map(e=>(0,a.jsx)("option",{value:e,children:e},e))]}),(0,a.jsx)(i.p,{value:C,onChange:e=>z(e.target.value),placeholder:"session id",className:"flex-1 min-w-[140px]"}),(0,a.jsx)(i.p,{value:I,onChange:e=>E(e.target.value),placeholder:"limit",type:"number",className:"w-[100px]"}),(0,a.jsx)(o.$,{type:"submit",size:"sm",disabled:b,children:"Filter"})]}),(0,a.jsxs)("form",{onSubmit:B,className:"space-y-2 rounded-lg border border-border bg-card p-3 shadow-sm",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold",children:"Emit a signal"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)(i.p,{value:U,onChange:e=>D(e.target.value),placeholder:"kind (required)",className:"flex-1 min-w-[140px]"}),(0,a.jsx)("select",{value:_,onChange:e=>{let t=e.target.value;"string"==typeof t&&d.includes(t)&&O(t)},className:"h-9 rounded-md border border-input bg-background px-2 text-sm",children:d.map(e=>(0,a.jsx)("option",{value:e,children:e},e))}),(0,a.jsx)(i.p,{value:P,onChange:e=>J(e.target.value),placeholder:"source",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:R,onChange:e=>Y(e.target.value),placeholder:"scope.surface",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:M,onChange:e=>V(e.target.value),placeholder:"scope.channel",className:"flex-1 min-w-[120px]"}),(0,a.jsx)(i.p,{value:$,onChange:e=>F(e.target.value),placeholder:"scope.session",className:"flex-1 min-w-[120px]"}),(0,a.jsxs)("label",{className:"flex items-center gap-1.5 text-xs",children:[(0,a.jsx)("input",{type:"checkbox",checked:T,onChange:e=>q(e.target.checked)}),"mayPreempt"]})]}),(0,a.jsx)("textarea",{value:L,onChange:e=>Q(e.target.value),placeholder:'payload JSON (optional, e.g. {"reason":"manual"})',rows:3,className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 font-mono text-xs"}),(0,a.jsx)(o.$,{type:"submit",size:"sm",disabled:b,children:"Emit"})]}),(0,a.jsx)(l,{items:null!=(m=v.items)?m:[]})]})}}},e=>{e.O(0,[8085,5194,6479,3525,9638,2201,6356,7358],()=>e(e.s=6703)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1422],{8801:(e,t,r)=>{"use strict";r.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var n=r(77194),s=r(49954),a=r(9248),i=r(19631),l=r(49638),o=r(35857);let d=(0,s.createContext)(null);function c(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[c,u]=(0,s.useState)(r),[m,p]=(0,s.useState)(""),[x]=(0,s.useState)(()=>new l.ki(r));(0,s.useEffect)(()=>{let e=(0,a.Fp)();u(e),x.updateConfig(e),p((0,i.oD)()),(0,o.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[x]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();x.updateConfig(t),u(t),(0,o.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(t=>t===e.newValue?t:((0,o.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[x]);let h=e=>{u(t=>{let r={...t,...e};return(0,a.Qc)(e),x.updateConfig(r),(0,o.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},b=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,o.cY)("webterm.provider.daemon.session-set",{sessionId:e})},f=(0,s.useMemo)(()=>({config:c,setConfig:h,client:x,sessionId:m,setSessionId:b}),[c,x,m]);return(0,n.jsx)(d.Provider,{value:f,children:t})}function u(){let e=(0,s.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},19631:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>i,f6:()=>s,oD:()=>a});let n="elanous.daemon.sessionId";function s(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=s();return localStorage.setItem(n,t),t}function i(){let e=s();return localStorage.setItem(n,e),e}},53920:(e,t,r)=>{"use strict";async function n(e){let t=await e.fetchResponse("/v1/ops-board/notices");if(!t.ok)throw Error("notices list failed: ".concat(t.status));return(await t.json()).notices}async function s(e,t,r){let n=await e.fetchResponse("/v1/ops-board/notices",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({noticeId:t,body:r})});if(!n.ok)throw Error("notice reply failed: ".concat(n.status));return(await n.json()).reply}async function a(e){let t=await e.fetchResponse("/v1/decisions?status=open");if(!t.ok)throw Error("decisions list failed: ".concat(t.status));return(await t.json()).decisions}async function i(e,t,r,n){let s=await e.fetchResponse("/v1/decisions/".concat(encodeURIComponent(t),"/decide"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({choice:r,...void 0===n?{}:{note:n}})});if(!s.ok)throw Error("decision failed: ".concat(s.status));return s.json()}r.d(t,{LD:()=>i,aj:()=>s,kh:()=>n,qK:()=>a})},60369:(e,t,r)=>{Promise.resolve().then(r.bind(r,94087))},94087:(e,t,r)=>{"use strict";r.d(t,{DecisionBoard:()=>d});var n=r(77194),s=r(49954),a=r(8801),i=r(53920);let l=e=>new Intl.DateTimeFormat("ko-KR",{timeZone:"Asia/Seoul",year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}).format(new Date(e)),o=e=>(null==e?void 0:e.trim())||"(비움)";function d(){let{client:e}=(0,a.Q)(),[t,r]=(0,s.useState)({items:[],error:null,loading:!0}),[d,c]=(0,s.useState)("decisions"),[u,m]=(0,s.useState)(0),[p,x]=(0,s.useState)({items:[],loading:!1,error:null}),[h,b]=(0,s.useState)({}),[f,g]=(0,s.useState)(null),[j,y]=(0,s.useState)({}),[v,w]=(0,s.useState)({}),[k,N]=(0,s.useState)(null),[S,C]=(0,s.useState)(null),[E,D]=(0,s.useState)({}),[A,I]=(0,s.useState)({}),U=(0,s.useRef)(null),R=(0,s.useRef)(0),T=(0,s.useRef)(e);T.current=e,(0,s.useEffect)(()=>{if("notices"!==d)return;let t=!0;return x({items:[],loading:!0,error:null}),(0,i.kh)(e).then(e=>{t&&x({items:e,loading:!1,error:null})}).catch(e=>{t&&x({items:[],loading:!1,error:e instanceof Error?e.message:String(e)})}),()=>{t=!1}},[e,d,u]);let K=(0,s.useRef)(!1),L=async t=>{var r;let n=(null!=(r=h[t.id])?r:"").trim();if(n&&!K.current){K.current=!0,g(t.id),y(e=>({...e,[t.id]:""}));try{if(await (0,i.aj)(e,t.id,n),T.current!==e)return;b(e=>({...e,[t.id]:""})),y(e=>({...e,[t.id]:"".concat(t.from," 수신함으로 보냄")}))}catch(r){T.current===e&&y(e=>({...e,[t.id]:"전송 실패 \xb7 ".concat(r instanceof Error?r.message:String(r))}))}finally{K.current=!1,T.current===e&&g(null)}}};(0,s.useEffect)(()=>{let t=!0;U.current=null;let n=++R.current;return r({items:[],error:null,loading:!0}),w({}),N(null),C(null),D({}),I({}),b({}),g(null),y({}),(0,i.qK)(e).then(e=>{t&&R.current===n&&r({items:[...e].sort((e,t)=>{var r,n;return(e.dueAt?Date.parse(e.dueAt):1/0)-(t.dueAt?Date.parse(t.dueAt):1/0)||(null!=(r=e.raisedAt)?r:"").localeCompare(null!=(n=t.raisedAt)?n:"")||e.id.localeCompare(t.id)}),error:null,loading:!1})}).catch(e=>{t&&R.current===n&&r({items:[],error:e instanceof Error?e.message:String(e),loading:!1})}),()=>{t=!1,++R.current}},[e]);let O=async function(t,r){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(U.current||E[t.id])return;if(t.irreversible&&(!n||(null==k?void 0:k.id)!==t.id||k.key!==r))return void N({id:t.id,key:r});let s=R.current;U.current=t.id,C(t.id),N(null),I(e=>({...e,[t.id]:""}));try{var a,l,o;let n=await (0,i.LD)(e,t.id,r,(null!=(l=v[t.id])?l:"").replace(/\s+/g," ").trim().slice(0,300)||void 0);if(T.current!==e||R.current!==s)return;let d=null!=(o=null==(a=t.options.find(e=>e.id===r))?void 0:a.label)?o:r;D(e=>({...e,[t.id]:{label:d,at:n.decidedAt}}))}catch(n){if(T.current!==e||R.current!==s)return;let r=n instanceof Error?n.message:String(n);I(e=>({...e,[t.id]:r.includes("decision failed: 409")?"이미 결정됨":r.includes("decision failed: 404")?"사라진 결정":"결정 실패 \xb7 ".concat(r)}))}finally{T.current===e&&R.current===s&&(U.current=null,C(null))}};return(0,n.jsxs)("main",{className:"mx-auto w-full max-w-3xl px-3 py-5 text-foreground sm:px-6",children:[(0,n.jsxs)("header",{className:"mb-5",children:[(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"운영 \xb7 결정"}),(0,n.jsx)("h1",{className:"text-xl font-semibold",children:"결정 대기 카드"})]}),(0,n.jsxs)("nav",{"aria-label":"운영 게시판",className:"mb-4 flex gap-2",children:[(0,n.jsx)("button",{type:"button","aria-current":"decisions"===d?"page":void 0,onClick:()=>c("decisions"),className:"rounded-md border border-border px-3 py-2",children:"결정"}),(0,n.jsx)("button",{type:"button","aria-current":"notices"===d?"page":void 0,onClick:()=>c("notices"),className:"rounded-md border border-border px-3 py-2",children:"공지 \xb7 의견"}),"notices"===d&&(0,n.jsx)("button",{type:"button",onClick:()=>m(e=>e+1),className:"rounded-md border border-border px-3 py-2",children:"공지 새로고침"})]}),"notices"===d?(0,n.jsx)("section",{"aria-label":"공지 \xb7 의견",children:p.loading?(0,n.jsx)("p",{role:"status",children:"공지 읽는 중"}):p.error?(0,n.jsxs)("p",{role:"alert",children:["공지 못 읽음 \xb7 ",p.error]}):0===p.items.length?(0,n.jsx)("p",{children:"도착한 공지가 없습니다."}):(0,n.jsx)("ol",{className:"space-y-4",children:p.items.map(e=>{var t,r,s;return(0,n.jsxs)("li",{className:"rounded-xl border border-border bg-card p-4",children:[(0,n.jsxs)("p",{className:"text-sm text-muted-foreground",children:[e.from," → 대표 \xb7 ",null!=(t=e.kind)?t:"공지"," \xb7 ",(0,n.jsxs)("time",{dateTime:e.createdAt,children:[l(e.createdAt)," KST"]})]}),(0,n.jsx)("p",{className:"my-3 whitespace-pre-wrap break-words",children:e.body}),(0,n.jsxs)("label",{className:"block text-sm",children:[e.from," 자리에게 답글",(0,n.jsx)("textarea",{maxLength:3e3,value:null!=(r=h[e.id])?r:"",onChange:t=>b(r=>({...r,[e.id]:t.target.value})),className:"mt-1 block w-full rounded-md border border-border bg-background px-3 py-2"})]}),(0,n.jsx)("button",{type:"button",disabled:null!==f||!(null!=(s=h[e.id])?s:"").trim(),onClick:()=>{L(e)},className:"mt-2 rounded-md border border-border px-3 py-1 disabled:opacity-50",children:"답글 보내기"}),j[e.id]&&(0,n.jsx)("p",{role:"status",children:j[e.id]})]},e.id)})})}):t.loading?(0,n.jsx)("p",{role:"status",children:"읽는 중"}):t.error?(0,n.jsxs)("p",{role:"alert",children:["못 읽음 \xb7 ",t.error]}):0===t.items.length?(0,n.jsx)("p",{children:"열린 결정이 없습니다."}):(0,n.jsx)("ol",{className:"space-y-4",children:t.items.map(e=>{var t,r,s,a,i,d,c,u,m,p;let x=E[e.id],h=(null==k?void 0:k.id)===e.id?e.options.find(e=>e.id===k.key):void 0,b=e.recommendation;return(0,n.jsx)("li",{className:"min-w-0 rounded-xl border border-border bg-card p-4",children:x?(0,n.jsxs)("details",{children:[(0,n.jsxs)("summary",{className:"cursor-pointer font-medium",children:["결정됨: ",x.label," \xb7 ",x.at?"".concat(l(x.at)," KST"):"시각 미상"]}),(0,n.jsx)("p",{className:"mt-2 text-sm",children:e.title})]}):(0,n.jsxs)("article",{"aria-label":e.title,className:"space-y-3 break-words",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{className:"text-lg font-semibold",children:e.title}),(0,n.jsxs)("p",{className:"text-sm text-muted-foreground",children:["올린 자리: ",null!=(d=null==(t=e.raisedBy)?void 0:t.agent)?d:"(비움)",(null==(r=e.raisedBy)?void 0:r.track)?"(".concat(e.raisedBy.track,")"):""]}),e.category&&(0,n.jsxs)("p",{className:"text-sm text-muted-foreground",children:["분류: ",e.category]}),e.irreversible&&(0,n.jsx)("p",{className:"font-medium text-amber-700",children:"⚠️ 되돌릴 수 없음"})]}),(0,n.jsx)("dl",{className:"space-y-1 text-sm",children:["s","c","q","a"].map(t=>{var r,s;return(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsxs)("dt",{className:"font-semibold",children:[t.toUpperCase(),":"]}),(0,n.jsx)("dd",{className:"min-w-0 whitespace-pre-wrap",children:o(null!=(s=null==(r=e.scqa)?void 0:r[t])?s:"s"===t?e.situation:void 0)})]},t)})}),(0,n.jsx)("p",{className:"text-sm font-medium",children:"skipped"in b?"권고 없음: ".concat(b.reason):"권고: ".concat(null!=(c=null==(s=e.options.find(e=>e.id===b.option))?void 0:s.label)?c:b.option," — ").concat(b.why)}),e.alternative&&(0,n.jsxs)("p",{className:"text-sm",children:["대안: ",null!=(u=null==(a=e.options.find(t=>t.id===e.alternative))?void 0:a.label)?u:e.alternative]}),(0,n.jsx)("ul",{className:"space-y-2",children:e.options.map(t=>(0,n.jsxs)("li",{className:"flex flex-wrap items-center justify-between gap-2 rounded-lg border border-border p-2 text-sm",children:[(0,n.jsxs)("span",{children:[t.id.toUpperCase(),") ",t.label," — ",o(t.consequence)]}),(0,n.jsxs)("button",{type:"button",disabled:null!==S,onClick:()=>{O(e,t.id)},className:"rounded-md border border-border px-3 py-1 font-medium hover:bg-muted disabled:opacity-50",children:[t.label," 선택"]})]},t.id))}),(0,n.jsx)("p",{className:"text-sm",children:(null==(i=e.crossCheck)?void 0:i.length)?"교차 확인: ".concat(e.crossCheck.map(e=>"".concat(e.seat," ✓ ").concat(e.note).concat(e.at?" \xb7 ".concat(l(e.at)," KST"):"")).join(" \xb7 ")):"교차 확인 없음(".concat(null!=(m=e.crossCheckSkipped)?m:"미기재",")")}),e.dissent&&(0,n.jsxs)("p",{className:"text-sm",children:["이견: ",e.dissent]}),e.dueAt&&(0,n.jsxs)("p",{className:"text-sm",children:["기한: ",(0,n.jsxs)("time",{dateTime:e.dueAt,children:[l(e.dueAt)," KST"]})]}),e.pendingQuestion&&(0,n.jsxs)("details",{className:"text-sm",children:[(0,n.jsx)("summary",{className:"cursor-pointer",children:"대기 질문 전문"}),(0,n.jsx)("p",{className:"mt-2 whitespace-pre-wrap",children:e.pendingQuestion})]}),(0,n.jsxs)("label",{className:"block text-sm",children:["한 줄 의견 (최대 300자)",(0,n.jsx)("input",{type:"text",maxLength:300,value:null!=(p=v[e.id])?p:"",onChange:t=>w(r=>({...r,[e.id]:t.target.value.slice(0,300)})),className:"mt-1 block w-full rounded-md border border-border bg-background px-3 py-2"})]}),h&&(0,n.jsxs)("div",{role:"alert",className:"rounded-md border border-amber-600 p-2 text-sm",children:[(0,n.jsxs)("p",{children:["되돌릴 수 없습니다 — 이것으로 정할까요? (",h.label,")"]}),(0,n.jsx)("button",{type:"button",disabled:null!==S,onClick:()=>{O(e,h.id,!0)},className:"mr-3 underline",children:"예, 결정"}),(0,n.jsx)("button",{type:"button",onClick:()=>N(null),className:"underline",children:"취소"})]}),S===e.id&&(0,n.jsx)("p",{role:"status",children:"기록 중"}),A[e.id]&&(0,n.jsx)("p",{role:"alert",children:A[e.id]})]})},e.id)})})]})}}},e=>{e.O(0,[9638,2201,6356,7358],()=>e(e.s=60369)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6348],{6896:(e,t,s)=>{"use strict";s.d(t,{M1:()=>c,Qj:()=>d,tI:()=>o});var r=s(77194),n=s(49954),i=s(6066),a=s(91403);let l=(0,n.createContext)(null);function o(e){let{client:t,queryClient:s,defaultStaleTimeMs:o,children:c}=e,d=(0,n.useMemo)(()=>null!=s?s:new i.E({defaultOptions:{queries:{staleTime:null!=o?o:2e3,refetchOnWindowFocus:!1}}}),[s,o]);return(0,r.jsx)(l.Provider,{value:t,children:(0,r.jsx)(a.Ht,{client:d,children:c})})}function c(){let e=(0,n.useContext)(l);if(!e)throw Error("useNexusClient must be used within <NexusProvider>");return e}function d(){return(0,n.useContext)(l)}},13399:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(30728).A)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]])},28948:(e,t,s)=>{"use strict";s.d(t,{AF:()=>r});let r={all:["nexus"],health:()=>[...r.all,"health"],snapshot:()=>[...r.all,"snapshot"],tabs:e=>e?[...r.all,"tabs",{kind:e}]:[...r.all,"tabs"],tab:e=>[...r.all,"tab",e],templates:()=>[...r.all,"templates"],template:e=>[...r.all,"template",e],config:()=>[...r.all,"config"],switches:()=>[...r.all,"switches"],switch:e=>[...r.all,"switch",e],secrets:()=>[...r.all,"secrets"],bindingChannels:()=>[...r.all,"bindings","channels"],bindings:e=>[...r.all,"bindings",e],binding:(e,t)=>[...r.all,"binding",e,t],logsTail:(e,t)=>t?[...r.all,"logs",e,{lines:t}]:[...r.all,"logs",e],workflows:()=>[...r.all,"workflows"],workflow:e=>[...r.all,"workflow",e],workflowRun:e=>[...r.all,"workflow-run",e],workflowRuns:()=>[...r.all,"workflow-runs"],pendingApprovals:()=>[...r.all,"workflow-pending-approvals"],platforms:()=>[...r.all,"platforms"],providers:()=>[...r.all,"providers"],worktrees:()=>[...r.all,"worktrees"],designCheck:()=>[...r.all,"design-check"],designPreviews:()=>[...r.all,"design-previews"],designPreview:e=>[...r.all,"design-preview",e],registryCatalog:()=>[...r.all,"registry-catalog"],resolvedView:()=>[...r.all,"resolved-view"]};r.snapshot(),r.tabs(),r.health(),r.snapshot(),r.config(),r.switches()},29968:(e,t,s)=>{"use strict";s.d(t,{n:()=>d});var r=s(49954),n=s(94192),i=s(25869),a=s(59270),l=s(91716),o=class extends a.Q{#e;#t=void 0;#s;#r;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#n()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),(0,l.f8)(this.options,t)||this.#e.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#s,observer:this}),t?.mutationKey&&this.options.mutationKey&&(0,l.EN)(t.mutationKey)!==(0,l.EN)(this.options.mutationKey)?this.reset():this.#s?.state.status==="pending"&&this.#s.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#s?.removeObserver(this)}onMutationUpdate(e){this.#n(),this.#i(e)}getCurrentResult(){return this.#t}reset(){this.#s?.removeObserver(this),this.#s=void 0,this.#n(),this.#i()}mutate(e,t){return this.#r=t,this.#s?.removeObserver(this),this.#s=this.#e.getMutationCache().build(this.#e,this.options),this.#s.addObserver(this),this.#s.execute(e)}#n(){let e=this.#s?.state??(0,n.$)();this.#t={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#i(e){i.jG.batch(()=>{if(this.#r&&this.hasListeners()){let t=this.#t.variables,s=this.#t.context,r={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type==="success"){try{this.#r.onSuccess?.(e.data,t,s,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(e.data,null,t,s,r)}catch(e){Promise.reject(e)}}else if(e?.type==="error"){try{this.#r.onError?.(e.error,t,s,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(void 0,e.error,t,s,r)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},c=s(91403);function d(e,t){let s=(0,c.jE)(t),[n]=r.useState(()=>new o(s,e));r.useEffect(()=>{n.setOptions(e)},[n,e]);let a=r.useSyncExternalStore(r.useCallback(e=>n.subscribe(i.jG.batchCalls(e)),[n]),()=>n.getCurrentResult(),()=>n.getCurrentResult()),d=r.useCallback((e,t)=>{n.mutate(e,t).catch(l.lQ)},[n]);if(a.error&&(0,l.GU)(n.options.throwOnError,[a.error]))throw a.error;return{...a,mutate:d,mutateAsync:a.mutate}}},30728:(e,t,s)=>{"use strict";s.d(t,{A:()=>c});var r=s(49954);let n=function(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return t.filter((e,t,s)=>!!e&&""!==e.trim()&&s.indexOf(e)===t).join(" ").trim()},i=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,s)=>s?s.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var a={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let l=(0,r.createContext)({}),o=(0,r.forwardRef)((e,t)=>{var s,i,o;let{color:c,size:d,strokeWidth:u,absoluteStrokeWidth:h,className:m="",children:p,iconNode:f,...g}=e,{size:x=24,strokeWidth:b=2,absoluteStrokeWidth:y=!1,color:v="currentColor",className:w=""}=null!=(s=(0,r.useContext)(l))?s:{},k=(null!=h?h:y)?24*Number(null!=u?u:b)/Number(null!=d?d:x):null!=u?u:b;return(0,r.createElement)("svg",{ref:t,...a,width:null!=(i=null!=d?d:x)?i:a.width,height:null!=(o=null!=d?d:x)?o:a.height,stroke:null!=c?c:v,strokeWidth:k,className:n("lucide",w,m),...!p&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(g)&&{"aria-hidden":"true"},...g},[...f.map(e=>{let[t,s]=e;return(0,r.createElement)(t,s)}),...Array.isArray(p)?p:[p]])}),c=(e,t)=>{let s=(0,r.forwardRef)((s,a)=>{let{className:l,...c}=s;return(0,r.createElement)(o,{ref:a,iconNode:t,className:n("lucide-".concat(i(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),l),...c})});return s.displayName=i(e),s}},34115:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(30728).A)("book-open",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]])},35857:(e,t,s)=>{"use strict";let r;s.d(t,{cY:()=>d,x8:()=>l});let n={debug:0,info:1,warn:2,error:3},i="/v1/debug-logs/batch",a=null;function l(e){a=e}class o{health(){return{pending:this.queue.length,consecutiveFailures:this.consecutiveFailures,lastOkAt:this.lastOkAt,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches}}push(e){if(!(n[function(e){let t=e.slice(e.lastIndexOf(".")+1).toLowerCase();return/^(error|exception|crash|fail|failed)$/.test(t)?"error":/^(warn|degraded|timeout)$/.test(t)?"warn":/^(boot|ready|start|begin|open|ok|done|resolve|end|stop|close)$/.test(t)?"info":"debug"}(e.category)]<n[this.minLevel])){if(this.queue.push(e),this.queue.length>500){let e=this.queue.length-500;this.droppedByCap+=e,this.queue.splice(0,e)}if(this.queue.length>=100&&!this.inFlight){null!==this.timer&&(clearTimeout(this.timer),this.timer=null),this.flush();return}null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},this.flushMs))}}async flush(){if(this.timer&&(clearTimeout(this.timer),this.timer=null),this.inFlight||0===this.queue.length)return;let e=this.queue.slice(0,100);this.inFlight=!0;let t=!1,s=JSON.stringify({records:e});try{var r,n;t=await (r=this.fetchFn(s),n=this.postTimeoutMs,new Promise((e,t)=>{let s=setTimeout(()=>t(Error("debug-forward timeout after ".concat(n,"ms"))),n);r.then(t=>{clearTimeout(s),e(t)},e=>{clearTimeout(s),t(e)})}))}catch(e){t=!1}finally{this.inFlight=!1}if(!t){if(this.consecutiveFailures+=1,this.consecutiveFailures>=2&&a)try{await a(JSON.stringify({records:[...e,this.blockedNotice()]}))&&(this.fallbackBatches+=1)}catch(e){}this.wasFailing=!0,this.scheduleRetry();return}let i=this.lastOkAt;this.lastOkAt=Date.now();let l=this.consecutiveFailures;this.consecutiveFailures=0,this.queue.splice(0,e.length),this.wasFailing&&(this.wasFailing=!1,this.queue.push({ts:new Date().toISOString(),category:"pwa.debug-forwarder.recovered",event:"recovered",data:{consecutiveFailures:l,droppedByCap:this.droppedByCap,fallbackBatches:this.fallbackBatches,pending:this.queue.length,previousOkAt:i},source:{platform:"pwa"}})),this.queue.length>0&&null===this.timer&&(this.timer=setTimeout(()=>{this.flush()},this.flushMs))}scheduleRetry(){if(null!==this.timer||0===this.queue.length)return;let e=Math.min(this.flushMs*2**this.consecutiveFailures,3e4);this.timer=setTimeout(()=>{this.flush()},e)}blockedNotice(){return{ts:new Date().toISOString(),category:"pwa.debug-forwarder.http-blocked",event:"http-blocked",data:{consecutiveFailures:this.consecutiveFailures,pending:this.queue.length,droppedByCap:this.droppedByCap,lastOkAt:this.lastOkAt,via:"acp-fallback"},source:{platform:"pwa"}}}beaconFlush(){if(0!==this.queue.length)try{if("undefined"!=typeof navigator&&"function"==typeof navigator.sendBeacon){let e=this.queue.slice(0,100),t=new Blob([JSON.stringify({records:e})],{type:"application/json"});navigator.sendBeacon(i,t)&&this.queue.splice(0,e.length)}}catch(e){}}get pending(){return this.queue.length}constructor(e=c,t="debug",s=1e4,r=100){this.fetchFn=e,this.minLevel=t,this.postTimeoutMs=s,this.flushMs=r,this.queue=[],this.timer=null,this.inFlight=!1,this.consecutiveFailures=0,this.lastOkAt=null,this.droppedByCap=0,this.fallbackBatches=0,this.wasFailing=!1}}async function c(e){return(await fetch(i,{method:"POST",headers:{"content-type":"application/json"},body:e,keepalive:!0,..."undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout?{signal:AbortSignal.timeout(1e4)}:{}})).ok}function d(e,t){if("undefined"==typeof console)return;let s=new Date().toISOString();if(void 0!==t){let r="";try{let e=new WeakSet;r=JSON.stringify(t,(t,s)=>{if("bigint"==typeof s)return"".concat(s.toString(),"n");if("function"==typeof s)return"[fn ".concat(s.name||"anon","]");if(s&&"object"==typeof s){if(e.has(s))return"[circular]";e.add(s)}return s})}catch(e){r="[unserializable: ".concat(String(e),"]")}r&&r.length>800&&(r=r.slice(0,797)+"..."),console.debug("[".concat(s,"] ").concat(e," ").concat(r),t),u(s,e,r)}else console.debug("[".concat(s,"] ").concat(e)),u(s,e,void 0)}function u(e,t,s){let n,i=function(){if(void 0!==r)return r;let e=function(){try{let e="off"!==window.localStorage.getItem("elanous.pwa.debug.forward"),t=window.localStorage.getItem("elanous.pwa.debug.forwardLevel");return{forward:e,level:"info"===t||"warn"===t||"error"===t?t:"debug"}}catch(e){return{forward:!0,level:"debug"}}}();if(!e.forward)return r=null,null;let t=new o(c,e.level,1e4,1500);try{window.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&t.beaconFlush()})}catch(e){}return r=t,t}();if(!i)return;let a=t.slice(t.lastIndexOf(".")+1)||t;if(void 0!==s&&""!==s)try{n=JSON.parse(s)}catch(e){n=s}i.push({ts:e,category:t,event:a,...void 0!==n?{data:n}:{},source:{platform:"pwa"}})}},56876:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(30728).A)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},67079:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>E});var r=s(77194),n=s(79854),i=s(56876);let a=(0,s(30728).A)("circle-dashed",[["path",{d:"M10.1 2.182a10 10 0 0 1 3.8 0",key:"5ilxe3"}],["path",{d:"M13.9 21.818a10 10 0 0 1-3.8 0",key:"11zvb9"}],["path",{d:"M17.609 3.721a10 10 0 0 1 2.69 2.7",key:"1iw5b2"}],["path",{d:"M2.182 13.9a10 10 0 0 1 0-3.8",key:"c0bmvh"}],["path",{d:"M20.279 17.609a10 10 0 0 1-2.7 2.69",key:"1ruxm7"}],["path",{d:"M21.818 10.1a10 10 0 0 1 0 3.8",key:"qkgqxc"}],["path",{d:"M3.721 6.391a10 10 0 0 1 2.7-2.69",key:"1mcia2"}],["path",{d:"M6.391 20.279a10 10 0 0 1-2.69-2.7",key:"1fvljs"}]]);var l=s(34115),o=s(13399),c=s(49954),d=s(6896),u=s(59917),h=s(91403),m=s(29968),p=s(28948),f=s(45785);function g(e){let{available:t,declared:s,onPick:n,pendingId:i,previews:a,onPreview:l}=e,{systems:o,themes:c}=function(e){let t=[],s=[];for(let r of e)("design-system"===r.source?t:s).push(r);return{systems:t,themes:s}}(t);return(0,r.jsxs)("div",{className:"space-y-4",children:[o.length>0&&(0,r.jsx)(x,{title:"Design systems",hint:"Web \xb7 copies tokens.css and DESIGN.md into design/system/",items:o,declared:s,onPick:n,pendingId:i,previews:a,onPreview:l}),c.length>0&&(0,r.jsx)(x,{title:"Terminal themes",hint:"One line in DESIGN.md",items:c,declared:s,onPick:n,pendingId:i,previews:a,onPreview:l})]})}function x(e){let{title:t,hint:s,items:n,declared:i,onPick:a,pendingId:l,previews:o,onPreview:c}=e;return(0,r.jsxs)("section",{className:"space-y-2","aria-label":t,children:[(0,r.jsxs)("h3",{className:"flex items-baseline gap-2 text-xs font-medium uppercase tracking-wide text-muted-foreground",children:[t,(0,r.jsxs)("span",{className:"normal-case tracking-normal",children:[n.length," \xb7 ",s]})]}),(0,r.jsx)("ul",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2 lg:grid-cols-3",children:n.map(e=>(0,r.jsx)(b,{direction:e,chosen:e.id===i,onPick:a,pending:l===e.id,busy:null!==l,hasPreview:(null==o?void 0:o.has(e.id))===!0&&void 0!==c,onPreview:c},e.id))})]})}function b(e){var t,s,n,a,l,o,c,d,u;let{direction:h,chosen:m,onPick:p,pending:f,busy:g,hasPreview:x,onPreview:b}=e,y=null!=(n=h.swatch.bg)?n:h.isDark?"#111111":"#ffffff",v=null!=(a=h.swatch.fg)?a:h.swatch.text,w=null!=(o=null!=(l=null==(t=h.typography)?void 0:t.display)?l:null==(s=h.typography)?void 0:s.body)?o:null;return(0,r.jsxs)("li",{"data-direction":h.id,"data-direction-id":h.id,className:"flex flex-col gap-2 rounded-md border p-3 text-sm ".concat(m?"border-primary ring-1 ring-primary":""),children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5","aria-hidden":!0,children:[[y,v,h.swatch.accent].map((e,t)=>(0,r.jsx)("span",{className:"h-5 w-5 rounded-full border",style:{backgroundColor:e,borderColor:h.swatch.muted}},t)),h.category&&(0,r.jsx)("span",{className:"ml-auto truncate text-[11px] text-muted-foreground",children:h.category})]}),(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("p",{className:"truncate font-medium",children:null!=(c=h.label)?c:h.id}),(0,r.jsxs)("p",{className:"truncate text-xs text-muted-foreground",children:[(0,r.jsx)("code",{children:h.id}),w?" \xb7 ".concat(w):""]}),(0,r.jsx)("p",{className:"mt-1 line-clamp-2 text-xs text-muted-foreground",children:h.mood})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[x&&(0,r.jsx)("button",{type:"button",onClick:()=>null==b?void 0:b(h.id),className:"self-start rounded-md border px-2.5 py-1 text-xs hover:bg-muted","aria-label":"Preview ".concat(null!=(d=h.label)?d:h.id),children:"Preview"}),m?(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 text-xs text-primary",children:[(0,r.jsx)(i.A,{className:"h-3.5 w-3.5","aria-hidden":!0}),"Selected"]}):(0,r.jsx)("button",{type:"button",disabled:g,onClick:()=>p(h.id),className:"self-start rounded-md border px-2.5 py-1 text-xs hover:bg-muted disabled:opacity-50","aria-label":"Select ".concat(null!=(u=h.label)?u:h.id),children:f?"Selecting…":"Select"})]})]})}let y=/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;function v(e){return e.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean)}function w(e,t){if("undefined"==typeof document)return t;let s=document.getElementById(e);return s&&"value"in s&&"string"==typeof s.value?s.value:t}function k(e){let{onCreate:t,onSelect:s,pending:n,result:i,error:a}=e,[l,o]=(0,c.useState)("url"),[d,u]=(0,c.useState)(""),[h,m]=(0,c.useState)(""),[p,f]=(0,c.useState)(""),g=v(h).filter(e=>y.test(e)),x=v(h).length,b=x>=2&&x<=6&&p.trim().length>0&&g.length===x;return(0,r.jsxs)("section",{className:"rounded-md border p-3","aria-label":"Make my system","data-make-my-system":"",children:[(0,r.jsxs)("div",{className:"flex items-baseline justify-between gap-2",children:[(0,r.jsx)("h3",{className:"text-sm font-medium",children:"Make my system"}),(0,r.jsxs)("div",{className:"flex gap-1",role:"tablist",children:[(0,r.jsx)("button",{type:"button",role:"tab","aria-selected":"url"===l,className:"rounded-md px-2 py-1 text-xs ".concat("url"===l?"bg-muted":""),onClick:()=>o("url"),children:"From a website"}),(0,r.jsx)("button",{type:"button",role:"tab","aria-selected":"colors"===l,className:"rounded-md px-2 py-1 text-xs ".concat("colors"===l?"bg-muted":""),onClick:()=>o("colors"),children:"From colors"})]})]}),(0,r.jsx)("p",{className:"mt-2 text-xs text-muted-foreground",children:"Reference, not a copy — logos, names, images and text are not taken."}),"url"===l?(0,r.jsxs)("form",{className:"mt-2 flex flex-col gap-2 sm:flex-row",onSubmit:e=>{e.preventDefault();let s=d.trim();s&&!n&&t({kind:"url",url:s})},children:[(0,r.jsx)("label",{className:"sr-only",htmlFor:"make-system-url",children:"Website URL"}),(0,r.jsx)("input",{id:"make-system-url",type:"url",value:d,disabled:n,placeholder:"https://example.com",onChange:e=>u(e.target.value),className:"min-w-0 flex-1 rounded-md border bg-transparent px-2 py-1.5 text-sm"}),(0,r.jsx)("button",{type:"button",disabled:n,onClick:()=>{let e=w("make-system-url",d).trim();e&&!n&&t({kind:"url",url:e})},className:"rounded-md border px-3 py-1.5 text-sm hover:bg-muted disabled:opacity-50",children:n?"Measuring…":"Make it"})]}):(0,r.jsxs)("form",{className:"mt-2 space-y-2",onSubmit:e=>{e.preventDefault(),b&&!n&&t({kind:"palette",colors:g,id:p.trim()})},children:[(0,r.jsx)("label",{className:"block text-xs text-muted-foreground",htmlFor:"make-system-colors",children:"2–6 colors"}),(0,r.jsx)("input",{id:"make-system-colors",value:h,disabled:n,placeholder:"#f4efe6, #1f3a2e, #c8553d",onChange:e=>m(e.target.value),className:"w-full rounded-md border bg-transparent px-2 py-1.5 text-sm"}),g.length>0&&(0,r.jsx)("ul",{className:"flex gap-1","aria-label":"Color preview",children:g.map(e=>(0,r.jsx)("li",{className:"h-6 w-6 rounded-sm border",style:{backgroundColor:e},title:e},e))}),(0,r.jsx)("label",{className:"block text-xs text-muted-foreground",htmlFor:"make-system-id",children:"id"}),(0,r.jsx)("input",{id:"make-system-id",value:p,disabled:n,placeholder:"stumptowncoffee",onChange:e=>f(e.target.value),className:"w-full rounded-md border bg-transparent px-2 py-1.5 text-sm"}),(0,r.jsx)("button",{type:"button",disabled:n,onClick:()=>{let e=v(w("make-system-colors",h)).filter(e=>y.test(e)),s=w("make-system-id",p).trim();n||e.length<2||e.length>6||0===s.length||t({kind:"palette",colors:e,id:s})},className:"rounded-md border px-3 py-1.5 text-sm hover:bg-muted disabled:opacity-50",children:n?"Measuring…":"Make it"})]}),n&&(0,r.jsx)("p",{className:"mt-2 text-sm text-muted-foreground",children:"Measuring…"}),a&&(0,r.jsx)("p",{className:"mt-2 text-sm text-error",role:"alert",children:a}),i&&(0,r.jsxs)("div",{className:"mt-2 space-y-1 text-sm",children:[(0,r.jsxs)("p",{children:["Made ",i.id," — ",i.tokens.length," tokens \xb7 ",i.unread," unread"]}),i.warnings.map(e=>(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:e},e)),(0,r.jsx)("button",{type:"button",onClick:()=>s(i.id),className:"rounded-md border px-2.5 py-1 text-xs hover:bg-muted",children:"Select it"})]})]})}let j={missing:"Missing",declared:"Declared",available:"Not declared"},N={missing:"bg-error/10 text-error",declared:"bg-green-600/10 text-green-700",available:"bg-muted text-muted-foreground"},S={missing:n.A,declared:i.A,available:a};function C(){return(0,d.Qj)()?(0,r.jsx)(M,{}):(0,r.jsxs)("div",{className:"mx-auto max-w-2xl space-y-2 p-6",children:[(0,r.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Design check"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Connect to a NEXUS daemon to see this repository's craft rulebooks."})]})}function M(){let{data:e,isLoading:t,error:s,refetch:i,isFetching:a}=function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=(0,d.M1)();return(0,u.I)({queryKey:p.AF.designCheck(),queryFn:()=>s.getDesignCheck(),enabled:null==(e=t.enabled)||e,refetchInterval:3e4})}();return(0,r.jsxs)("div",{className:"mx-auto max-w-3xl space-y-4 p-6",children:[(0,r.jsxs)("header",{className:"flex items-start justify-between gap-4",children:[(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsxs)("h1",{className:"flex items-center gap-2 text-xl font-semibold tracking-tight",children:[(0,r.jsx)(l.A,{className:"h-5 w-5","aria-hidden":!0}),"Design check"]}),(0,r.jsxs)("p",{className:"text-sm text-muted-foreground",children:["Craft rulebooks declared by this repository's ",(0,r.jsx)("code",{children:"DESIGN.md"}),"."]})]}),(0,r.jsxs)("button",{type:"button",onClick:()=>void i(),className:"inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1.5 text-sm hover:bg-muted","aria-label":"Refresh design check",children:[(0,r.jsx)(o.A,{className:"h-4 w-4 ".concat(a?"animate-spin":""),"aria-hidden":!0}),"Refresh"]})]}),t&&(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Loading…"}),s&&(0,r.jsxs)("p",{className:"rounded-md bg-error/10 p-3 text-sm text-error",children:["Could not reach the daemon: ",s instanceof Error?s.message:String(s)]}),e&&!1===e.ok&&(0,r.jsxs)("div",{className:"space-y-2 rounded-md border border-warning/40 bg-warning/5 p-4",children:[(0,r.jsxs)("p",{className:"flex items-center gap-2 text-sm font-medium",children:[(0,r.jsx)(n.A,{className:"h-4 w-4 text-warning","aria-hidden":!0}),"Design check blocked"]}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:function(e,t){switch(e){case"no-repository":return"The daemon is not running inside a git checkout, so there is no DESIGN.md to check.";case"craft-directory":return"elanous's craft rulebook directory could not be read: ".concat(null!=t?t:"(unknown path)");case"design-document":return"This repository has no readable DESIGN.md: ".concat(null!=t?t:"(unknown path)");default:return"The design check is blocked (".concat(e,").")}}(e.blockedOn,e.path)})]}),e&&!0===e.ok&&(0,r.jsx)(A,{data:e})]})}function A(e){let{data:t}=e,s=function(e){let t=new Set(e.unavailableRulebooks),s=new Map;for(let t of e.availableRulebooks)s.set(t,"available");for(let r of e.declaredRulebooks)s.set(r,t.has(r)?"missing":"declared");let r={missing:0,declared:1,available:2};return[...s.entries()].map(e=>{let[t,s]=e;return{name:t,status:s}}).sort((e,t)=>r[e.status]-r[t.status]||e.name.localeCompare(t.name))}(t),n=t.unavailableRulebooks.length;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"rounded-md p-3 text-sm ".concat(n?"bg-error/10 text-error":"bg-green-600/10 text-green-700"),children:n?"".concat(n," declared rulebook").concat(1===n?"":"s"," could not be found."):"All ".concat(t.declaredRulebooks.length," declared rulebook").concat(1===t.declaredRulebooks.length?"":"s"," resolve.")}),(0,r.jsxs)("dl",{className:"grid grid-cols-1 gap-1 text-xs text-muted-foreground sm:grid-cols-2",children:[(0,r.jsxs)("div",{className:"truncate sm:col-span-2",children:[(0,r.jsx)("dt",{className:"inline font-medium",children:"Repository: "}),(0,r.jsxs)("dd",{className:"inline",children:[(0,r.jsx)("code",{children:t.repoRoot}),t.repoSource&&(0,r.jsxs)("span",{className:"ml-1",children:["(","config"===t.repoSource?"harness.defaultRepo":"daemon folder",")"]})]})]}),(0,r.jsxs)("div",{className:"truncate",children:[(0,r.jsx)("dt",{className:"inline font-medium",children:"Document: "}),(0,r.jsx)("dd",{className:"inline",children:(0,r.jsx)("code",{children:t.documentPath})})]}),(0,r.jsxs)("div",{className:"truncate",children:[(0,r.jsx)("dt",{className:"inline font-medium",children:"Rulebooks: "}),(0,r.jsx)("dd",{className:"inline",children:(0,r.jsx)("code",{children:t.craftDirectory})})]})]}),(0,r.jsx)(O,{data:t}),0===s.length?(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"elanous ships no craft rulebooks and this document declares none."}):(0,r.jsx)("ul",{className:"divide-y rounded-md border",children:s.map(e=>{let t=S[e.status];return(0,r.jsxs)("li",{className:"flex items-center justify-between gap-3 px-3 py-2",children:[(0,r.jsxs)("span",{className:"flex items-center gap-2 text-sm",children:[(0,r.jsx)(t,{className:"h-4 w-4 shrink-0","aria-hidden":!0}),(0,r.jsx)("code",{children:e.name})]}),(0,r.jsx)("span",{className:"shrink-0 rounded-full px-2 py-0.5 text-xs ".concat(N[e.status]),children:j[e.status]})]},e.name)})})]})}function O(e){var t,s,n,i;let{data:a}=e,l=function(){let e=(0,d.M1)(),t=(0,h.jE)();return(0,m.n)({mutationFn:t=>e.setDesignDirection(t),onSuccess:()=>t.invalidateQueries({queryKey:p.AF.designCheck()})})}(),o=function(){let e=(0,d.M1)(),t=(0,h.jE)();return(0,m.n)({mutationFn:t=>e.createDesignSystem(t),onSuccess:()=>t.invalidateQueries({queryKey:p.AF.designCheck()})})}(),x=function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=(0,d.M1)();return(0,u.I)({queryKey:p.AF.designPreviews(),queryFn:()=>s.listDesignPreviews(),enabled:null==(e=t.enabled)||e,refetchInterval:3e4})}(),[b,y]=(0,c.useState)(null),[v,w]=(0,c.useState)(null),j=a.directions;if((0,c.useEffect)(()=>{if(!v||!j)return;let e=document.querySelector('[data-direction-id="'.concat(v.replace(/"/g,""),'"]'));null==e||e.scrollIntoView({block:"nearest"})},[v,j]),!j)return null;let N=l.isPending&&null!=(s=l.variables)?s:null;return(0,r.jsxs)("section",{className:"space-y-2",children:[(0,r.jsx)("h2",{className:"text-sm font-medium",children:"Design direction"}),(0,r.jsx)(k,{pending:o.isPending,result:null!=(n=o.data)?n:null,error:o.isError?function(e){switch(e instanceof f.Iu&&e.body&&"object"==typeof e.body?e.body.reason:void 0){case"bad-url":return"That address is not an http or https URL.";case"bad-id":return"The id may only use lowercase letters, digits, and hyphens.";case"id-taken":return"That id is already taken.";case"extract-failed":return"The page could not be measured.";case"no-colors":return"Give between 2 and 6 colors.";case"busy":return"Another system is being made — wait for it to finish.";default:if(e instanceof f.Iu&&401===e.status)return"Only the owner can make a system — sign in first.";return"Could not make the system: ".concat(e instanceof Error?e.message:String(e))}}(o.error):null,onCreate:e=>{o.mutate(e,{onSuccess:e=>w(e.id)})},onSelect:e=>{w(e),l.mutate(e)}}),j.unavailable&&(0,r.jsxs)("p",{className:"rounded-md bg-error/10 p-2 text-sm text-error",children:["Declared direction ",(0,r.jsx)("code",{children:j.unavailable})," is not registered."]}),null===j.declared&&!j.unavailable&&(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"None declared — pick one below."}),l.isError&&(0,r.jsx)("p",{className:"rounded-md bg-error/10 p-2 text-sm text-error",children:function(e){switch(e instanceof f.Iu&&e.body&&"object"==typeof e.body?e.body.reason:void 0){case"unknown-direction":return"The daemon does not know this direction.";case"no-repository":return"The daemon has no repository to write to (set harness.defaultRepo).";case"conflicting-system-file":return"design/system/ already holds a file the daemon will not overwrite.";case"cannot-read":return"The DESIGN.md could not be read.";case"cannot-write":return"The DESIGN.md could not be written.";default:if(e instanceof f.Iu&&401===e.status)return"Only the owner can pick a direction — sign in first.";return"Could not set the direction: ".concat(e instanceof Error?e.message:String(e))}}(l.error)}),b&&(0,r.jsx)(F,{system:b,onClose:()=>y(null),onSelect:()=>l.mutate(b),selecting:N===b,busy:null!==N,alreadySelected:j.declared===b}),(0,r.jsx)(g,{available:j.available,declared:j.declared,pendingId:N,previews:new Set((null!=(i=null==(t=x.data)?void 0:t.previews)?i:[]).map(e=>e.system)),onPreview:e=>y(e),onPick:e=>l.mutate(e)})]})}function F(e){let{system:t,onClose:s,onSelect:n,selecting:i,busy:a,alreadySelected:l}=e,o=function(e){let t=(0,d.M1)();return(0,u.I)({queryKey:p.AF.designPreview(null!=e?e:""),queryFn:()=>t.getDesignPreview(e),enabled:null!==e&&""!==e})}(t);return(0,r.jsxs)("div",{className:"space-y-2 rounded-md border p-3",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsxs)("p",{className:"text-sm font-medium",children:["Preview \xb7 ",(0,r.jsx)("code",{children:t})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[l?(0,r.jsx)("span",{className:"text-xs text-primary",children:"Selected"}):(0,r.jsx)("button",{type:"button",disabled:a,onClick:n,className:"rounded-md border px-2.5 py-1 text-xs hover:bg-muted disabled:opacity-50","aria-label":"Select ".concat(t),children:i?"Selecting…":"Select"}),(0,r.jsx)("button",{type:"button",onClick:s,className:"rounded-md border px-2.5 py-1 text-xs hover:bg-muted","aria-label":"Close preview",children:"Close"})]})]}),o.isLoading&&(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Loading preview…"}),o.isError&&(0,r.jsxs)("p",{className:"text-sm text-error",children:["Could not load the preview: ",o.error instanceof Error?o.error.message:String(o.error)]}),o.data&&(0,r.jsx)("iframe",{sandbox:"",srcDoc:o.data.html,title:"Preview \xb7 ".concat(t),className:"h-80 w-full rounded-md border bg-white"})]})}function E(){return(0,r.jsx)(C,{})}},71350:(e,t,s)=>{"use strict";s.d(t,{Qb:()=>a,SI:()=>o,dJ:()=>l});let r="elanous:auth-required",n=null,i=!1;function a(e){null===n&&(n=e,window.dispatchEvent(new CustomEvent(r,{detail:{path:e}})))}function l(e){let t=window,s=t=>e(t.detail);return t.addEventListener(r,s),null===n||i||e({path:n}),()=>t.removeEventListener(r,s)}function o(){i=!0}},79854:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(30728).A)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},92889:(e,t,s)=>{Promise.resolve().then(s.bind(s,67079))}},e=>{e.O(0,[2566,9917,5785,2201,6356,7358],()=>e(e.s=92889)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6766],{8801:(e,r,t)=>{"use strict";t.d(r,{C:()=>i,DaemonProvider:()=>u,Q:()=>c});var n=t(77194),a=t(49954),s=t(9248),o=t(19631),l=t(49638),d=t(35857);let i=(0,a.createContext)(null);function u(e){let{children:r}=e,t={baseUrl:"",token:"",provider:""},[u,c]=(0,a.useState)(t),[p,m]=(0,a.useState)(""),[f]=(0,a.useState)(()=>new l.ki(t));(0,a.useEffect)(()=>{let e=(0,s.Fp)();c(e),f.updateConfig(e),m((0,o.oD)()),(0,d.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,a.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let r=(0,s.Fp)();f.updateConfig(r),c(r),(0,d.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!r.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&m(r=>r===e.newValue?r:((0,d.cY)("webterm.provider.daemon.session-cross-tab",{previous:r||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let x=e=>{c(r=>{let t={...r,...e};return(0,s.Qc)(e),f.updateConfig(t),(0,d.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),t})},h=e=>{m(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,d.cY)("webterm.provider.daemon.session-set",{sessionId:e})},g=(0,a.useMemo)(()=>({config:u,setConfig:x,client:f,sessionId:p,setSessionId:h}),[u,f,p]);return(0,n.jsx)(i.Provider,{value:g,children:r})}function c(){let e=(0,a.useContext)(i);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},19631:(e,r,t)=>{"use strict";t.d(r,{Zr:()=>o,f6:()=>a,oD:()=>s});let n="elanous.daemon.sessionId";function a(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let r=a();return localStorage.setItem(n,r),r}function o(){let e=a();return localStorage.setItem(n,e),e}},31618:(e,r,t)=>{"use strict";t.r(r),t.d(r,{default:()=>ev});var n=t(77194),a=t(49954),s=t(91403),o=t(59917),l=t(98451),d=t(80920),i=t(2504);t(46914);var u=t(65807),c=t(6896),p=t(45785),m=t(82641);let f=[{graph:"workflow",label:"작업 노드",fallbackKinds:m.CF},{graph:"harness",label:"실행 단계 노드",fallbackKinds:m.DN}];var x=t(45423),h=t(52256);t(53006),t(53648);var g=t(77064),b=t(39636);let v=/^[a-z0-9-]+$/,y=["recipes","overlay","overlays"],k=["ok","rework","fail"];function j(e){return"cmd:".concat(e)}function w(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"my-graph";return{graphId:e,entry:null,terminals:[],nodes:[],edges:[]}}function N(e,r){var t,n,a,s;let o=null!=(t=r.id)?t:function(e,r){var t;let n=(null!=(t=r.split(":").pop())?t:"node").replace(/[^A-Za-z0-9_-]/g,"-")||"node",a=new Set(e.nodes.map(e=>e.id));for(let e=1;;e++)if(!a.has("".concat(n,"-").concat(e)))return"".concat(n,"-").concat(e)}(e,r.kind);if(e.nodes.some(e=>e.id===o))throw Error("이미 있는 노드 id 입니다: ".concat(o));let l=void 0!==r.x&&void 0!==r.y?{x:r.x,y:r.y}:function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"horizontal",t=e.nodes.length;return"vertical"===r?{x:40,y:40+130*t}:{x:40+t%5*240,y:40+180*Math.floor(t/5)}}(e,r.flow),d={id:o,kind:r.kind,recipe:null!=(n=r.recipe)?n:j(o),maxVisits:null!=(a=r.maxVisits)?a:1,...l};return{graph:{...e,entry:null!=(s=e.entry)?s:o,nodes:[...e.nodes,d]},id:o}}function S(e,r,t){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",a=n.trim();if(r===t)throw Error("같은 노드끼리는 연결할 수 없습니다");return e.edges.some(e=>e.from===r&&e.to===t&&e.outcome===a)?e:{...e,edges:[...e.edges,{from:r,to:t,outcome:a}]}}function C(e,r){var t;let n=e.edges.filter(e=>e.from===r);return n.some(e=>!e.outcome)?"":null!=(t=k.find(e=>!n.some(r=>r.outcome===e)))?t:""}function I(e,r){return{...e,edges:e.edges.filter((e,t)=>t!==r)}}function E(e,r,t){var n;let a=null==(n=t.id)?void 0:n.trim();if(void 0!==a&&a!==r){if(!a)throw Error("노드 id 는 비울 수 없습니다");if(e.nodes.some(e=>e.id===a))throw Error("이미 있는 노드 id 입니다: ".concat(a))}let s=e=>a&&e===r?a:e;return{...e,entry:null===e.entry?null:s(e.entry),terminals:e.terminals.map(s),nodes:e.nodes.map(e=>{var n;if(e.id!==r)return e;let s=null!=(n=t.recipe)?n:a&&e.recipe===j(r)?j(a):e.recipe;return{...e,...t,id:a||r,recipe:s}}),edges:e.edges.map(e=>({...e,from:s(e.from),to:s(e.to)}))}}function R(e,r,t){if(!e.nodes.some(e=>e.id===r))return e;let n=e.terminals.filter(e=>e!==r);return{...e,terminals:t?[...n,r]:n}}function A(e){let r=new Set(e.nodes.map(e=>e.id));return e.terminals.filter(e=>r.has(e))}function z(e){var r,t,n;let a=new u.yo({graph_id:e.graphId,version:"number"==typeof(null==(r=e.extra)?void 0:r.version)?e.extra.version:1,...e.entry?{entry_node:e.entry}:{},terminal_nodes:A(e)}).toString(),s=(0,m.lu)(a);for(let r of e.nodes)(0,m.bC)(s,{nodeId:r.id,kind:r.kind,recipe:r.recipe,maxVisits:r.maxVisits});for(let r of e.edges)r.outcome?(0,m.W3)(s,{from:r.from,outcome:r.outcome,to:r.to}):(0,m.lN)(s,r.from,r.to);for(let[r,n]of Object.entries(null!=(t=e.extra)?t:{}))s.has(r)||s.set(r,s.createNode(n));let o=s.get("nodes");e.nodes.forEach((e,r)=>{let t=(0,u.oP)(o)?o.items[r]:void 0;if((0,u.jh)(t)){var n;for(let[r,a]of Object.entries(null!=(n=e.extra)?n:{}))t.has(r)||t.set(r,s.createNode(a))}});let l=s.get("edges"),d=(0,u.oP)(l)?l.items.filter(e=>(0,u.jh)(e)):[];for(let r of e.edges){let e=d.find(e=>e.get("from")===r.from&&(r.outcome?e.has("map"):e.get("to")===r.to));if(e)for(let[t,a]of Object.entries(null!=(n=r.extra)?n:{}))"on"!==t&&e.has(t)||e.set(t,s.createNode(a))}return(0,m.ys)(s)}function _(e,r){var t,n;let a=[],s=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return a.push({message:e,source:"local",...r})};v.test(e.graphId)||s("그래프 id 는 영문 소문자\xb7숫자\xb7- 만 쓸 수 있습니다"),y.includes(e.graphId)&&s("\xab".concat(e.graphId,"\xbb 는 예약된 그래프 id 입니다")),0===e.nodes.length&&s("노드가 하나도 없습니다");let o=new Map;for(let r of e.nodes)o.set(r.id,(null!=(t=o.get(r.id))?t:0)+1);for(let t of e.nodes)(!t.id.trim()||/\s/.test(t.id))&&s("노드 id 는 비우거나 공백을 넣을 수 없습니다",{nodeId:t.id}),(null!=(n=o.get(t.id))?n:0)>1&&s("노드 id \xab".concat(t.id,"\xbb 가 겹칩니다"),{nodeId:t.id}),r&&!r.includes(t.kind)&&s("팔레트에 없는 kind 입니다: ".concat(t.kind),{nodeId:t.id}),t.recipe.trim()||s("recipe 가 비었습니다",{nodeId:t.id}),(!Number.isInteger(t.maxVisits)||t.maxVisits<1)&&s("max_visits 는 1 이상의 정수여야 합니다",{nodeId:t.id});let l=new Set(e.nodes.map(e=>e.id));for(let r of(e.edges.forEach((e,r)=>{l.has(e.from)||s("간선 출발 \xab".concat(e.from,"\xbb 은 없는 노드입니다"),{edgeIndex:r}),l.has(e.to)||s("간선 도착 \xab".concat(e.to,"\xbb 은 없는 노드입니다"),{edgeIndex:r,...l.has(e.from)?{nodeId:e.from}:{}})}),l)){let t=e.edges.filter(e=>e.from===r),n=t.filter(e=>!e.outcome);n.length>1&&s("조건 없는 간선은 노드마다 하나만 둘 수 있습니다 — 결과 이름을 붙이세요",{nodeId:r}),n.length>0&&n.length<t.length&&s("조건 없는 간선과 결과 간선을 섞을 수 없습니다",{nodeId:r});let a=t.filter(e=>e.outcome).map(e=>e.outcome);new Set(a).size<a.length&&s("같은 결과 이름의 간선이 둘 이상입니다",{nodeId:r})}return e.nodes.length>0&&(e.entry&&l.has(e.entry)||s("시작 노드를 정하세요"),0===A(e).length&&s("끝 노드가 없습니다 — 노드를 골라 \xab끝 노드\xbb 로 표시하세요")),{ok:0===a.length,issues:a}}function D(e,r){let t={};try{var n;t=null!=(n=(0,u.parse)(e))?n:{}}catch(e){}return r.errors.map(e=>{var r,n,a,s,o,l;let d=/\/nodes\/(\d+)/.exec(null!=(o=e.path)?o:""),i=/\/edges\/(\d+)/.exec(null!=(l=e.path)?l:""),u=d?null==(n=t.nodes)||null==(r=n[Number(d[1])])?void 0:r.node_id:i?null==(s=t.edges)||null==(a=s[Number(i[1])])?void 0:a.from:void 0;return{message:e.message,source:"server",..."string"==typeof u?{nodeId:u}:{}}})}function M(e){var r,t;let n=(0,u.parse)(e);if(!n||"object"!=typeof n)throw Error("그래프 YAML 최상위가 맵이 아닙니다");let a=(Array.isArray(n.nodes)?n.nodes:[]).flatMap(e=>e&&"string"==typeof e.node_id?[{id:e.node_id,kind:"string"==typeof e.kind?e.kind:"",recipe:"string"==typeof e.recipe?e.recipe:"",maxVisits:"number"==typeof e.max_visits?e.max_visits:1,x:0,y:0,...V(e,["node_id","kind","recipe","max_visits"])}]:[]),s=(Array.isArray(n.edges)?n.edges:[]).flatMap(e=>e&&"string"==typeof e.from?"string"==typeof e.to?[{from:e.from,to:e.to,outcome:"",...V(e,["from","to"])}]:e.map&&"object"==typeof e.map?Object.entries(e.map).filter(e=>"string"==typeof e[1]).map(r=>{let[t,n]=r;return{from:e.from,to:n,outcome:t,...V(e,["from","map",..."outcome"===e.on?["on"]:[]])}}):[]:[]),o="string"==typeof n.entry_node?n.entry_node:null!=(t=null==(r=a[0])?void 0:r.id)?t:null;G(a,s,o,"horizontal");let l=new Set(a.map(e=>e.id)),d=(Array.isArray(n.terminal_nodes)?n.terminal_nodes:[]).filter(e=>"string"==typeof e&&l.has(e));return{graphId:"string"==typeof n.graph_id?n.graph_id:"my-graph",entry:o,terminals:d,nodes:a,edges:s,...V(n,["graph_id","entry_node","terminal_nodes","nodes","edges"])}}let O={width:180,height:72};function P(e){return"fail"===e?"실패 시":e}function G(e,r,t,n,a){let s=(0,b.Fq)(e.map(e=>({id:e.id,...O})),r,{entry:t,flow:n,rename:P,...void 0!==a?{lineLength:a}:{}});for(let r of e){let e=s.get(r.id);e&&(r.x=e.x,r.y=e.y)}}function V(e,r){let t=Object.fromEntries(Object.entries(e).filter(e=>{let[t]=e;return!r.includes(t)}));return Object.keys(t).length>0?{extra:t}:{}}async function T(e,r,t,n){let a=await e.putRunGraphAccess(r,t,n),s=await e.getRunGraphAccess(r);if(!s.grants.some(e=>e.recipient===a.recipient&&e.permission===n))throw Error("권한 적용을 확인할 수 없습니다");return s}function L(e){return{ok:!1,issues:[{source:"server",message:e}]}}async function F(e,r,t,n,a){try{let s=a&&Object.keys(a).length?a:void 0,o="create"===n?await e.createRunGraph(r,t,s):await e.putRunGraphYaml(r,t,s);return{ok:!0,id:r,created:"create"===n,..."number"==typeof o.version?{version:o.version}:{}}}catch(a){var s,o;if(!(a instanceof p.Iu))return L("저장 실패: ".concat(a instanceof Error?a.message:String(a)));let e=null!=(s=a.body)?s:{};if(Array.isArray(e.errors)&&e.errors.length>0)return{ok:!1,issues:D(t,{errors:e.errors})};if("create"===n&&(404===a.status||405===a.status))return L("새 그래프 저장(POST /v1/graphs)을 이 Daemon 이 아직 지원하지 않습니다 — 서버 업데이트 후 다시 저장하세요");if(409===a.status)return L("\xab".concat(r,"\xbb 는 이미 있는 그래프 id 입니다 — 다른 id 를 쓰세요"));if("reserved-id"===e.error)return L("\xab".concat(r,"\xbb 는 예약된 id 라 쓸 수 없습니다 — 다른 id 를 쓰세요"));if("graph-id-mismatch"===e.error)return L("YAML 의 graph_id 가 저장할 id 와 다릅니다");if(403===a.status)return L("\xab".concat(r,"\xbb 는 기본 제공 그래프라 덮어쓸 수 없습니다 — 다른 id 를 쓰세요"));if("update"===n&&404===a.status)return L("\xab".concat(r,"\xbb 가 서버에 없습니다 — 새 그래프로 저장하세요"));return L(null!=(o=e.reason)?o:e.error?"저장 실패: ".concat(e.error," (").concat(a.status,")"):"저장 실패 (".concat(a.status,")"))}}var K=t(75085);let B="application/x-elanous-graph-kind",Y={agent:"#3b82f6",gate:"#f59e0b",git:"#10b981",judge:"#a855f7",observe:"#06b6d4",hitl:"#f43f5e",subgraph:"#8b5cf6"},U={running:{word:"● 도는 중",ring:"#3b82f6",chip:"bg-blue-500/15 text-blue-400"},done:{word:"✓ 끝",ring:"#10b981",chip:"bg-emerald-500/15 text-emerald-400"},failed:{word:"✗ 실패",ring:"#ef4444",chip:"bg-red-500/15 text-red-400"},skipped:{word:"– 건너뜀",ring:"#6b7280",chip:"bg-muted text-muted-foreground"},awaiting_approval:{word:"⏸ 승인 대기",ring:"#f59e0b",chip:"bg-amber-500/15 text-amber-400"}},W={canvas:function(e){var r;let{data:t,selected:a}=e,s="vertical"===t.flow,o=t.runStatus?U[t.runStatus]:void 0;return(0,n.jsxs)("div",{"data-testid":"canvas-node-".concat(t.id),"data-run-status":t.runStatus,className:"rounded-lg border bg-background px-3 py-2 shadow-sm ".concat(t.issueCount?"border-red-500":a?"border-primary":"border-border"),style:{width:O.width,borderLeft:"4px solid ".concat(null!=(r=Y[t.kind])?r:"#64748b"),...o?{boxShadow:"0 0 0 2px ".concat(o.ring)}:{}},children:[(0,n.jsx)(d.h7,{id:"in",type:"target",position:s?i.yX.Top:i.yX.Left,className:"!h-3 !w-3"}),(0,n.jsxs)("div",{className:"flex items-center gap-1 text-[10px] text-muted-foreground",children:[(0,n.jsx)("span",{children:t.kind}),t.entry&&(0,n.jsx)("span",{className:"rounded bg-emerald-500/15 px-1 text-emerald-500",children:"시작"}),t.terminal&&(0,n.jsx)("span",{className:"rounded bg-sky-500/15 px-1 text-sky-500",children:"끝"}),t.issueCount>0&&(0,n.jsxs)("span",{className:"rounded bg-red-500/15 px-1 text-red-500",children:["오류 ",t.issueCount]}),o&&(0,n.jsx)("span",{className:"rounded px-1 font-semibold ".concat(o.chip),children:o.word})]}),t.label?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"max-w-[150px] truncate text-sm font-semibold text-foreground",title:t.label,children:t.label}),(0,n.jsx)("div",{className:"font-mono text-[10px] text-muted-foreground",children:t.id})]}):(0,n.jsx)("div",{className:"font-mono text-sm font-semibold text-foreground",children:t.id}),(0,n.jsx)("div",{className:"max-w-[150px] truncate text-[10px] text-muted-foreground",title:t.recipe,children:t.recipe}),(0,n.jsx)(d.h7,{id:"out",type:"source",position:s?i.yX.Bottom:i.yX.Right,className:"!h-3 !w-3"})]})}},Z={"--xy-controls-button-background-color":"var(--card)","--xy-controls-button-background-color-hover":"var(--muted)","--xy-controls-button-color":"var(--foreground)","--xy-controls-button-color-hover":"var(--foreground)","--xy-controls-button-border-color":"var(--border)","--xy-controls-box-shadow":"0 0 0 1px var(--border)"};function q(e){var r,t,s;let{palette:o,client:l,initialGraph:i,initialSaved:u,nodeStatus:c,renderActions:p,onChange:m,onSaved:f,replace:x,highlight:h,wizardMode:v=!1,nodeLabels:y,wizardSteps:j,installedPacks:E,onKnowledgePackChange:R}=e,[V,T]=(0,a.useState)(()=>null!=i?i:w("")),[L,U]=(0,a.useState)({}),[q,X]=(0,a.useState)(()=>u?JSON.stringify(null!=j?j:{}):null),[H,Q]=(0,a.useState)(void 0),$=(null!=j?j:H)&&Object.fromEntries(Object.entries(null!=(r=null!=j?j:H)?r:{}).map(e=>{let[r,t]=e;return[r,void 0!==L[r]&&"knowledge-rag"===t.step?{...t,arg:L[r]}:t]})),[ee,er]=(0,a.useState)(null),[et,en]=(0,a.useState)(null),[ea,es]=(0,a.useState)(null),[eo,el]=(0,a.useState)(null),[ed,ei]=(0,a.useState)(null),[eu,ec]=(0,a.useState)(()=>u&&i?{id:i.graphId,yaml:z(i)}:null),[ep,em]=(0,a.useState)(null),[ef,ex]=(0,a.useState)([]),[eh,eg]=(0,a.useState)(""),[eb,ev]=(0,a.useState)(null),ey=(0,a.useRef)(null),ek=(0,a.useRef)(null),[ej,ew]=(0,a.useState)("horizontal"),[eN,eS]=(0,a.useState)(void 0),eC=(0,a.useRef)(.85);eC.current=v?.6:.85,(0,a.useEffect)(()=>{let e=ek.current;if(!e||"undefined"==typeof ResizeObserver)return;let r=new ResizeObserver(e=>{var r;let[t]=e,n=null!=(r=null==t?void 0:t.contentRect.width)?r:1e3;ew(n<640?"vertical":"horizontal"),eS(n<640?void 0:100*Math.floor(n/eC.current/100))});return r.observe(e),()=>r.disconnect()},[]);let eI=(0,a.useRef)(!1),eE=(0,a.useRef)({flow:ej,lineLength:eN});eE.current={flow:ej,lineLength:eN};let eR=(0,a.useCallback)(e=>eI.current||e.nodes.length<2?e:function(e,r,t){let n=e.nodes.map(e=>({...e}));return G(n,e.edges,e.entry,r,t),{...e,nodes:n}}(e,eE.current.flow,eE.current.lineLength),[]),eA=(0,a.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;setTimeout(()=>{let r=ey.current,t=ek.current;r&&Promise.resolve(r.fitView({padding:.12,maxZoom:1.1,minZoom:eC.current,...e?{duration:e}:{}})).then(()=>{let e=r.getNodes();if(!t||0===e.length)return;let n=r.getNodesBounds(e),{zoom:a,x:s,y:o}=r.getViewport(),l=t.getBoundingClientRect(),d=n.width*a+48>l.width,i=n.height*a+48>l.height;(d||i)&&r.setViewport({zoom:a,x:d?24-n.x*a:s,y:i?24-n.y*a:o})})},80)},[]),ez=(0,a.useRef)("horizontal:undefined");(0,a.useEffect)(()=>{let e="".concat(ej,":").concat(eN);e===ez.current||eI.current||(ez.current=e,T(e=>eR(e)),eA())},[ej,eN,eR,eA]);let[e_,eD]=(0,a.useState)({}),eM=(0,a.useRef)(null);(0,a.useEffect)(()=>{var e,r;x&&eM.current!==x.rev&&(eM.current=x.rev,T(eR(x.graph)),U({}),Q(void 0),er(null),el(null),es(null),"vertical"===ej&&(null==(r=ek.current)||null==(e=r.scrollIntoView)||e.call(r,{block:"start",behavior:"smooth"})),eA(300))},[x]);let eO=(0,a.useMemo)(()=>{var e;return new Set(null!=(e=null==h?void 0:h.nodes)?e:[])},[h]),eP=(0,a.useMemo)(()=>{var e;return new Set(null!=(e=null==h?void 0:h.edges)?e:[])},[h]),eG=(0,a.useMemo)(()=>o.map(e=>e.kind),[o]),eV=(0,a.useMemo)(()=>z(V),[V]),eT=(0,a.useMemo)(()=>_(V,eG),[V,eG]),eL=(null==eo?void 0:eo.yaml)===eV?eo:null,eF=(null==eL?void 0:eL.server)?eL.issues:[],eK=[...eT.issues,...eF],eB={graphId:V.graphId,yaml:eV,graph:V,valid:eT.ok&&0===eF.length,saved:(null==eu?void 0:eu.id)===V.graphId&&eu.yaml===eV&&(null===q||q===JSON.stringify(null!=$?$:{}))},eY=(0,a.useRef)(eB);eY.current=eB,(0,a.useEffect)(()=>{null==m||m(eY.current)},[m,V,eV,eB.valid,eB.saved]),(0,a.useEffect)(()=>{if(!l)return;let e=!0;return l.getRunGraphs().then(r=>{e&&ex(r.graphs)}).catch(()=>{}),()=>{e=!1}},[l,eu]);let eU=(0,a.useCallback)(e=>{T(r=>{try{let t=e(r);return es(null),t}catch(e){return es(e instanceof Error?e.message:String(e)),r}})},[]),eW=(0,a.useCallback)(()=>eA(200),[eA]);function eZ(e,r){let t=null;eU(n=>{let a=N(n,{kind:e,flow:ej,...null!=r?r:{}});return t=a.id,a.graph}),t&&er({type:"node",id:t}),r||eW()}let eq=(0,a.useMemo)(()=>{var e;let r=new Map;for(let t of eK)t.nodeId&&r.set(t.nodeId,(null!=(e=r.get(t.nodeId))?e:0)+1);return r},[eK]),eJ=(0,a.useMemo)(()=>new Set(A(V)),[V]),eX=(0,a.useMemo)(()=>(0,b.gL)(V.nodes.map(e=>{var r;return{id:e.id,x:e.x,y:e.y,...null!=(r=e_[e.id])?r:O}}),(0,b.IU)(V.edges),{flow:ej,rename:P}),[V.nodes,V.edges,e_,ej]),eH=(0,b.d1)(V.nodes.some(e=>e.id===et)?et:null,eX),eQ=V.nodes.map(e=>{var r;return{id:e.id,type:"canvas",position:{x:e.x,y:e.y},selected:(null==ee?void 0:ee.type)==="node"&&ee.id===e.id,className:[c?(0,g.V)(c[e.id]):"",eO.has(e.id)?"graph-wizard-new":""].filter(Boolean).join(" ")||void 0,...eH&&!eH.nodes.has(e.id)?{style:{opacity:b.zZ.dimNode}}:{},data:{id:e.id,kind:e.kind,recipe:e.recipe,...(null==y?void 0:y[e.id])?{label:y[e.id]}:{},entry:V.entry===e.id,terminal:eJ.has(e.id),issueCount:null!=(r=eq.get(e.id))?r:0,flow:ej,...(null==c?void 0:c[e.id])?{runStatus:c[e.id]}:{}}}}),e$=eX.map(e=>{let r=e.indexes.some(e=>{let r=V.edges[e];return void 0!==r&&eP.has("".concat(r.from,"->").concat(r.to,":").concat(r.outcome))}),t=(0,b.f_)(eH,e.id);return{id:e.id,source:e.from,target:e.to,sourceHandle:"out",targetHandle:"in",type:"tidy",data:{route:e},selected:(null==ee?void 0:ee.type)==="edge"&&e.indexes.includes(ee.index),className:(null==eH?void 0:eH.edges.has(e.id))?"wiring-edge-flow":void 0,animated:t.animated||r||(null==c?void 0:c[e.from])==="done"&&(null==c?void 0:c[e.to])==="running",...eH?{style:t.style}:r?{style:{stroke:"#a855f7",strokeWidth:3}}:{}}});async function e0(){if(em(null),!eT.ok||!l)return void el({yaml:eV,issues:eT.issues,server:!1});ei("validate");try{let e=await l.validateGraph("harness",eV);el({yaml:eV,issues:e.ok&&0===e.errors.length?[]:D(eV,e),server:!0})}catch(e){el({yaml:eV,issues:[{source:"server",message:"검증 요청 실패: ".concat(e instanceof Error?e.message:String(e))}],server:!0})}finally{ei(null)}}async function e1(){if(!l||!eT.ok)return void e0();ei("save"),em(null);let e=V.graphId;try{let r=await F(l,e,eV,(null==eu?void 0:eu.id)===e?"update":"create",$);r.ok?(ec({id:e,yaml:eV,...void 0!==r.version?{version:r.version}:{}}),X(JSON.stringify(null!=$?$:{})),em("\xab".concat(e,"\xbb 를 ").concat(r.created?"새로 ":"","저장했습니다").concat(void 0!==r.version?" (v".concat(r.version,")"):"")),null==f||f(e)):el({yaml:eV,issues:r.issues,server:!0,from:"save"})}finally{ei(null)}}async function e5(e){if(l&&e){ei("load");try{var r;let t=await l.getRunGraphYaml(e),n=M(t.yaml);eI.current=!1,T(eR(n)),U({}),Q(t.steps),X(JSON.stringify(null!=(r=t.steps)?r:{})),er(null),el(null),ec("mine"===t.source?{id:t.id,yaml:z(n)}:null),em("mine"===t.source?"\xab".concat(e,"\xbb 를 불러왔습니다"):"\xab".concat(e,"\xbb 는 기본 제공 그래프입니다 — id 를 바꿔 내 그래프로 저장하세요")),eW()}catch(e){es("불러오기 실패: ".concat(e instanceof Error?e.message:String(e)))}finally{ei(null)}}}let e2=(null==ee?void 0:ee.type)==="node"&&null!=(t=V.nodes.find(e=>e.id===ee.id))?t:null,e4=(null==ee?void 0:ee.type)==="edge"&&null!=(s=V.edges[ee.index])?s:null,e3=eK.filter(e=>!e.nodeId),e6="validate"===ed?null:eL,e9=(0,a.useRef)(null);return(0,a.useEffect)(()=>{var e;V.graphId||null==(e=e9.current)||e.focus()},[V.graphId]),(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col","data-graph-id":V.graphId,"aria-label":"그래프 만들기",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-b border-border px-3 py-2 text-xs",children:[(0,n.jsxs)("label",{className:"flex items-center gap-1 text-muted-foreground",children:["그래프 id",(0,n.jsx)("input",{ref:e9,"aria-label":"그래프 id",value:V.graphId,spellCheck:!1,placeholder:"예: my-graph",autoCapitalize:"off",autoCorrect:"off",onChange:e=>eU(r=>{var t;return t=e.target.value,{...r,graphId:t.trim()}}),className:"w-36 rounded border border-border bg-background px-2 py-1 font-mono text-foreground"})]}),(0,n.jsx)("button",{type:"button",onClick:()=>{T(w("")),Q(void 0),U({}),X(null),er(null),el(null),ec(null),em(null),es(null)},className:"rounded border border-border px-2 py-1",children:"새 그래프"}),l&&(0,n.jsxs)("select",{"aria-label":"그래프 불러오기",value:"",disabled:null!==ed,onChange:e=>{e5(e.target.value)},className:"max-w-[10rem] rounded border border-border bg-background px-1 py-1",children:[(0,n.jsx)("option",{value:"",children:"불러오기…"}),ef.map(e=>(0,n.jsxs)("option",{value:e.id,children:[e.id,"mine"===e.source?" \xb7 내 그래프":""]},e.id))]}),(0,n.jsx)("span",{className:"text-muted-foreground",children:eB.saved?"저장됨".concat((null==eu?void 0:eu.version)!==void 0?" \xb7 v".concat(eu.version):""):(null==eu?void 0:eu.id)===V.graphId?"저장 안 된 변경":"아직 저장 안 함"}),(0,n.jsxs)("div",{className:"ml-auto flex flex-wrap items-center gap-2",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{e0()},disabled:null!==ed,title:l?"저장하지 않고 서버의 그래프 로더로 검증합니다":"Daemon 연결이 없어 로컬 검사만 합니다",className:"rounded border border-border px-3 py-1 disabled:opacity-50",children:"validate"===ed?"검증 중…":"검증"}),(0,n.jsx)("button",{type:"button",onClick:()=>{e1()},disabled:!l||null!==ed||eB.saved,className:"rounded bg-primary px-3 py-1 text-primary-foreground disabled:opacity-50",children:"save"===ed?"저장 중…":"저장"}),null==p?void 0:p(eB)]})]}),e6&&(0===e6.issues.length?(0,n.jsxs)("p",{role:"status","data-testid":"graph-check-line",className:"border-b border-emerald-500/40 bg-emerald-500/10 px-3 py-1.5 text-sm font-medium text-emerald-500",children:["✓ 검증 통과",e6.server?"":" (로컬 검사 — Daemon 연결 없음)"]}):(0,n.jsxs)("div",{role:"alert","data-testid":"graph-check-line",className:"border-b border-red-500/40 bg-red-500/10 px-3 py-1.5 text-sm text-red-500",children:[(0,n.jsxs)("p",{className:"font-medium",children:["✗ ","save"===e6.from?"저장 실패":"검증 실패"," ",e6.issues.length,"건"]}),(0,n.jsx)("ul",{className:"mt-0.5 list-disc pl-5 text-xs",children:e6.issues.map((e,r)=>(0,n.jsxs)("li",{children:[e.nodeId?(0,n.jsxs)("span",{className:"font-mono",children:[e.nodeId,": "]}):null,e.message]},r))})]})),(ea||ep)&&(0,n.jsx)("p",{role:ea?"alert":"status",className:"border-b border-border px-3 py-1 text-xs ".concat(ea?"text-red-500":"text-emerald-500"),children:null!=ea?ea:ep}),(0,n.jsx)("datalist",{id:"graph-canvas-outcomes",children:k.map(e=>(0,n.jsx)("option",{value:e},e))}),(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col ".concat(v?"":"min-[900px]:flex-row"),children:[(0,n.jsxs)("aside",{"aria-label":"노드 팔레트",className:v?"flex shrink-0 items-center gap-2 border-b border-border px-2 py-1.5":"shrink-0 border-b border-border p-2 min-[900px]:w-44 min-[900px]:overflow-y-auto min-[900px]:border-b-0 min-[900px]:border-r",children:[(0,n.jsx)("p",{className:"text-[11px] text-muted-foreground ".concat(v?"shrink-0":"mb-1"),children:v?"눌러서 추가":(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"min-[900px]:hidden",children:"눌러서 추가"}),(0,n.jsx)("span",{className:"hidden min-[900px]:inline",children:"끌어 놓거나 눌러서 추가"})]})}),(0,n.jsx)("ul",{className:v?"flex min-w-0 gap-1 overflow-x-auto":"flex gap-1 overflow-x-auto min-[900px]:flex-col min-[900px]:overflow-visible",children:o.map(e=>{var r,t;return(0,n.jsx)("li",{className:"shrink-0",children:(0,n.jsxs)("button",{type:"button",draggable:!0,title:e.description||e.kind,"aria-label":"".concat(e.kind," 노드 추가"),onDragStart:r=>{r.dataTransfer.setData(B,e.kind),r.dataTransfer.effectAllowed="copy"},onClick:()=>eZ(e.kind),className:"flex w-full items-center gap-1 rounded border border-border bg-background px-2 py-1.5 text-left text-xs hover:bg-muted",style:{borderLeft:"4px solid ".concat(null!=(r=Y[e.kind])?r:"#64748b")},children:[(0,n.jsx)("span",{"aria-hidden":!0,children:"+"}),e.kind,e.plugin&&(0,n.jsx)("small",{className:"rounded bg-accent/15 px-1 text-accent",children:e.plugin})]})},"".concat(null!=(t=e.plugin)?t:"core",":").concat(e.kind))})})]}),(0,n.jsxs)("div",{className:v?"flex min-h-0 flex-1 flex-col min-[900px]:flex-row":"contents",children:[(0,n.jsxs)("section",{ref:ek,"aria-label":"그래프 캔버스",className:"relative h-[56vh] min-h-[300px] shrink-0 bg-background min-[900px]:h-auto min-[900px]:min-w-0 min-[900px]:flex-1",onDragOver:e=>{Array.from(e.dataTransfer.types).includes(B)&&(e.preventDefault(),e.dataTransfer.dropEffect="copy")},onDrop:e=>{var r,t;let n=e.dataTransfer.getData(B);if(!n||!eG.includes(n))return;e.preventDefault();let a=null!=(t=null==(r=ey.current)?void 0:r.screenToFlowPosition({x:e.clientX,y:e.clientY}))?t:{x:40,y:40};eZ(n,{x:a.x-85,y:a.y-30})},children:[0===V.nodes.length&&(0,n.jsx)("div",{className:"pointer-events-none absolute inset-0 z-10 flex items-center justify-center p-6 text-center text-sm text-muted-foreground",children:"빈 캔버스입니다. 팔레트에서 노드를 끌어 놓거나 눌러서 추가하세요."}),(0,n.jsxs)(d.Gc,{nodes:eQ,edges:e$,nodeTypes:W,edgeTypes:K.T,onInit:e=>{ey.current=e},onNodesChange:function(e){for(let r of e){if("dimensions"===r.type&&r.dimensions){let{id:e,dimensions:t}=r;eD(r=>{var n,a;return(null==(n=r[e])?void 0:n.width)===t.width&&(null==(a=r[e])?void 0:a.height)===t.height?r:{...r,[e]:t}})}if("position"===r.type&&r.position){let{id:e,position:t}=r;r.dragging&&(eI.current=!0),eU(r=>(function(e,r,t,n){return{...e,nodes:e.nodes.map(e=>e.id===r?{...e,x:t,y:n}:e)}})(r,e,t.x,t.y))}}},onConnect:e=>{e.source&&e.target&&eU(r=>S(r,e.source,e.target,C(r,e.source)))},onNodeMouseEnter:(e,r)=>en(r.id),onNodeMouseLeave:()=>en(null),onNodeClick:(e,r)=>er({type:"node",id:r.id}),onEdgeClick:(e,r)=>er({type:"edge",index:Number(r.id.slice(1))}),onPaneClick:()=>er(null),deleteKeyCode:null,fitView:!0,fitViewOptions:{padding:.12,maxZoom:1.1,minZoom:v?.6:.85},minZoom:.3,maxZoom:1.5,className:"!bg-background",style:Z,children:[(0,n.jsx)(d.VS,{}),(0,n.jsx)(d.H2,{showInteractive:!1,position:"bottom-left"})]})]}),(!v||ee)&&(0,n.jsxs)("aside",{"aria-label":"속성",className:"shrink-0 overflow-y-auto border-t border-border p-3 text-xs min-[900px]:w-72 min-[900px]:border-l min-[900px]:border-t-0",children:[e2?(0,n.jsx)(J,{graph:V,nodeId:e2.id,palette:o,issues:eK.filter(e=>e.nodeId===e2.id),linkTarget:eh,linkOutcome:eb,setLinkTarget:eg,setLinkOutcome:ev,onEdit:eU,onRenamed:e=>er({type:"node",id:e}),onRemoved:()=>er(null),installedPacks:E,effectiveSteps:$,onKnowledgePackChange:e=>{U(r=>({...r,[e2.id]:e})),null==R||R(e)}},e2.id):e4&&(null==ee?void 0:ee.type)==="edge"?(0,n.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,n.jsxs)("h2",{className:"text-sm font-semibold",children:["간선 ",(0,n.jsxs)("span",{className:"font-mono",children:[e4.from," → ",e4.to]})]}),(0,n.jsxs)("label",{className:"flex flex-col gap-1 text-muted-foreground",children:["결과 이름 (비우면 조건 없이 이어짐)",(0,n.jsx)("input",{"aria-label":"간선 결과",list:"graph-canvas-outcomes",value:e4.outcome,placeholder:"예: pass \xb7 fail",onChange:e=>eU(r=>{var t,n;return t=ee.index,n={outcome:e.target.value},{...r,edges:r.edges.map((e,r)=>{var a;if(r!==t)return e;let s=(null!=(a=n.outcome)?a:e.outcome).trim(),{extra:o,...l}={...e,...n,outcome:s};return o&&!!s==!!e.outcome?{...l,extra:o}:l})}}),className:"rounded border border-border bg-background px-2 py-1 font-mono text-foreground"})]}),(0,n.jsx)("button",{type:"button",onClick:()=>{eU(e=>I(e,ee.index)),er(null)},className:"self-start rounded border border-red-500 px-2 py-1 text-red-500",children:"간선 삭제"})]}):(0,n.jsxs)("div",{className:"flex flex-col gap-2 text-muted-foreground",children:[(0,n.jsx)("h2",{className:"text-sm font-semibold text-foreground",children:"속성"}),(0,n.jsx)("p",{children:"노드를 누르면 id\xb7kind\xb7recipe 를 고칠 수 있습니다. 노드 오른쪽 점을 다른 노드로 끌거나, 노드를 고른 뒤 \xab다음 노드 연결\xbb 로 간선을 잇습니다."}),(0,n.jsxs)("p",{children:["노드 ",V.nodes.length," \xb7 간선 ",V.edges.length,V.entry?" \xb7 시작 ".concat(V.entry):""]})]}),e3.length>0&&(0,n.jsx)("ul",{"aria-label":"그래프 오류",className:"mt-3 flex flex-col gap-1 border-t border-border pt-2",children:e3.map((e,r)=>(0,n.jsx)("li",{className:"text-red-500",children:e.message},r))}),(0,n.jsxs)("details",{className:"mt-3 border-t border-border pt-2",children:[(0,n.jsx)("summary",{className:"cursor-pointer text-muted-foreground",children:"YAML 보기"}),(0,n.jsx)("pre",{"aria-label":"그래프 YAML",className:"mt-2 max-h-64 overflow-auto rounded bg-muted p-2 font-mono text-[11px] text-foreground",children:eV})]})]})]})]}),(0,n.jsxs)("p",{className:"shrink-0 px-3 py-1 text-[11px] text-muted-foreground",children:["배선도 디자인: ",(0,n.jsx)("a",{href:"https://malfoy-meme-making.vercel.app/wiring/index.html",target:"_blank",rel:"noopener noreferrer",className:"underline",children:"공냥이 AI 실험실"})]})]})}function J(e){var r,t,s,o,l,d,i;let{graph:u,nodeId:c,palette:p,issues:m,linkTarget:f,linkOutcome:x,setLinkTarget:h,setLinkOutcome:g,onEdit:b,onRenamed:v,onRemoved:y,installedPacks:k,effectiveSteps:j,onKnowledgePackChange:w}=e,N=u.nodes.find(e=>e.id===c),[A,z]=(0,a.useState)(N.id),[_,D]=(0,a.useState)(null),M=u.nodes.filter(e=>e.id!==c).map(e=>e.id),O=M.includes(f)?f:null!=(s=M[0])?s:"",P=null!=x?x:C(u,c),G=p.find(e=>e.kind===N.kind),V=u.edges.map((e,r)=>({edge:e,index:r})).filter(e=>{let{edge:r}=e;return r.from===c});function T(){let e=A.trim();if(e!==N.id)try{E(u,N.id,{id:e}),b(r=>E(r,N.id,{id:e})),D(null),v(e)}catch(e){D(e instanceof Error?e.message:String(e))}}return(0,n.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,n.jsxs)("h2",{className:"text-sm font-semibold",children:["노드 ",(0,n.jsx)("span",{className:"font-mono",children:N.id})]}),(0,n.jsxs)("label",{className:"flex flex-col gap-1 text-muted-foreground",children:["id",(0,n.jsx)("input",{"aria-label":"노드 id",value:A,spellCheck:!1,onChange:e=>z(e.target.value),onBlur:T,onKeyDown:e=>{"Enter"===e.key&&T()},className:"rounded border border-border bg-background px-2 py-1 font-mono text-foreground"})]}),_&&(0,n.jsx)("p",{role:"alert",className:"text-red-500",children:_}),(0,n.jsxs)("label",{className:"flex flex-col gap-1 text-muted-foreground",children:["kind",(0,n.jsxs)("select",{"aria-label":"노드 kind",value:N.kind,onChange:e=>b(r=>E(r,c,{kind:e.target.value})),className:"rounded border border-border bg-background px-1 py-1 text-foreground",children:[!G&&(0,n.jsxs)("option",{value:N.kind,children:[N.kind," (팔레트에 없음)"]}),p.map(e=>{var r;return(0,n.jsxs)("option",{value:e.kind,children:[e.kind,e.plugin?" \xb7 ".concat(e.plugin):""]},"".concat(null!=(r=e.plugin)?r:"core",":").concat(e.kind))})]})]}),(null==G?void 0:G.description)&&(0,n.jsx)("p",{className:"text-[11px] text-muted-foreground",children:G.description}),k&&(null==j||null==(r=j[c])?void 0:r.step)==="knowledge-rag"&&(0,n.jsxs)("label",{className:"flex flex-col gap-1 text-muted-foreground",children:["지식(RAG) 팩",(0,n.jsxs)("select",{"aria-label":"지식(RAG) 팩",value:null!=(o=null==(t=j[c])?void 0:t.arg)?o:"",onChange:e=>null==w?void 0:w(e.target.value),className:"rounded border border-border bg-background px-1 py-1 text-foreground",children:[(0,n.jsx)("option",{value:"",disabled:!0,children:"팩 선택"}),k.map(e=>(0,n.jsxs)("option",{value:e.id,children:[e.title," (",e.id,")"]},e.id))]})]}),(0,n.jsxs)("label",{className:"flex flex-col gap-1 text-muted-foreground",children:["recipe",(0,n.jsx)("input",{"aria-label":"recipe",value:N.recipe,spellCheck:!1,onChange:e=>b(r=>E(r,c,{recipe:e.target.value})),className:"rounded border border-border bg-background px-2 py-1 font-mono text-foreground"})]}),(0,n.jsxs)("label",{className:"flex flex-col gap-1 text-muted-foreground",children:["최대 방문 (max_visits)",(0,n.jsx)("input",{"aria-label":"max_visits",type:"number",min:1,step:1,value:N.maxVisits,onChange:e=>b(r=>E(r,c,{maxVisits:Number(e.target.value)})),className:"w-24 rounded border border-border bg-background px-2 py-1 text-foreground"})]}),(0,n.jsxs)("label",{className:"flex items-center gap-2 text-foreground",children:[(0,n.jsx)("input",{type:"checkbox","aria-label":"끝 노드",checked:u.terminals.includes(c),onChange:e=>b(r=>R(r,c,e.target.checked))}),"끝 노드 (여기서 실행이 끝남)"]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-2",children:[u.entry===c?(0,n.jsx)("span",{className:"rounded bg-emerald-500/15 px-2 py-1 text-emerald-500",children:"시작 노드"}):(0,n.jsx)("button",{type:"button",onClick:()=>b(e=>e.nodes.some(e=>e.id===c)?{...e,entry:c}:e),className:"rounded border border-border px-2 py-1",children:"시작 노드로"}),(0,n.jsx)("button",{type:"button",onClick:()=>{b(e=>(function(e,r){var t,n;let a=e.nodes.filter(e=>e.id!==r);return{...e,entry:e.entry===r?null!=(n=null==(t=a[0])?void 0:t.id)?n:null:e.entry,terminals:e.terminals.filter(e=>e!==r),nodes:a,edges:e.edges.filter(e=>e.from!==r&&e.to!==r)}})(e,c)),y()},className:"rounded border border-red-500 px-2 py-1 text-red-500",children:"노드 삭제"})]}),(0,n.jsxs)("label",{className:"flex flex-col gap-1 border-t border-border pt-2 text-muted-foreground",children:["실패 시 다음 노드",(0,n.jsxs)("select",{"aria-label":"실패 시 다음 노드",value:null!==(l=null!=(i=null==(d=u.edges.find(e=>e.from===c&&"fail"===e.outcome))?void 0:d.to)?i:null)&&void 0!==l?l:"",onChange:e=>b(r=>(function(e,r,t){if(t===r)throw Error("실패 경로를 자기 자신으로 둘 수 없습니다");let n=e.edges.filter(e=>e.from!==r||"fail"!==e.outcome).map(e=>null===t||e.from!==r||e.outcome?e:{...e,outcome:"ok"});return{...e,edges:null===t?n:[...n,{from:r,to:t,outcome:"fail"}]}})(r,c,e.target.value||null)),className:"rounded border border-border bg-background px-1 py-1 font-mono text-foreground",children:[(0,n.jsx)("option",{value:"",children:"선택 안 함"}),M.map(e=>(0,n.jsx)("option",{value:e,children:e},e))]})]}),(0,n.jsxs)("fieldset",{className:"mt-1 flex flex-col gap-1 border-t border-border pt-2",children:[(0,n.jsx)("legend",{className:"text-muted-foreground",children:"다음 노드 연결"}),0===M.length?(0,n.jsx)("p",{className:"text-muted-foreground",children:"이을 다른 노드가 없습니다."}):(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-1",children:[(0,n.jsx)("select",{"aria-label":"연결할 노드",value:O,onChange:e=>h(e.target.value),className:"rounded border border-border bg-background px-1 py-1 font-mono text-foreground",children:M.map(e=>(0,n.jsx)("option",{value:e,children:e},e))}),(0,n.jsx)("input",{"aria-label":"연결 결과",list:"graph-canvas-outcomes",value:P,placeholder:"결과(비우면 조건 없음)",onChange:e=>g(e.target.value),className:"w-24 rounded border border-border bg-background px-2 py-1 font-mono text-foreground"}),(0,n.jsx)("button",{type:"button",onClick:()=>{b(e=>S(e,c,O,P)),g(null)},className:"rounded border border-border px-2 py-1",children:"연결"})]}),V.length>0&&(0,n.jsx)("ul",{className:"flex flex-col gap-1",children:V.map(e=>{let{edge:r,index:t}=e;return(0,n.jsxs)("li",{className:"flex items-center gap-2 font-mono",children:[(0,n.jsxs)("span",{children:["→ ",r.to,r.outcome?" (".concat(r.outcome,")"):""]}),(0,n.jsx)("button",{type:"button","aria-label":"".concat(r.to," 간선 삭제"),onClick:()=>b(e=>I(e,t)),className:"rounded px-1 text-red-500 hover:bg-red-500/10",children:"삭제"})]},t)})})]}),m.length>0&&(0,n.jsx)("ul",{"aria-label":"노드 오류",className:"flex flex-col gap-1 border-t border-border pt-2",children:m.map((e,r)=>(0,n.jsx)("li",{className:"text-red-500",children:e.message},r))})]})}let X=e=>null!==e&&"object"==typeof e&&!Array.isArray(e);async function H(e,r){try{let t=await e.startRunGraphRun(r);return"string"==typeof(null==t?void 0:t.runId)?{kind:"started",runId:t.runId}:{kind:"error",status:0,message:"런 id 가 없다"}}catch(t){if(!(t instanceof p.Iu))return{kind:"error",status:0,message:"데몬에 닿지 못했다"};let e=t.body;if(403===t.status)return{kind:"forbidden"};if(409===t.status&&X(e)&&"string"==typeof e.error&&e.error.startsWith("peer-edit-"))return{kind:"peer-edit",message:"string"==typeof e.reason&&e.reason?e.reason:"상대가 바꾼 그래프 — 변경을 확인하고 승인해야 실행할 수 있다",..."peer-edit-unapproved"===e.error&&"string"==typeof e.version?{version:e.version}:{},..."string"==typeof e.editedBy?{editedBy:e.editedBy}:{}};if(422===t.status&&X(e)&&Array.isArray(e.issues))return{kind:"not-runnable",issues:e.issues.filter(e=>"string"==typeof e)};let r=X(e)&&"string"==typeof e.reason?e.reason:X(e)&&"string"==typeof e.error?e.error:"";return{kind:"error",status:t.status,message:r}}}async function Q(e,r,t){try{var n;return n=await e.getRunGraphRun(r,t),X(n)&&"string"==typeof n.runId&&"string"==typeof n.status&&Array.isArray(n.path)&&Array.isArray(n.nodes)?n:null}catch(e){return null}}let $=new Set(["done","failed","budget-exceeded","awaiting-approval"]);function ee(e){return Object.fromEntries(Object.entries(function(e){let r={};for(let t of e.nodes){let e=t.startedAt&&t.endedAt?Math.max(0,Date.parse(t.endedAt)-Date.parse(t.startedAt)):void 0,n=t.ok?"done":"failed";r[t.nodeId]={status:n,...void 0!==e&&Number.isFinite(e)?{durationMs:e}:{},...t.error?{error:t.error}:{}}}return e.currentNode&&!$.has(e.status)&&(r[e.currentNode.nodeId]={status:"running"}),"awaiting-approval"===e.status&&e.currentNode&&(r[e.currentNode.nodeId]={status:"awaiting_approval"}),r}(e)).map(e=>{let[r,t]=e;return[r,t.status]}))}function er(e){let{context:r,client:t,onStatus:s}=e,[o,l]=(0,a.useState)({kind:"idle"}),d=(0,a.useRef)(r.graphId),i=r.graphId?r.valid?r.saved?null:"저장한 뒤 실행할 수 있습니다 — 서버는 저장된 판을 돌립니다":"검증을 통과해야 실행할 수 있습니다":"그래프 id 가 없습니다";(0,a.useEffect)(()=>{d.current!==r.graphId&&(d.current=r.graphId,l({kind:"idle"}),s(void 0))},[r.graphId,s]);let u="running"===o.kind?o.runId:null,c="running"===o.kind&&null!==o.run&&$.has(o.run.status);(0,a.useEffect)(()=>{if(!u||c)return;let e=!1,n="running"===o.kind?o:null,a=setTimeout(async()=>{let a=await Q(t,r.graphId,u);if(!e&&n){if(!a){let e=n.misses+1;l(e>=5?{kind:"refused",lines:["런 상태를 ".concat(e,"번 연속 읽지 못했습니다 — 데몬을 확인한 뒤 다시 실행하세요")]}:{...n,misses:e,tick:n.tick+1});return}if(Date.now()-n.since>18e4&&!$.has(a.status)){l({kind:"refused",lines:["데모 실행이 ".concat(Math.round(3),"분 넘게 끝나지 않습니다 — 원장이 \xab도는 중\xbb으로 남았을 수 있습니다(데몬 재시작 등)")]}),s(ee(a));return}l({...n,run:a,misses:0,tick:n.tick+1}),s(ee(a))}},1e3);return()=>{e=!0,clearTimeout(a)}},[u,c,o,t,r.graphId,s]);let p=async()=>{l({kind:"starting"}),s(void 0);let e=await H(t,r.graphId);"started"===e.kind?l({kind:"running",runId:e.runId,run:null,misses:0,since:Date.now(),tick:0}):"not-runnable"===e.kind?l({kind:"refused",lines:e.issues}):"forbidden"===e.kind?l({kind:"refused",lines:["운영자만 실행할 수 있습니다"]}):"peer-edit"===e.kind?l({kind:"peer-edit",message:e.message,...e.version?{version:e.version}:{},...e.editedBy?{editedBy:e.editedBy}:{}}):l({kind:"refused",lines:["실행을 시작하지 못했습니다".concat(e.message?" — ".concat(e.message):"").concat(e.status?" (".concat(e.status,")"):"")]})},m=async()=>{if("peer-edit"===o.kind&&o.version&&t.approveRunGraph){l({...o,approving:!0});try{await t.approveRunGraph(r.graphId,o.version),l({kind:"idle"})}catch(e){l({...o,approving:!1,error:"승인 실패".concat(e instanceof Error?" — ".concat(e.message):"")})}}},f="starting"===o.kind||"running"===o.kind&&!c,x="running"===o.kind?o.run:null,h=(null==x?void 0:x.status)==="done"?"text-emerald-700 dark:text-emerald-400":x&&$.has(x.status)?"text-red-700 dark:text-red-400":"text-sky-700 dark:text-sky-400";return(0,n.jsxs)("span",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{p()},disabled:f||null!==i,title:null!=i?i:"저장된 그래프를 데모 레시피로 실행합니다",className:"rounded border border-sky-600/60 bg-sky-600/10 px-2.5 py-1 text-xs font-semibold text-sky-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-sky-300",children:"▶ 데모 실행"}),i&&"idle"===o.kind&&(0,n.jsx)("span",{className:"text-xs text-muted-foreground",children:i}),"starting"===o.kind&&(0,n.jsx)("span",{role:"status",className:"text-xs text-sky-700 dark:text-sky-400",children:"데모 실행 \xb7 시작하는 중"}),"running"===o.kind&&(0,n.jsx)("span",{role:"status","aria-live":"polite",className:"text-xs font-semibold ".concat(h),children:x?function(e){let r=e.path.length,t=r-new Set(e.path).size;switch(e.status){case"starting":return"데모 실행 \xb7 시작하는 중";case"running":return"데모 실행 \xb7 도는 중".concat(e.currentNode?" ".concat(e.currentNode.nodeId):""," \xb7 지난 노드 ").concat(e.nodes.length);case"done":return"데모 실행 \xb7 성공 \xb7 거친 노드 ".concat(r).concat(t?"(다시 지남 ".concat(t,")"):"");case"budget-exceeded":return"데모 실행 \xb7 방문 한도 초과".concat(e.path.at(-1)?" ".concat(e.path.at(-1)):""," — max_visits 를 늘려 저장하고 다시 실행");case"awaiting-approval":return"데모 실행 \xb7 승인 대기".concat(e.currentNode?" ".concat(e.currentNode.nodeId):"");default:{let r=[...e.nodes].reverse().find(e=>!e.ok);return"데모 실행 \xb7 실패".concat(r?" ".concat(r.nodeId):"").concat(e.error?" — ".concat(e.error):(null==r?void 0:r.error)?" — ".concat(r.error):"")}}}(x):"데모 실행 \xb7 시작하는 중"}),"refused"===o.kind&&(0,n.jsx)("span",{role:"alert",className:"text-xs font-semibold text-red-700 dark:text-red-400",children:o.lines.join(" \xb7 ")}),"peer-edit"===o.kind&&(0,n.jsxs)("span",{role:"alert",className:"text-xs font-semibold text-red-700 dark:text-red-400",children:[o.message,o.editedBy?" (".concat(o.editedBy,")"):"",o.error?" \xb7 ".concat(o.error):""]}),"peer-edit"===o.kind&&o.version&&t.approveRunGraph&&(0,n.jsx)("button",{type:"button",onClick:()=>{m()},disabled:!0===o.approving,title:"캔버스에서 상대의 변경을 확인한 뒤 승인하세요 — 승인하면 이 판을 실행할 수 있습니다",className:"rounded border border-red-600/60 px-2.5 py-1 text-xs font-semibold text-red-800 disabled:opacity-50 dark:text-red-300",children:"변경 확인 \xb7 승인"})]})}var et=t(60348);let en=["매일 아침 AI 뉴스 요약해서 텔레그램으로","PR 리뷰하고 문제 없으면 머지","조사해서 표로 정리하고 내가 승인하면 게시"];function ea(e){if("string"==typeof e)return e;if(e&&"object"==typeof e){let r="string"==typeof e.nodeId?e.nodeId:"string"==typeof e.path?e.path:"",t="string"==typeof e.message?e.message:JSON.stringify(e);return r?"".concat(r,": ").concat(t):t}return String(e)}async function es(e,r,t){if(!r.prompt.trim())return{kind:"empty"};try{let n=await e.graphWizard(r,t?{signal:t}:void 0);return eo(n)}catch(e){if((null==t?void 0:t.aborted)||e instanceof Error&&"AbortError"===e.name)return{kind:"cancelled"};if(e instanceof p.Iu){var n,a;if(404===e.status||405===e.status)return{kind:"unsupported"};if(422===e.status&&e.body&&"object"==typeof e.body&&"ok"in e.body)return eo(e.body);let r=null!=(n=e.body)?n:{};if(400===e.status&&(!r.reason||"prompt required"===r.reason))return{kind:"empty"};if(400===e.status)return{kind:"error",message:"요청을 받지 않았습니다 — ".concat(r.reason)};return{kind:"error",message:null!=(a=r.reason)?a:r.error?"".concat(r.error," (").concat(e.status,")"):"요청 실패 (".concat(e.status,")")}}return{kind:"error",message:e instanceof Error?e.message:String(e)}}}function eo(e){var r;let t,n=(null!=(r=e.issues)?r:[]).map(ea),a="string"==typeof e.yaml?e.yaml:"",s=null;if(a.trim()){try{s=M(a)}catch(e){t=e instanceof Error?e.message:String(e)}s&&0===s.nodes.length&&(s=null,t="초안에 노드가 없습니다")}else t="응답에 YAML 이 없습니다";return{kind:"draft",ok:!0===e.ok&&0===n.length,yaml:a,graph:s,issues:n,...t?{parseError:t}:{},...e.base?{base:e.base}:{},..."number"==typeof e.attempts?{attempts:e.attempts}:{},...e.summary?{summary:e.summary}:{},...e.labels&&"object"==typeof e.labels?{labels:Object.fromEntries(Object.entries(e.labels).filter(e=>"string"==typeof e[1]&&""!==e[1].trim()))}:{},...e.steps&&"object"==typeof e.steps&&!Array.isArray(e.steps)?{steps:e.steps}:{},..."string"==typeof e.baseReason&&e.baseReason.trim()?{baseReason:e.baseReason.trim()}:{}}}function el(e){return e.baseReason?e.base?"기반: ".concat(e.base," — 이유 ").concat(e.baseReason):"기반 선택 이유: ".concat(e.baseReason):null}function ed(e){return"".concat(e.from,"->").concat(e.to,":").concat(e.outcome)}function ei(e){var r,t,s;let{client:o,current:l,laid:d,onApply:i,onRestore:u,initialPrompt:c,packId:p,className:m=""}=e,[f,x]=(0,a.useState)([]),[h,g]=(0,a.useState)(""),[b,v]=(0,a.useState)(null),[y,k]=(0,a.useState)(0),[j,w]=(0,a.useState)(!1),N=(0,a.useRef)(1),S=(0,a.useRef)(null),C=(0,a.useRef)(null),I=(0,a.useRef)(!1),E=(0,a.useRef)(f);E.current=f;let R=(0,a.useRef)(null);function A(e){let r=N.current++;return x(t=>[...t,{...e,id:r}]),r}async function _(e,r,t){let n=e.trim();if(b)return;if(!n)return void A({role:"assistant",text:"무엇을 만들지 한 줄로 적어 주세요.",tone:"warn"});let a=void 0!==r?r:l(),s=!a||0===a.graph.nodes.length,u=E.current.filter(e=>!e.undone&&(void 0===t||e.id<t)).map(e=>({role:e.role,text:e.text})),c=A({role:"user",text:n});g("");let m=new AbortController;v({startedAt:Date.now(),controller:m});try{var f,x,h,y;let e=await es(o,{...(y=s?null:a.yaml,{prompt:n.trim(),kind:"harness",...y?{currentYaml:y}:{},...u.length?{history:u.slice(-10).map(e=>({role:e.role,text:e.text}))}:{}}),...p?{packId:p}:{}},m.signal);if("cancelled"===e.kind)return void A({role:"assistant",text:"취소했습니다 — 캔버스는 그대로입니다.",tone:"warn"});if("unsupported"===e.kind)return void A({role:"assistant",text:"이 Daemon 이 아직 그래프 마법사를 지원하지 않습니다 — 서버 업데이트 후 다시 시도하세요",tone:"error"});if("empty"===e.kind)return void A({role:"assistant",text:"무엇을 만들지 한 줄로 적어 주세요.",tone:"warn"});if("error"===e.kind)return void A({role:"assistant",text:"만들기 실패: ".concat(e.message),tone:"error"});let r=s?null:a.graph,t=d?d():R.current;if(e.graph){let n=function(e,r){if(!r||0===r.nodes.length)return!1;if(!e)return!0;let t=new Map(e.nodes.map(e=>[e.id,e]));return r.nodes.some(e=>{let r=t.get(e.id);return!r||r.x!==e.x||r.y!==e.y})}(t,r),a=function(e,r){var t,n,a;let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=null==(t=s.keepPositions)||t,l=new Map((null!=(n=null==e?void 0:e.nodes)?n:[]).map(e=>[e.id,e])),d=r.nodes.map(e=>{let r=o?l.get(e.id):void 0;return r?{...e,x:r.x,y:r.y}:e}),i=new Set((null!=(a=null==e?void 0:e.edges)?a:[]).map(ed));return{graph:{...r,nodes:d},added:{nodes:r.nodes.filter(e=>!l.has(e.id)).map(e=>e.id),edges:r.edges.filter(e=>!i.has(ed(e))).map(ed)}}}(r,e.graph,{keepPositions:n});i(a.graph,a.added,!n,e.labels,e.steps),(null==(f=(x=window).matchMedia)?void 0:f.call(x,"(max-width: 1023.98px)").matches)&&w(!0),R.current=a.graph}A({role:"assistant",text:null!=(h=e.summary)?h:s?"그래프 초안을 만들었습니다.":"그래프를 고쳤습니다.",tone:e.ok?"ok":e.graph?"warn":"error",status:function(e){let r=e.base?" \xb7 기반 템플릿 ".concat(e.base):"",t=void 0!==e.attempts?"(시도 ".concat(e.attempts,")"):"";return e.ok?"초안".concat(r," \xb7 검증 통과").concat(t):"초안".concat(r," \xb7 검증 실패 ").concat(e.issues.length,"건").concat(t)}(e),...el(e)?{baseLine:el(e)}:{},...e.issues.length?{issues:e.issues}:{},...e.parseError?{parseError:e.parseError}:{},...e.graph?{before:r,applied:!0,laidBefore:t,...e.steps?{steps:e.steps}:{}}:{},prompt:n,userId:c})}finally{v(null)}}function D(e){var r,t,n;let a=E.current.find(r=>r.id===e);if(!a||"assistant"!==a.role||!a.applied||a.undone)return;let s=[...E.current].reverse().find(r=>"assistant"===r.role&&r.applied&&!r.undone&&r.id<e);u(null!=(r=a.before)?r:null,s&&"assistant"===s.role?s.steps:void 0),R.current=null!=(t=a.laidBefore)?t:null;let o=null!=(n=a.userId)?n:e;x(e=>e.map(e=>e.id>=o?{...e,undone:!0}:e))}function M(){var e;g("검증 오류를 고쳐줘"),null==(e=C.current)||e.focus()}(0,et.dJ)("graph-wizard"),(0,a.useEffect)(()=>{if(!b)return;k(0);let e=setInterval(()=>k(Math.floor((Date.now()-b.startedAt)/1e3)),1e3);return()=>clearInterval(e)},[b]),(0,a.useEffect)(()=>{let e=S.current;e&&"function"==typeof e.scrollTo&&e.scrollTo({top:e.scrollHeight})},[f,b,j]),(0,a.useEffect)(()=>{c&&!I.current&&(I.current=!0,_(c))},[c]);let O=null!=(s=null==(r=[...f].reverse().find(e=>"assistant"===e.role))?void 0:r.text)?s:"",P=null==(t=[...f].reverse().find(e=>"assistant"===e.role&&e.applied&&!e.undone))?void 0:t.id;return(0,n.jsxs)("aside",{"aria-label":"말로 만들기","data-testid":"graph-wizard-chat",className:"flex min-h-0 shrink-0 flex-col border-border bg-background ".concat(j?"":"max-lg:h-[38vh]"," max-lg:border-t lg:h-auto lg:w-[360px] lg:shrink-0 lg:border-l ").concat(m),children:[(0,n.jsxs)("header",{className:"flex items-center gap-2 border-b border-border px-3 py-2 text-sm",children:[(0,n.jsx)("strong",{className:"shrink-0",children:"말로 만들기"}),j&&O?(0,n.jsx)("span",{"data-testid":"wizard-collapsed-line",className:"min-w-0 truncate text-xs text-muted-foreground lg:hidden",children:O}):null,(0,n.jsx)("span",{className:"text-xs text-muted-foreground ".concat(j&&O?"max-lg:hidden":""),children:"말하면 노드와 간선이 생깁니다"}),(0,n.jsx)("button",{type:"button",onClick:()=>w(e=>!e),"aria-expanded":!j,className:"ml-auto shrink-0 whitespace-nowrap rounded px-2 py-0.5 text-xs text-muted-foreground hover:bg-muted lg:hidden",children:j?"펼치기":"접기"})]}),(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col ".concat(j?"max-lg:hidden":""),children:[(0,n.jsxs)("ol",{ref:S,className:"flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto px-3 py-2 text-sm","aria-live":"polite",children:[0===f.length&&(0,n.jsxs)("li",{className:"text-xs text-muted-foreground",children:[(0,n.jsx)("p",{children:"만들고 싶은 일을 한 줄로 적으세요. 이어서 말하면 지금 그래프를 고칩니다."}),(0,n.jsx)("div",{className:"mt-2 flex flex-wrap gap-1.5",children:en.map(e=>(0,n.jsx)("button",{type:"button",onClick:()=>{_(e)},disabled:null!==b,className:"rounded-full border border-border px-2.5 py-1 text-left text-foreground hover:bg-muted disabled:opacity-50",children:e},e))})]}),f.map(e=>"user"===e.role?(0,n.jsx)("li",{"data-role":"user",className:"max-w-[85%] self-end whitespace-pre-wrap break-words rounded-lg bg-primary/15 px-3 py-1.5 text-foreground ".concat(e.undone?"opacity-50 line-through decoration-muted-foreground/60":""),children:e.text},e.id):(0,n.jsxs)("li",{"data-role":"assistant","data-tone":e.tone,className:"rounded-lg border px-3 py-1.5 ".concat(e.undone?"opacity-50":""," ").concat("ok"===e.tone?"border-emerald-500/40":"warn"===e.tone?"border-amber-500/40":"border-red-500/40"),children:[(0,n.jsx)("p",{className:"error"===e.tone?"text-red-500":"text-foreground",children:e.text}),e.status&&(0,n.jsxs)("p",{"data-testid":"wizard-status",className:"mt-0.5 text-xs ".concat("ok"===e.tone?"text-emerald-500":"text-amber-500"),children:["ok"===e.tone?"✓ ":"✗ ",e.status]}),e.baseLine&&(0,n.jsx)("p",{"data-testid":"wizard-base",className:"mt-0.5 text-xs text-muted-foreground",children:e.baseLine}),e.parseError&&(0,n.jsxs)("p",{className:"mt-0.5 text-xs text-red-500",children:["초안을 캔버스에 올리지 못했습니다: ",e.parseError]}),e.issues&&(0,n.jsx)("ul",{"data-testid":"wizard-issues",className:"mt-1 list-disc pl-5 text-xs text-red-500",children:e.issues.map((e,r)=>(0,n.jsx)("li",{children:e},r))}),e.undone&&(0,n.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"되돌림"}),(0,n.jsxs)("div",{className:"mt-1 flex flex-wrap gap-1.5 text-xs",children:[e.applied&&!e.undone&&(0,n.jsx)("button",{type:"button",onClick:()=>D(e.id),disabled:null!==b,title:e.id===P?"이 답 전의 캔버스로":"이 답과 그 뒤의 답을 모두 되돌립니다",className:"rounded border border-border px-2 py-0.5 hover:bg-muted disabled:opacity-50",children:"되돌리기"}),e.prompt&&!e.undone&&(0,n.jsx)("button",{type:"button",onClick:()=>(function(e){var r;let t=E.current.find(r=>r.id===e);if(!t||"assistant"!==t.role||!t.prompt)return;let n=t.applied?t.before?{graph:t.before,yaml:z(t.before)}:null:void 0;D(e);let a=h.trim();_(a?"".concat(t.prompt,"\n추가 지시: ").concat(a):t.prompt,n,null!=(r=t.userId)?r:e)})(e.id),disabled:null!==b,title:"이 답을 되돌리고 같은 말(+ 입력창의 추가 지시)로 다시 만듭니다",className:"rounded border border-border px-2 py-0.5 hover:bg-muted disabled:opacity-50",children:"다시 만들기"}),e.issues&&!e.undone&&(0,n.jsx)("button",{type:"button",onClick:M,disabled:null!==b,className:"rounded border border-amber-500/50 px-2 py-0.5 text-amber-500 hover:bg-amber-500/10 disabled:opacity-50",children:"고쳐서 다시"})]})]},e.id)),b&&(0,n.jsxs)("li",{role:"status","data-testid":"wizard-pending",className:"rounded-lg border border-border px-3 py-2 text-xs text-muted-foreground",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"inline-block h-2 w-2 animate-pulse rounded-full bg-primary"}),(0,n.jsx)("span",{"data-testid":"wizard-phase",className:"text-foreground",children:y<4?"요청을 읽는 중…":y<12?"노드 구성 중…":y<22?"간선 잇는 중…":"검증하고 고치는 중…"}),(0,n.jsxs)("span",{className:"tabular-nums",children:[y,"초"]}),(0,n.jsx)("button",{type:"button",onClick:()=>b.controller.abort(),className:"ml-auto rounded border border-border px-2 py-0.5 text-foreground hover:bg-muted",children:"취소"})]}),(0,n.jsx)("div",{className:"mt-1.5 h-1 overflow-hidden rounded bg-muted","aria-hidden":!0,children:(0,n.jsx)("div",{className:"h-full rounded bg-primary transition-[width] duration-1000 ease-linear",style:{width:"".concat(Math.min(92,Math.round(100*(1-Math.exp(-y/15)))),"%")}})})]})]}),(0,n.jsxs)("form",{className:"flex items-end gap-2 border-t border-border px-3 py-2",onSubmit:e=>{e.preventDefault(),_(h)},children:[(0,n.jsx)("textarea",{ref:C,"aria-label":"만들고 싶은 일",value:h,rows:2,placeholder:"예: 매일 아침 AI 뉴스 요약해서 텔레그램으로",onChange:e=>g(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),_(h))},className:"min-h-[2.5rem] flex-1 resize-none rounded border border-border bg-background px-2 py-1.5 text-sm text-foreground"}),(0,n.jsx)("button",{type:"submit",disabled:null!==b,className:"rounded bg-primary px-3 py-2 text-sm text-primary-foreground disabled:opacity-50",children:"만들기"})]})]})]})}function eu(e){let{onStart:r}=e,[t,s]=(0,a.useState)(""),[o,l]=(0,a.useState)(null);function d(e){if(!e.trim())return void l("무엇을 만들지 한 줄로 적어 주세요.");l(null),r(e.trim())}return(0,n.jsxs)("section",{"aria-label":"말로 만들기","data-testid":"graph-wizard-entry",className:"border-b border-border bg-primary/5 px-4 py-3",children:[(0,n.jsx)("h2",{className:"text-sm font-semibold",children:"말로 만들기"}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground",children:"하고 싶은 일을 말하면 그래프 초안이 생깁니다. 이어서 말하며 고치세요."}),(0,n.jsxs)("form",{className:"mt-2 flex flex-col gap-2 min-[640px]:flex-row min-[640px]:items-end",onSubmit:e=>{e.preventDefault(),d(t)},children:[(0,n.jsx)("textarea",{"aria-label":"만들고 싶은 일",value:t,rows:2,onChange:e=>s(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),d(t))},placeholder:"예: PR 리뷰하고 문제 없으면 머지",className:"min-h-[2.5rem] flex-1 resize-none rounded border border-border bg-background px-2 py-1.5 text-sm text-foreground"}),(0,n.jsx)("button",{type:"submit",className:"rounded bg-primary px-4 py-2 text-sm text-primary-foreground",children:"만들기"})]}),o&&(0,n.jsx)("p",{role:"status",className:"mt-1 text-xs text-amber-500",children:o}),(0,n.jsx)("div",{className:"mt-2 flex flex-wrap gap-1.5 text-xs",children:en.map(e=>(0,n.jsx)("button",{type:"button",onClick:()=>d(e),className:"rounded-full border border-border px-2.5 py-1 hover:bg-muted",children:e},e))})]})}var ec=t(38721);function ep(e){let{groups:r,onAdd:t}=e;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("strong",{children:"노드 팔레트"}),(0,n.jsx)("div",{className:"flex flex-wrap gap-4",children:r.map(e=>(0,n.jsxs)("section",{"aria-label":e.label,className:"min-w-0 flex-1",children:[(0,n.jsx)("h2",{className:"font-semibold",children:e.label}),(0,n.jsx)("div",{className:"flex flex-wrap items-center gap-2",children:e.kinds.map(r=>t?(0,n.jsxs)("button",{type:"button",title:r.description,"data-graph":r.graph,"aria-label":"".concat(e.label," ").concat(r.kind," 추가"),onClick:()=>t(r),className:"rounded border border-border px-2 py-0.5",children:[r.kind," ",r.plugin&&(0,n.jsx)("small",{children:r.plugin})]},"".concat(r.graph,":").concat(r.kind)):(0,n.jsxs)("span",{title:r.description,"data-graph":r.graph,className:"rounded border border-border px-2 py-0.5",children:[r.kind," ",r.plugin&&(0,n.jsx)("small",{children:r.plugin})]},"".concat(r.graph,":").concat(r.kind)))}),e.fallback&&(0,n.jsx)("p",{role:"status",className:"mt-1 text-warning",children:"어휘 목록을 불러오지 못해 코어 팔레트를 표시합니다."})]},e.graph))})]})}function em(e){let{groups:r,onAdd:t}=e,a=r.reduce((e,r)=>e+r.kinds.length,0);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("details",{className:"border-b border-border px-3 py-2 text-xs min-[640px]:hidden","aria-label":"노드 팔레트",children:[(0,n.jsxs)("summary",{className:"cursor-pointer",children:["노드 더하기 (",a,")"]}),(0,n.jsx)("div",{className:"mt-2",children:(0,n.jsx)(ep,{groups:r,onAdd:t})})]}),(0,n.jsx)("div",{className:"hidden border-b border-border px-3 py-2 text-xs min-[640px]:block","aria-label":"노드 팔레트",children:(0,n.jsx)(ep,{groups:r,onAdd:t})})]})}let ef={shared:function(e){let{data:r}=e;return(0,n.jsxs)("div",{className:"rounded border border-border bg-background px-3 py-2 text-xs","data-graph":r.graph,children:[(0,n.jsx)(d.h7,{type:"target",position:i.yX.Left}),(0,n.jsxs)("span",{children:["workflow"===r.graph?"작업 노드":"실행 단계 노드"," \xb7 ",r.kind]}),(0,n.jsx)("div",{className:"font-mono",children:r.id}),(0,n.jsx)(d.h7,{type:"source",position:i.yX.Right})]})}};function ex(e){let{groups:r,client:t}=e,[s,o]=(0,a.useState)([]),[l,i]=(0,a.useState)([]),[c,p]=(0,a.useState)({workflow:"",harness:""}),[m,f]=(0,a.useState)({workflow:"",harness:""}),[x,h]=(0,a.useState)({workflow:"",harness:""}),[g,b]=(0,a.useState)(!1);async function v(e,n){let a=c[e].trim();if(!a||!s.some(r=>r.graph===e))return void h(r=>({...r,[e]:"그래프 이름과 노드가 필요합니다."}));if("workflow"===e&&s.some(r=>{var t;return r.graph===e&&"subworkflow"===r.kind&&!(null==(t=r.workflow)?void 0:t.trim())}))return void h(r=>({...r,[e]:"subworkflow 참조 워크플로를 입력하세요."}));let o=function(e,r,t,n){let a=t.filter(r=>r.graph===e);if("workflow"===e){let e={name:r,nodes:[]};for(let r of a)e=r.kind.includes(":")?{...e,nodes:[...e.nodes,{id:r.id,kind:r.kind,inputs:{}}]}:"subworkflow"===r.kind?{...e,nodes:[...e.nodes,{id:r.id,kind:"subworkflow",workflow:r.workflow,inputs:{}}]}:(0,ec.iu)(e,r.kind,{id:r.id});return e={...e,nodes:e.nodes.map(e=>({...e,...n.filter(r=>r.to===e.id&&a.some(e=>e.id===r.from)).length?{depends_on:n.filter(r=>r.to===e.id&&a.some(e=>e.id===r.from)).map(e=>e.from)}:{}}))},(0,u.As)(e)}let s=w(r);for(let e of a)s=N(s,{kind:e.kind,id:e.id,x:e.x,y:e.y}).graph;return(s={...s,edges:n.filter(e=>a.some(r=>r.id===e.from)&&a.some(r=>r.id===e.to)).map(e=>({...e,outcome:""}))}).nodes.length&&(s=R(s,s.nodes[s.nodes.length-1].id,!0)),z(s)}(e,a,s,l);if("harness"===e){let t=_(M(o),r.find(r=>r.graph===e).kinds.map(e=>e.kind));if(!t.ok)return void h(r=>({...r,[e]:t.issues.map(e=>e.message).join(", ")}))}b(!0);try{let r=await t.validateGraph(e,o);if(!r.ok)return void h(t=>({...t,[e]:r.errors.map(e=>e.message).join(", ")}));n&&("workflow"===e?await t.saveWorkflow(a,{yaml:o,scope:"project"}):m.harness===a?await t.putRunGraphYaml(a,o):await t.createRunGraph(a,o),f(r=>({...r,[e]:a}))),h(r=>({...r,[e]:n?"저장했습니다.":"검증 통과"}))}catch(r){h(t=>({...t,[e]:r instanceof Error?r.message:String(r)}))}finally{b(!1)}}let y=s.map(e=>({id:e.id,type:"shared",position:{x:e.x,y:e.y},data:e})),k=l.map(e=>({id:"".concat(e.from,":").concat(e.to),source:e.from,target:e.to}));return(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col",children:[(0,n.jsx)(em,{groups:r,onAdd:function(e){o(r=>{let t="".concat(e.graph,"-").concat(e.kind.split(":").pop().replace(/[^a-zA-Z0-9-]/g,"-")),n=1;for(;r.some(e=>e.id==="".concat(t,"-").concat(n));)n++;return[...r,{graph:e.graph,kind:e.kind,id:"".concat(t,"-").concat(n),x:40+r.length%5*210,y:40+130*Math.floor(r.length/5)}]})}}),s.filter(e=>"workflow"===e.graph&&"subworkflow"===e.kind).map(e=>{var r;return(0,n.jsxs)("label",{className:"px-3 py-1 text-xs",children:[e.id," 참조 워크플로",(0,n.jsx)("input",{"aria-label":"".concat(e.id," 참조 워크플로"),value:null!=(r=e.workflow)?r:"",onChange:r=>o(t=>t.map(t=>t.id===e.id?{...t,workflow:r.target.value}:t)),className:"ml-2 rounded border border-border bg-background px-2 py-1"})]},e.id)}),(0,n.jsx)("div",{className:"flex flex-wrap gap-4 border-b border-border px-3 py-2 text-xs",children:r.map(e=>(0,n.jsxs)("section",{"aria-label":"".concat(e.label," 검증과 저장"),children:[(0,n.jsxs)("label",{children:[e.label," 이름 ",(0,n.jsx)("input",{"aria-label":"".concat(e.label," 이름"),value:c[e.graph],onChange:r=>p(t=>({...t,[e.graph]:r.target.value})),className:"rounded border border-border bg-background px-2 py-1"})]}),(0,n.jsx)("button",{type:"button",disabled:g,onClick:()=>{v(e.graph,!1)},children:"검증"}),(0,n.jsx)("button",{type:"button",disabled:g,onClick:()=>{v(e.graph,!0)},children:"저장"}),x[e.graph]&&(0,n.jsx)("span",{role:"status",children:x[e.graph]})]},e.graph))}),(0,n.jsx)("div",{className:"min-h-[300px] flex-1","aria-label":"그래프 캔버스",children:(0,n.jsxs)(d.Gc,{nodes:y,edges:k,nodeTypes:ef,fitView:!0,onNodesChange:e=>{let r=new Set(e.filter(e=>"remove"===e.type).map(e=>e.id));o(t=>t.filter(e=>!r.has(e.id)).map(r=>{let t=e.find(e=>"position"===e.type&&e.id===r.id);return(null==t?void 0:t.type)==="position"&&t.position?{...r,...t.position}:r})),r.size&&i(e=>e.filter(e=>!r.has(e.from)&&!r.has(e.to)))},onEdgesChange:e=>{let r=new Set(e.filter(e=>"remove"===e.type).map(e=>e.id));r.size&&i(e=>e.filter(e=>!r.has("".concat(e.from,":").concat(e.to))))},onConnect:e=>{let r=s.find(r=>r.id===e.source),t=s.find(r=>r.id===e.target);r&&t&&r.id!==t.id&&r.graph===t.graph&&i(e=>e.some(e=>e.from===r.id&&e.to===t.id)?e:[...e,{from:r.id,to:t.id}])},children:[(0,n.jsx)(d.VS,{}),(0,n.jsx)(d.H2,{})]})})]})}function eh(e){var r;let{context:t,client:s}=e,[o,l]=(0,a.useState)(null),[d,i]=(0,a.useState)(""),[u,c]=(0,a.useState)("view"),[p,m]=(0,a.useState)(!1),f=t&&(r=t).saved&&r.graphId.trim()?r.graphId:null;async function x(){if(f&&d.trim()&&!p){m(!0),l(null);try{await T(s,f,d.trim(),u),l("".concat("edit"===u?"편집":"보기"," 권한을 부여하고 서버에서 확인했습니다."))}catch(e){l("권한 설정 실패: ".concat(e instanceof Error?e.message:String(e)))}finally{m(!1)}}}return(0,a.useEffect)(()=>{l(null),i("")},[f]),(0,n.jsxs)("div",{className:"ml-auto flex flex-wrap items-center gap-2",children:[(0,n.jsxs)("label",{children:["공유용 그래프 토큰 ",(0,n.jsx)("input",{"aria-label":"공유용 그래프 토큰",autoComplete:"off",value:d,onChange:e=>{i(e.target.value),l(null)},className:"rounded border border-border px-2 py-1"})]}),(0,n.jsx)("button",{type:"button",onClick:()=>{i("eg_".concat(Array.from(crypto.getRandomValues(new Uint8Array(24)),e=>e.toString(16).padStart(2,"0")).join(""))),l(null)},className:"rounded border border-border px-2 py-1",children:"새 토큰 만들기"}),(0,n.jsx)("span",{children:"권한 설정 뒤 이 토큰과 그래프 ID를 상대에게 전달하세요. 상대는 Nexus 연결 토큰으로 이 값을 사용해 해당 그래프 API에 접근합니다. 목록\xb7실행은 공유되지 않습니다."}),(0,n.jsxs)("label",{children:["권한 ",(0,n.jsxs)("select",{"aria-label":"공유 권한",value:u,onChange:e=>{c(e.target.value),l(null)},children:[(0,n.jsx)("option",{value:"view",children:"보기"}),(0,n.jsx)("option",{value:"edit",children:"편집"})]})]}),"edit"===u&&(0,n.jsx)("span",{role:"note",className:"font-semibold text-red-700 dark:text-red-400",children:"상대가 바꾼 그래프를 실행하면 상대 명령이 이 기계에서 돈다 — 실행 전 승인 필요"}),(0,n.jsx)("button",{type:"button",onClick:()=>{x()},disabled:!f||!d.trim()||p,title:f?"그래프 접근 권한을 설정합니다":"저장 안 된 변경은 공유할 수 없습니다. 먼저 저장하세요",className:"rounded border border-border px-2 py-1 disabled:opacity-50",children:"권한 설정"}),o&&(0,n.jsx)("span",{role:"status",children:o})]})}function eg(){let e=(0,c.Qj)();return e?(0,n.jsx)(eb,{client:e}):(0,n.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,n.jsx)("header",{className:"border-b border-border px-4 py-2",children:(0,n.jsx)("h1",{className:"text-sm font-semibold",children:"편집기"})}),(0,n.jsx)("p",{className:"p-4 text-sm text-text-tertiary",children:"Daemon 연결이 설정되지 않았습니다. Settings 에서 Base URL 을 입력하세요."})]})}function eb(e){var r,t,d,i,u;let{client:c}=e,m=(0,l.useSearchParams)(),g="harness"===(null!=(d=null==m?void 0:m.get("mode"))?d:null)?"harness":"workflow",[b,v]=(0,a.useState)(g),[y,k]=(0,a.useState)(()=>(null==m?void 0:m.get("mode"))!=null);(0,a.useEffect)(()=>{v(g)},[g]);let j=(0,a.useCallback)(e=>{v(e),window.history.replaceState(null,"",function(e){let r=f.find(r=>r.graph===e);return"/app/editor/?mode=".concat(r.graph)}(e))},[]),N=(0,s.jE)(),[S,C]=(0,a.useState)(null),[I,E]=(0,a.useState)(null),[R,A]=(0,a.useState)(void 0),[z,_]=(0,a.useState)(""),D=(0,o.I)({queryKey:["graph-wizard-packs"],queryFn:()=>c.getGraphWizardPacks(),enabled:"harness"===b&&!!c.getGraphWizardPacks,retry:!1}),O=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:2600,[r,t]=(0,a.useState)(void 0),[n,s]=(0,a.useState)(void 0),[o,l]=(0,a.useState)({}),[d,i]=(0,a.useState)(void 0),u=(0,a.useRef)(null),c=(0,a.useRef)(0),p=(0,a.useRef)(null),m=(0,a.useRef)(!1),f=(0,a.useCallback)(e=>{u.current=e,m.current&&(p.current=e.graph,m.current=!1)},[]),x=(0,a.useCallback)(()=>p.current,[]),h=(0,a.useCallback)(()=>u.current?{graph:u.current.graph,yaml:u.current.yaml}:null,[]),g=(0,a.useCallback)(function(e,r){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3?arguments[3]:void 0,o=arguments.length>4?arguments[4]:void 0;i(o&&Object.keys(o).length?o:void 0),a&&Object.keys(a).length&&l(e=>({...e,...a})),c.current+=1,m.current=!0,t({rev:c.current,graph:e,...n?{autoLayout:n}:{}}),s(r)},[]),b=(0,a.useCallback)((e,r)=>{var n,a;i(r&&Object.keys(r).length?r:void 0),c.current+=1,m.current=!0,t({rev:c.current,graph:null!=e?e:w(null!=(a=null==(n=u.current)?void 0:n.graphId)?a:"")}),s(void 0)},[]),v=(0,a.useCallback)(()=>{u.current=null,p.current=null,m.current=!1,t(void 0),s(void 0),l({}),i(void 0)},[]);return(0,a.useEffect)(()=>{if(!n)return;let r=setTimeout(()=>s(void 0),e);return()=>clearTimeout(r)},[n,e]),{replace:r,highlight:n,labels:o,steps:d,onChange:f,current:h,laid:x,apply:g,restore:b,reset:v}}(),[P,G]=(0,a.useState)(!1),V=(0,a.useCallback)(e=>{O.reset(),G(!!e.wizardPrompt),E(null),C({key:Date.now(),...e})},[O.reset]),T=null!=(i=null==m?void 0:m.get("wizard"))?i:null,L=(0,a.useRef)(null);(0,a.useEffect)(()=>{"harness"===b&&T&&L.current!==T&&(L.current=T,k(!0),V({saved:!1,wizardPrompt:T}))},[b,T,V]);let F=(0,a.useCallback)(e=>A(e),[]),K=(0,o.I)({queryKey:["graph-kinds","workflow"],queryFn:()=>c.getGraphKinds("workflow"),retry:!1}),B=(0,o.I)({queryKey:["graph-kinds","harness"],queryFn:()=>c.getGraphKinds("harness"),retry:!1}),Y=(0,a.useMemo)(()=>{var e,r,t,n,a;return a=[...null!=(t=null==(e=K.data)?void 0:e.kinds)?t:[],...null!=(n=null==(r=B.data)?void 0:r.kinds)?n:[]],f.map(e=>{let{graph:r,label:t,fallbackKinds:n}=e,s=a.filter(e=>e.graph===r);return{graph:r,label:t,kinds:s.length?s:n.map(e=>({graph:r,kind:e,plugin:null,description:"",schema:{},core:!0})),fallback:0===s.length}})},[K.data,B.data]),U=Y.find(e=>e.graph===b).kinds,W=Y.find(e=>e.graph===b).fallback,Z=e=>{e!==b&&(C(null),E(null),A(void 0),j(e)),k(!0)},J=(0,a.useCallback)(e=>{O.onChange(e),E(e)},[O.onChange]);return(0,n.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,n.jsxs)("header",{className:"flex items-center gap-3 border-b border-border px-4 py-2",children:[(0,n.jsx)("h1",{className:"text-sm font-semibold",children:"편집기"}),(0,n.jsx)("button",{type:"button","aria-pressed":!y,onClick:()=>{var e;k(!1),null==(e=window.history)||e.replaceState(null,"","/app/editor/")},children:"통합 캔버스"}),(0,n.jsx)("button",{type:"button","aria-pressed":y&&"workflow"===b,onClick:()=>Z("workflow"),children:"워크플로 목록"}),(0,n.jsx)("button",{type:"button","aria-pressed":y&&"harness"===b,onClick:()=>Z("harness"),children:"실행 그래프 목록"})]}),(0,n.jsx)("div",{className:y?"hidden":"flex min-h-0 flex-1 flex-col",children:(0,n.jsx)(ex,{groups:Y,client:c})}),y&&(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col",children:[!("harness"===b&&S)&&(0,n.jsx)(eu,{onStart:e=>{j("harness"),V({saved:!1,wizardPrompt:e})}}),"workflow"===b?(0,n.jsx)(x.N,{palette:U}):S?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-b border-border px-3 py-1.5 text-xs",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{C(null),E(null),A(void 0)},children:"← 그래프 목록"}),(0,n.jsx)(eh,{context:I,client:c},S.key),W&&(0,n.jsx)("span",{role:"status",children:"어휘 목록을 불러오지 못해 코어 팔레트를 씁니다."})]}),(0,n.jsxs)("div",{className:"border-b border-border px-3 py-2 text-xs",children:[(0,n.jsx)("label",{htmlFor:"knowledge-pack",children:"지식(RAG) 노드 \xb7 설치된 팩"}),(0,n.jsxs)("select",{id:"knowledge-pack",value:z,onChange:e=>_(e.target.value),className:"ml-2 rounded border border-border bg-background px-2 py-1",children:[(0,n.jsx)("option",{value:"",children:"팩 사용 안 함"}),(null!=(u=null==(r=D.data)?void 0:r.packs)?u:[]).map(e=>(0,n.jsxs)("option",{value:e.id,children:[e.title," (",e.id,")"]},e.id))]}),D.isError&&(0,n.jsx)("span",{role:"status",children:"설치된 팩을 불러오지 못했습니다."})]}),(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col lg:flex-row",children:[(0,n.jsx)("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col max-lg:overflow-y-auto",children:(0,n.jsx)(q,{palette:U,client:c,wizardMode:P,...S.graph?{initialGraph:S.graph,initialSaved:S.saved}:{},...R?{nodeStatus:R}:{},...O.replace?{replace:O.replace}:{},...O.highlight?{highlight:O.highlight}:{},nodeLabels:O.labels,...O.steps?{wizardSteps:O.steps}:{},onChange:J,installedPacks:null==(t=D.data)?void 0:t.packs,onKnowledgePackChange:_,renderActions:e=>(0,n.jsx)(er,{context:e,client:c,onStatus:F}),onSaved:()=>{N.invalidateQueries({queryKey:["run-graphs"]})}},S.key)}),(0,n.jsx)(ei,{client:function(e){let r=e.graphWizard;return r?{graphWizard:(e,t)=>r(e,t)}:{graphWizard:async()=>{throw new p.Iu(404,"/v1/graphs/wizard",null)}}}(c),current:O.current,laid:O.laid,...z?{packId:z}:{},onApply:(e,r,t,n,a)=>{G(!0),O.apply(e,r,t,n,a)},onRestore:O.restore,...S.wizardPrompt?{initialPrompt:S.wizardPrompt}:{}},S.key)]})]}):(0,n.jsx)(h.F,{palette:U,onNewGraph:()=>V({saved:!1}),onOpenInCanvas:(e,r)=>V({graph:M(r),saved:!0})})]})]})}function ev(){return(0,n.jsx)(a.Suspense,{fallback:(0,n.jsx)("p",{className:"p-4 text-sm",children:"편집기를 불러오는 중…"}),children:(0,n.jsx)(eg,{})})}},38203:(e,r,t)=>{Promise.resolve().then(t.bind(t,31618))},53648:()=>{},60348:(e,r,t)=>{"use strict";t.d(r,{$5:()=>i,dJ:()=>u});var n=t(49954);let a=new Set,s=new Set;function o(e,r){if(r!==a.has(e))for(let t of(r?a.add(e):a.delete(e),s))t()}function l(){return a.size>0}function d(e){return s.add(e),()=>{s.delete(e)}}function i(){return(0,n.useSyncExternalStore)(d,l,()=>!1)}function u(e){let r=!(arguments.length>1)||void 0===arguments[1]||arguments[1];(0,n.useEffect)(()=>(o(e,r),()=>o(e,!1)),[e,r])}}},e=>{e.O(0,[5225,2609,8411,8604,2566,9917,4089,1729,7247,5492,9638,5785,599,4565,3294,2201,6356,7358],()=>e(e.s=38203)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[650],{8801:(e,t,r)=>{"use strict";r.d(t,{C:()=>i,DaemonProvider:()=>u,Q:()=>d});var n=r(77194),s=r(49954),a=r(9248),l=r(19631),o=r(49638),c=r(35857);let i=(0,s.createContext)(null);function u(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[u,d]=(0,s.useState)(r),[m,p]=(0,s.useState)(""),[f]=(0,s.useState)(()=>new o.ki(r));(0,s.useEffect)(()=>{let e=(0,a.Fp)();d(e),f.updateConfig(e),p((0,l.oD)()),(0,c.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();f.updateConfig(t),d(t),(0,c.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(t=>t===e.newValue?t:((0,c.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let x=e=>{d(t=>{let r={...t,...e};return(0,a.Qc)(e),f.updateConfig(r),(0,c.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},h=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,c.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,s.useMemo)(()=>({config:u,setConfig:x,client:f,sessionId:m,setSessionId:h}),[u,f,m]);return(0,n.jsx)(i.Provider,{value:b,children:t})}function d(){let e=(0,s.useContext)(i);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},19631:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>l,f6:()=>s,oD:()=>a});let n="elanous.daemon.sessionId";function s(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=s();return localStorage.setItem(n,t),t}function l(){let e=s();return localStorage.setItem(n,e),e}},29483:(e,t,r)=>{Promise.resolve().then(r.bind(r,42809))},32556:(e,t,r)=>{"use strict";r.d(t,{a:()=>o});var n=r(77194),s=r(49954),a=r(88094);let l=e=>JSON.stringify([e.graphId,e.runId]);function o(e){let{client:t,approvals:r,onDecided:o,onPendingChange:c}=e,i=(0,s.useMemo)(()=>(0,a.ll)({client:t}),[t]),[u,d]=(0,s.useState)([]),[m,p]=(0,s.useState)({}),[f,x]=(0,s.useState)(null),[h,b]=(0,s.useState)(""),g=(0,s.useRef)(0),y=r.map(l).join("|");function v(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:m;d(e),c(r.filter(r=>!t[l(r)]&&e.some(e=>l(e)===l(r))).length)}async function j(e,t){let n=l(e);if(f||m[n]||!r.some(e=>l(e)===n)||!u.some(e=>l(e)===n))return;let s=g.current;x(n),b("");try{if(await i.decide(e.graphId,e.runId,t),g.current!==s)return;let r={...m,[n]:t};p(r),v(u,r),o();let a=await i.list();g.current===s&&v(a.items,r)}catch(e){g.current===s&&b((0,a.LP)(e,"decide"))}finally{g.current===s&&x(null)}}return((0,s.useEffect)(()=>{let e=++g.current;return(d([]),b(""),y)?(i.list().then(t=>{g.current===e&&v(t.items)}).catch(t=>{g.current===e&&b((0,a.LP)(t,"list"))}),()=>{g.current+=1}):(c(0),()=>{g.current+=1})},[i,y]),0===r.length)?null:(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("h3",{className:"font-semibold",children:"게시 승인"}),h&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:h}),(0,n.jsx)("ul",{className:"space-y-2",children:r.map(e=>{let t=l(e),r=u.some(e=>l(e)===t);return(0,n.jsxs)("li",{className:"rounded-lg border border-border bg-background px-4 py-3 text-sm",children:[(0,n.jsx)("p",{children:e.message}),m[t]?(0,n.jsx)("p",{className:"mt-2 text-muted-foreground",children:"approved"===m[t]?"승인됨":"보류됨"}):r?(0,n.jsxs)("div",{className:"mt-2 flex gap-2",children:[(0,n.jsx)("button",{type:"button",disabled:null!==f,onClick:()=>void j(e,"approved"),className:"rounded-lg bg-primary px-3 py-1 text-primary-foreground disabled:opacity-50",children:"승인"}),(0,n.jsx)("button",{type:"button",disabled:null!==f,onClick:()=>void j(e,"rejected"),className:"rounded-lg border border-border px-3 py-1 disabled:opacity-50",children:"보류"})]}):(0,n.jsx)("p",{className:"mt-2 text-muted-foreground",children:"대기 중인 승인이 아닙니다."})]},t)})})]})}},42809:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>m});var n=r(77194),s=r(49954),a=r(8801),l=r(32556);let o={report:"보고서",pdf:"PDF",video:"영상",image:"그림",text:"글",link:"링크"};function c(e,t){if(e.startsWith("/v1/exec-requests/".concat(encodeURIComponent(t),"/files/")))return{url:e,daemonFile:!0};try{let t=new URL(e);if(("https:"===t.protocol||"http:"===t.protocol)&&!t.username&&!t.password)return{url:t.href,daemonFile:!1}}catch(e){}return null}function i(e){let{client:t,id:r,result:a}=e,[l,i]=(0,s.useState)(""),[u,d]=(0,s.useState)(!1),[m,p]=(0,s.useState)(null),f=c(a.url,r),x=a.title||o[a.kind],h=(null==f?void 0:f.daemonFile)&&("video"===a.kind||"image"===a.kind);if((0,s.useEffect)(()=>{let e;if(!h||!f)return;let r=!0;return p(null),i(""),t.fetchResponse(f.url).then(async t=>{if(!t.ok)throw Error("HTTP ".concat(t.status));let n=await t.blob();r&&p(e=URL.createObjectURL(n))}).catch(()=>{r&&i("결과 파일을 열지 못했습니다. 다시 시도해 주세요.")}),()=>{r=!1,e&&URL.revokeObjectURL(e)}},[t,h,null==f?void 0:f.url]),!f)return null;async function b(){if(!(null==f?void 0:f.daemonFile)||u)return;let e="pdf"===a.kind?window.open("","_blank"):null;if("pdf"===a.kind&&!e)return void i("결과 파일을 열지 못했습니다. 다시 시도해 주세요.");e&&(e.opener=null),d(!0),i("");try{let n=await t.fetchResponse(f.url);if(!n.ok)throw Error("HTTP ".concat(n.status));let s=URL.createObjectURL(await n.blob());if(e)e.closed?URL.revokeObjectURL(s):(e.location.replace(s),setTimeout(()=>URL.revokeObjectURL(s),6e4));else{var r;let e=document.createElement("a");e.href=s,e.download=decodeURIComponent(null!=(r=f.url.split("/").at(-1))?r:x),document.body.appendChild(e),e.click(),e.remove(),setTimeout(()=>URL.revokeObjectURL(s),6e4)}}catch(t){null==e||e.close(),i("결과 파일을 열지 못했습니다. 다시 시도해 주세요.")}finally{d(!1)}}return(0,n.jsxs)("li",{className:"rounded-lg border border-border bg-background px-4 py-3 text-sm",children:[h?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{className:"font-medium",children:x}),m&&("video"===a.kind?(0,n.jsx)("video",{controls:!0,src:m,"aria-label":x,className:"mt-2 max-w-full"}):(0,n.jsx)("img",{src:m,alt:x,className:"mt-2 max-w-full"}))]}):f.daemonFile?(0,n.jsx)("button",{type:"button",onClick:()=>void b(),disabled:u,className:"font-medium text-primary underline underline-offset-4 disabled:opacity-50",children:u?"여는 중…":x}):(0,n.jsx)("a",{href:f.url,target:"_blank",rel:"noopener noreferrer",className:"font-medium text-primary underline underline-offset-4",children:x}),(0,n.jsxs)("span",{className:"ml-2 text-muted-foreground",children:[a.seat.toUpperCase()," \xb7 ",o[a.kind]]}),a.sources&&a.sources.length>0&&(0,n.jsx)("ul",{className:"mt-2 flex flex-wrap gap-2","aria-label":"출처",children:a.sources.slice(0,3).map((e,t)=>{let s=c(e.url,r);return s&&!s.daemonFile?(0,n.jsx)("li",{children:(0,n.jsx)("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"text-primary underline underline-offset-4",children:e.title})},"".concat(e.url,":").concat(t)):null})}),l&&(0,n.jsx)("p",{role:"alert",className:"mt-1 text-destructive",children:l})]})}function u(e){switch(e){case"planning":return"계획 중";case"running":return"진행 중";case"done":return"완료";case"failed":return"멈춤"}}function d(e){switch(e){case"waiting":return"대기";case"running":return"진행 중";case"done":return"완료";case"failed":return"못 함"}}function m(){var e,t,r,o;let{client:c}=(0,a.Q)(),[m,p]=(0,s.useState)(""),[f,x]=(0,s.useState)(!1),[h,b]=(0,s.useState)([]),[g,y]=(0,s.useState)(!1),[v,j]=(0,s.useState)(""),[N,w]=(0,s.useState)(""),[k,R]=(0,s.useState)(null),[S,U]=(0,s.useState)(null),[C,I]=(0,s.useState)(""),[E,L]=(0,s.useState)(0),[O,P]=(0,s.useState)(null),D=(0,s.useRef)(new Map),F=(0,s.useRef)(0),T=(0,s.useRef)(k);T.current=k;let _=(0,s.useRef)(null),H=(0,s.useRef)(0),M=h.some(e=>"planning"===e.status||"running"===e.status),q=null==(e=h.find(e=>e.id===k))?void 0:e.status,Y=(null==S?void 0:S.id)===k&&(null===O?S.approvals.length>0:O>0);(0,s.useEffect)(()=>{var e,t;return F.current+=1,H.current+=1,_.current=null,D.current=new Map,p(""),x(!1),b([]),y(!1),j(""),w(""),R(new URLSearchParams(null!=(t=null==(e=window.location)?void 0:e.search)?t:"").get("request")),U(null),I(""),P(null),()=>{F.current+=1}},[c]),(0,s.useEffect)(()=>{let e=!0,t=!1;async function r(){if(!t){t=!0;try{let t=await c.listExecRequests();if(!e)return;for(let e of t.items)D.current.delete(e.id);b([...D.current.values(),...t.items].sort((e,t)=>t.createdAt.localeCompare(e.createdAt)||t.id.localeCompare(e.id))),j("")}catch(t){e&&j("맡긴 일을 읽지 못했습니다. 연결을 확인해 주세요.")}finally{t=!1,e&&y(!0)}}}r();let n=M?setInterval(()=>void r(),5e3):null;return()=>{e=!1,n&&clearInterval(n)}},[c,M]);let A=(0,s.useCallback)(async()=>{if(!k)return;let e=F.current,t=H.current,r="".concat(e,":").concat(t,":").concat(k);if(_.current!==r){_.current=r;try{let r=await c.getExecRequest(k);if(F.current!==e||H.current!==t||T.current!==k)return;U(r),I("")}catch(r){F.current===e&&H.current===t&&T.current===k&&I("상세를 읽지 못했습니다. 잠시 뒤 다시 시도해 주세요.")}finally{_.current===r&&(_.current=null)}}},[c,k]);async function V(e){e.preventDefault();let t=m.trim();if(!t||f)return;let r=F.current;x(!0),w("");try{let e=await c.submitExecRequest(t);if(F.current!==r)return;let n={id:e.id,text:t,createdAt:new Date().toISOString(),status:e.status,seats:[],resultCount:0};D.current.set(n.id,n),b(e=>[n,...e.filter(e=>e.id!==n.id)]),p("")}catch(e){F.current===r&&w("보내지 못했습니다. 연결을 확인하고 다시 시도해 주세요.")}finally{F.current===r&&x(!1)}}(0,s.useEffect)(()=>{k&&A()},[A,E]),(0,s.useEffect)(()=>{if(!k||"planning"!==q&&"running"!==q&&!Y)return;let e=setInterval(()=>void A(),5e3);return()=>clearInterval(e)},[k,q,Y,A]);let z=h.find(e=>e.id===k),J=(null==S?void 0:S.id)===k?S:null;return(0,n.jsxs)("main",{className:"mx-auto w-full max-w-2xl space-y-8 px-5 py-10 sm:py-14",children:[(0,n.jsxs)("section",{"aria-labelledby":"exec-compose",className:"space-y-4",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{id:"exec-compose",className:"text-2xl font-semibold tracking-tight",children:"COO 에게 맡기기"}),(0,n.jsx)("p",{className:"mt-2 text-sm text-muted-foreground",children:"할 일을 한 줄로 적어 보내세요. 자리별 진행과 결과를 여기서 볼 수 있습니다."})]}),(0,n.jsxs)("form",{onSubmit:V,className:"flex gap-2",children:[(0,n.jsx)("label",{htmlFor:"exec-text",className:"sr-only",children:"한 줄로 맡길 일"}),(0,n.jsx)("input",{id:"exec-text",name:"text",value:m,onChange:e=>p(e.target.value),placeholder:"한 줄로 맡길 일",className:"min-w-0 flex-1 rounded-lg border border-input bg-background px-3 py-2 text-sm"}),(0,n.jsx)("button",{type:"submit",disabled:!m.trim()||f,className:"rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground disabled:opacity-50",children:f?"보내는 중…":"보내기"})]}),N&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:N})]}),(0,n.jsxs)("section",{"aria-labelledby":"exec-list",className:"space-y-3",children:[(0,n.jsx)("h2",{id:"exec-list",className:"text-xl font-semibold",children:"맡긴 일"}),v&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:v}),!g&&0===h.length&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"불러오는 중…"}),g&&0===h.length&&!v&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"아직 맡긴 일이 없습니다."}),(0,n.jsx)("ul",{className:"space-y-2",children:h.map(e=>{var t;return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>{k!==e.id&&(H.current+=1,R(e.id),U(null),I(""),P(null))},"aria-expanded":k===e.id,className:"w-full rounded-xl border border-border bg-card p-4 text-left hover:border-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary",children:[(0,n.jsxs)("span",{className:"flex items-start justify-between gap-3",children:[(0,n.jsx)("span",{className:"min-w-0 truncate text-sm font-semibold",children:null!=(t=e.text.trim().split(/\r?\n/,1)[0])?t:""}),(0,n.jsx)("span",{className:"shrink-0 text-sm font-medium text-primary",children:u(e.status)})]}),e.seats.length>0&&(0,n.jsx)("span",{className:"mt-2 block truncate text-xs text-muted-foreground",children:e.seats.map(e=>"".concat(e.seat.toUpperCase()," ").concat(d(e.status))).join(" \xb7 ")}),e.resultCount>0&&(0,n.jsxs)("span",{className:"mt-1 block text-xs text-muted-foreground",children:["결과 ",e.resultCount,"개"]})]})},e.id)})})]}),k&&(0,n.jsxs)("section",{"aria-labelledby":"exec-detail",className:"space-y-5 rounded-xl border border-border bg-card p-5",children:[(0,n.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,n.jsx)("h2",{id:"exec-detail",className:"text-lg font-semibold",children:"맡긴 일 상세"}),(0,n.jsx)("button",{type:"button",onClick:()=>{H.current+=1,R(null),U(null),P(null)},className:"text-sm text-primary underline underline-offset-4",children:"닫기"})]}),(0,n.jsx)("p",{className:"whitespace-pre-wrap text-sm",children:null!=(t=null==J?void 0:J.text)?t:null==z?void 0:z.text}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:u(null!=(o=null!=(r=null==J?void 0:J.status)?r:null==z?void 0:z.status)?o:"planning")}),C&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:C}),!J&&!C&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"상세 불러오는 중…"}),J&&(0,n.jsxs)(n.Fragment,{children:[J.summary&&(0,n.jsx)("p",{className:"text-sm",children:J.summary}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("h3",{className:"font-semibold",children:"이렇게 나눠 맡겼습니다"}),0===J.seats.length&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"planning"===J.status?"COO 가 나누는 중입니다":"맡은 자리가 없습니다"}),(0,n.jsx)("ul",{className:"space-y-2",children:J.seats.map(e=>(0,n.jsxs)("li",{className:"rounded-lg border border-border bg-background px-4 py-3 text-sm",children:[(0,n.jsxs)("div",{className:"flex justify-between gap-2",children:[(0,n.jsxs)("span",{className:"font-semibold",children:[e.seat.toUpperCase()," \xb7 ",e.title]}),(0,n.jsx)("span",{className:"shrink-0 text-muted-foreground",children:d(e.status)})]}),"failed"===e.status&&e.reason&&(0,n.jsxs)("p",{className:"mt-2 text-destructive",children:["못 한 이유 \xb7 ",e.reason]})]},"".concat(e.seat,":").concat(e.title)))})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("h3",{className:"font-semibold",children:"결과"}),0===J.results.length&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"아직 결과가 없습니다."}),(0,n.jsx)("ul",{className:"space-y-2",children:J.results.map(e=>(0,n.jsx)(i,{client:c,id:J.id,result:e},e.url))})]}),(0,n.jsx)(l.a,{client:c,approvals:J.approvals,onDecided:()=>L(e=>e+1),onPendingChange:P},J.id)]})]})]})}},88094:(e,t,r)=>{"use strict";function n(e){return{slides:e.slides.map(e=>{let{image:t,caption:r,include:n}=e;return{image:t,caption:r,include:n}}),caption:{hook:e.caption.hook,body:e.caption.body},hashtags:[...e.hashtags],cover:{text:e.cover.text,sub:e.cover.sub},location:e.location}}r.d(t,{$Y:()=>l,LP:()=>c,Mz:()=>n,ll:()=>u,rH:()=>o});class s extends Error{constructor(e,t){super(t),this.status=e,this.name="GraphApprovalsApiError"}}let a={list:"목록을 보려면",decide:"승인하려면",save:"초안을 저장하려면"},l="/app/settings/#bearer-token";function o(e){return e instanceof s&&(401===e.status||403===e.status)}function c(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"decide";return e instanceof s?401===e.status||403===e.status?"".concat(a[t]," 이 기기를 데몬에 연결해야 합니다 — 설정 › 데몬 연결 › 연결 토큰 칸에 토큰을 넣어 주세요."):404===e.status?"이 실행을 찾지 못했습니다. 목록을 다시 확인해 주세요.":409===e.status?"이미 결정된 실행입니다. 목록을 다시 확인해 주세요.":400===e.status?"결정 내용을 확인한 뒤 다시 시도해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요.":e instanceof TypeError?"서버에 연결하지 못했습니다. 연결 상태를 확인해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요."}let i="/v1/graph-approvals";function u(e){var t,r;let n=(null!=(t=e.baseUrl)?t:"").replace(/\/+$/,""),a=null!=(r=e.fetchImpl)?r:fetch;async function l(t,r){let l={...r,headers:{"content-type":"application/json",...e.authHeader?{authorization:e.authHeader}:{}}},o=e.client?await e.client.fetchResponse(t,l):await a("".concat(n).concat(t),l),c=await o.json().catch(()=>null);if(!o.ok){let e=c&&"object"==typeof c&&"error"in c&&"string"==typeof c.error?c.error:"request-failed";throw new s(o.status,e)}return c}return{list:()=>l(i),decide:(e,t,r)=>l("".concat(i,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t)),{method:"POST",body:JSON.stringify({decision:r})}),saveFeedDraft:(e,t,r)=>l("".concat(i,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t),"/feed-draft"),{method:"PUT",body:JSON.stringify(r)}),feedMedia:async(t,r,l)=>{let o="".concat(i,"/").concat(encodeURIComponent(t),"/").concat(encodeURIComponent(r),"/media?path=").concat(encodeURIComponent(l)),c={headers:e.authHeader?{authorization:e.authHeader}:{}},u=e.client?await e.client.fetchResponse(o,c):await a("".concat(n).concat(o),c);if(!u.ok)throw new s(u.status,"media-failed");return u.blob()}}}}},e=>{e.O(0,[9638,2201,6356,7358],()=>e(e.s=29483)),_N_E=e.O()}]);