elanous 0.2.36 → 0.2.37

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 (630) 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/{uC-N0emedeNOFuaBQFv-I → 8kITumG9GAZ1LwT9POrAR}/_buildManifest.js +1 -1
  4. package/apps/pwa/out/_next/static/chunks/1041-5841aae848fb6403.js +1 -0
  5. package/apps/pwa/out/_next/static/chunks/1087.3177e54f672dc526.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/1105.efe1e13503ac7a33.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/1224.2ceca6c180d5130b.js +62 -0
  8. package/apps/pwa/out/_next/static/chunks/{4286.b70c4520306817e8.js → 1262.a89bb27a5b2f844e.js} +1 -1
  9. package/apps/pwa/out/_next/static/chunks/1417-1768233ac92f8a5d.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/1612.81bbc19af06af16c.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/{3410.7f9af5ab77cbe65f.js → 1746.3563617ea64023a3.js} +1 -1
  12. package/apps/pwa/out/_next/static/chunks/1766.728d42053070bb2d.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/1773.d38e945481e04125.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/1974-c12f9600da3d3c26.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/1ed5e8af.cf424815c7c0efad.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/{9250-072df22eaadaa6b5.js → 2002-a43a3f380df873ec.js} +1 -1
  17. package/apps/pwa/out/_next/static/chunks/2061.7232dc9dc058417f.js +1 -0
  18. package/apps/pwa/out/_next/static/chunks/210.90b2cbd64926cf34.js +32 -0
  19. package/apps/pwa/out/_next/static/chunks/{3727.7949ccaacaa71242.js → 2283.edd9627b7bdfb546.js} +2 -2
  20. package/apps/pwa/out/_next/static/chunks/2318-450e75d07605b8fe.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/{4615.8525eb0add35eba6.js → 2375.bf364c85dbb6f085.js} +1 -1
  22. package/apps/pwa/out/_next/static/chunks/244-a810d282a20f1783.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/2479-fe7e188bd9402d14.js +1 -0
  24. package/apps/pwa/out/_next/static/chunks/2514.03b60f266531a015.js +148 -0
  25. package/apps/pwa/out/_next/static/chunks/2526-a657538869888604.js +1 -0
  26. package/apps/pwa/out/_next/static/chunks/2533-6f0341ff075809e9.js +1 -0
  27. package/apps/pwa/out/_next/static/chunks/2676.e7994c695ef0f30d.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/2734.3ffdf54254fb6f99.js +27 -0
  29. package/apps/pwa/out/_next/static/chunks/2770-23252bf3a37880b9.js +1 -0
  30. package/apps/pwa/out/_next/static/chunks/2969.66b8b545139d1544.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/3128.a9210d08800ea6a8.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/{5711.957b095705c12560.js → 3199.6a1a9b0e6cd01dc6.js} +1 -1
  33. package/apps/pwa/out/_next/static/chunks/3212.12179fd3eee8cef1.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/{2986.45d7652e4f13557e.js → 3578.4e9f9948a9a6f2f4.js} +2 -2
  35. package/apps/pwa/out/_next/static/chunks/3760-2909ddb9279281cd.js +1 -0
  36. package/apps/pwa/out/_next/static/chunks/3825.1921b5901bf33dce.js +36 -0
  37. package/apps/pwa/out/_next/static/chunks/3994-63eb884ed0547011.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/4036.d54e55e1ebf5acdc.js +90 -0
  39. package/apps/pwa/out/_next/static/chunks/4115.5b438b99f0ae729f.js +226 -0
  40. package/apps/pwa/out/_next/static/chunks/4269.d8f9f34bb0fc6c43.js +287 -0
  41. package/apps/pwa/out/_next/static/chunks/431-4eed5bd2c5fe1719.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/{7481.39f7a4654907bf6e.js → 4313.76f232c304a15bde.js} +1 -1
  43. package/apps/pwa/out/_next/static/chunks/4324.c99ba3e83eb1b691.js +1 -0
  44. package/apps/pwa/out/_next/static/chunks/4337e36d.f42c3b391b3d8f20.js +122 -0
  45. package/apps/pwa/out/_next/static/chunks/{6943.c6b24124853a47b2.js → 4383.18e5c54db3a22c88.js} +1 -1
  46. package/apps/pwa/out/_next/static/chunks/4599-96eff3f2a9c242c1.js +1 -0
  47. package/apps/pwa/out/_next/static/chunks/{3757-180308bc61021b05.js → 4725-34bed25720cc326b.js} +1 -1
  48. package/apps/pwa/out/_next/static/chunks/4825-a9d9d4e9f5892309.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/4833-7934c592c5569f00.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/4879-68518f547a207aff.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/4896.f9b70285363b27b2.js +24 -0
  52. package/apps/pwa/out/_next/static/chunks/{771.c3cdb6c1f7f47c02.js → 4931.95cc6dbd230774ca.js} +3 -3
  53. package/apps/pwa/out/_next/static/chunks/4937-28d437999b77c9dd.js +1 -0
  54. package/apps/pwa/out/_next/static/chunks/49aa54ab.80f39398e0ed0f30.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/{552.b7d061ad91eeac51.js → 5046.7fd5cbd859299448.js} +2 -2
  56. package/apps/pwa/out/_next/static/chunks/5056.482687319b82638e.js +104 -0
  57. package/apps/pwa/out/_next/static/chunks/506.16b83d56a437a9ee.js +1 -0
  58. package/apps/pwa/out/_next/static/chunks/5260-20593b0a25d0afbc.js +1 -0
  59. package/apps/pwa/out/_next/static/chunks/5404.cc4e9fec26fd5925.js +1 -0
  60. package/apps/pwa/out/_next/static/chunks/576.485e83e3f3dec19a.js +1 -0
  61. package/apps/pwa/out/_next/static/chunks/5832-a6be14e663f65726.js +1 -0
  62. package/apps/pwa/out/_next/static/chunks/5854-56648a9fe646b9a0.js +1 -0
  63. package/apps/pwa/out/_next/static/chunks/{9f31e478.fefcbcd3c388ebc5.js → 58edce7d.f1b0c72acf13b123.js} +1 -1
  64. package/apps/pwa/out/_next/static/chunks/5925.3b1f8b135710249b.js +93 -0
  65. package/apps/pwa/out/_next/static/chunks/{3136.30aaaa5fa03662a3.js → 5952.294fc574a8625184.js} +1 -1
  66. package/apps/pwa/out/_next/static/chunks/{da5ecc5c-b005ad8cac737d57.js → 5f6af561-f90b7a67f4f75d13.js} +1 -1
  67. package/apps/pwa/out/_next/static/chunks/6168.17749aa3905fa073.js +74 -0
  68. package/apps/pwa/out/_next/static/chunks/{3324.a09703033abcbd2f.js → 6252.240578f10952e091.js} +1 -1
  69. package/apps/pwa/out/_next/static/chunks/6416.5d50b8ec9986ca98.js +1 -0
  70. package/apps/pwa/out/_next/static/chunks/{8904.7d51af2dc033965c.js → 6680.6a693c28aae4cd19.js} +2 -2
  71. package/apps/pwa/out/_next/static/chunks/{275-02ea4c2a33980422.js → 6745-5a63492933959dd9.js} +3 -3
  72. package/apps/pwa/out/_next/static/chunks/6758.e7fbf532953c0783.js +1 -0
  73. package/apps/pwa/out/_next/static/chunks/6795.0cb8a59730d99703.js +149 -0
  74. package/apps/pwa/out/_next/static/chunks/{528.38ce20ef8aa251ff.js → 6819.be5c9c4d67f22922.js} +3 -3
  75. package/apps/pwa/out/_next/static/chunks/6877-84d47b7e85d0c41e.js +1 -0
  76. package/apps/pwa/out/_next/static/chunks/6971-fb5f9dc0a2cb5d2d.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/{3a3d9966.cc4d4585a2708e7c.js → 709a918c.4fd3b4e2a32cb4e3.js} +1 -1
  78. package/apps/pwa/out/_next/static/chunks/717.522b08685979b814.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/7191.e41eb8f455c7f089.js +41 -0
  80. package/apps/pwa/out/_next/static/chunks/7233.8e744b7513119409.js +1 -0
  81. package/apps/pwa/out/_next/static/chunks/7238-97c2226f80504bd8.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/7285.307963afcf7e7660.js +24 -0
  83. package/apps/pwa/out/_next/static/chunks/7299-fbe4b8c47a87614a.js +1 -0
  84. package/apps/pwa/out/_next/static/chunks/7314.df0d95930b0c3f50.js +1 -0
  85. package/apps/pwa/out/_next/static/chunks/7406.c0589fdf2ee66629.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/{4304.e9b2512834a9e23e.js → 7424.c0fe2a595d4232b5.js} +1 -1
  87. package/apps/pwa/out/_next/static/chunks/752-90e3e7daad3d8e39.js +1 -0
  88. package/apps/pwa/out/_next/static/chunks/7524-bcd3d9928c6842d9.js +1 -0
  89. package/apps/pwa/out/_next/static/chunks/7549.9a4de3bf231cfc52.js +1 -0
  90. package/apps/pwa/out/_next/static/chunks/757-4fbaf50942b8c424.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/765.76ae970ceb597b5b.js +1 -0
  92. package/apps/pwa/out/_next/static/chunks/{2683.c9773a0c589b031b.js → 7867.e8725745ddd1d940.js} +4 -4
  93. package/apps/pwa/out/_next/static/chunks/{6466-92e65a48490b68a9.js → 7893-e444a1b0809cd1e4.js} +1 -1
  94. package/apps/pwa/out/_next/static/chunks/7956-33748cabb3a05562.js +1 -0
  95. package/apps/pwa/out/_next/static/chunks/{ccae1c4b-0cf414f5eff1b10d.js → 7c5ed21f-f286708e57cf88f7.js} +1 -1
  96. package/apps/pwa/out/_next/static/chunks/8030-aa66b478b53dbfca.js +1 -0
  97. package/apps/pwa/out/_next/static/chunks/8051.c88c07dacbbc5f21.js +8 -0
  98. package/apps/pwa/out/_next/static/chunks/{3840-5825d56d46976a92.js → 8080-40d781e7704d3671.js} +1 -1
  99. package/apps/pwa/out/_next/static/chunks/8149.80e402d4345e8dae.js +77 -0
  100. package/apps/pwa/out/_next/static/chunks/8205.50a5268f4e12ba0b.js +1 -0
  101. package/apps/pwa/out/_next/static/chunks/8231.a128feaa6f8b6079.js +1 -0
  102. package/apps/pwa/out/_next/static/chunks/85.4ddb1dda2ea3ffa2.js +286 -0
  103. package/apps/pwa/out/_next/static/chunks/8537.26517a09e8247beb.js +1 -0
  104. package/apps/pwa/out/_next/static/chunks/8595-e9b7081ab773a61f.js +1 -0
  105. package/apps/pwa/out/_next/static/chunks/8821-30cc65a61a60951f.js +1 -0
  106. package/apps/pwa/out/_next/static/chunks/8905.b3385aadb7b133e6.js +79 -0
  107. package/apps/pwa/out/_next/static/chunks/8983.246bb3a1ac38f50f.js +1 -0
  108. package/apps/pwa/out/_next/static/chunks/{873d6c12.09bd499f57171543.js → 8c58d09b.e8724a299658d86f.js} +1 -1
  109. package/apps/pwa/out/_next/static/chunks/9072.18342f5941a1f3ec.js +1 -0
  110. package/apps/pwa/out/_next/static/chunks/9123.9df04866b2d6e00f.js +1 -0
  111. package/apps/pwa/out/_next/static/chunks/{575.d929793a53f27c4b.js → 9151.a2c51e93f9156dae.js} +1 -1
  112. package/apps/pwa/out/_next/static/chunks/9175-7d383df15a82e2be.js +1 -0
  113. package/apps/pwa/out/_next/static/chunks/9181-bf89c07ce5b8f599.js +1 -0
  114. package/apps/pwa/out/_next/static/chunks/920-429bbc4504b45f71.js +1 -0
  115. package/apps/pwa/out/_next/static/chunks/9207.625edf45d656151c.js +1 -0
  116. package/apps/pwa/out/_next/static/chunks/9378.d2575c6ffd6dd756.js +94 -0
  117. package/apps/pwa/out/_next/static/chunks/957.db5b5c4d32a35240.js +1 -0
  118. package/apps/pwa/out/_next/static/chunks/{190.285c832bd9626f8c.js → 958.53a8dcf4729e6997.js} +1 -1
  119. package/apps/pwa/out/_next/static/chunks/9647.8f0cd0898c592a29.js +1 -0
  120. package/apps/pwa/out/_next/static/chunks/9665-26abb02665704c2c.js +1 -0
  121. package/apps/pwa/out/_next/static/chunks/9703.e7d81b6faef1050a.js +1 -0
  122. package/apps/pwa/out/_next/static/chunks/9882-7a9164b3c2dacbe5.js +1 -0
  123. package/apps/pwa/out/_next/static/chunks/9998.b74e033efadecd10.js +1 -0
  124. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-c604fb980a634d88.js +1 -0
  125. package/apps/pwa/out/_next/static/chunks/app/approvals/page-ec2d8a4979ca9075.js +1 -0
  126. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-cb6add08ad3c7660.js +1 -0
  127. package/apps/pwa/out/_next/static/chunks/app/board/page-e2eaa321ec223fe6.js +1 -0
  128. package/apps/pwa/out/_next/static/chunks/app/botlab/page-5b8a09c475b5f844.js +1 -0
  129. package/apps/pwa/out/_next/static/chunks/app/bots/page-91a77daedfbac191.js +1 -0
  130. package/apps/pwa/out/_next/static/chunks/app/ceo/page-f37fc5e974bda39b.js +1 -0
  131. package/apps/pwa/out/_next/static/chunks/app/chat/page-91429a0b78415a94.js +1 -0
  132. package/apps/pwa/out/_next/static/chunks/app/consult/page-b95798b58263b910.js +1 -0
  133. package/apps/pwa/out/_next/static/chunks/app/control/page-763d53e175e17aa1.js +1 -0
  134. package/apps/pwa/out/_next/static/chunks/app/decisions/page-d55023204055b12f.js +1 -0
  135. package/apps/pwa/out/_next/static/chunks/app/design-check/page-89d2140d78abc810.js +1 -0
  136. package/apps/pwa/out/_next/static/chunks/app/editor/page-82dc069abfe27f55.js +1 -0
  137. package/apps/pwa/out/_next/static/chunks/app/exec/page-25d9eee7beb552c0.js +1 -0
  138. package/apps/pwa/out/_next/static/chunks/app/field/page-770b4594c713ee97.js +1 -0
  139. package/apps/pwa/out/_next/static/chunks/app/healthz/route-c604fb980a634d88.js +1 -0
  140. package/apps/pwa/out/_next/static/chunks/app/inside/page-ba8e0dcae4f83985.js +1 -0
  141. package/apps/pwa/out/_next/static/chunks/app/intake/page-5c112c6d7c33656e.js +1 -0
  142. package/apps/pwa/out/_next/static/chunks/app/layout-09788e1aa9a87db6.js +1 -0
  143. package/apps/pwa/out/_next/static/chunks/app/live/{page-e2de2e59111c9aad.js → page-3337c6a1328c2674.js} +1 -1
  144. package/apps/pwa/out/_next/static/chunks/app/live-run/{page-f2b2e4bf6e981450.js → page-89acd5d68c0bc560.js} +1 -1
  145. package/apps/pwa/out/_next/static/chunks/app/loops/page-5c13e2c76371d797.js +1 -0
  146. package/apps/pwa/out/_next/static/chunks/app/market/page-653a9f18642825c6.js +1 -0
  147. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-2af16e62c12f22df.js → page-fe986fe79b107546.js} +1 -1
  148. package/apps/pwa/out/_next/static/chunks/app/morning/page-1e5da297557d2354.js +1 -0
  149. package/apps/pwa/out/_next/static/chunks/app/not-found-91ea9f5869a40943.js +1 -0
  150. package/apps/pwa/out/_next/static/chunks/app/observatory/page-7824e21b999962e2.js +1 -0
  151. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-53d00a60cc75a922.js +1 -0
  152. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-88a1edbff62eaf1d.js +1 -0
  153. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-4e931248b3f9574b.js +1 -0
  154. package/apps/pwa/out/_next/static/chunks/app/outputs/page-443364c9e4a23b31.js +1 -0
  155. package/apps/pwa/out/_next/static/chunks/app/page-b9af2ac1c4737ce8.js +1 -0
  156. package/apps/pwa/out/_next/static/chunks/app/reflection/page-25ab9c614c14129b.js +1 -0
  157. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-dbcdcfac0a395a8a.js +1 -0
  158. package/apps/pwa/out/_next/static/chunks/app/sessions/page-bf1de6645089ec58.js +1 -0
  159. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-c4201761a5e839c9.js +1 -0
  160. package/apps/pwa/out/_next/static/chunks/app/settings/page-c304f469ea5d70e4.js +1 -0
  161. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-8e5a238cf5e50c9c.js +1 -0
  162. package/apps/pwa/out/_next/static/chunks/app/setup/layout-c604fb980a634d88.js +1 -0
  163. package/apps/pwa/out/_next/static/chunks/app/setup/page-32b526069ee50b3c.js +1 -0
  164. package/apps/pwa/out/_next/static/chunks/app/share/page-fb9e639c107f5f72.js +1 -0
  165. package/apps/pwa/out/_next/static/chunks/app/showroom/page-84220c776608cedc.js +1 -0
  166. package/apps/pwa/out/_next/static/chunks/app/tasks/page-e475618cbfd5ca2b.js +1 -0
  167. package/apps/pwa/out/_next/static/chunks/app/term/page-ac2c1e6169cfce57.js +1 -0
  168. package/apps/pwa/out/_next/static/chunks/app/today/page-fccd3020af2f8806.js +1 -0
  169. package/apps/pwa/out/_next/static/chunks/app/trace/page-9c0d7198ff7b5a91.js +1 -0
  170. package/apps/pwa/out/_next/static/chunks/app/vault/page-d54b1ec9b9c6430d.js +1 -0
  171. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-8c4bef1791d732ca.js +1 -0
  172. package/apps/pwa/out/_next/static/chunks/app/workflows/page-46fcc0b0bbc6fbfe.js +1 -0
  173. package/apps/pwa/out/_next/static/chunks/app/workspace/page-c1c80e345fa9d6f5.js +1 -0
  174. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-7dfda00afd172f5b.js +1 -0
  175. package/apps/pwa/out/_next/static/chunks/{053a429e.9a63436527cc751c.js → d9815f84.4918f682a45a8502.js} +1 -1
  176. package/apps/pwa/out/_next/static/chunks/{ceba0382.650712b56b85b582.js → de8446d3.31b73eb239fecd7b.js} +1 -1
  177. package/apps/pwa/out/_next/static/chunks/f21fd540.63ac75328926ed30.js +1 -0
  178. package/apps/pwa/out/_next/static/chunks/framework-77fdcc873519a6cd.js +1 -0
  179. package/apps/pwa/out/_next/static/chunks/main-app-d0d620d2ce235713.js +1 -0
  180. package/apps/pwa/out/_next/static/chunks/main-e0ef79c79337ba90.js +1 -0
  181. package/apps/pwa/out/_next/static/chunks/pages/_app-84b1bc71e3f9ce6a.js +1 -0
  182. package/apps/pwa/out/_next/static/chunks/pages/_error-2acb61f1363128cb.js +1 -0
  183. package/apps/pwa/out/_next/static/chunks/webpack-462ff5727ceb7824.js +1 -0
  184. package/apps/pwa/out/_next/static/css/{b5d88eba78a3d7bf.css → be9019f696217521.css} +1 -1
  185. package/apps/pwa/out/approvals/index.html +1 -1
  186. package/apps/pwa/out/approvals/index.txt +23 -23
  187. package/apps/pwa/out/autopilot/index.html +1 -1
  188. package/apps/pwa/out/autopilot/index.txt +23 -23
  189. package/apps/pwa/out/board/index.html +1 -1
  190. package/apps/pwa/out/board/index.txt +23 -23
  191. package/apps/pwa/out/botlab/index.html +1 -1
  192. package/apps/pwa/out/botlab/index.txt +22 -22
  193. package/apps/pwa/out/bots/index.html +1 -1
  194. package/apps/pwa/out/bots/index.txt +22 -22
  195. package/apps/pwa/out/ceo/index.html +1 -1
  196. package/apps/pwa/out/ceo/index.txt +23 -23
  197. package/apps/pwa/out/chat/index.html +1 -1
  198. package/apps/pwa/out/chat/index.txt +22 -22
  199. package/apps/pwa/out/consult/index.html +1 -1
  200. package/apps/pwa/out/consult/index.txt +23 -23
  201. package/apps/pwa/out/control/index.html +1 -1
  202. package/apps/pwa/out/control/index.txt +23 -23
  203. package/apps/pwa/out/decisions/index.html +1 -1
  204. package/apps/pwa/out/decisions/index.txt +22 -22
  205. package/apps/pwa/out/design-check/index.html +1 -1
  206. package/apps/pwa/out/design-check/index.txt +23 -23
  207. package/apps/pwa/out/editor/index.html +1 -1
  208. package/apps/pwa/out/editor/index.txt +23 -23
  209. package/apps/pwa/out/exec/index.html +1 -1
  210. package/apps/pwa/out/exec/index.txt +23 -23
  211. package/apps/pwa/out/field/index.html +1 -1
  212. package/apps/pwa/out/field/index.txt +23 -23
  213. package/apps/pwa/out/healthz +1 -1
  214. package/apps/pwa/out/index.html +1 -1
  215. package/apps/pwa/out/index.txt +22 -22
  216. package/apps/pwa/out/inside/index.html +1 -1
  217. package/apps/pwa/out/inside/index.txt +22 -22
  218. package/apps/pwa/out/intake/index.html +1 -1
  219. package/apps/pwa/out/intake/index.txt +23 -23
  220. package/apps/pwa/out/live/index.html +1 -1
  221. package/apps/pwa/out/live/index.txt +23 -23
  222. package/apps/pwa/out/live-run/index.html +1 -1
  223. package/apps/pwa/out/live-run/index.txt +23 -23
  224. package/apps/pwa/out/loops/index.html +1 -1
  225. package/apps/pwa/out/loops/index.txt +22 -22
  226. package/apps/pwa/out/market/index.html +1 -1
  227. package/apps/pwa/out/market/index.txt +22 -22
  228. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  229. package/apps/pwa/out/missions/placeholder/index.txt +22 -22
  230. package/apps/pwa/out/morning/index.html +1 -1
  231. package/apps/pwa/out/morning/index.txt +23 -23
  232. package/apps/pwa/out/observatory/index.html +1 -1
  233. package/apps/pwa/out/observatory/index.txt +23 -23
  234. package/apps/pwa/out/ops/checklist/index.html +1 -1
  235. package/apps/pwa/out/ops/checklist/index.txt +22 -22
  236. package/apps/pwa/out/ops/release/index.html +1 -1
  237. package/apps/pwa/out/ops/release/index.txt +22 -22
  238. package/apps/pwa/out/ops/seats/index.html +1 -1
  239. package/apps/pwa/out/ops/seats/index.txt +22 -22
  240. package/apps/pwa/out/outputs/index.html +1 -1
  241. package/apps/pwa/out/outputs/index.txt +22 -22
  242. package/apps/pwa/out/reflection/index.html +1 -1
  243. package/apps/pwa/out/reflection/index.txt +23 -23
  244. package/apps/pwa/out/scheduler/index.html +1 -1
  245. package/apps/pwa/out/scheduler/index.txt +23 -23
  246. package/apps/pwa/out/sessions/index.html +1 -1
  247. package/apps/pwa/out/sessions/index.txt +22 -22
  248. package/apps/pwa/out/settings/devices/index.html +1 -1
  249. package/apps/pwa/out/settings/devices/index.txt +23 -23
  250. package/apps/pwa/out/settings/index.html +1 -1
  251. package/apps/pwa/out/settings/index.txt +23 -23
  252. package/apps/pwa/out/setup/done/index.html +1 -1
  253. package/apps/pwa/out/setup/done/index.txt +23 -23
  254. package/apps/pwa/out/setup/index.html +1 -1
  255. package/apps/pwa/out/setup/index.txt +23 -23
  256. package/apps/pwa/out/share/index.html +1 -1
  257. package/apps/pwa/out/share/index.txt +23 -23
  258. package/apps/pwa/out/showroom/index.html +1 -1
  259. package/apps/pwa/out/showroom/index.txt +22 -22
  260. package/apps/pwa/out/tasks/index.html +1 -1
  261. package/apps/pwa/out/tasks/index.txt +23 -23
  262. package/apps/pwa/out/term/index.html +1 -1
  263. package/apps/pwa/out/term/index.txt +23 -23
  264. package/apps/pwa/out/today/index.html +1 -1
  265. package/apps/pwa/out/today/index.txt +23 -23
  266. package/apps/pwa/out/trace/index.html +1 -1
  267. package/apps/pwa/out/trace/index.txt +23 -23
  268. package/apps/pwa/out/vault/index.html +1 -1
  269. package/apps/pwa/out/vault/index.txt +23 -23
  270. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  271. package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
  272. package/apps/pwa/out/workflows/index.html +1 -1
  273. package/apps/pwa/out/workflows/index.txt +23 -23
  274. package/apps/pwa/out/workspace/index.html +1 -1
  275. package/apps/pwa/out/workspace/index.txt +23 -23
  276. package/apps/pwa/out/worktrees/index.html +1 -1
  277. package/apps/pwa/out/worktrees/index.txt +23 -23
  278. package/graphs/drafts/recipes.yaml +27 -7
  279. package/graphs/work/draft-close.yaml +54 -0
  280. package/graphs/work/green-close.yaml +37 -0
  281. package/graphs/work/recipes.yaml +46 -1
  282. package/graphs/work/run-research.yaml +35 -0
  283. package/package.json +1 -1
  284. package/scripts/__fixtures__/authoring-paths-10x3.json +32 -0
  285. package/scripts/boundary-proof-mapping-audit.ts +88 -0
  286. package/scripts/codex-fallback-live-probe.ts +17 -15
  287. package/scripts/fleet/node-setup.sh +32 -2
  288. package/scripts/fleet/run-light-worker.sh +9 -0
  289. package/scripts/gate-0226-failure-census.ts +507 -0
  290. package/scripts/goals/authoring-metrics.ts +258 -0
  291. package/scripts/graph-units/draft-close-node.ts +222 -0
  292. package/scripts/hook-order-sweep.ts +7 -4
  293. package/scripts/land-global-checks.ts +69 -1
  294. package/scripts/measure-nl-routing-corpus.ts +207 -2
  295. package/scripts/release-loop/docs-node.ts +140 -0
  296. package/scripts/release-loop/gate-closure.ts +48 -0
  297. package/scripts/release-loop/gate-diff.ts +2 -1
  298. package/scripts/release-loop/known-issues-node.ts +6 -4
  299. package/scripts/release-loop/notes-repair.ts +216 -0
  300. package/scripts/release-loop/prepare-node.ts +61 -5
  301. package/scripts/release-loop/resume-release.ts +114 -4
  302. package/scripts/release-loop/resume-test-traffic.ts +10 -0
  303. package/scripts/release-loop/version-node.ts +81 -12
  304. package/scripts/train/green-leg.ts +176 -0
  305. package/scripts/tui-continue-real-evidence.ts +47 -0
  306. package/scripts/ux-sim.ts +1 -1
  307. package/src/acp/client.ts +31 -5
  308. package/src/acp/core-turn-bridge.ts +6 -0
  309. package/src/acp/stderr-summary.ts +49 -0
  310. package/src/agent/monad-agent-turn.ts +1 -0
  311. package/src/agent/terminal-surface.ts +217 -0
  312. package/src/agent-substrate/pr-reviewer.ts +11 -3
  313. package/src/agent-substrate/self-review-cli.ts +343 -31
  314. package/src/autopilot/lineage/sources.ts +1 -1
  315. package/src/autopilot/pr-manager.ts +64 -13
  316. package/src/boot/daemon-runtime.ts +35 -3
  317. package/src/boot/daemon-tools/pty-shell.ts +2 -1
  318. package/src/budget/run-usage-rollup.ts +12 -7
  319. package/src/budget/unified-usage.ts +20 -0
  320. package/src/capture/tui-self-report.ts +32 -3
  321. package/src/cli/autopilot-cli.ts +24 -9
  322. package/src/cli/decisions-cli.ts +7 -4
  323. package/src/cli/doctor-cli.ts +116 -7
  324. package/src/cli/logs-cli.ts +357 -2
  325. package/src/cli/memory-cli.ts +30 -1
  326. package/src/cli/msg-cli.ts +15 -11
  327. package/src/cli/pr-granularity.ts +5 -3
  328. package/src/cli/release-checklist-read-cli.ts +109 -4
  329. package/src/cli/release-cli.ts +43 -10
  330. package/src/cli/self-update.ts +23 -5
  331. package/src/cli/self-utterances-cli.ts +13 -16
  332. package/src/cli/tasks-cli.ts +309 -11
  333. package/src/cli/usage-cli.ts +12 -10
  334. package/src/context-bus/claude-memory-import.ts +99 -0
  335. package/src/context-bus/long-term-memory.ts +125 -0
  336. package/src/core-turn/run-goal-loop.ts +5 -2
  337. package/src/core-turn/types.ts +2 -0
  338. package/src/dashboard/chat/acp-chat.ts +9 -0
  339. package/src/dashboard/index.ts +97 -13
  340. package/src/dashboard/input/agent-wake.ts +43 -0
  341. package/src/dashboard/input/chat-main-acp-dispatch.ts +21 -1
  342. package/src/dashboard/replay-preview.ts +25 -0
  343. package/src/dashboard/slash-runtime/dashboard-handlers.ts +17 -8
  344. package/src/dashboard/synchronized-frame-output.ts +74 -0
  345. package/src/display/coordinator.ts +45 -12
  346. package/src/display/resize-listener.ts +41 -20
  347. package/src/display/synchronized-output-region.ts +60 -0
  348. package/src/domains/surface-events.ts +80 -1
  349. package/src/exec-requests/planner.ts +37 -2
  350. package/src/execution-loop/launch-gate.ts +4 -3
  351. package/src/git-fs/cli-stderr.ts +45 -0
  352. package/src/git-fs/gh-cli.ts +6 -3
  353. package/src/git-fs/git-cli.ts +11 -5
  354. package/src/graph-runner/graph-cli.ts +26 -2
  355. package/src/graph-runner/graph-run-api.ts +3 -2
  356. package/src/graph-runner/runner.ts +17 -5
  357. package/src/graph-wizard/generate.ts +29 -6
  358. package/src/harness/harness-cli-command.ts +179 -33
  359. package/src/harness/review-adapter.ts +26 -6
  360. package/src/index.ts +116 -13
  361. package/src/instance/test-write-guard-real-transport.fixture.ts +52 -0
  362. package/src/llm/route-decision.ts +13 -0
  363. package/src/llm-tool-name.ts +37 -0
  364. package/src/llm-tool-schema.ts +35 -0
  365. package/src/llm.ts +123 -11
  366. package/src/loops/checker.ts +100 -0
  367. package/src/loops/consensus.ts +26 -2
  368. package/src/loops/loop-cli.ts +9 -4
  369. package/src/loops/orchestrator/anomaly-cluster.ts +243 -0
  370. package/src/loops/orchestrator/tick.ts +49 -4
  371. package/src/model-tier/llm-tier-map.ts +12 -17
  372. package/src/msg/msg-store.ts +17 -0
  373. package/src/native-tool-catalog.ts +1 -1
  374. package/src/nexus/api/graph-wizard-api.ts +27 -2
  375. package/src/nexus/api/grid.ts +24 -4
  376. package/src/nexus/api/http-server.ts +1 -1
  377. package/src/nexus/api/ops-api.ts +14 -6
  378. package/src/nexus/state/state.ts +7 -1
  379. package/src/oauth/codex-account-store.ts +34 -1
  380. package/src/ops/loops-map.ts +46 -0
  381. package/src/ops/overview-cache.ts +22 -4
  382. package/src/ops/overview.ts +41 -5
  383. package/src/policy/llm-policy.ts +3 -1
  384. package/src/prompt-enhance/enhance.ts +4 -4
  385. package/src/pty-shell/availability.ts +7 -0
  386. package/src/pty-shell/herdr-agent-report.ts +40 -31
  387. package/src/pty-shell/herdr-prune-stale.ts +17 -0
  388. package/src/pty-shell/herdr-sequence-lease.ts +60 -0
  389. package/src/pty-shell/pty-control-ipc.ts +187 -18
  390. package/src/pty-shell/registry.ts +25 -15
  391. package/src/pty-shell/tui-run-state.ts +235 -1
  392. package/src/release-loop/checklist.ts +50 -5
  393. package/src/release-loop/feature-store.ts +9 -9
  394. package/src/release-loop/landed-but-yellow.ts +93 -12
  395. package/src/repl/index.ts +8 -0
  396. package/src/seat-loop/seat-report.ts +1 -0
  397. package/src/self-dev/ask-launch-flow.ts +86 -10
  398. package/src/self-dev/decompose-proposal.ts +29 -18
  399. package/src/self-dev/dev-pipeline.ts +29 -7
  400. package/src/self-dev/draft-sweep.ts +241 -16
  401. package/src/self-dev/draft-triage-rules.ts +19 -5
  402. package/src/self-dev/review-provider-fallback.ts +45 -7
  403. package/src/self-dev/shard-plan.ts +48 -0
  404. package/src/self-dev/shard-run.ts +50 -3
  405. package/src/self-implement/doctor-visit.ts +83 -0
  406. package/src/self-implement/gate-artifacts.ts +6 -2
  407. package/src/self-implement/gate-baseline.ts +64 -1
  408. package/src/self-implement/gate-cli.ts +93 -9
  409. package/src/self-implement/gate-remote.ts +28 -4
  410. package/src/self-implement/gate-scope.ts +13 -1
  411. package/src/self-implement/goal-author.ts +333 -18
  412. package/src/self-implement/goal-supervisor-fill.ts +75 -26
  413. package/src/self-implement/importer-test-index.ts +215 -2
  414. package/src/self-implement/knowhow-pack.ts +5 -5
  415. package/src/self-implement/orchestrator.ts +318 -25
  416. package/src/self-implement/review-round-brief.ts +300 -0
  417. package/src/self-implement/rework-policy.ts +14 -0
  418. package/src/self-implement/run-ledger.ts +170 -6
  419. package/src/self-implement/run-stop.ts +1 -1
  420. package/src/self-implement/running-runs.ts +17 -3
  421. package/src/self-implement/seams.ts +12 -6
  422. package/src/self-implement/stop-autoheal.ts +1 -0
  423. package/src/self-implement/test-seams.ts +13 -1
  424. package/src/self-implement/train-reach-grouping.ts +8 -2
  425. package/src/session/chat.ts +7 -1
  426. package/src/session/id-prefix.ts +60 -0
  427. package/src/session/index.ts +4 -0
  428. package/src/session-runtime/index.ts +9 -1
  429. package/src/skills/tools/pty.ts +5 -0
  430. package/src/status/metrics.ts +12 -1
  431. package/src/steward/rejudge-tick.ts +12 -5
  432. package/src/steward/resync-tick.ts +31 -4
  433. package/src/task-agent/actions.ts +199 -4
  434. package/src/task-agent/boundary-proof-mapping.ts +12 -0
  435. package/src/task-agent/boundary-proof-producer.ts +147 -0
  436. package/src/task-agent/completion-evidence.ts +2 -1
  437. package/src/task-agent/green-close-recipe.ts +239 -0
  438. package/src/task-agent/green-sweep.ts +64 -10
  439. package/src/task-agent/live-moves.ts +48 -3
  440. package/src/task-agent/map-host-adapter.ts +134 -0
  441. package/src/task-agent/map-reduce.ts +158 -0
  442. package/src/task-agent/map-run-ledger.ts +226 -0
  443. package/src/task-agent/parent-host.ts +21 -11
  444. package/src/task-agent/rejudge-on-head.ts +72 -5
  445. package/src/task-agent/repair-cycle.ts +41 -0
  446. package/src/task-agent/repair-next-move.ts +12 -2
  447. package/src/task-agent/review-prior-fix.ts +12 -2
  448. package/src/task-agent/shadow.ts +188 -5
  449. package/src/task-agent/task-hand.ts +158 -13
  450. package/src/task-agent/task-parent-role-llm.ts +9 -0
  451. package/src/task-agent/tier-split.ts +4 -3
  452. package/src/task-agent/work-order.ts +53 -2
  453. package/src/task-orchestrator/dispatcher.ts +46 -1
  454. package/src/task-orchestrator/generator-prompt.ts +6 -0
  455. package/src/task-orchestrator/surfaces/pod-artifact-return.ts +16 -6
  456. package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +8 -6
  457. package/src/task-orchestrator/surfaces/pod-ledger-events.ts +97 -0
  458. package/src/task-orchestrator/surfaces/pod-pool.ts +50 -4
  459. package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +15 -9
  460. package/src/task-orchestrator/surfaces/self-implement-pod.ts +217 -36
  461. package/src/task-orchestrator/surfaces/self-implement.ts +4 -0
  462. package/src/testing/linux-env.ts +177 -0
  463. package/src/tui/chat/goal-interim.ts +5 -1
  464. package/src/tui/entry.ts +258 -4
  465. package/src/tui/input/at-picker.ts +55 -0
  466. package/src/tui/slash/resume.ts +35 -12
  467. package/src/tui/slash/signals.ts +114 -0
  468. package/src/tui/slash/term-next.ts +71 -0
  469. package/src/tui-client/local-chat-turn.ts +4 -3
  470. package/src/user-config.ts +19 -1
  471. package/src/ux-sim/boot-daemon-tools-pty-shell-device.ts +136 -0
  472. package/src/ux-sim/classic-tui-seat-scenarios.ts +158 -4
  473. package/src/ux-sim/fake-gh.ts +174 -0
  474. package/src/ux-sim/fake-kubectl.ts +142 -0
  475. package/src/ux-sim/fake-llm.ts +6 -1
  476. package/src/ux-sim/next-tui-seat-scenarios.ts +124 -6
  477. package/src/ux-sim/resume-picker-device.ts +173 -0
  478. package/src/ux-sim/session-id-seed.ts +60 -0
  479. package/src/ux-sim/skills-tools-shell-device.ts +156 -0
  480. package/src/ux-sim/task-agent-parent-host-device.ts +264 -0
  481. package/src/ux-sim/task-agent-rejudge-on-head-device.ts +114 -0
  482. package/src/version/packed-revision.json +1 -1
  483. package/apps/pwa/out/_next/static/chunks/109.f196abf3484bb97f.js +0 -287
  484. package/apps/pwa/out/_next/static/chunks/1201.afbfc5b1c5e5cbe4.js +0 -1
  485. package/apps/pwa/out/_next/static/chunks/1517.9275b89572098ff3.js +0 -1
  486. package/apps/pwa/out/_next/static/chunks/1574.ad11f8db8396ab45.js +0 -1
  487. package/apps/pwa/out/_next/static/chunks/1614.7a8c5c40aee0261f.js +0 -1
  488. package/apps/pwa/out/_next/static/chunks/1871-f1eb29d8dbb4065b.js +0 -1
  489. package/apps/pwa/out/_next/static/chunks/2193.0ea24c4a7aa1d004.js +0 -36
  490. package/apps/pwa/out/_next/static/chunks/223-ad865c1e80491d78.js +0 -1
  491. package/apps/pwa/out/_next/static/chunks/2265-f0d90b6dbec05f81.js +0 -1
  492. package/apps/pwa/out/_next/static/chunks/2267.eb4a62a209f09ec4.js +0 -149
  493. package/apps/pwa/out/_next/static/chunks/2341-86cd06c0cf01aa33.js +0 -1
  494. package/apps/pwa/out/_next/static/chunks/2352.9abc42422bade876.js +0 -1
  495. package/apps/pwa/out/_next/static/chunks/2397-c1653a816061842d.js +0 -1
  496. package/apps/pwa/out/_next/static/chunks/2500.cbc1257b774aae52.js +0 -1
  497. package/apps/pwa/out/_next/static/chunks/2709.8e1889034255fc5f.js +0 -24
  498. package/apps/pwa/out/_next/static/chunks/2812ca6a.3b9f4a7a08885744.js +0 -1
  499. package/apps/pwa/out/_next/static/chunks/284.ac77c0db55bfd3a8.js +0 -1
  500. package/apps/pwa/out/_next/static/chunks/2941.3c3546f96bc6efa7.js +0 -1
  501. package/apps/pwa/out/_next/static/chunks/2976.b000698a3c6512dc.js +0 -24
  502. package/apps/pwa/out/_next/static/chunks/3031-85328a92fcce4da6.js +0 -1
  503. package/apps/pwa/out/_next/static/chunks/3148-98efd4869d660a87.js +0 -1
  504. package/apps/pwa/out/_next/static/chunks/3155.2587a55196ecb394.js +0 -226
  505. package/apps/pwa/out/_next/static/chunks/3277.785db1cf09f98601.js +0 -1
  506. package/apps/pwa/out/_next/static/chunks/3320-f9c77381f85a2c0a.js +0 -1
  507. package/apps/pwa/out/_next/static/chunks/3386-91049feabff9a94e.js +0 -1
  508. package/apps/pwa/out/_next/static/chunks/339.80afb7e8839372af.js +0 -8
  509. package/apps/pwa/out/_next/static/chunks/3538.a445e50bb359d068.js +0 -32
  510. package/apps/pwa/out/_next/static/chunks/3540c645.2595a6af01a97672.js +0 -1
  511. package/apps/pwa/out/_next/static/chunks/3621.581b2054cc14bee4.js +0 -286
  512. package/apps/pwa/out/_next/static/chunks/3676.8c28d16fd84ca843.js +0 -1
  513. package/apps/pwa/out/_next/static/chunks/375-b84540853523fe52.js +0 -1
  514. package/apps/pwa/out/_next/static/chunks/379.ee262e37586fe1ae.js +0 -74
  515. package/apps/pwa/out/_next/static/chunks/3969-81054381eaec4c4c.js +0 -1
  516. package/apps/pwa/out/_next/static/chunks/4067-bf9aa60547972937.js +0 -1
  517. package/apps/pwa/out/_next/static/chunks/4116.a84a92a2492c080e.js +0 -1
  518. package/apps/pwa/out/_next/static/chunks/4176.e5729c93c29151eb.js +0 -104
  519. package/apps/pwa/out/_next/static/chunks/4227-e6c84686bc8946ca.js +0 -1
  520. package/apps/pwa/out/_next/static/chunks/4327.b9e08a71c0009348.js +0 -1
  521. package/apps/pwa/out/_next/static/chunks/4946.bd106eafd668f248.js +0 -148
  522. package/apps/pwa/out/_next/static/chunks/5085-bce4904931767ca6.js +0 -1
  523. package/apps/pwa/out/_next/static/chunks/5125.2eb9968b83767193.js +0 -93
  524. package/apps/pwa/out/_next/static/chunks/5128-75b733fd74a9a1eb.js +0 -1
  525. package/apps/pwa/out/_next/static/chunks/5489f3fe.4bb1458b09f6dead.js +0 -122
  526. package/apps/pwa/out/_next/static/chunks/5560-2a4648f6a30f16e7.js +0 -1
  527. package/apps/pwa/out/_next/static/chunks/5772-e29e14f8ff127122.js +0 -1
  528. package/apps/pwa/out/_next/static/chunks/5887.5b2f5b44ce0f7e9a.js +0 -1
  529. package/apps/pwa/out/_next/static/chunks/5899-4c112a2d908cf97f.js +0 -1
  530. package/apps/pwa/out/_next/static/chunks/599.c39c571b6733f2a2.js +0 -41
  531. package/apps/pwa/out/_next/static/chunks/6041.1b65efb796ebc2a5.js +0 -79
  532. package/apps/pwa/out/_next/static/chunks/6057-765c0a26028c86b2.js +0 -1
  533. package/apps/pwa/out/_next/static/chunks/6142.f289e0d039f453a6.js +0 -1
  534. package/apps/pwa/out/_next/static/chunks/6199-6bcd61d2a3910e04.js +0 -1
  535. package/apps/pwa/out/_next/static/chunks/6236.cdf7293e710a9b2d.js +0 -1
  536. package/apps/pwa/out/_next/static/chunks/6387-237e079dac9a3ae6.js +0 -1
  537. package/apps/pwa/out/_next/static/chunks/6448-b6d272d074276e14.js +0 -1
  538. package/apps/pwa/out/_next/static/chunks/6566.926a1d1b7c911442.js +0 -1
  539. package/apps/pwa/out/_next/static/chunks/6580-cdc0e4a634ce4708.js +0 -1
  540. package/apps/pwa/out/_next/static/chunks/6659-b242dc31b20b3f29.js +0 -1
  541. package/apps/pwa/out/_next/static/chunks/6690.c5d9b321b1f79384.js +0 -1
  542. package/apps/pwa/out/_next/static/chunks/671-e9b6ad0c771c5514.js +0 -1
  543. package/apps/pwa/out/_next/static/chunks/6862.bcbf89dd0f4496b3.js +0 -27
  544. package/apps/pwa/out/_next/static/chunks/6912-7b375ee48732c767.js +0 -1
  545. package/apps/pwa/out/_next/static/chunks/6925.562d532110879886.js +0 -1
  546. package/apps/pwa/out/_next/static/chunks/727.7deb87749b0a343a.js +0 -1
  547. package/apps/pwa/out/_next/static/chunks/7545.b1aa42cd15503319.js +0 -1
  548. package/apps/pwa/out/_next/static/chunks/7551-416d298c2dc4a9ab.js +0 -1
  549. package/apps/pwa/out/_next/static/chunks/7784.1f0ac4a16d190cf4.js +0 -1
  550. package/apps/pwa/out/_next/static/chunks/7870-309de463786ac1fc.js +0 -1
  551. package/apps/pwa/out/_next/static/chunks/7888-e29b151bb6a3bb8b.js +0 -1
  552. package/apps/pwa/out/_next/static/chunks/7891.03f910124a737985.js +0 -1
  553. package/apps/pwa/out/_next/static/chunks/7905-6ba78d9234608f79.js +0 -1
  554. package/apps/pwa/out/_next/static/chunks/8037.e254fd797aa224d1.js +0 -1
  555. package/apps/pwa/out/_next/static/chunks/8207.f527886b7c464529.js +0 -1
  556. package/apps/pwa/out/_next/static/chunks/856.50bda61439d465e6.js +0 -62
  557. package/apps/pwa/out/_next/static/chunks/9031-92e9b487edb681ee.js +0 -1
  558. package/apps/pwa/out/_next/static/chunks/9060.5410d9f6a95f6287.js +0 -90
  559. package/apps/pwa/out/_next/static/chunks/914.8abefd48d579547b.js +0 -94
  560. package/apps/pwa/out/_next/static/chunks/9187-c87a2207d4ac5d46.js +0 -1
  561. package/apps/pwa/out/_next/static/chunks/9289.3e92f278821e18e0.js +0 -1
  562. package/apps/pwa/out/_next/static/chunks/9319.7816d3cc741cd34f.js +0 -1
  563. package/apps/pwa/out/_next/static/chunks/9327-e016bb9f1674d24f.js +0 -1
  564. package/apps/pwa/out/_next/static/chunks/9365.3de48bf75193ff9a.js +0 -77
  565. package/apps/pwa/out/_next/static/chunks/9383.5b5e9aa56b5fea97.js +0 -1
  566. package/apps/pwa/out/_next/static/chunks/9387-cb929573ef436f39.js +0 -1
  567. package/apps/pwa/out/_next/static/chunks/9489.c27becacc3283dec.js +0 -1
  568. package/apps/pwa/out/_next/static/chunks/9514.131c52cc75fe6439.js +0 -1
  569. package/apps/pwa/out/_next/static/chunks/9536.28962663c7734376.js +0 -1
  570. package/apps/pwa/out/_next/static/chunks/9686-12286f5bbf15a5a0.js +0 -1
  571. package/apps/pwa/out/_next/static/chunks/9776.289d40cc5a4c342a.js +0 -1
  572. package/apps/pwa/out/_next/static/chunks/9789.60f723d18097ec30.js +0 -1
  573. package/apps/pwa/out/_next/static/chunks/989.f0c17523c5e61f65.js +0 -1
  574. package/apps/pwa/out/_next/static/chunks/9972-1df393aa8d4f7d52.js +0 -1
  575. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-96750aba7430959f.js +0 -1
  576. package/apps/pwa/out/_next/static/chunks/app/approvals/page-4105e5bbbb043024.js +0 -1
  577. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-5d4fa75c2acb113e.js +0 -1
  578. package/apps/pwa/out/_next/static/chunks/app/board/page-a79a9bdb3b2142bf.js +0 -1
  579. package/apps/pwa/out/_next/static/chunks/app/botlab/page-f1c2047484992a35.js +0 -1
  580. package/apps/pwa/out/_next/static/chunks/app/bots/page-15ffc49b2d8c70e2.js +0 -1
  581. package/apps/pwa/out/_next/static/chunks/app/ceo/page-67d53a3fc8734135.js +0 -1
  582. package/apps/pwa/out/_next/static/chunks/app/chat/page-e30c8dc696491336.js +0 -1
  583. package/apps/pwa/out/_next/static/chunks/app/consult/page-2136e04fa77696e2.js +0 -1
  584. package/apps/pwa/out/_next/static/chunks/app/control/page-fecd2814790c2e12.js +0 -1
  585. package/apps/pwa/out/_next/static/chunks/app/decisions/page-280aa4a98fc5bb44.js +0 -1
  586. package/apps/pwa/out/_next/static/chunks/app/design-check/page-c14e96b65fb4b883.js +0 -1
  587. package/apps/pwa/out/_next/static/chunks/app/editor/page-187dac74825ed6bf.js +0 -1
  588. package/apps/pwa/out/_next/static/chunks/app/exec/page-6bc7246ea8c92448.js +0 -1
  589. package/apps/pwa/out/_next/static/chunks/app/field/page-083747f1d4518f61.js +0 -1
  590. package/apps/pwa/out/_next/static/chunks/app/healthz/route-96750aba7430959f.js +0 -1
  591. package/apps/pwa/out/_next/static/chunks/app/inside/page-15ca95a16ec96e1f.js +0 -1
  592. package/apps/pwa/out/_next/static/chunks/app/intake/page-a8ac031b3810eb64.js +0 -1
  593. package/apps/pwa/out/_next/static/chunks/app/layout-8835f93110494cda.js +0 -1
  594. package/apps/pwa/out/_next/static/chunks/app/loops/page-5b92b7f75df20948.js +0 -1
  595. package/apps/pwa/out/_next/static/chunks/app/market/page-468eddf2b1a84ecb.js +0 -1
  596. package/apps/pwa/out/_next/static/chunks/app/morning/page-18b40867a77a5793.js +0 -1
  597. package/apps/pwa/out/_next/static/chunks/app/not-found-fe934f2979f5a4a2.js +0 -1
  598. package/apps/pwa/out/_next/static/chunks/app/observatory/page-3eec435537357170.js +0 -1
  599. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-ff88cbfd2aa99fc8.js +0 -1
  600. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-a5b39fb780c70ab5.js +0 -1
  601. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ae465dde1d1b3933.js +0 -1
  602. package/apps/pwa/out/_next/static/chunks/app/outputs/page-e7abc34a48a6f71e.js +0 -1
  603. package/apps/pwa/out/_next/static/chunks/app/page-cab9674fde9ead26.js +0 -1
  604. package/apps/pwa/out/_next/static/chunks/app/reflection/page-1da49bc8712284d0.js +0 -1
  605. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5e8aa657551ac912.js +0 -1
  606. package/apps/pwa/out/_next/static/chunks/app/sessions/page-fcc36f36c6dc1fe2.js +0 -1
  607. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-d22db22f2a7296ca.js +0 -1
  608. package/apps/pwa/out/_next/static/chunks/app/settings/page-d12dc7b1773878f0.js +0 -1
  609. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-99debec9ea7fbec0.js +0 -1
  610. package/apps/pwa/out/_next/static/chunks/app/setup/layout-96750aba7430959f.js +0 -1
  611. package/apps/pwa/out/_next/static/chunks/app/setup/page-2a088a78bad7e924.js +0 -1
  612. package/apps/pwa/out/_next/static/chunks/app/share/page-2e8ed57db7e69993.js +0 -1
  613. package/apps/pwa/out/_next/static/chunks/app/showroom/page-4b3a16213c2ae8fe.js +0 -1
  614. package/apps/pwa/out/_next/static/chunks/app/tasks/page-f098747ddf38c98b.js +0 -1
  615. package/apps/pwa/out/_next/static/chunks/app/term/page-c15958835534404b.js +0 -1
  616. package/apps/pwa/out/_next/static/chunks/app/today/page-68279e3c843c1fd7.js +0 -1
  617. package/apps/pwa/out/_next/static/chunks/app/trace/page-a34a74453367a39d.js +0 -1
  618. package/apps/pwa/out/_next/static/chunks/app/vault/page-8767a7db2155a5bd.js +0 -1
  619. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-bd5976683460d7f2.js +0 -1
  620. package/apps/pwa/out/_next/static/chunks/app/workflows/page-b7364835e7f2ef54.js +0 -1
  621. package/apps/pwa/out/_next/static/chunks/app/workspace/page-311af16b3ee0ffca.js +0 -1
  622. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-fb670757274ae990.js +0 -1
  623. package/apps/pwa/out/_next/static/chunks/f9a61e4d.1fc2c1dbdd49fe46.js +0 -1
  624. package/apps/pwa/out/_next/static/chunks/framework-6d497cbf1eef04c6.js +0 -1
  625. package/apps/pwa/out/_next/static/chunks/main-app-012f5edec932f337.js +0 -1
  626. package/apps/pwa/out/_next/static/chunks/main-da5aeb809edc94a2.js +0 -1
  627. package/apps/pwa/out/_next/static/chunks/pages/_app-5ee319af6f749dfe.js +0 -1
  628. package/apps/pwa/out/_next/static/chunks/pages/_error-4bc84653a718d6c6.js +0 -1
  629. package/apps/pwa/out/_next/static/chunks/webpack-8a96cf6775c73d6e.js +0 -1
  630. /package/apps/pwa/out/_next/static/{uC-N0emedeNOFuaBQFv-I → 8kITumG9GAZ1LwT9POrAR}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9084],{16759:(e,t,r)=>{"use strict";r.d(t,{C:()=>d,DaemonProvider:()=>u,Q:()=>c});var n=r(57865),s=r(20381),l=r(8905),a=r(33797),i=r(47956),o=r(62351);let d=(0,s.createContext)(null);function u(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[u,c]=(0,s.useState)(r),[m,f]=(0,s.useState)(""),[p]=(0,s.useState)(()=>new i.ki(r));(0,s.useEffect)(()=>{let e=(0,l.Fp)();c(e),p.updateConfig(e),f((0,a.oD)()),(0,o.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[p]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,l.Fp)();p.updateConfig(t),c(t),(0,o.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&f(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)},[p]);let h=e=>{c(t=>{let r={...t,...e};return(0,l.Qc)(e),p.updateConfig(r),(0,o.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},b=e=>{f(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,o.cY)("webterm.provider.daemon.session-set",{sessionId:e})},v=(0,s.useMemo)(()=>({config:u,setConfig:h,client:p,sessionId:m,setSessionId:b}),[u,p,m]);return(0,n.jsx)(d.Provider,{value:v,children:t})}function c(){let e=(0,s.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},22194:(e,t,r)=>{"use strict";function n(e,t){if(!e.enabled||"off"===e.scheduleState)return"off";if("failed"===e.lastStatus||"error"===e.lastStatus||"failure"===e.lastStatus||"abandoned"===e.lastStatus||"expired"===e.lastStatus)return"failed";if("stale"===e.scheduleState)return"late";let r=null===e.lastRunAt?NaN:Date.parse(e.lastRunAt);if(void 0!==e.secondDueAt){let n=null===e.secondDueAt?NaN:Date.parse(e.secondDueAt);return Number.isFinite(r)&&Number.isFinite(t)&&Number.isFinite(n)&&n>r&&t>n?"late":"alive"}return Number.isFinite(t)&&Number.isFinite(r)&&null!==e.intervalMs&&Number.isFinite(e.intervalMs)&&e.intervalMs>0&&t-r>2*e.intervalMs?"late":"alive"}r.d(t,{u:()=>n})},22237:(e,t,r)=>{"use strict";r.d(t,{QK:()=>a,i6:()=>l,Pz:()=>o,Em:()=>i,Yy:()=>d});var n=r(22194);let s={alive:"살아 있음",late:"늦음",failed:"실패",off:"꺼짐"},l="/v1/schedules?includeOff=1",a="/v1/dashboard/loops";async function i(e,t){var r,i,o,u,c,m,f,p;let[h,b]=await Promise.allSettled([e(l),e(a)]),v="fulfilled"===h.status?null==(r=h.value)?void 0:r.schedules:null,y="fulfilled"===b.status?null==(o=b.value)||null==(i=o.loops)?void 0:i.loops:null;if(!Array.isArray(v)&&!Array.isArray(y))throw Error("loop registries unavailable");if(!Array.isArray(v))throw Error("스케줄 레지스트리 조회 실패");if(!Array.isArray(y))throw Error("루프 레지스트리 조회 실패");let x=d(v,t).map(e=>({...e,id:"schedule:".concat(e.id)}));for(let e of y){let r=e.last?Date.parse(e.last.at):NaN,l=(0,n.u)({enabled:!1!==e.armed,lastRunAt:null!=(m=null==(u=e.last)?void 0:u.at)?m:null,lastStatus:null!=(f=null==(c=e.last)?void 0:c.status.toLowerCase())?f:null,intervalMs:null},t);x.push({id:"loop:".concat(e.name),name:e.label,layer:null!=(p=e.category)?p:"루프",owner:"미지정",mode:null===e.armed?"관측":e.armed?"armed":"off",lastRun:Number.isFinite(r)?e.last.at:null,verdict:"alive"===l?"판정 불가":s[l]})}return x}function o(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now,n=0,s=!0;return{async refresh(){let l=++n;try{let a=await i(e,r());s&&l===n&&t({rows:a,state:"ready"})}catch(e){s&&l===n&&t({rows:[],state:"error"})}},dispose(){s=!1}}}function d(e,t){return e.map(e=>{var r,l,a,i,o,d,u;let c=e.lastRun?Date.parse(e.lastRun.at):NaN,m=(0,n.u)({enabled:"off"!==e.state,lastRunAt:null!=(d=null==(r=e.lastRun)?void 0:r.at)?d:null,lastStatus:(null==(l=e.lastRun)?void 0:l.exit)!=null&&0!==e.lastRun.exit?"failed":(null==(a=e.lastRun)?void 0:a.status)==null||["ok","success","completed"].includes(e.lastRun.status.toLowerCase())?null!=(u=null==(o=e.lastRun)||null==(i=o.status)?void 0:i.toLowerCase())?u:null:"failed",intervalMs:e.cron?null:e.intervalMs,...e.cron?{scheduleState:e.state}:{}},t),f=!e.cron&&!(e.intervalMs&&e.intervalMs>0),p="alive"===m&&(!Number.isFinite(c)||f)?"판정 불가":s[m];return{id:e.id,name:e.name,layer:e.domain||e.category||e.source,owner:"미지정",mode:e.runVia||e.source,lastRun:Number.isFinite(c)?e.lastRun.at:null,verdict:p}})}},27646:(e,t,r)=>{Promise.resolve().then(r.bind(r,56951))},33797:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>a,f6:()=>s,oD:()=>l});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 l(){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 a(){let e=s();return localStorage.setItem(n,e),e}},56951:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>E});var n=r(57865),s=r(1041),l=r.n(s),a=r(20381),i=r(16759);let o="못 잼",d="불러오는 중…";var u=r(22237),c=r(59166),m=r(66066),f=r(68985);let p=e=>!!e&&"object"==typeof e&&!Array.isArray(e),h=e=>Number.isInteger(e)&&e>=0,b=e=>null===e||"number"==typeof e&&Number.isFinite(e);async function v(e){try{let n,s=await e.fetchResponse("/v1/drafts/metrics");if(!s.ok)return{kind:"unavailable",reason:null};var t,r=await s.json();if(!p(r))return{kind:"unavailable",reason:null};let l="string"==typeof r.reason?r.reason:null;if("measuring"===r.state)return{kind:"measuring"};if("unavailable"===r.state)return{kind:"unavailable",reason:l};let a=r.metrics;return"ready"===r.state&&p(a)&&"string"==typeof r.measuredAt&&Number.isFinite(Date.parse(r.measuredAt))&&h(a.inventory)&&h(a.needsOwner)&&h(a.converted48h)&&h(a.cohort48h)&&b(a.oldestAgeHours)&&b(a.conversion48h)?{kind:"ready",measuredAt:r.measuredAt,refreshError:l,metrics:{inventory:a.inventory,oldestAgeHours:a.oldestAgeHours,needsOwner:a.needsOwner,converted48h:a.converted48h,cohort48h:a.cohort48h,conversion48h:a.conversion48h,overlap:(t=a.overlap,p(t)?["launches24h","launched","unmeasured","linked","autoLanded","salvaged","salvageUnmeasured"].every(e=>null===t[e]||h(t[e]))&&"boolean"==typeof t.sourceIncomplete&&(null===t[n="secondSiblingMedianHours"]||b(t[n])&&t[n]>=0)&&(null===t.autoRate||b(t.autoRate)&&t.autoRate>=0&&t.autoRate<=1)?t:null:null)}}:{kind:"unavailable",reason:null}}catch(e){return{kind:"unavailable",reason:null}}}function y(e){var t,r,s;let{value:l}=e,a="draft 재고";return(0,n.jsxs)("section",{"aria-label":a,className:"col-span-2 min-w-0 rounded-xl border border-border bg-card p-3 sm:p-4",children:[(0,n.jsx)("h2",{className:"text-xs font-medium text-muted-foreground sm:text-sm",children:a}),"loading"===l.kind?(0,n.jsx)("p",{className:"mt-2 text-sm",children:"불러오는 중…"}):"measuring"===l.kind?(0,n.jsx)("p",{className:"mt-2 text-sm",children:"측정 중"}):"unavailable"===l.kind?(0,n.jsx)("p",{className:"mt-2 text-sm",title:null!=(t=l.reason)?t:void 0,children:"못 읽음"}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("dl",{className:"mt-2 grid grid-cols-2 gap-x-3 gap-y-1 text-xs sm:grid-cols-4 sm:text-sm",children:[(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("dt",{className:"text-muted-foreground",children:"열린 draft"}),(0,n.jsx)("dd",{className:"text-lg font-semibold tabular-nums sm:text-xl",children:l.metrics.inventory})]}),(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("dt",{className:"text-muted-foreground",children:"최장 나이"}),(0,n.jsx)("dd",{className:"text-lg font-semibold tabular-nums sm:text-xl",children:null===(r=l.metrics.oldestAgeHours)?"해당 없음":r>=48?"".concat((r/24).toFixed(1),"일"):"".concat(r.toFixed(1),"시간")})]}),(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("dt",{className:"text-muted-foreground",children:"주인 표식 없는 draft"}),(0,n.jsx)("dd",{className:"text-lg font-semibold tabular-nums sm:text-xl",children:l.metrics.needsOwner}),l.metrics.inventory>0&&l.metrics.needsOwner===l.metrics.inventory&&(0,n.jsx)("dd",{className:"text-muted-foreground",children:"처리 중 표식 0건"})]}),(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("dt",{className:"text-muted-foreground",children:"48h 전환율"}),(0,n.jsx)("dd",{className:"text-lg font-semibold tabular-nums sm:text-xl",children:null===l.metrics.conversion48h?"표본 없음":"".concat((100*l.metrics.conversion48h).toFixed(1),"%")}),null!==l.metrics.conversion48h&&(0,n.jsxs)("dd",{className:"text-muted-foreground tabular-nums",children:[l.metrics.converted48h,"/",l.metrics.cohort48h]})]})]}),l.metrics.overlap&&(0,n.jsxs)("p",{className:"mt-2 text-xs text-muted-foreground tabular-nums",children:["겹침 발사 24h ",null===l.metrics.overlap.launches24h?"못 잼":l.metrics.overlap.launches24h," \xb7 자동 착지 ",null===l.metrics.overlap.autoRate?"못 잼":"".concat((100*l.metrics.overlap.autoRate).toFixed(1),"%")," (",null===l.metrics.overlap.autoLanded?"못 잼":l.metrics.overlap.autoLanded,"/",null===l.metrics.overlap.linked?"못 잼":l.metrics.overlap.linked,")"," \xb7 둘째 형제 착지 중앙값 ",null===l.metrics.overlap.secondSiblingMedianHours?"못 잼":"".concat(l.metrics.overlap.secondSiblingMedianHours.toFixed(1),"h"),(l.metrics.overlap.sourceIncomplete||null===l.metrics.overlap.unmeasured||l.metrics.overlap.unmeasured>0)&&" \xb7 부분 측정"]}),(0,n.jsxs)("p",{className:"mt-1 text-xs text-muted-foreground",children:[(0,n.jsx)("time",{dateTime:l.measuredAt,children:(s=l.measuredAt,new Intl.DateTimeFormat("ko-KR",{timeZone:"Asia/Seoul",hour:"2-digit",minute:"2-digit",hour12:!1}).format(new Date(s)))})," 측정",l.refreshError&&(0,n.jsx)("span",{className:"ml-1 text-amber-700",title:l.refreshError,children:"\xb7 갱신 실패 — 이전 값"})]})]})]})}let x={unobservable:"관측 불가",blocked:"막힘","loop-down":"루프 정지",saturated:"자원 포화","supply-empty":"공급 부족",degraded:"흐름 저하",flowing:"흐름 정상"},g={flow:void 0,release:void 0,loops:void 0,decisions:void 0,merged:void 0,risks:void 0,grid:void 0,drafts:{kind:"loading"}},w=e=>"string"==typeof e&&Number.isFinite(Date.parse(e)),j=e=>!!e&&"object"==typeof e&&!Array.isArray(e);async function k(e){try{let t=await e.fetchResponse("/v1/ops/overview");if(!t.ok)return null;return function(e){if(!(e&&"object"==typeof e&&!Array.isArray(e))||!Object.hasOwn(e,"verdict")||!Object.hasOwn(e,"reasons"))return null;let t=e.verdict;if("string"!=typeof t||!Object.hasOwn(x,t))return null;let r=e.reasons;if(!Array.isArray(r)||!r.every(e=>"string"==typeof e))return null;let n=r[0]?r[0]:null,s=Object.hasOwn(e,"cacheAgeMs")?e.cacheAgeMs:void 0;return"number"!=typeof s||!Number.isFinite(s)||s<0?null:{verdict:t,label:x[t],reason:n,stale:s>=1e4}}(await t.json())}catch(e){return null}}function N(e){return null!==e&&"object"==typeof e&&"string"==typeof e.id&&"string"==typeof e.name&&"string"==typeof e.source&&(null===e.category||"string"==typeof e.category)&&(null===e.domain||"string"==typeof e.domain)&&(null===e.runVia||"string"==typeof e.runVia)&&["live","firing","stale","off"].includes(e.state)&&(null===e.cron||"string"==typeof e.cron)&&(null===e.intervalMs||"number"==typeof e.intervalMs&&Number.isFinite(e.intervalMs))&&Array.isArray(e.next)&&e.next.every(e=>"string"==typeof e)&&(null===e.lastRun||"object"==typeof e.lastRun&&null!==e.lastRun&&"string"==typeof e.lastRun.at&&(null===e.lastRun.status||"string"==typeof e.lastRun.status)&&(null===e.lastRun.exit||"number"==typeof e.lastRun.exit))}async function A(e){try{var t;let r=await e.fetchResponse(u.i6);if(!r.ok)return null;let n=await r.json();if(null===n||"object"!=typeof n||!("schedules"in n))return null;let s=n.schedules;if(!Array.isArray(s)||!s.every(N))return null;let l=(0,u.Yy)(s,Date.now()),a={};for(let e of l)a[e.verdict]=(null!=(t=a[e.verdict])?t:0)+1;let i=l.flatMap((e,t)=>"실패"===e.verdict&&w(e.lastRun)?[{id:"loop:".concat(e.id),kind:"실패 루프",title:e.name,at:s[t].lastRun.at}]:[]);return{summary:a,risks:i}}catch(e){return null}}async function R(e){try{let t=await e.fetchResponse(u.QK);if(!t.ok)return null;let r=await t.json();if(!j(r)||!j(r.loops)||!Array.isArray(r.loops.loops))return null;let n=r.loops.loops;if(!n.every(e=>j(e)&&"string"==typeof e.name&&"string"==typeof e.label&&(null===e.last||j(e.last)&&w(e.last.at)&&"string"==typeof e.last.status)))return null;return n.flatMap(e=>e.last&&["error","failed","failure","abandoned"].includes(e.last.status.toLowerCase())?[{id:"loop:".concat(e.name),kind:"실패 루프",title:e.label,at:e.last.at}]:[])}catch(e){return null}}async function S(e,t){try{let r=await e.fetchResponse("/v1/harness/runs?finishedSince=".concat(t)),n=r.ok?await r.json():null,s=j(n)?n.landed:null;return j(n)&&(void 0===n.landedTruncated||!1===n.landedTruncated)&&null==n.landedError&&Array.isArray(s)&&s.every(e=>j(e)&&"number"==typeof e.number&&w(e.mergedAt))?new Set(s.filter(e=>Date.parse(e.mergedAt)>=t).map(e=>e.number)).size:null}catch(e){return null}}async function I(e,t){try{let r=await e.fetchResponse("/v1/harness/runs?finishedSince=".concat(t-6048e5)),n=r.ok?await r.json():null;if(!j(n))return null;let s=n.finished,l=n.entries;return"complete"===n.completeness&&Array.isArray(s)&&Array.isArray(l)&&j(n.finishedObservation)&&Number.isInteger(n.finishedObservation.skippedFiles)&&0===n.finishedObservation.skippedFiles&&s.every(e=>j(e)&&"string"==typeof e.runId&&"string"==typeof e.status&&w(e.endedAt))&&l.every(e=>j(e)&&"string"==typeof e.runId&&"string"==typeof e.status)?[...s.filter(e=>"human-stop"===e.status||"failed"===e.status||"parked"===e.status||"cancelled"===e.status&&"soft-stopped"===e.stage).map(e=>({id:"run:".concat(e.runId),kind:"멈춘 하니스 런",title:"string"==typeof e.objective&&e.objective?e.objective:e.runId,at:e.endedAt})),...l.filter(e=>"ended-unclosed"===e.status&&w(e.lastActivityTimestamp)&&!s.some(t=>t.runId===e.runId)).map(e=>({id:"run:".concat(e.runId),kind:"멈춘 하니스 런",title:"string"==typeof e.objective&&e.objective?e.objective:e.runId,at:e.lastActivityTimestamp}))]:null}catch(e){return null}}async function D(e,t){try{let r=await (0,m.qK)(e);if(!Array.isArray(r)||!r.every(e=>j(e)&&"string"==typeof e.id))return null;return{count:r.length,risks:r.flatMap(e=>w(e.dueAt)&&Date.parse(e.dueAt)<t?[{id:"decision:".concat(e.id),kind:"기한 지난 결정",title:"string"==typeof e.title?e.title:e.id,at:e.dueAt}]:[])}}catch(e){return null}}async function M(e){try{let t=await e.fetchResponse("/v1/grid");if(!t.ok)return null;let r=await t.json();if(!j(r)||!j(r.hq)||!Array.isArray(r.members)||null!==r.poolReason&&"string"!=typeof r.poolReason)return null;let n=r.hq;if(null!==n.record&&(!j(n.record)||"string"!=typeof n.record.holder)||null!==n.ageSeconds&&("number"!=typeof n.ageSeconds||!Number.isFinite(n.ageSeconds))||null!==n.expired&&"boolean"!=typeof n.expired||null!==n.reason&&"string"!=typeof n.reason||!r.members.every(e=>j(e)&&"string"==typeof e.context&&"number"==typeof e.capacity&&Number.isFinite(e.capacity)&&(null===e.occupied||"number"==typeof e.occupied&&Number.isFinite(e.occupied))))return null;return r}catch(e){return null}}function F(e,t){return new Promise(r=>{let n=setTimeout(()=>r(t),15e3);e.then(e=>{clearTimeout(n),r(e)},()=>{clearTimeout(n),r(t)})})}function O(e){let{title:t,children:r}=e;return(0,n.jsxs)("section",{"aria-label":t,className:"min-w-0 rounded-xl border border-border bg-card p-3 sm:p-4",children:[(0,n.jsx)("h2",{className:"text-xs font-medium text-muted-foreground sm:text-sm",children:t}),(0,n.jsx)("div",{className:"mt-2 text-lg font-semibold leading-snug tabular-nums sm:text-xl",children:r})]})}function E(){var e,t,r,s,u;let{client:m}=(0,i.Q)(),[p,h]=(0,a.useState)(g);(0,a.useEffect)(()=>{let e=!0;return h(g),!function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:()=>!0,n=Date.now(),s=function(e){let t=new Intl.DateTimeFormat("sv-SE",{timeZone:"Asia/Seoul"}).format(e);return Date.parse("".concat(t,"T00:00:00+09:00"))}(new Date(n)),l=F(k(e),null),a=F((0,f.Nn)(e),{kind:"error",status:0}),i=F(A(e),null),o=F(R(e),null),d=F(D(e,n),null),u=F(S(e,s),null),c=F(I(e,s),null),m=F(M(e),null);!function e(t,r,n){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:30;F(v(t),{kind:"unavailable",reason:null}).then(l=>{n()&&(r({drafts:l}),"measuring"===l.kind&&s>0&&setTimeout(()=>{n()&&e(t,r,n,s-1)},1e4))})}(e,t,r),l.then(e=>t({flow:e})),a.then(e=>{var r;return t({release:"ready"===e.kind?4!==(r=e.data).seats.length||r.seats.some(e=>null===e.checklist)?null:{green:r.seats.reduce((e,t)=>e+t.checklist.green,0),yellow:r.seats.reduce((e,t)=>e+t.checklist.yellow,0)}:null})}),i.then(e=>{var r;return t({loops:null!=(r=null==e?void 0:e.summary)?r:null})}),d.then(e=>{var r;return t({decisions:null!=(r=null==e?void 0:e.count)?r:null})}),u.then(e=>t({merged:e})),m.then(e=>t({grid:e})),Promise.all([i,o,d,c]).then(e=>{let[r,n,s,l]=e;t({risks:r&&n&&s&&l?[...new Map([...r.risks,...n,...s.risks,...l].sort((e,t)=>Date.parse(e.at)-Date.parse(t.at)).map(e=>[e.id,e])).values()].sort((e,t)=>Date.parse(t.at)-Date.parse(e.at)||e.id.localeCompare(t.id)).slice(0,5):null})})}(m,t=>{e&&h(e=>({...e,...t}))},()=>e),()=>{e=!1}},[m]);let b=void 0===p.flow?"불러오는 중…":null===p.flow?"못 잼":"".concat(p.flow.label," \xb7 ").concat(null!=(r=p.flow.reason)?r:"사유 없음").concat(p.flow.stale?" \xb7 낡음":""),x=(null==(e=p.flow)?void 0:e.verdict)==="loop-down"||(null==(t=p.flow)?void 0:t.verdict)==="blocked"?"/loops?view=map":"/ops/resources",w=function(e){var t,r;let n=void 0===e.flow?d:null===e.flow?o:"".concat(e.flow.label).concat(e.flow.reason?" \xb7 ".concat(e.flow.reason):""),s=void 0===e.risks?d:null===e.risks?o:0===e.risks.length?"해당 없음":"".concat(e.risks[0].kind," \xb7 ").concat(e.risks[0].title),l=void 0===e.grid||!(r=e.grid)||r.poolReason||0===r.members.length||r.members.some(e=>null===e.occupied)?null:r.members.reduce((e,t)=>e+Math.max(0,t.capacity-t.occupied),0);return{blocked:"".concat(n," / 톱 ").concat(s),decide:void 0===e.decisions?d:null===e.decisions?o:"결정 대기 ".concat(e.decisions,"건"),landed:void 0===e.merged?d:null===e.merged?o:"".concat(e.merged,"건"),spare:void 0===e.grid?d:null===l?o:"".concat(l,"칸"),heartbeat:void 0===e.grid?d:function(e){if(null==e||!Number.isFinite(e)||e<0)return o;let t=Math.round(e);return t<60?"".concat(t,"초 전"):"".concat(Math.floor(t/60),"분 전")}(null==(t=e.grid)?void 0:t.hq.ageSeconds),release:void 0===e.release?d:null===e.release?o:"green ".concat(e.release.green," \xb7 노랑 ").concat(e.release.yellow)}}({flow:p.flow,release:p.release,decisions:p.decisions,merged:p.merged,risks:p.risks,grid:p.grid});return(0,n.jsxs)("main",{className:"mx-auto w-full min-w-0 max-w-3xl px-3 py-4 text-foreground sm:px-6",children:[(0,n.jsxs)("header",{className:"mb-4",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.jsx)("p",{"aria-label":"흐름 판정",className:"mb-3 min-w-0 truncate rounded-xl border border-border bg-card px-3 py-2 text-sm",children:void 0===p.flow||null===p.flow?b:(0,n.jsx)(l(),{href:x,className:"rounded underline-offset-4 hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary",children:b})}),(0,n.jsxs)("div",{role:"region","aria-label":"한 화면 답",className:"mb-3 grid min-w-0 grid-cols-2 gap-2 text-xs sm:grid-cols-3 sm:gap-3",children:[(0,n.jsxs)("p",{className:"min-w-0 rounded-xl border border-border bg-card px-3 py-2",children:[(0,n.jsx)("span",{className:"block text-muted-foreground",children:"지금 막힘"}),(0,n.jsx)("span",{className:"block min-w-0 break-words font-semibold",children:w.blocked})]}),(0,n.jsxs)("p",{className:"min-w-0 rounded-xl border border-border bg-card px-3 py-2",children:[(0,n.jsx)("span",{className:"block text-muted-foreground",children:"결정해야 함"}),(0,n.jsx)("span",{className:"block font-semibold tabular-nums",children:w.decide}),(0,n.jsx)(l(),{href:"/decisions",className:"mt-1 block min-w-0 break-words rounded text-[11px] text-muted-foreground underline underline-offset-4 hover:text-foreground",children:"결정 카드 열기 →"})]}),(0,n.jsxs)("p",{className:"min-w-0 rounded-xl border border-border bg-card px-3 py-2",children:[(0,n.jsx)("span",{className:"block text-muted-foreground",children:"오늘 착지"}),(0,n.jsx)("span",{className:"block font-semibold tabular-nums",children:w.landed})]}),(0,n.jsxs)("p",{className:"min-w-0 rounded-xl border border-border bg-card px-3 py-2",children:[(0,n.jsx)("span",{className:"block text-muted-foreground",children:"예비\xb7하트비트"}),(0,n.jsxs)("span",{className:"block min-w-0 break-words font-semibold tabular-nums",children:["예비 ",w.spare," \xb7 하트비트 ",w.heartbeat]})]}),(0,n.jsxs)("p",{className:"min-w-0 rounded-xl border border-border bg-card px-3 py-2",children:[(0,n.jsx)("span",{className:"block text-muted-foreground",children:"판"}),(0,n.jsx)("span",{className:"block font-semibold tabular-nums",children:w.release}),(0,n.jsx)(l(),{href:"/ops/release",className:"mt-1 block rounded text-[11px] text-muted-foreground underline underline-offset-4 hover:text-foreground",children:"컷\xb7발행 현황 →"})]})]}),(0,n.jsxs)("div",{className:"grid grid-cols-2 gap-2 sm:gap-4","aria-label":"대표 조망 카드",children:[(0,n.jsxs)(O,{title:"릴리스 판 진행",children:[void 0===p.release?"불러오는 중…":p.release?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("span",{className:"text-emerald-600",children:["green ",p.release.green]}),(0,n.jsxs)("span",{className:"block text-amber-600",children:["노랑 ",p.release.yellow]})]}):"못 읽음",(0,n.jsx)(l(),{href:"/ops/release",className:"mt-1 block rounded text-xs font-medium text-primary underline underline-offset-4 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary","aria-label":"발행 현황 보기 — 운영 › 릴리스",children:"발행 현황 보기 →"})]}),(0,n.jsxs)(O,{title:"루프 판정",children:[void 0===p.loops?"불러오는 중…":null===p.loops?"못 읽음":0===Object.keys(p.loops).length?"등록된 일정 0":(0,n.jsx)("div",{className:"flex flex-wrap gap-1 text-xs font-medium",children:Object.entries(p.loops).map(e=>{let[t,r]=e;return(0,n.jsxs)("span",{className:"rounded-full bg-muted px-2 py-1",children:[t," ",r]},t)})}),(0,n.jsx)(l(),{href:c.D,className:"mt-1 block rounded text-xs font-medium text-primary underline underline-offset-4 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary","aria-label":"루프 상호작용 보기 — 운영 › 루프 상호작용",children:"루프 상호작용 보기 →"})]}),(0,n.jsx)(O,{title:"결정 대기 카드",children:(0,n.jsx)(l(),{href:"/decisions",className:"rounded underline underline-offset-4 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary","aria-label":"결정 대기 카드 보기",children:void 0===p.decisions?"불러오는 중…":null!=(s=p.decisions)?s:"못 읽음"})}),(0,n.jsx)(O,{title:"오늘 병합 PR",children:void 0===p.merged?"불러오는 중…":null!=(u=p.merged)?u:"못 읽음"})]}),(0,n.jsxs)("div",{className:"mt-2 grid min-w-0 grid-cols-2 gap-2 sm:mt-4 sm:gap-4","aria-label":"위험과 그리드 카드",children:[(0,n.jsxs)("section",{"aria-label":"위험\xb7막힘 톱 5",className:"min-w-0 rounded-xl border border-border bg-card p-2 sm:p-4",children:[(0,n.jsx)("h2",{className:"text-xs font-medium text-muted-foreground sm:text-sm",children:"위험\xb7막힘 톱 5"}),void 0===p.risks?(0,n.jsx)("p",{className:"mt-2 text-sm",children:"불러오는 중…"}):null===p.risks?(0,n.jsx)("p",{className:"mt-2 text-sm",children:"못 읽음"}):0===p.risks.length?(0,n.jsx)("p",{className:"mt-2 text-sm",children:"해당 없음"}):(0,n.jsx)("ol",{className:"mt-2 space-y-1 text-xs",children:p.risks.map(e=>(0,n.jsxs)("li",{className:"min-w-0 border-b border-border pb-1 last:border-0",children:[(0,n.jsxs)("span",{className:"block text-muted-foreground",children:[e.kind," \xb7 ",(0,n.jsx)("time",{dateTime:e.at,children:e.at.slice(0,16).replace("T"," ")})]}),(0,n.jsx)("span",{className:"block truncate",title:e.title,children:e.title})]},e.id))})]}),(0,n.jsxs)("section",{"aria-label":"그리드",className:"min-w-0 rounded-xl border border-border bg-card p-2 sm:p-4",children:[(0,n.jsx)("h2",{className:"text-xs font-medium text-muted-foreground sm:text-sm",children:"그리드"}),void 0===p.grid?(0,n.jsx)("p",{className:"mt-2 text-sm",children:"불러오는 중…"}):null===p.grid?(0,n.jsx)("p",{className:"mt-2 text-sm",children:"못 읽음"}):(0,n.jsxs)("div",{className:"mt-2 space-y-2 text-xs",children:[(0,n.jsxs)("p",{className:"min-w-0 break-words",children:["본부 \xb7 ",p.grid.hq.reason?"본부 못 읽음":p.grid.hq.record?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{title:p.grid.hq.record.holder,children:p.grid.hq.record.holder}),null!==p.grid.hq.ageSeconds&&(0,n.jsxs)(n.Fragment,{children:[" \xb7 ",Math.floor(p.grid.hq.ageSeconds/60),"분 전"]}),p.grid.hq.expired&&(0,n.jsx)("span",{className:"ml-1 font-semibold text-red-600",children:"만료"})]}):"임대 없음"]}),p.grid.poolReason&&(0,n.jsxs)("p",{className:"break-words text-amber-700",title:p.grid.poolReason,children:["풀 못 읽음 \xb7 ",p.grid.poolReason.slice(0,40)]}),(0,n.jsx)("ul",{className:"space-y-1",children:p.grid.members.map(e=>{var t;return(0,n.jsxs)("li",{className:"min-w-0",children:[(0,n.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-1",children:[(0,n.jsx)("span",{className:"min-w-0 truncate",title:e.context,children:e.context}),(0,n.jsx)("span",{className:"shrink-0 tabular-nums",children:null===e.occupied?"측정 불가":"".concat(e.occupied,"/").concat(e.capacity)})]}),(0,n.jsx)("div",{className:"h-1.5 overflow-hidden rounded-full bg-muted",role:"meter","aria-label":"".concat(e.context," 칸 사용"),"aria-valuemin":0,"aria-valuemax":Math.max(e.capacity,null!=(t=e.occupied)?t:0,1),...null===e.occupied?{}:{"aria-valuenow":e.occupied},children:null!==e.occupied&&(0,n.jsx)("div",{className:"h-full rounded-full bg-emerald-600",style:{width:"".concat(e.capacity>0?Math.min(100,Math.max(0,e.occupied/e.capacity*100)):0,"%")}})})]},e.context)})}),(0,n.jsxs)("p",{className:"font-medium tabular-nums",children:["칸 사용 ",p.grid.poolReason||p.grid.members.some(e=>null===e.occupied)?"측정 불가":p.grid.members.reduce((e,t)=>e+t.occupied,0),"/",p.grid.members.reduce((e,t)=>e+t.capacity,0)]})]})]}),(0,n.jsx)(y,{value:p.drafts})]})]})}},59166:(e,t,r)=>{"use strict";r.d(t,{D:()=>n,F:()=>s});let n="/loops?view=interact";function s(e){return(null==e?void 0:e.get("view"))==="resources"?"resources":(null==e?void 0:e.get("view"))==="interact"?"interact":"status"}},66066:(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 l(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 a(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:()=>a,aj:()=>s,kh:()=>n,qK:()=>l})},68985:(e,t,r)=>{"use strict";function n(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function s(e){return"string"==typeof e}function l(e){return s(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(e)&&Number.isFinite(Date.parse(e))&&new Date(e).toISOString().slice(0,19)===e.slice(0,19)}function a(e){return n(e)&&s(e.nodeId)&&(null===e.ok||"boolean"==typeof e.ok)&&s(e.summary)&&(void 0===e.startedAt||null===e.startedAt||s(e.startedAt))&&(void 0===e.endedAt||null===e.endedAt||s(e.endedAt))}r.d(t,{HG:()=>y,Kh:()=>v,Nn:()=>h,oc:()=>b});let i=new Set(["pending","running","done","retry","timeout","failed"]),o=e=>void 0===e||"number"==typeof e&&Number.isFinite(e);function d(e){return!!(n(e)&&s(e.runId)&&s(e.status)&&s(e.startedAt)&&(null===e.version||s(e.version))&&Array.isArray(e.path)&&e.path.every(s)&&Array.isArray(e.nodes)&&e.nodes.every(a))&&(void 0!==e.gateShards&&!function(e){if(!n(e)||!s(e.version)||!s(e.updatedAt)||!Array.isArray(e.shards)||!n(e.summary))return!1;let t=e.summary;return e.shards.every(e=>n(e)&&s(e.id)&&i.has(e.state)&&o(e.plannedMin)&&o(e.installSec)&&o(e.rc)&&(void 0===e.waitReason||s(e.waitReason)))&&Number.isInteger(t.total)&&n(t.counts)&&[...i].every(e=>Number.isInteger(t.counts[e]))&&Array.isArray(t.waitReasons)&&t.waitReasons.every(e=>n(e)&&s(e.reason)&&Number.isInteger(e.count))&&(null===t.etaMin||"number"==typeof t.etaMin)&&(null===t.staleMin||"number"==typeof t.staleMin)&&(void 0===t.overrunMin||"number"==typeof t.overrunMin)}(e.gateShards)&&delete e.gateShards,!0)}function u(e){return n(e)&&s(e.id)&&s(e.title)&&s(e.status)&&(void 0===e.owner||s(e.owner))&&s(e.updatedAt)&&(void 0===e.evidence||s(e.evidence))}let c=e=>Number.isInteger(e)&&e>=0;function m(e){return n(e)&&s(e.id)&&s(e.title)&&(null===e.open||c(e.open))&&(null===e.landed||c(e.landed))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>n(e)&&s(e.id)&&s(e.title)))}function f(e){return n(e)&&["OP","MK","TC","UX"].includes(e.seat)&&(void 0===e.role||s(e.role))&&(null===e.now||n(e.now)&&s(e.now.text)&&s(e.now.at))&&(null===e.landed||Array.isArray(e.landed)&&e.landed.every(e=>n(e)&&c(e.pr)&&s(e.title)&&s(e.at)&&(null===e.checklistId||s(e.checklistId))))&&(null===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(e=>n(e)&&s(e.id)&&s(e.title)&&"red"===e.status))&&(null===e.pendingDecisions||c(e.pendingDecisions))&&(null===e.checklist||n(e.checklist)&&["green","yellow","red","done"].every(t=>c(e.checklist[t])))&&(void 0===e.subSeats||null===e.subSeats||Array.isArray(e.subSeats)&&e.subSeats.every(m))}async function p(e,t,r){try{let n=await e.fetchResponse(t,{method:"GET"});if(403===n.status)return{kind:"forbidden"};if(!n.ok)return{kind:"error",status:n.status};let s=r(await n.json());return null===s?{kind:"error",status:n.status}:{kind:"ready",data:s}}catch(e){return{kind:"error",status:0}}}function h(e,t){return p(e,"/v1/ops/seats".concat(t?"?date=".concat(encodeURIComponent(t)):""),e=>n(e)&&s(e.date)&&Array.isArray(e.seats)&&e.seats.every(f)&&new Set(e.seats.map(e=>e.seat)).size===e.seats.length?{date:e.date,seats:e.seats}:null)}function b(e,t){return p(e,"/v1/ops/release/runs".concat(t?"?version=".concat(encodeURIComponent(t)):""),e=>Array.isArray(e)&&e.every(d)?e:null)}function v(e,t,r){return p(e,"/v1/ops/release/runs/".concat(encodeURIComponent(t),"/nodes/").concat(encodeURIComponent(r),"/log"),e=>n(e)&&s(e.log)?{log:e.log}:null)}function y(e,t){return p(e,"/v1/ops/checklist?version=".concat(encodeURIComponent(t)),e=>{var t,r,a,i;if(!(n(e)&&s(e.version)&&(void 0===e.codename||s(e.codename))&&Array.isArray(e.items)&&e.items.every(u)&&["green","yellow","red","done"].every(t=>void 0===e[t]||Number.isInteger(e[t])&&e[t]>=0)&&(void 0===e.blocked||Array.isArray(e.blocked)&&e.blocked.every(s))&&(void 0===e.byOwner||n(e.byOwner)&&Object.values(e.byOwner).every(e=>Number.isInteger(e)&&e>=0))&&(void 0===e.history||Array.isArray(e.history))))return null;let o={green:0,yellow:0,red:0,done:0};for(let t of e.items)t.status in o&&o[t.status]++;return{version:e.version,...void 0!==e.codename?{codename:e.codename}:{},schedule:n(e.schedule)&&l(e.schedule.cutAt)&&(null===e.schedule.landBy||l(e.schedule.landBy))?{cutAt:e.schedule.cutAt,landBy:e.schedule.landBy}:null,items:e.items,green:null!=(t=e.green)?t:o.green,yellow:null!=(r=e.yellow)?r:o.yellow,red:null!=(a=e.red)?a:o.red,done:null!=(i=e.done)?i:o.done,...void 0!==e.blocked?{blocked:e.blocked}:{},...void 0!==e.byOwner?{byOwner:e.byOwner}:{},...void 0!==e.history?{history:e.history}:{}}})}}},e=>{e.O(0,[1041,7956,9828,8821,7358],()=>e(e.s=27646)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8457],{2202:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(58441).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"}]])},21078:(e,t,r)=>{"use strict";r.d(t,{p:()=>n});var i=r(57865);r(20381);var l=r(7238),a=r(9645);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})}},24837:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(58441).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"}]])},35107:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(58441).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"}]])},45389:(e,t,r)=>{Promise.resolve().then(r.bind(r,75854))},58441:(e,t,r)=>{"use strict";r.d(t,{A:()=>c});var i=r(20381);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}},67149:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(58441).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"}]])},74308:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(58441).A)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},88957:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(58441).A)("menu",[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]])},94928:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});let i=(0,r(58441).A)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]])}},e=>{e.O(0,[4725,752,1041,2002,7238,8030,920,7956,8595,9181,6971,3994,3760,5854,9828,8821,7358],()=>e(e.s=45389)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3933],{4317:(e,t,s)=>{Promise.resolve().then(s.bind(s,72536))},16759:(e,t,s)=>{"use strict";s.d(t,{C:()=>i,DaemonProvider:()=>d,Q:()=>m});var a=s(57865),n=s(20381),r=s(8905),l=s(33797),o=s(47956),c=s(62351);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}},33797:(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}},72536:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>c});var a=s(57865),n=s(20381),r=s(16759);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?"보내는 중…":"보내기"})]})]})}}},e=>{e.O(0,[7956,9828,8821,7358],()=>e(e.s=4317)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2580],{9054:(e,t,r)=>{Promise.resolve().then(r.bind(r,75305))},9645:(e,t,r)=>{"use strict";r.d(t,{cn:()=>s});var a=r(53995),n=r(42127);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))}},16759:(e,t,r)=>{"use strict";r.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var a=r(57865),n=r(20381),s=r(8905),o=r(33797),i=r(47956),l=r(62351);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}},21078:(e,t,r)=>{"use strict";r.d(t,{p:()=>o});var a=r(57865);r(20381);var n=r(7238),s=r(9645);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})}},33797:(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}},58174:(e,t,r)=>{"use strict";r.d(t,{$:()=>l});var a=r(57865),n=r(4648),s=r(3255),o=r(9645);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})}},75305:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var a=r(57865),n=r(82599);function s(){return(0,a.jsx)(n.U,{})}},82599:(e,t,r)=>{"use strict";r.d(t,{U:()=>m});var a=r(57865),n=r(20381),s=r(16759),o=r(58174),i=r(21078);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(82002),p=r(62351);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,[4725,752,2002,7238,7956,9828,8821,7358],()=>e(e.s=9054)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1422],{16759:(e,t,r)=>{"use strict";r.d(t,{C:()=>d,DaemonProvider:()=>c,Q:()=>u});var n=r(57865),s=r(20381),a=r(8905),i=r(33797),o=r(47956),l=r(62351);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)(""),[b]=(0,s.useState)(()=>new o.ki(r));(0,s.useEffect)(()=>{let e=(0,a.Fp)();u(e),b.updateConfig(e),p((0,i.oD)()),(0,l.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[b]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();b.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&&p(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)},[b]);let h=e=>{u(t=>{let r={...t,...e};return(0,a.Qc)(e),b.updateConfig(r),(0,l.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},x=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,l.cY)("webterm.provider.daemon.session-set",{sessionId:e})},f=(0,s.useMemo)(()=>({config:c,setConfig:h,client:b,sessionId:m,setSessionId:x}),[c,b,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}},19933:(e,t,r)=>{"use strict";r.d(t,{DecisionBoard:()=>p});var n=r(57865),s=r(20381),a=r(16759),i=r(66066);let o=[{key:"what",label:"무엇"},{key:"history",label:"지금까지"},{key:"precedent",label:"이전 같은 갈래 결정"},{key:"remeasure",label:"지금 상태 재측"},{key:"options",label:"선택지별 결과"},{key:"recommendation",label:"권고와 근거"},{key:"doNothing",label:"그냥 두면"}],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)),d=e=>(null==e?void 0:e.trim())||"(비움)",c=e=>e.replace(/\s+/g," ").trim().slice(0,300),u=e=>e?"".concat(l(e)," KST"):"시각 미상",m={raised:"올림","options-added":"선택지 추가",decided:"결정",withdrawn:"철회"};function p(){let{client:e}=(0,a.Q)(),[t,r]=(0,s.useState)({items:[],error:null,loading:!0}),[p,b]=(0,s.useState)("decisions"),[h,x]=(0,s.useState)(0),[f,y]=(0,s.useState)({items:[],loading:!1,error:null}),[g,j]=(0,s.useState)({}),[v,k]=(0,s.useState)(null),[w,N]=(0,s.useState)({}),[S,C]=(0,s.useState)({}),[E,A]=(0,s.useState)(null),[D,I]=(0,s.useState)(null),[U,T]=(0,s.useState)({}),[R,O]=(0,s.useState)({}),[P,K]=(0,s.useState)(!1),[L,B]=(0,s.useState)({}),[q,_]=(0,s.useState)({}),[Q,Y]=(0,s.useState)(!1),[V,F]=(0,s.useState)(""),J=(0,s.useRef)(null),M=(0,s.useRef)(0),Z=(0,s.useRef)(e);Z.current=e,(0,s.useEffect)(()=>{if("notices"!==p)return;let t=!0;return y({items:[],loading:!0,error:null}),(0,i.kh)(e).then(e=>{t&&y({items:e,loading:!1,error:null})}).catch(e=>{t&&y({items:[],loading:!1,error:e instanceof Error?e.message:String(e)})}),()=>{t=!1}},[e,p,h]);let z=(0,s.useRef)(!1),G=async t=>{var r;let n=(null!=(r=g[t.id])?r:"").trim();if(n&&!z.current){z.current=!0,k(t.id),N(e=>({...e,[t.id]:""}));try{if(await (0,i.aj)(e,t.id,n),Z.current!==e)return;j(e=>({...e,[t.id]:""})),N(e=>({...e,[t.id]:"".concat(t.from," 수신함으로 보냄")}))}catch(r){Z.current===e&&N(e=>({...e,[t.id]:"전송 실패 \xb7 ".concat(r instanceof Error?r.message:String(r))}))}finally{z.current=!1,Z.current===e&&k(null)}}};(0,s.useEffect)(()=>{let t=!0;J.current=null;let n=++M.current;return r({items:[],error:null,loading:!0}),C({}),A(null),I(null),T({}),O({}),K(!1),Y(!1),F(""),B({}),_({}),j({}),k(null),N({}),(0,i.qK)(e).then(e=>{t&&M.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&&M.current===n&&r({items:[],error:e instanceof Error?e.message:String(e),loading:!1})}),()=>{t=!1,++M.current}},[e]);let H=async function(t,r){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(J.current||U[t.id])return;if(t.irreversible&&(!n||(null==E?void 0:E.id)!==t.id||E.key!==r))return void A({id:t.id,key:r});let s=M.current;J.current=t.id,I(t.id),A(null),O(e=>({...e,[t.id]:""}));try{var a,o,l;let n=await (0,i.LD)(e,t.id,r,c(null!=(o=S[t.id])?o:"")||void 0);if(Z.current!==e||M.current!==s)return;let d=null!=(l=null==(a=t.options.find(e=>e.id===r))?void 0:a.label)?l:r;T(e=>({...e,[t.id]:{label:d,at:n.decidedAt}})),Y(!1),F("")}catch(n){if(Z.current!==e||M.current!==s)return;let r=n instanceof Error?n.message:String(n);O(e=>({...e,[t.id]:r.includes("decision failed: 409")?"이미 결정됨":r.includes("decision failed: 404")?"사라진 결정":"결정 실패 \xb7 ".concat(r)}))}finally{Z.current===e&&M.current===s&&(J.current=null,I(null))}},W=P?t.items.filter(e=>{var t;return(null==(t=e.raisedBy)?void 0:t.agent)==="OP"}):t.items,X=async()=>{if(J.current)return;let t=W.filter(e=>!("skipped"in e.recommendation)&&!U[e.id]);if(0===t.length){Y(!1),F("권고가 있는 대기 결정이 없습니다");return}let r=t.filter(e=>e.irreversible).length;if(r>0&&!Q){Y(!0),F("되돌릴 수 없는 결정 ".concat(r,"건 포함 — 다시 누르면 권고대로 일괄 결정합니다"));return}Y(!1),F("");let n=M.current;J.current="bulk",I("bulk");let s=0;try{for(let r of t)try{var a,o,l;let t=await (0,i.LD)(e,r.id,r.recommendation.option,c(null!=(o=S[r.id])?o:"")||void 0);if(Z.current!==e||M.current!==n)return;let d=null!=(l=null==(a=r.options.find(e=>e.id===r.recommendation.option))?void 0:a.label)?l:r.recommendation.option;T(e=>({...e,[r.id]:{label:d,at:t.decidedAt}})),s+=1}catch(s){if(Z.current!==e||M.current!==n)return;let t=s instanceof Error?s.message:String(s);O(e=>({...e,[r.id]:t.includes("decision failed: 409")?"이미 결정됨":t.includes("decision failed: 404")?"사라진 결정":"결정 실패 \xb7 ".concat(t)}))}if(Z.current!==e||M.current!==n)return;F("권고대로 ".concat(s,"건을 일괄 결정했습니다"))}finally{Z.current===e&&M.current===n&&(J.current=null,I(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"===p?"page":void 0,onClick:()=>b("decisions"),className:"rounded-md border border-border px-3 py-2",children:"결정"}),(0,n.jsx)("button",{type:"button","aria-current":"notices"===p?"page":void 0,onClick:()=>b("notices"),className:"rounded-md border border-border px-3 py-2",children:"공지 \xb7 의견"}),"notices"===p&&(0,n.jsx)("button",{type:"button",onClick:()=>x(e=>e+1),className:"rounded-md border border-border px-3 py-2",children:"공지 새로고침"})]}),"notices"===p?(0,n.jsx)("section",{"aria-label":"공지 \xb7 의견",children:f.loading?(0,n.jsx)("p",{role:"status",children:"공지 읽는 중"}):f.error?(0,n.jsxs)("p",{role:"alert",children:["공지 못 읽음 \xb7 ",f.error]}):0===f.items.length?(0,n.jsx)("p",{children:"도착한 공지가 없습니다."}):(0,n.jsx)("ol",{className:"space-y-4",children:f.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=g[e.id])?r:"",onChange:t=>j(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!==v||!(null!=(s=g[e.id])?s:"").trim(),onClick:()=>{G(e)},className:"mt-2 rounded-md border border-border px-3 py-1 disabled:opacity-50",children:"답글 보내기"}),w[e.id]&&(0,n.jsx)("p",{role:"status",children:w[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,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"mb-3 flex flex-wrap gap-2",children:[(0,n.jsx)("button",{type:"button","aria-pressed":P,onClick:()=>{K(e=>!e),Y(!1),F("")},className:"rounded-md border border-border px-3 py-1".concat(P?" bg-muted":""),children:"OP 거르기"}),(0,n.jsx)("button",{type:"button",disabled:null!==D||0===W.length,onClick:()=>{X()},className:"rounded-md border border-border px-3 py-1 disabled:opacity-50",children:"권고대로 일괄 결정"})]}),V&&(0,n.jsx)("p",{role:"status",children:V}),0===W.length?(0,n.jsx)("p",{children:0===t.items.length?"열린 결정이 없습니다.":"OP가 올린 열린 결정이 없습니다."}):(0,n.jsx)("ol",{className:"space-y-4",children:W.map(e=>{var t,r,s,a,i,c,p,b,h,x;let f=U[e.id],y=(null==E?void 0:E.id)===e.id?e.options.find(e=>e.id===E.key):void 0,g=e.recommendation;return(0,n.jsx)("li",{className:"min-w-0 rounded-xl border border-border bg-card p-4",children:f?(0,n.jsxs)("details",{children:[(0,n.jsxs)("summary",{className:"cursor-pointer font-medium",children:["결정됨: ",f.label," \xb7 ",f.at?"".concat(l(f.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!=(c=null==(t=e.raisedBy)?void 0:t.agent)?c:"(비움)",(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:d(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 g?"권고 없음: ".concat(g.reason):"권고: ".concat(null!=(p=null==(s=e.options.find(e=>e.id===g.option))?void 0:s.label)?p:g.option," — ").concat(g.why)}),e.alternative&&(0,n.jsxs)("p",{className:"text-sm",children:["대안: ",null!=(b=null==(a=e.options.find(t=>t.id===e.alternative))?void 0:a.label)?b: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," — ",d(t.consequence)]}),(0,n.jsxs)("button",{type:"button",disabled:null!==D,onClick:()=>{H(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!=(h=e.crossCheckSkipped)?h:"미기재",")")}),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)("div",{className:"rounded-lg border border-border p-2 text-sm",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,n.jsx)("h3",{className:"font-semibold",children:"판단 칸"}),(0,n.jsx)("button",{type:"button","aria-expanded":!0!==L[e.id],"aria-controls":"ledger-".concat(e.id),onClick:()=>B(t=>({...t,[e.id]:!0!==t[e.id]})),className:"rounded-md border border-border px-3 py-1",children:!0===L[e.id]?"판단 칸 펼치기":"판단 칸 접기"})]}),!0!==L[e.id]&&(0,n.jsx)("dl",{id:"ledger-".concat(e.id),className:"mt-2 space-y-1",children:o.map(t=>{let r=!0===q["".concat(e.id,":").concat(t.key)];return(0,n.jsxs)("div",{className:"grid gap-1 border-b border-border/60 pb-1 last:border-b-0",children:[(0,n.jsxs)("dt",{className:"flex flex-wrap items-center justify-between gap-2 font-semibold",children:[(0,n.jsxs)("span",{children:[t.label,":"]}),(0,n.jsx)("button",{type:"button","aria-expanded":!r,"aria-controls":"cell-".concat(e.id,"-").concat(t.key),onClick:()=>_(r=>({...r,["".concat(e.id,":").concat(t.key)]:!0!==r["".concat(e.id,":").concat(t.key)]})),className:"rounded-md border border-border px-2 py-0.5 text-xs font-normal",children:"".concat(t.label," ").concat(r?"펼치기":"접기")})]}),(0,n.jsx)("dd",{id:"cell-".concat(e.id,"-").concat(t.key),hidden:r,className:"min-w-0 whitespace-pre-wrap",children:function(e,t){var r,n,s,a,i,o,l;switch(t){case"what":return(null==(r=e.title)?void 0:r.trim())||"미기재";case"history":{let t=null!=(n=e.history)?n:[];if(0===t.length)return"원장 기록 없음 \xb7 제기 ".concat(u(e.raisedAt));return t.map(e=>{var t,r;return[u(e.at),e.by,null!=(r=m[e.type])?r:e.type,...e.choice?["→ ".concat(e.choice)]:[],...(null==(t=e.reason)?void 0:t.trim())?["\xb7 ".concat(e.reason.trim())]:[]].join(" ")}).join("\n")}case"precedent":{let t=e.precedent;if(!t)return"이전 같은 갈래 결정 없음";let r="human"===t.decidedBy?"대표 결정":"auto"===t.decidedBy?"자율 결정":"결정 주체 미상";return["".concat(t.title," → ").concat(t.choice),u(t.decidedAt),r].join(" \xb7 ")}case"remeasure":{let t=null!=(i=e.crossCheck)?i:[],r=t.length>0?t[t.length-1]:void 0;if(!r)return"교차 확인 없음 \xb7 ".concat((null==(s=e.crossCheckSkipped)?void 0:s.trim())||"사유 미기재");return["".concat(r.seat," 교차 확인"),u(r.at),(null==(a=r.note)?void 0:a.trim())||"메모 미기재"].join(" \xb7 ")}case"options":return e.options.map(e=>"".concat(e.id.toUpperCase(),") ").concat(e.label," — ").concat(d(e.consequence))).join("\n");case"recommendation":{let t=e.recommendation;if("skipped"in t)return"권고 없음: ".concat(t.reason);let r=null!=(l=null==(o=e.options.find(e=>e.id===t.option))?void 0:o.label)?l:t.option;return"".concat(r," — ").concat(t.why)}case"doNothing":{let t=e.dueAt?"기한 ".concat(u(e.dueAt)," 이 지나면 열린 채로 남습니다"):"기한 없음 — 그대로 두면 계속 열린 채로 남습니다";return e.irreversible?"".concat(t," \xb7 되돌릴 수 없는 결정입니다"):t}}}(e,t.key)})]},t.key)})})]}),(0,n.jsxs)("label",{className:"block text-sm",children:["한 줄 의견 (최대 300자)",(0,n.jsx)("input",{type:"text",maxLength:300,value:null!=(x=S[e.id])?x:"",onChange:t=>C(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"})]}),y&&(0,n.jsxs)("div",{role:"alert",className:"rounded-md border border-amber-600 p-2 text-sm",children:[(0,n.jsxs)("p",{children:["되돌릴 수 없습니다 — 이것으로 정할까요? (",y.label,")"]}),(0,n.jsx)("button",{type:"button",disabled:null!==D,onClick:()=>{H(e,y.id,!0)},className:"mr-3 underline",children:"예, 결정"}),(0,n.jsx)("button",{type:"button",onClick:()=>A(null),className:"underline",children:"취소"})]}),D===e.id&&(0,n.jsx)("p",{role:"status",children:"기록 중"}),R[e.id]&&(0,n.jsx)("p",{role:"alert",children:R[e.id]})]})},e.id)})})]})]})}},33797:(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}},43574:(e,t,r)=>{Promise.resolve().then(r.bind(r,19933))},66066:(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})}},e=>{e.O(0,[7956,9828,8821,7358],()=>e(e.s=43574)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6348],{9788:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(58441).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"}]])},39046:(e,t,s)=>{Promise.resolve().then(s.bind(s,53357))},46618:(e,t,s)=>{"use strict";s.d(t,{M1:()=>c,Qj:()=>d,tI:()=>o});var r=s(57865),n=s(20381),i=s(36171),a=s(4710);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)}},53357:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>E});var r=s(57865),n=s(72449),i=s(95391);let a=(0,s(58441).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(71994),o=s(9788),c=s(20381),d=s(46618),u=s(88080),h=s(4710),m=s(98627),p=s(89570),f=s(39175);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,{})}},58441:(e,t,s)=>{"use strict";s.d(t,{A:()=>c});var r=s(20381);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}},62351:(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"}})}},71994:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(58441).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"}]])},72449:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(58441).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"}]])},78236:(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}},89570:(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()},95391:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(58441).A)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},98627:(e,t,s)=>{"use strict";s.d(t,{n:()=>d});var r=s(20381),n=s(69629),i=s(5342),a=s(3383),l=s(6407),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(4710);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}}}},e=>{e.O(0,[5260,8080,9175,9828,8821,7358],()=>e(e.s=39046)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6766],{16759:(e,t,r)=>{"use strict";r.d(t,{C:()=>d,DaemonProvider:()=>u,Q:()=>c});var n=r(57865),a=r(20381),o=r(8905),s=r(33797),l=r(47956),i=r(62351);let d=(0,a.createContext)(null);function u(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[u,c]=(0,a.useState)(r),[p,m]=(0,a.useState)(""),[f]=(0,a.useState)(()=>new l.ki(r));(0,a.useEffect)(()=>{let e=(0,o.Fp)();c(e),f.updateConfig(e),m((0,s.oD)()),(0,i.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 t=(0,o.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&&m(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 x=e=>{c(t=>{let r={...t,...e};return(0,o.Qc)(e),f.updateConfig(r),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},g=e=>{m(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},h=(0,a.useMemo)(()=>({config:u,setConfig:x,client:f,sessionId:p,setSessionId:g}),[u,f,p]);return(0,n.jsx)(d.Provider,{value:h,children:t})}function c(){let e=(0,a.useContext)(d);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},25675:(e,t,r)=>{"use strict";r.d(t,{r:()=>s});var n=r(57865);let a={pending:"var(--border, #94a3b8)",running:"#f59e0b",passed:"var(--chart-2, #16a34a)",failed:"var(--destructive, #ef4444)"},o={pending:"대기",running:"도는 중",passed:"통과",failed:"실패"},s={groupBox:function(e){let{data:t}=e,r=a[t.state];return(0,n.jsx)("div",{"data-testid":"group-box-".concat(t.group),"data-state":t.state,className:"pointer-events-none rounded-xl border-2 border-dashed ".concat(t.unrecorded?"opacity-60":""),style:{width:t.width,height:t.height,borderColor:r,background:"color-mix(in srgb, ".concat(r," 6%, transparent)")},children:(0,n.jsxs)("div",{className:"pointer-events-auto flex items-center gap-2 px-2.5 py-1 text-xs",children:[(0,n.jsx)("span",{className:"font-mono font-semibold text-text-primary",children:t.group}),(0,n.jsx)("span",{className:"text-[11px]",style:{color:r},children:t.unrecorded?"기록 없음":o[t.state]}),(0,n.jsx)("span",{className:"text-[11px] text-text-tertiary",children:void 0===t.stepCount?"노드 ".concat(t.memberCount):"걸음 ".concat(t.stepCount)}),t.onCollapse&&(0,n.jsx)("button",{type:"button",onClick:e=>{var r;e.stopPropagation(),null==(r=t.onCollapse)||r.call(t,t.group)},className:"nodrag ml-auto rounded border border-border bg-background px-1.5 text-[11px] text-text-secondary",children:"접기"})]})})}}},33797:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>s,f6:()=>a,oD:()=>o});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 o(){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=a();return localStorage.setItem(n,t),t}function s(){let e=a();return localStorage.setItem(n,e),e}},34360:()=>{},60820:(e,t,r)=>{Promise.resolve().then(r.bind(r,70499))},65882:(e,t,r)=>{"use strict";r.d(t,{EQ:()=>n,F8:()=>o,Fi:()=>a,Oc:()=>d,S0:()=>s,Vc:()=>i,ws:()=>l});let n="group:",a=e=>e.startsWith(n);function o(e){let t=new Map;for(let r of e.nodes){let e="string"==typeof r.group?r.group.trim():"";e&&t.set(r.node_id,e)}return t}function s(e){return[...new Set(o(e).values())]}function l(e,t){let r=o(e),a=e=>{let a=r.get(e);return a&&t.has(a)?"".concat(n).concat(a):e};if(![...r.values()].some(e=>t.has(e)))return{graph:e,resolve:a};let s=[],l=new Set;for(let t of e.nodes){let n=a(t.node_id);if(l.has(n))continue;if(l.add(n),n===t.node_id){s.push(t);continue}let o=r.get(t.node_id),i=e.nodes.filter(e=>r.get(e.node_id)===o);s.push({node_id:n,kind:"subgraph",recipe:"묶음 \xb7 노드 ".concat(i.length,"개"),max_visits:Math.max(...i.map(e=>e.max_visits)),group:o})}let i=[];for(let t of e.edges){let e=a(t.from);if(t.map){let r={};for(let[n,o]of Object.entries(t.map)){let t=a(o);t!==e&&(r[n]=t)}Object.keys(r).length&&i.push({from:e,...t.on?{on:t.on}:{},map:r})}else if(t.to){let r=a(t.to);r!==e&&i.push({from:e,to:r})}}let d=[];for(let e of i){let t=d.find(t=>t.from===e.from&&!!t.map==!!e.map&&(e.map||t.to===e.to));if(!t){d.push(e.map?{...e,map:{...e.map}}:e);continue}if(e.map&&t.map)for(let[r,a]of Object.entries(e.map))r in t.map?t.map[r]===a||Object.values(t.map).includes(a)||(t.map["".concat(r,"\xb7").concat(a.replace(n,""))]=a):t.map[r]=a}let u=a(e.entry_node),c=[...new Set(e.terminal_nodes.map(a))];return{graph:{...e,entry_node:u,terminal_nodes:c,nodes:s,edges:d},resolve:a}}function i(e,t){let r=new Map;for(let o of e){var n;let e=t.get(o.id);!e||a(o.id)||r.set(e,[...null!=(n=r.get(e))?n:[],o])}return[...r.entries()].map(e=>{let[t,r]=e,n=Math.min(...r.map(e=>e.position.x)),a=Math.min(...r.map(e=>e.position.y)),o=Math.max(...r.map(e=>e.position.x+e.width)),s=Math.max(...r.map(e=>e.position.y+e.height));return{id:"box:".concat(t),group:t,members:r.map(e=>e.id),x:n-18,y:a-18-26,width:o-n+36,height:s-a+36+26}})}function d(e){return e.includes("running")?"running":e.includes("failed")?"failed":e.includes("passed")?"passed":"pending"}},70499:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>eI});var n=r(57865),a=r(20381),o=r(4710),s=r(88080),l=r(22546),i=r(86321),d=r(92627);r(78403);var u=r(41908),c=r(46618),p=r(39175),m=r(85511);let f=[{graph:"workflow",label:"작업 노드",fallbackKinds:m.CF},{graph:"harness",label:"실행 단계 노드",fallbackKinds:m.DN}];var x=r(34978),g=r(96530);r(89142),r(34360);var h=r(88145),b=r(84250),v=r(65882);let y=/^[a-z0-9-]+$/,k=["recipes","overlay","overlays"],j=["ok","rework","fail"];function w(e){return"cmd:".concat(e)}let N="outcome";function S(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"my-graph";return{graphId:e,entry:null,terminals:[],nodes:[],edges:[]}}function C(e,t){var r,n,a,o;let s=null!=(r=t.id)?r:function(e,t){var r;let n=(null!=(r=t.split(":").pop())?r:"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,t.kind);if(e.nodes.some(e=>e.id===s))throw Error("이미 있는 노드 id 입니다: ".concat(s));let l=void 0!==t.x&&void 0!==t.y?{x:t.x,y:t.y}:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"horizontal",r=e.nodes.length;return"vertical"===t?{x:40,y:40+130*r}:{x:40+r%5*240,y:40+180*Math.floor(r/5)}}(e,t.flow),i={id:s,kind:t.kind,recipe:null!=(n=t.recipe)?n:w(s),maxVisits:null!=(a=t.maxVisits)?a:1,...l};return{graph:{...e,entry:null!=(o=e.entry)?o:s,nodes:[...e.nodes,i]},id:s}}function I(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",a=n.trim();if(t===r)throw Error("같은 노드끼리는 연결할 수 없습니다");return e.edges.some(e=>e.from===t&&e.to===r&&e.outcome===a)?e:{...e,edges:[...e.edges,{from:t,to:r,outcome:a}]}}function E(e,t){var r;let n=e.edges.filter(e=>e.from===t);return n.some(e=>!e.outcome)?"":null!=(r=j.find(e=>!n.some(t=>t.outcome===e)))?r:""}function _(e,t){return{...e,edges:e.edges.filter((e,r)=>r!==t)}}function R(e,t,r){var n;let a=null==(n=r.id)?void 0:n.trim();if(void 0!==a&&a!==t){if(!a)throw Error("노드 id 는 비울 수 없습니다");if(e.nodes.some(e=>e.id===a))throw Error("이미 있는 노드 id 입니다: ".concat(a))}let o=e=>a&&e===t?a:e;return{...e,entry:null===e.entry?null:o(e.entry),terminals:e.terminals.map(o),nodes:e.nodes.map(e=>{var n;if(e.id!==t)return e;let o=null!=(n=r.recipe)?n:a&&e.recipe===w(t)?w(a):e.recipe;return{...e,...r,id:a||t,recipe:o}}),edges:e.edges.map(e=>({...e,from:o(e.from),to:o(e.to)}))}}function M(e,t,r){if(!e.nodes.some(e=>e.id===t))return e;let n=e.terminals.filter(e=>e!==t);return{...e,terminals:r?[...n,t]:n}}function z(e){let t=new Set(e.nodes.map(e=>e.id));return e.terminals.filter(e=>t.has(e))}function A(e){var t,r;let n=new u.yo({graph_id:e.graphId,version:"number"==typeof(null==(t=e.extra)?void 0:t.version)?e.extra.version:1,...e.entry?{entry_node:e.entry}:{},terminal_nodes:z(e)}).toString(),a=(0,m.lu)(n);for(let t of e.nodes)(0,m.bC)(a,{nodeId:t.id,kind:t.kind,recipe:t.recipe,maxVisits:t.maxVisits});let o=[],s=new Map,l=new Map,i=new Set;for(let[t,n]of(e.edges.forEach(e=>{var t,r;if(!e.outcome){let t="".concat(e.from,"\0").concat(e.to);if(i.has(t))return;i.add(t),o.push({...e.extra,from:e.from,to:e.to});return}let n="string"==typeof(null==(t=e.extra)?void 0:t.on)?e.extra.on:"outcome",a="".concat(e.from,":").concat(n),d=void 0===e.sourceMapIndex?null!=(r=l.get(a))?r:"new:".concat(a):"source:".concat(e.sourceMapIndex),u=s.get(d);u||(u={...e.extra,from:e.from,on:n,map:{}},s.set(d,u),l.has(a)||l.set(a,d),o.push(u)),u.map[e.outcome]=e.to}),a.set("edges",a.createNode(o)),Object.entries(null!=(r=e.extra)?r:{})))a.has(t)||a.set(t,a.createNode(n));let d=a.get("nodes");return e.nodes.forEach((e,t)=>{let r=(0,u.oP)(d)?d.items[t]:void 0;if((0,u.jh)(r)){var n;for(let[t,o]of Object.entries(null!=(n=e.extra)?n:{}))r.has(t)||r.set(t,a.createNode(o))}}),(0,m.ys)(a)}function O(e,t){var r,n;let a=[],o=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return a.push({message:e,source:"local",...t})};y.test(e.graphId)||o("그래프 id 는 영문 소문자\xb7숫자\xb7- 만 쓸 수 있습니다"),k.includes(e.graphId)&&o("\xab".concat(e.graphId,"\xbb 는 예약된 그래프 id 입니다")),0===e.nodes.length&&o("노드가 하나도 없습니다");let s=new Map;for(let t of e.nodes)s.set(t.id,(null!=(r=s.get(t.id))?r:0)+1);for(let r of e.nodes)(!r.id.trim()||/\s/.test(r.id))&&o("노드 id 는 비우거나 공백을 넣을 수 없습니다",{nodeId:r.id}),(null!=(n=s.get(r.id))?n:0)>1&&o("노드 id \xab".concat(r.id,"\xbb 가 겹칩니다"),{nodeId:r.id}),t&&!t.includes(r.kind)&&o("팔레트에 없는 kind 입니다: ".concat(r.kind),{nodeId:r.id}),r.recipe.trim()||o("recipe 가 비었습니다",{nodeId:r.id}),(!Number.isInteger(r.maxVisits)||r.maxVisits<1)&&o("max_visits 는 1 이상의 정수여야 합니다",{nodeId:r.id});let l=new Set(e.nodes.map(e=>e.id));for(let t of(e.edges.forEach((e,t)=>{l.has(e.from)||o("간선 출발 \xab".concat(e.from,"\xbb 은 없는 노드입니다"),{edgeIndex:t}),l.has(e.to)||o("간선 도착 \xab".concat(e.to,"\xbb 은 없는 노드입니다"),{edgeIndex:t,...l.has(e.from)?{nodeId:e.from}:{}})}),l)){let r=e.edges.filter(e=>e.from===t),n=r.filter(e=>!e.outcome);n.length>1&&o("조건 없는 간선은 노드마다 하나만 둘 수 있습니다 — 결과 이름을 붙이세요",{nodeId:t}),n.length>0&&n.length<r.length&&o("조건 없는 간선과 결과 간선을 섞을 수 없습니다",{nodeId:t});let a=r.filter(e=>e.outcome).map(e=>e.outcome);new Set(a).size<a.length&&o("같은 결과 이름의 간선이 둘 이상입니다",{nodeId:t})}return e.nodes.length>0&&(e.entry&&l.has(e.entry)||o("시작 노드를 정하세요"),0===z(e).length&&o("끝 노드가 없습니다 — 노드를 골라 \xab끝 노드\xbb 로 표시하세요")),{ok:0===a.length,issues:a}}function D(e,t){let r={};try{var n;r=null!=(n=(0,u.parse)(e))?n:{}}catch(e){}return t.errors.map(e=>{var t,n,a,o,s,l;let i=/\/nodes\/(\d+)/.exec(null!=(s=e.path)?s:""),d=/\/edges\/(\d+)/.exec(null!=(l=e.path)?l:""),u=i?null==(n=r.nodes)||null==(t=n[Number(i[1])])?void 0:t.node_id:d?null==(o=r.edges)||null==(a=o[Number(d[1])])?void 0:a.from:void 0;return{message:e.message,source:"server",..."string"==typeof u?{nodeId:u}:{}}})}function V(e){var t,r;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,...L(e,["node_id","kind","recipe","max_visits"])}]:[]),o=(Array.isArray(n.edges)?n.edges:[]).flatMap((e,t)=>e&&"string"==typeof e.from?"string"==typeof e.to?[{from:e.from,to:e.to,outcome:"",...L(e,["from","to"])}]:e.map&&"object"==typeof e.map?Object.entries(e.map).filter(e=>"string"==typeof e[1]).map(r=>{let[n,a]=r;return{from:e.from,to:a,outcome:n,sourceMapIndex:t,...L(e,["from","map",...e.on===N?["on"]:[]])}}):[]:[]),s="string"==typeof n.entry_node?n.entry_node:null!=(r=null==(t=a[0])?void 0:t.id)?r:null;F(a,o,s,"horizontal");let l=new Set(a.map(e=>e.id)),i=(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:s,terminals:i,nodes:a,edges:o,...L(n,["graph_id","entry_node","terminal_nodes","nodes","edges"])}}let P={width:180,height:72};function G(e){return"fail"===e?"실패 시":e}function F(e,t,r,n,a){let o=(0,b.Fq)(e.map(e=>({id:e.id,...P})),t,{entry:r,flow:n,rename:G,...void 0!==a?{lineLength:a}:{}});for(let t of e){let e=o.get(t.id);e&&(t.x=e.x,t.y=e.y)}}function T(e,t,r){let n=e.nodes.map(e=>({...e}));return F(n,e.edges,e.entry,t,r),{...e,nodes:n}}function L(e,t){let r=Object.fromEntries(Object.entries(e).filter(e=>{let[r]=e;return!t.includes(r)}));return Object.keys(r).length>0?{extra:r}:{}}function B(e){var t;let r=[],n=new Map;for(let t of e.edges){if(!t.outcome){r.push({from:t.from,to:t.to});continue}let e=n.get(t.from);if(e)e[t.outcome]=t.to;else{let e={[t.outcome]:t.to};n.set(t.from,e),r.push({from:t.from,on:N,map:e})}}return{id:e.graphId||"canvas",source:"mine",editable:!0,entry_node:null!=(t=e.entry)?t:"",terminal_nodes:e.terminals,nodes:e.nodes.map(e=>{let t=K(e);return{node_id:e.id,kind:e.kind,recipe:e.recipe,max_visits:e.maxVisits,...null!==t?{group:t}:{}}}),edges:r}}function K(e){var t;return("string"==typeof(null==(t=e.extra)?void 0:t.group)?e.extra.group.trim():"")||null}async function U(e,t,r,n){let a=await e.putRunGraphAccess(t,r,n),o=await e.getRunGraphAccess(t);if(!o.grants.some(e=>e.recipient===a.recipient&&e.permission===n))throw Error("권한 적용을 확인할 수 없습니다");return o}function Y(e){return{ok:!1,issues:[{source:"server",message:e}]}}async function Z(e,t,r,n,a){try{let o=a&&Object.keys(a).length?a:void 0,s="create"===n?await e.createRunGraph(t,r,o):await e.putRunGraphYaml(t,r,o);return{ok:!0,id:t,created:"create"===n,..."number"==typeof s.version?{version:s.version}:{}}}catch(a){var o,s;if(!(a instanceof p.Iu))return Y("저장 실패: ".concat(a instanceof Error?a.message:String(a)));let e=null!=(o=a.body)?o:{};if(Array.isArray(e.errors)&&e.errors.length>0)return{ok:!1,issues:D(r,{errors:e.errors})};if("create"===n&&(404===a.status||405===a.status))return Y("새 그래프 저장(POST /v1/graphs)을 이 Daemon 이 아직 지원하지 않습니다 — 서버 업데이트 후 다시 저장하세요");if(409===a.status)return Y("\xab".concat(t,"\xbb 는 이미 있는 그래프 id 입니다 — 다른 id 를 쓰세요"));if("reserved-id"===e.error)return Y("\xab".concat(t,"\xbb 는 예약된 id 라 쓸 수 없습니다 — 다른 id 를 쓰세요"));if("graph-id-mismatch"===e.error)return Y("YAML 의 graph_id 가 저장할 id 와 다릅니다");if(403===a.status)return Y("\xab".concat(t,"\xbb 는 기본 제공 그래프라 덮어쓸 수 없습니다 — 다른 id 를 쓰세요"));if("update"===n&&404===a.status)return Y("\xab".concat(t,"\xbb 가 서버에 없습니다 — 새 그래프로 저장하세요"));return Y(null!=(s=e.reason)?s:e.error?"저장 실패: ".concat(e.error," (").concat(a.status,")"):"저장 실패 (".concat(a.status,")"))}}var W=r(87939),q=r(25675);let Q="application/x-elanous-graph-kind",J={agent:"#3b82f6",gate:"#f59e0b",git:"#10b981",judge:"#a855f7",observe:"#06b6d4",hitl:"#f43f5e",subgraph:"#8b5cf6"},X={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"}},H={pending:{word:"대기",tint:"var(--border, #94a3b8)"},running:{word:"도는 중",tint:"#f59e0b"},passed:{word:"통과",tint:"var(--chart-2, #16a34a)"},failed:{word:"실패",tint:"var(--destructive, #ef4444)"}},$={running:"running",done:"passed",failed:"failed",skipped:"pending",awaiting_approval:"running"},ee={canvas:function(e){var t;let{data:r,selected:a}=e,o="vertical"===r.flow,s=r.runStatus?X[r.runStatus]:void 0,l=r.unit?H[r.unit.state]:void 0;return(0,n.jsxs)("div",{"data-testid":"canvas-node-".concat(r.id),"data-run-status":r.runStatus,role:r.unit?"button":void 0,tabIndex:r.unit?0:void 0,onClick:e=>{if(r.unit){var t;e.stopPropagation(),null==(t=r.openUnit)||t.call(r,r.unit.name)}},onKeyDown:e=>{if(r.unit&&("Enter"===e.key||" "===e.key)){var t;e.preventDefault(),null==(t=r.openUnit)||t.call(r,r.unit.name)}},className:"rounded-lg border bg-background px-3 py-2 shadow-sm ".concat(r.issueCount?"border-red-500":a?"border-primary":"border-border"," ").concat(r.unit?"cursor-pointer nodrag nopan":""),style:{width:P.width,borderLeft:"4px solid ".concat(l?l.tint:null!=(t=J[r.kind])?t:"#64748b"),...s?{boxShadow:"0 0 0 2px ".concat(s.ring)}:{}},children:[(0,n.jsx)(i.h7,{id:"in",type:"target",position:o?d.yX.Top:d.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:r.unit?"묶음 \xb7 눌러서 펼치기":r.kind}),r.entry&&(0,n.jsx)("span",{className:"rounded bg-emerald-500/15 px-1 text-emerald-500",children:"시작"}),r.terminal&&(0,n.jsx)("span",{className:"rounded bg-sky-500/15 px-1 text-sky-500",children:"끝"}),r.issueCount>0&&(0,n.jsxs)("span",{className:"rounded bg-red-500/15 px-1 text-red-500",children:["오류 ",r.issueCount]}),l&&(0,n.jsx)("span",{className:"rounded px-1 font-semibold",style:{color:l.tint},children:l.word}),s&&(0,n.jsx)("span",{className:"rounded px-1 font-semibold ".concat(s.chip),children:s.word})]}),r.unit?(0,n.jsxs)(n.Fragment,{children:["subgraph"===r.kind&&(0,v.Fi)(r.id)&&(0,n.jsx)("span",{className:"text-[10px] text-violet-400",children:"묶음 \xb7 눌러서 안쪽 그래프 열기"}),(0,n.jsxs)("div",{className:"max-w-[150px] truncate text-sm font-semibold text-foreground",title:r.unit.name,children:["▣ ",r.unit.name]})]}):r.label?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"max-w-[150px] truncate text-sm font-semibold text-foreground",title:r.label,children:r.label}),(0,n.jsx)("div",{className:"font-mono text-[10px] text-muted-foreground",children:r.id})]}):(0,n.jsx)("div",{className:"font-mono text-sm font-semibold text-foreground",children:r.id}),(0,n.jsx)("div",{className:"max-w-[150px] truncate text-[10px] text-muted-foreground",title:r.recipe,children:r.recipe}),(0,n.jsx)(i.h7,{id:"out",type:"source",position:o?d.yX.Bottom:d.yX.Right,className:"!h-3 !w-3"})]})},...q.r},et={"--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 er(e){var t,r,o;let{palette:s,client:l,initialGraph:d,initialSaved:u,nodeStatus:c,renderActions:p,onChange:m,onSaved:f,replace:x,highlight:g,wizardMode:y=!1,nodeLabels:k,wizardSteps:w,installedPacks:N,onKnowledgePackChange:R}=e,[M,F]=(0,a.useState)(()=>null!=d?d:S("")),[L,U]=(0,a.useState)({}),[Y,q]=(0,a.useState)(()=>u?JSON.stringify(null!=w?w:{}):null),[X,H]=(0,a.useState)(void 0),er=(null!=w?w:X)&&Object.fromEntries(Object.entries(null!=(t=null!=w?w:X)?t:{}).map(e=>{let[t,r]=e;return[t,void 0!==L[t]&&"knowledge-rag"===r.step?{...r,arg:L[t]}:r]})),[ea,eo]=(0,a.useState)(null),[es,el]=(0,a.useState)(null),[ei,ed]=(0,a.useState)(null),[eu,ec]=(0,a.useState)(null),[ep,em]=(0,a.useState)(null),[ef,ex]=(0,a.useState)(()=>u&&d?{id:d.graphId,yaml:A(d)}:null),[eg,eh]=(0,a.useState)(null),[eb,ev]=(0,a.useState)([]),[ey,ek]=(0,a.useState)(""),[ej,ew]=(0,a.useState)(null),eN=(0,a.useRef)(null),eS=(0,a.useRef)(null),[eC,eI]=(0,a.useState)("horizontal"),[eE,e_]=(0,a.useState)(void 0),eR=(0,a.useRef)(.85);eR.current=y?.6:.85,(0,a.useEffect)(()=>{let e=eS.current;if(!e||"undefined"==typeof ResizeObserver)return;let t=new ResizeObserver(e=>{var t;let[r]=e,n=null!=(t=null==r?void 0:r.contentRect.width)?t:1e3;eI(n<640?"vertical":"horizontal"),e_(n<640?void 0:100*Math.floor(n/eR.current/100))});return t.observe(e),()=>t.disconnect()},[]);let eM=(0,a.useRef)(!1),ez=(0,a.useRef)({flow:eC,lineLength:eE});ez.current={flow:eC,lineLength:eE};let eA=(0,a.useCallback)(e=>eM.current||e.nodes.length<2?e:T(e,ez.current.flow,ez.current.lineLength),[]),eO=(0,a.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;setTimeout(()=>{let t=eN.current,r=eS.current;t&&Promise.resolve(t.fitView({padding:.12,maxZoom:1.1,minZoom:eR.current,...e?{duration:e}:{}})).then(()=>{let e=t.getNodes();if(!r||0===e.length)return;let n=t.getNodesBounds(e),{zoom:a,x:o,y:s}=t.getViewport(),l=r.getBoundingClientRect(),i=n.width*a+48>l.width,d=n.height*a+48>l.height;(i||d)&&t.setViewport({zoom:a,x:i?24-n.x*a:o,y:d?24-n.y*a:s})})},80)},[]),eD=(0,a.useRef)("horizontal:undefined");(0,a.useEffect)(()=>{let e="".concat(eC,":").concat(eE);e===eD.current||eM.current||(eD.current=e,F(e=>eA(e)),eO())},[eC,eE,eA,eO]);let[eV,eP]=(0,a.useState)({}),[eG,eF]=(0,a.useState)(()=>new Set),[eT,eL]=(0,a.useState)(null),[eB,eK]=(0,a.useState)(!1),eU=(0,a.useMemo)(()=>(0,v.S0)(B(M)),[M]),eY=(0,a.useMemo)(()=>(0,v.F8)(B(M)),[M]),eZ=(0,a.useMemo)(()=>{let e=new Map;for(let r of M.nodes){var t;let n=eY.get(r.id);n&&e.set(n,[...null!=(t=e.get(n))?t:[],r.id])}return e},[M,eY]);(0,a.useEffect)(()=>{eF(e=>{let t=new Set([...e].filter(e=>eU.includes(e)));return t.size===e.size?e:t})},[eU]);let eW=(eG.size>0||null!==eT)&&eU.length>0,eq=(0,a.useMemo)(()=>{var e;return null!==eT&&eB?function(e,t){var r,n,a,o;let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,l={id:e.graphId,source:"mine",editable:!0,entry_node:null!=(o=e.entry)?o:"",terminal_nodes:e.terminals,nodes:e.nodes.map(e=>{var t;return{node_id:e.id,kind:e.kind,recipe:e.recipe,max_visits:e.maxVisits,..."string"==typeof(null==(t=e.extra)?void 0:t.group)?{group:e.extra.group}:{}}}),edges:e.edges.map(e=>e.outcome?{from:e.from,on:"outcome",map:{[e.outcome]:e.to}}:{from:e.from,to:e.to})},i=(0,v.S0)(l);if(0===i.length||!s&&!i.some(e=>t.has(e)))return e;let d=(0,v.F8)(l),u=s&&i.includes(s)?{...l,nodes:l.nodes.filter(e=>d.get(e.node_id)===s),edges:l.edges.flatMap(e=>{var t;if(d.get(e.from)!==s)return[];if(e.to)return d.get(e.to)===s?[e]:[];let r=Object.fromEntries(Object.entries(null!=(t=e.map)?t:{}).filter(e=>{let[,t]=e;return d.get(t)===s}));return Object.keys(r).length?[{from:e.from,on:e.on,map:r}]:[]})}:(0,v.ws)(l,t).graph,c=new Map(e.nodes.map(e=>[e.id,e])),p=u.nodes.map(t=>{let r=c.get(t.node_id);if(r)return r;let n=e.nodes.find(e=>d.get(e.id)===t.group);return{id:t.node_id,kind:t.kind,recipe:t.recipe,maxVisits:t.max_visits,x:n.x,y:n.y}}),m=u.edges.flatMap(e=>{var t;return e.to?[{from:e.from,to:e.to,outcome:""}]:Object.entries(null!=(t=e.map)?t:{}).map(t=>{let[r,n]=t;return{from:e.from,to:n,outcome:r}})}),f=new Set(p.map(e=>e.id)),x=s?e=>e:(0,v.ws)(l,t).resolve,g=x(null!=(n=e.entry)?n:""),h=f.has(g)?g:null!=(a=null==(r=p[0])?void 0:r.id)?a:null;return{...e,nodes:p,edges:m,entry:h,terminals:[...new Set(e.terminals.map(x))].filter(e=>f.has(e))}}(M,eG,eT):eW?T(0===(e=null!==eT?new Set([...eG].filter(e=>e!==eT)):eG).size?M:function(e,t){let r=new Map;for(let e of t.nodes){var n;let t=K(e);null!==t&&r.set(t,[...null!=(n=r.get(t))?n:[],e])}let a=new Map(t.nodes.map(e=>[e.id,e])),o=e.nodes.map(e=>{var t,n,o,s,l;let i=(0,v.Fi)(e.node_id)&&null!=(o=r.get(e.node_id.slice(v.EQ.length)))?o:[],d=i.length>0?i.reduce((e,t)=>e+t.x,0)/i.length:null!=(s=null==(t=a.get(e.node_id))?void 0:t.x)?s:0,u=i.length>0?i.reduce((e,t)=>e+t.y,0)/i.length:null!=(l=null==(n=a.get(e.node_id))?void 0:n.y)?l:0;return{id:e.node_id,kind:e.kind,recipe:e.recipe,maxVisits:e.max_visits,x:d,y:u}}),s=e.edges.flatMap(e=>{var t;return"map"in e&&e.map?Object.entries(e.map).map(t=>{let[r,n]=t;return{from:e.from,to:n,outcome:r}}):[{from:e.from,to:null!=(t=e.to)?t:"",outcome:""}]});return{graphId:t.graphId,entry:e.entry_node||null,terminals:e.terminal_nodes,nodes:o,edges:s}}((0,v.ws)(B(M),e).graph,M),eC,eE):M},[M,eG,eT,eB,eW,eC,eE]),eQ=(0,a.useCallback)(e=>{eF(t=>new Set([...t,e])),eL(t=>t===e?null:t),eK(!0)},[]),eJ=(0,a.useCallback)(e=>{eL(e),setTimeout(()=>{let t=eN.current,r=null==t?void 0:t.getNodes().find(t=>{var r;return"groupBox"===t.type&&(null==(r=t.data)?void 0:r.group)===e});t&&r&&t.fitView({nodes:[{id:r.id}],duration:600,maxZoom:1.4,padding:.2})},80)},[]),eX=(0,a.useCallback)(()=>{eF(e=>e.size===eU.length?new Set:new Set(eU)),eL(null),eK(!1)},[eU]),eH=(0,a.useCallback)(e=>(0,v.Oc)(e.map(e=>{let t=null==c?void 0:c[e];return void 0!==t?$[t]:"pending"})),[c]);(0,a.useEffect)(()=>{null===eT&&eO(300)},[eG,eT,eO]);let e$=(0,a.useRef)(null);(0,a.useEffect)(()=>{var e,t;x&&e$.current!==x.rev&&(e$.current=x.rev,F(eA(x.graph)),U({}),H(void 0),eo(null),ec(null),ed(null),"vertical"===eC&&(null==(t=eS.current)||null==(e=t.scrollIntoView)||e.call(t,{block:"start",behavior:"smooth"})),eO(300))},[x]);let e0=(0,a.useMemo)(()=>{var e;return new Set(null!=(e=null==g?void 0:g.nodes)?e:[])},[g]),e1=(0,a.useMemo)(()=>{var e;return new Set(null!=(e=null==g?void 0:g.edges)?e:[])},[g]),e5=(0,a.useMemo)(()=>s.map(e=>e.kind),[s]),e2=(0,a.useMemo)(()=>A(M),[M]),e4=(0,a.useMemo)(()=>O(M,e5),[M,e5]),e3=(null==eu?void 0:eu.yaml)===e2?eu:null,e8=(null==e3?void 0:e3.server)?e3.issues:[],e6=[...e4.issues,...e8],e9={graphId:M.graphId,yaml:e2,graph:M,valid:e4.ok&&0===e8.length,saved:(null==ef?void 0:ef.id)===M.graphId&&ef.yaml===e2&&(null===Y||Y===JSON.stringify(null!=er?er:{}))},e7=(0,a.useRef)(e9);e7.current=e9,(0,a.useEffect)(()=>{null==m||m(e7.current)},[m,M,e2,e9.valid,e9.saved]),(0,a.useEffect)(()=>{if(!l)return;let e=!0;return l.getRunGraphs().then(t=>{e&&ev(t.graphs)}).catch(()=>{}),()=>{e=!1}},[l,ef]);let te=(0,a.useCallback)(e=>{eW||F(t=>{try{let r=e(t);return ed(null),r}catch(e){return ed(e instanceof Error?e.message:String(e)),t}})},[eW]),tt=(0,a.useCallback)(()=>eO(200),[eO]);function tr(e,t){if(eW)return;let r=null;te(n=>{let a=C(n,{kind:e,flow:eC,...null!=t?t:{}});return r=a.id,a.graph}),r&&eo({type:"node",id:r}),t||tt()}let tn=(0,a.useMemo)(()=>{var e;let t=new Map;for(let r of e6)r.nodeId&&t.set(r.nodeId,(null!=(e=t.get(r.nodeId))?e:0)+1);return t},[e6]),ta=(0,a.useMemo)(()=>new Set(z(eq)),[eq]),to=(0,a.useMemo)(()=>(0,b.gL)(eq.nodes.map(e=>{var t;return{id:e.id,x:e.x,y:e.y,...null!=(t=eV[e.id])?t:P}}),(0,b.IU)(eq.edges),{flow:eC,rename:G}),[eq.nodes,eq.edges,eV,eC]),ts=(0,b.d1)(eq.nodes.some(e=>e.id===es)?es:null,to),tl=eq.nodes.map(e=>{var t,r;return{id:e.id,type:"canvas",position:{x:e.x,y:e.y},selected:(null==ea?void 0:ea.type)==="node"&&ea.id===e.id,draggable:M.nodes.some(t=>t.id===e.id),zIndex:1,className:[c?(0,h.V)(c[e.id]):"",e0.has(e.id)?"graph-wizard-new":""].filter(Boolean).join(" ")||void 0,...ts&&!ts.nodes.has(e.id)?{style:{opacity:b.zZ.dimNode}}:{},data:{id:e.id,kind:e.kind,recipe:e.recipe,...(null==k?void 0:k[e.id])?{label:k[e.id]}:{},entry:eq.entry===e.id,terminal:ta.has(e.id),issueCount:null!=(t=tn.get(e.id))?t:0,flow:eC,...(0,v.Fi)(e.id)?{unit:{name:e.id.slice(v.EQ.length),state:eH(null!=(r=eZ.get(e.id.slice(v.EQ.length)))?r:[])},openUnit:eJ}:{},...(null==c?void 0:c[e.id])?{runStatus:c[e.id]}:{}}}}),ti=to.map(e=>{let t=e.indexes.some(e=>{let t=eq.edges[e];return void 0!==t&&e1.has("".concat(t.from,"->").concat(t.to,":").concat(t.outcome))}),r=(0,b.f_)(ts,e.id);return{id:e.id,source:e.from,target:e.to,sourceHandle:"out",targetHandle:"in",type:"tidy",data:{route:e},selected:(null==ea?void 0:ea.type)==="edge"&&e.indexes.some(e=>{let t=eq.edges[e],r=M.edges[ea.index];return!!(t&&r&&t.from===r.from&&t.to===r.to&&t.outcome===r.outcome)}),className:(null==ts?void 0:ts.edges.has(e.id))?"wiring-edge-flow":void 0,animated:r.animated||t||(null==c?void 0:c[e.from])==="done"&&(null==c?void 0:c[e.to])==="running",...ts?{style:r.style}:t?{style:{stroke:"#a855f7",strokeWidth:3}}:{}}}),td=(0,a.useMemo)(()=>(0,v.Vc)(eq.nodes.map(e=>{var t;return{id:e.id,position:{x:e.x,y:e.y},...null!=(t=eV[e.id])?t:P}}),eY),[eq,eV,eY]),tu=[...eB&&null!==eT?[]:td.map(e=>({id:e.id,type:"groupBox",position:{x:e.x,y:e.y},zIndex:0,selectable:!1,draggable:!1,focusable:!1,data:{group:e.group,state:eH(e.members),memberCount:e.members.length,stepCount:e.members.length,width:e.width,height:e.height,onCollapse:eQ}})),...tl];async function tc(){if(eh(null),!e4.ok||!l)return void ec({yaml:e2,issues:e4.issues,server:!1});em("validate");try{let e=await l.validateGraph("harness",e2);ec({yaml:e2,issues:e.ok&&0===e.errors.length?[]:D(e2,e),server:!0})}catch(e){ec({yaml:e2,issues:[{source:"server",message:"검증 요청 실패: ".concat(e instanceof Error?e.message:String(e))}],server:!0})}finally{em(null)}}async function tp(){if(!l||!e4.ok)return void tc();em("save"),eh(null);let e=M.graphId;try{let t=await Z(l,e,e2,(null==ef?void 0:ef.id)===e?"update":"create",er);t.ok?(ex({id:e,yaml:e2,...void 0!==t.version?{version:t.version}:{}}),q(JSON.stringify(null!=er?er:{})),eh("\xab".concat(e,"\xbb 를 ").concat(t.created?"새로 ":"","저장했습니다").concat(void 0!==t.version?" (v".concat(t.version,")"):"")),null==f||f(e)):ec({yaml:e2,issues:t.issues,server:!0,from:"save"})}finally{em(null)}}async function tm(e){if(l&&e){em("load");try{var t;let r=await l.getRunGraphYaml(e),n=V(r.yaml);eM.current=!1,F(eA(n)),U({}),H(r.steps),q(JSON.stringify(null!=(t=r.steps)?t:{})),eo(null),ec(null),ex("mine"===r.source?{id:r.id,yaml:A(n)}:null),eh("mine"===r.source?"\xab".concat(e,"\xbb 를 불러왔습니다"):"\xab".concat(e,"\xbb 는 기본 제공 그래프입니다 — id 를 바꿔 내 그래프로 저장하세요")),tt()}catch(e){ed("불러오기 실패: ".concat(e instanceof Error?e.message:String(e)))}finally{em(null)}}}let tf=(null==ea?void 0:ea.type)==="node"&&null!=(r=M.nodes.find(e=>e.id===ea.id))?r:null,tx=(null==ea?void 0:ea.type)==="edge"&&null!=(o=M.edges[ea.index])?o:null,tg=e6.filter(e=>!e.nodeId),th="validate"===ep?null:e3,tb=(0,a.useRef)(null);return(0,a.useEffect)(()=>{var e;M.graphId||null==(e=tb.current)||e.focus()},[M.graphId]),(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col","data-graph-id":M.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:tb,"aria-label":"그래프 id",value:M.graphId,disabled:eW,spellCheck:!1,placeholder:"예: my-graph",autoCapitalize:"off",autoCorrect:"off",onChange:e=>te(t=>{var r;return r=e.target.value,{...t,graphId:r.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:()=>{F(S("")),H(void 0),U({}),q(null),eo(null),ec(null),ex(null),eh(null),ed(null)},className:"rounded border border-border px-2 py-1",children:"새 그래프"}),l&&(0,n.jsxs)("select",{"aria-label":"그래프 불러오기",value:"",disabled:null!==ep,onChange:e=>{tm(e.target.value)},className:"max-w-[10rem] rounded border border-border bg-background px-1 py-1",children:[(0,n.jsx)("option",{value:"",children:"불러오기…"}),eb.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:e9.saved?"저장됨".concat((null==ef?void 0:ef.version)!==void 0?" \xb7 v".concat(ef.version):""):(null==ef?void 0:ef.id)===M.graphId?"저장 안 된 변경":"아직 저장 안 함"}),(0,n.jsxs)("div",{className:"ml-auto flex flex-wrap items-center gap-2",children:[eU.length>0&&(0,n.jsx)("button",{type:"button","data-testid":"toggle-units",onClick:eX,title:"모든 묶음을 한 그래프에 펼치거나(통합 보기), 묶음마다 노드 하나로 절습니다(접은 보기)",className:"rounded border border-border px-2 py-1",children:eG.size===eU.length?"묶음 펼치기 (통합 보기)":"묶음 접기"}),(0,n.jsx)("button",{type:"button",onClick:()=>{tc()},disabled:null!==ep,title:l?"저장하지 않고 서버의 그래프 로더로 검증합니다":"Daemon 연결이 없어 로컬 검사만 합니다",className:"rounded border border-border px-3 py-1 disabled:opacity-50",children:"validate"===ep?"검증 중…":"검증"}),(0,n.jsx)("button",{type:"button",onClick:()=>{tp()},disabled:!l||null!==ep||e9.saved,className:"rounded bg-primary px-3 py-1 text-primary-foreground disabled:opacity-50",children:"save"===ep?"저장 중…":"저장"}),null==p?void 0:p(e9)]})]}),th&&(0===th.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:["✓ 검증 통과",th.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"===th.from?"저장 실패":"검증 실패"," ",th.issues.length,"건"]}),(0,n.jsx)("ul",{className:"mt-0.5 list-disc pl-5 text-xs",children:th.issues.map((e,t)=>(0,n.jsxs)("li",{children:[e.nodeId?(0,n.jsxs)("span",{className:"font-mono",children:[e.nodeId,": "]}):null,e.message]},t))})]})),(ei||eg)&&(0,n.jsx)("p",{role:ei?"alert":"status",className:"border-b border-border px-3 py-1 text-xs ".concat(ei?"text-red-500":"text-emerald-500"),children:null!=ei?ei:eg}),eU.length>0&&(0,n.jsxs)("div",{"data-testid":"unit-view-bar",className:"flex flex-wrap items-center gap-2 border-b border-border px-3 py-1.5 text-xs",children:[null!==eT?(0,n.jsxs)("nav",{"aria-label":"묶음 위치","data-testid":"unit-breadcrumb",className:"flex items-center gap-1",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{eF(new Set(eU)),eL(null)},title:"모든 묶음을 접어 돌아갑니다",className:"font-mono text-muted-foreground hover:underline",children:M.graphId||"그래프"}),(0,n.jsx)("span",{"aria-hidden":!0,className:"text-muted-foreground",children:"›"}),(0,n.jsxs)("span",{className:"font-mono font-semibold text-foreground",children:["▣ ",eT]})]}):(0,n.jsx)("span",{className:"text-muted-foreground",children:eW?"접은 보기 — 묶음을 눌러 안쪽 그래프를 여세요 (편집은 통합 보기에서)":"통합 보기 — 모든 묶음이 한 그래프에 펼쳐 있습니다"}),(0,n.jsxs)("span",{className:"ml-auto text-muted-foreground",children:["묶음 ",eU.length," \xb7 접힘 ",eG.size]})]}),(0,n.jsx)("datalist",{id:"graph-canvas-outcomes",children:j.map(e=>(0,n.jsx)("option",{value:e},e))}),eU.length>0&&(0,n.jsxs)("nav",{"aria-label":"유닛 보기",className:"sr-only",children:[(0,n.jsx)("button",{type:"button","aria-label":"부모 그래프",onClick:()=>{eL(null),eo(null),tt()},children:M.graphId||"부모"}),eT&&(0,n.jsxs)("span",{children:["› ",(0,n.jsx)("span",{children:eT})]}),(0,n.jsx)("button",{type:"button","data-testid":"editor-toggle-units",onClick:eX,children:eG.size===eU.length?"묶음 펼치기 (통합 보기)":"묶음 접기"})]}),(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col ".concat(y?"":"min-[900px]:flex-row"),children:[(0,n.jsxs)("aside",{"aria-label":"노드 팔레트",className:y?"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(y?"shrink-0":"mb-1"),children:y?"눌러서 추가":(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:y?"flex min-w-0 gap-1 overflow-x-auto":"flex gap-1 overflow-x-auto min-[900px]:flex-col min-[900px]:overflow-visible",children:s.map(e=>{var t,r;return(0,n.jsx)("li",{className:"shrink-0",children:(0,n.jsxs)("button",{type:"button",draggable:!eW,disabled:eW,title:e.description||e.kind,"aria-label":"".concat(e.kind," 노드 추가"),onDragStart:t=>{t.dataTransfer.setData(Q,e.kind),t.dataTransfer.effectAllowed="copy"},onClick:()=>tr(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!=(t=J[e.kind])?t:"#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!=(r=e.plugin)?r:"core",":").concat(e.kind))})})]}),(0,n.jsxs)("div",{className:y?"flex min-h-0 flex-1 flex-col min-[900px]:flex-row":"contents",children:[(0,n.jsxs)("section",{ref:eS,"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(Q)&&(e.preventDefault(),e.dataTransfer.dropEffect="copy")},onDrop:e=>{var t,r;let n=e.dataTransfer.getData(Q);if(eW||!n||!e5.includes(n))return;e.preventDefault();let a=null!=(r=null==(t=eN.current)?void 0:t.screenToFlowPosition({x:e.clientX,y:e.clientY}))?r:{x:40,y:40};tr(n,{x:a.x-85,y:a.y-30})},children:[0===M.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)(i.Gc,{nodes:tu,edges:ti,nodeTypes:ee,edgeTypes:W.T,onInit:e=>{eN.current=e},nodesDraggable:!eW,nodesConnectable:!eW,onNodesChange:function(e){for(let t of e){if("dimensions"===t.type&&t.dimensions){let{id:e,dimensions:r}=t;eP(t=>{var n,a;return(null==(n=t[e])?void 0:n.width)===r.width&&(null==(a=t[e])?void 0:a.height)===r.height?t:{...t,[e]:r}})}if("position"===t.type&&t.position&&M.nodes.some(e=>e.id===t.id)){let{id:e,position:r}=t;t.dragging&&(eM.current=!0),eW||te(t=>(function(e,t,r,n){return{...e,nodes:e.nodes.map(e=>e.id===t?{...e,x:r,y:n}:e)}})(t,e,r.x,r.y))}}},onConnect:e=>{!eW&&e.source&&e.target&&M.nodes.some(t=>t.id===e.source)&&M.nodes.some(t=>t.id===e.target)&&te(t=>I(t,e.source,e.target,E(t,e.source)))},onNodeMouseEnter:(e,t)=>el(t.id),onNodeMouseLeave:()=>el(null),onNodeClick:(e,t)=>{if("groupBox"!==t.type){if((0,v.Fi)(t.id)&&!M.nodes.some(e=>e.id===t.id))return void eJ(t.id.slice(v.EQ.length));eW||eo({type:"node",id:t.id})}},onEdgeClick:(e,t)=>{if(eW)return;let r=eq.edges[Number(t.id.slice(1))],n=r?M.edges.findIndex(e=>e.from===r.from&&e.to===r.to&&e.outcome===r.outcome):-1;n>=0&&eo({type:"edge",index:n})},onPaneClick:()=>eo(null),deleteKeyCode:null,fitView:!0,fitViewOptions:{padding:.12,maxZoom:1.1,minZoom:y?.6:.85},minZoom:.3,maxZoom:1.5,className:"!bg-background",style:et,children:[(0,n.jsx)(i.VS,{}),(0,n.jsx)(i.H2,{showInteractive:!1,position:"bottom-left"})]})]}),!eW&&(!y||ea)&&(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:[tf?(0,n.jsx)(en,{graph:M,nodeId:tf.id,palette:s,issues:e6.filter(e=>e.nodeId===tf.id),linkTarget:ey,linkOutcome:ej,setLinkTarget:ek,setLinkOutcome:ew,onEdit:te,onRenamed:e=>eo({type:"node",id:e}),onRemoved:()=>eo(null),installedPacks:N,effectiveSteps:er,onKnowledgePackChange:e=>{U(t=>({...t,[tf.id]:e})),null==R||R(e)}},tf.id):tx&&(null==ea?void 0:ea.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:[tx.from," → ",tx.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:tx.outcome,placeholder:"예: pass \xb7 fail",onChange:e=>te(t=>{var r,n;return r=ea.index,n={outcome:e.target.value},{...t,edges:t.edges.map((e,t)=>{var a;if(t!==r)return e;let o=(null!=(a=n.outcome)?a:e.outcome).trim(),{extra:s,...l}={...e,...n,outcome:o};return s&&!!o==!!e.outcome?{...l,extra:s}:l})}}),className:"rounded border border-border bg-background px-2 py-1 font-mono text-foreground"})]}),(0,n.jsx)("button",{type:"button",onClick:()=>{te(e=>_(e,ea.index)),eo(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:["노드 ",M.nodes.length," \xb7 간선 ",M.edges.length,M.entry?" \xb7 시작 ".concat(M.entry):""]})]}),tg.length>0&&(0,n.jsx)("ul",{"aria-label":"그래프 오류",className:"mt-3 flex flex-col gap-1 border-t border-border pt-2",children:tg.map((e,t)=>(0,n.jsx)("li",{className:"text-red-500",children:e.message},t))}),(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:e2})]})]})]})]}),(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 en(e){var t,r,o,s,l,i,d;let{graph:u,nodeId:c,palette:p,issues:m,linkTarget:f,linkOutcome:x,setLinkTarget:g,setLinkOutcome:h,onEdit:b,onRenamed:v,onRemoved:y,installedPacks:k,effectiveSteps:j,onKnowledgePackChange:w}=e,N=u.nodes.find(e=>e.id===c),[S,C]=(0,a.useState)(N.id),[z,A]=(0,a.useState)(null),O=u.nodes.filter(e=>e.id!==c).map(e=>e.id),D=O.includes(f)?f:null!=(o=O[0])?o:"",V=null!=x?x:E(u,c),P=p.find(e=>e.kind===N.kind),G=u.edges.map((e,t)=>({edge:e,index:t})).filter(e=>{let{edge:t}=e;return t.from===c});function F(){let e=S.trim();if(e!==N.id)try{R(u,N.id,{id:e}),b(t=>R(t,N.id,{id:e})),A(null),v(e)}catch(e){A(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:S,spellCheck:!1,onChange:e=>C(e.target.value),onBlur:F,onKeyDown:e=>{"Enter"===e.key&&F()},className:"rounded border border-border bg-background px-2 py-1 font-mono text-foreground"})]}),z&&(0,n.jsx)("p",{role:"alert",className:"text-red-500",children:z}),(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(t=>R(t,c,{kind:e.target.value})),className:"rounded border border-border bg-background px-1 py-1 text-foreground",children:[!P&&(0,n.jsxs)("option",{value:N.kind,children:[N.kind," (팔레트에 없음)"]}),p.map(e=>{var t;return(0,n.jsxs)("option",{value:e.kind,children:[e.kind,e.plugin?" \xb7 ".concat(e.plugin):""]},"".concat(null!=(t=e.plugin)?t:"core",":").concat(e.kind))})]})]}),(null==P?void 0:P.description)&&(0,n.jsx)("p",{className:"text-[11px] text-muted-foreground",children:P.description}),k&&(null==j||null==(t=j[c])?void 0:t.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!=(s=null==(r=j[c])?void 0:r.arg)?s:"",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(t=>R(t,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(t=>R(t,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(t=>M(t,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,t){var r,n;let a=e.nodes.filter(e=>e.id!==t);return{...e,entry:e.entry===t?null!=(n=null==(r=a[0])?void 0:r.id)?n:null:e.entry,terminals:e.terminals.filter(e=>e!==t),nodes:a,edges:e.edges.filter(e=>e.from!==t&&e.to!==t)}})(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!=(d=null==(i=u.edges.find(e=>e.from===c&&"fail"===e.outcome))?void 0:i.to)?d:null)&&void 0!==l?l:"",onChange:e=>b(t=>(function(e,t,r){if(r===t)throw Error("실패 경로를 자기 자신으로 둘 수 없습니다");let n=e.edges.filter(e=>e.from!==t||"fail"!==e.outcome).map(e=>null===r||e.from!==t||e.outcome?e:{...e,outcome:"ok"});return{...e,edges:null===r?n:[...n,{from:t,to:r,outcome:"fail"}]}})(t,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:"선택 안 함"}),O.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===O.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:D,onChange:e=>g(e.target.value),className:"rounded border border-border bg-background px-1 py-1 font-mono text-foreground",children:O.map(e=>(0,n.jsx)("option",{value:e,children:e},e))}),(0,n.jsx)("input",{"aria-label":"연결 결과",list:"graph-canvas-outcomes",value:V,placeholder:"결과(비우면 조건 없음)",onChange:e=>h(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=>I(e,c,D,V)),h(null)},className:"rounded border border-border px-2 py-1",children:"연결"})]}),G.length>0&&(0,n.jsx)("ul",{className:"flex flex-col gap-1",children:G.map(e=>{let{edge:t,index:r}=e;return(0,n.jsxs)("li",{className:"flex items-center gap-2 font-mono",children:[(0,n.jsxs)("span",{children:["→ ",t.to,t.outcome?" (".concat(t.outcome,")"):""]}),(0,n.jsx)("button",{type:"button","aria-label":"".concat(t.to," 간선 삭제"),onClick:()=>b(e=>_(e,r)),className:"rounded px-1 text-red-500 hover:bg-red-500/10",children:"삭제"})]},r)})})]}),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,t)=>(0,n.jsx)("li",{className:"text-red-500",children:e.message},t))})]})}let ea=e=>null!==e&&"object"==typeof e&&!Array.isArray(e);async function eo(e,t){try{let r=await e.startRunGraphRun(t);return"string"==typeof(null==r?void 0:r.runId)?{kind:"started",runId:r.runId}:{kind:"error",status:0,message:"런 id 가 없다"}}catch(r){if(!(r instanceof p.Iu))return{kind:"error",status:0,message:"데몬에 닿지 못했다"};let e=r.body;if(403===r.status)return{kind:"forbidden"};if(409===r.status&&ea(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===r.status&&ea(e)&&Array.isArray(e.issues))return{kind:"not-runnable",issues:e.issues.filter(e=>"string"==typeof e)};let t=ea(e)&&"string"==typeof e.reason?e.reason:ea(e)&&"string"==typeof e.error?e.error:"";return{kind:"error",status:r.status,message:t}}}async function es(e,t,r){try{var n;return n=await e.getRunGraphRun(t,r),ea(n)&&"string"==typeof n.runId&&"string"==typeof n.status&&Array.isArray(n.path)&&Array.isArray(n.nodes)?n:null}catch(e){return null}}let el=new Set(["done","failed","budget-exceeded","awaiting-approval"]);function ei(e){return Object.fromEntries(Object.entries(function(e){let t={};for(let r of e.nodes){let e=r.startedAt&&r.endedAt?Math.max(0,Date.parse(r.endedAt)-Date.parse(r.startedAt)):void 0,n=r.ok?"done":"failed";t[r.nodeId]={status:n,...void 0!==e&&Number.isFinite(e)?{durationMs:e}:{},...r.error?{error:r.error}:{}}}return e.currentNode&&!el.has(e.status)&&(t[e.currentNode.nodeId]={status:"running"}),"awaiting-approval"===e.status&&e.currentNode&&(t[e.currentNode.nodeId]={status:"awaiting_approval"}),t}(e)).map(e=>{let[t,r]=e;return[t,r.status]}))}function ed(e){let{context:t,client:r,onStatus:o}=e,[s,l]=(0,a.useState)({kind:"idle"}),i=(0,a.useRef)(t.graphId),d=t.graphId?t.valid?t.saved?null:"저장한 뒤 실행할 수 있습니다 — 서버는 저장된 판을 돌립니다":"검증을 통과해야 실행할 수 있습니다":"그래프 id 가 없습니다";(0,a.useEffect)(()=>{i.current!==t.graphId&&(i.current=t.graphId,l({kind:"idle"}),o(void 0))},[t.graphId,o]);let u="running"===s.kind?s.runId:null,c="running"===s.kind&&null!==s.run&&el.has(s.run.status);(0,a.useEffect)(()=>{if(!u||c)return;let e=!1,n="running"===s.kind?s:null,a=setTimeout(async()=>{let a=await es(r,t.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&&!el.has(a.status)){l({kind:"refused",lines:["데모 실행이 ".concat(Math.round(3),"분 넘게 끝나지 않습니다 — 원장이 \xab도는 중\xbb으로 남았을 수 있습니다(데몬 재시작 등)")]}),o(ei(a));return}l({...n,run:a,misses:0,tick:n.tick+1}),o(ei(a))}},1e3);return()=>{e=!0,clearTimeout(a)}},[u,c,s,r,t.graphId,o]);let p=async()=>{l({kind:"starting"}),o(void 0);let e=await eo(r,t.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"===s.kind&&s.version&&r.approveRunGraph){l({...s,approving:!0});try{await r.approveRunGraph(t.graphId,s.version),l({kind:"idle"})}catch(e){l({...s,approving:!1,error:"승인 실패".concat(e instanceof Error?" — ".concat(e.message):"")})}}},f="starting"===s.kind||"running"===s.kind&&!c,x="running"===s.kind?s.run:null,g=(null==x?void 0:x.status)==="done"?"text-emerald-700 dark:text-emerald-400":x&&el.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!==d,title:null!=d?d:"저장된 그래프를 데모 레시피로 실행합니다",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:"▶ 데모 실행"}),d&&"idle"===s.kind&&(0,n.jsx)("span",{className:"text-xs text-muted-foreground",children:d}),"starting"===s.kind&&(0,n.jsx)("span",{role:"status",className:"text-xs text-sky-700 dark:text-sky-400",children:"데모 실행 \xb7 시작하는 중"}),"running"===s.kind&&(0,n.jsx)("span",{role:"status","aria-live":"polite",className:"text-xs font-semibold ".concat(g),children:x?function(e){let t=e.path.length,r=t-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(t).concat(r?"(다시 지남 ".concat(r,")"):"");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 t=[...e.nodes].reverse().find(e=>!e.ok);return"데모 실행 \xb7 실패".concat(t?" ".concat(t.nodeId):"").concat(e.error?" — ".concat(e.error):(null==t?void 0:t.error)?" — ".concat(t.error):"")}}}(x):"데모 실행 \xb7 시작하는 중"}),"refused"===s.kind&&(0,n.jsx)("span",{role:"alert",className:"text-xs font-semibold text-red-700 dark:text-red-400",children:s.lines.join(" \xb7 ")}),"peer-edit"===s.kind&&(0,n.jsxs)("span",{role:"alert",className:"text-xs font-semibold text-red-700 dark:text-red-400",children:[s.message,s.editedBy?" (".concat(s.editedBy,")"):"",s.error?" \xb7 ".concat(s.error):""]}),"peer-edit"===s.kind&&s.version&&r.approveRunGraph&&(0,n.jsx)("button",{type:"button",onClick:()=>{m()},disabled:!0===s.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 eu=r(80938);let ec=["매일 아침 AI 뉴스 요약해서 텔레그램으로","PR 리뷰하고 문제 없으면 머지","조사해서 표로 정리하고 내가 승인하면 게시"];function ep(e){if("string"==typeof e)return e;if(e&&"object"==typeof e){let t="string"==typeof e.nodeId?e.nodeId:"string"==typeof e.path?e.path:"",r="string"==typeof e.message?e.message:JSON.stringify(e);return t?"".concat(t,": ").concat(r):r}return String(e)}async function em(e,t,r){if(!t.prompt.trim())return{kind:"empty"};try{let n=await e.graphWizard(t,r?{signal:r}:void 0);return ef(n)}catch(e){if((null==r?void 0:r.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 ef(e.body);let t=null!=(n=e.body)?n:{};if(400===e.status&&(!t.reason||"prompt required"===t.reason))return{kind:"empty"};if(400===e.status)return{kind:"error",message:"요청을 받지 않았습니다 — ".concat(t.reason)};return{kind:"error",message:null!=(a=t.reason)?a:t.error?"".concat(t.error," (").concat(e.status,")"):"요청 실패 (".concat(e.status,")")}}return{kind:"error",message:e instanceof Error?e.message:String(e)}}}function ef(e){var t;let r,n=(null!=(t=e.issues)?t:[]).map(ep),a="string"==typeof e.yaml?e.yaml:"",o=null;if(a.trim()){try{o=V(a)}catch(e){r=e instanceof Error?e.message:String(e)}o&&0===o.nodes.length&&(o=null,r="초안에 노드가 없습니다")}else r="응답에 YAML 이 없습니다";return{kind:"draft",ok:!0===e.ok&&0===n.length,yaml:a,graph:o,issues:n,...r?{parseError:r}:{},...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 ex(e){return e.baseReason?e.base?"기반: ".concat(e.base," — 이유 ").concat(e.baseReason):"기반 선택 이유: ".concat(e.baseReason):null}function eg(e){return"".concat(e.from,"->").concat(e.to,":").concat(e.outcome)}function eh(e){var t,r,o;let{client:s,current:l,laid:i,onApply:d,onRestore:u,initialPrompt:c,packId:p,className:m=""}=e,[f,x]=(0,a.useState)([]),[g,h]=(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 _=(0,a.useRef)(null);function R(e){let t=N.current++;return x(r=>[...r,{...e,id:t}]),t}async function M(e,t,r){let n=e.trim();if(b)return;if(!n)return void R({role:"assistant",text:"무엇을 만들지 한 줄로 적어 주세요.",tone:"warn"});let a=void 0!==t?t:l(),o=!a||0===a.graph.nodes.length,u=E.current.filter(e=>!e.undone&&(void 0===r||e.id<r)).map(e=>({role:e.role,text:e.text})),c=R({role:"user",text:n});h("");let m=new AbortController;v({startedAt:Date.now(),controller:m});try{var f,x,g,y;let e=await em(s,{...(y=o?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 R({role:"assistant",text:"취소했습니다 — 캔버스는 그대로입니다.",tone:"warn"});if("unsupported"===e.kind)return void R({role:"assistant",text:"이 Daemon 이 아직 그래프 마법사를 지원하지 않습니다 — 서버 업데이트 후 다시 시도하세요",tone:"error"});if("empty"===e.kind)return void R({role:"assistant",text:"무엇을 만들지 한 줄로 적어 주세요.",tone:"warn"});if("error"===e.kind)return void R({role:"assistant",text:"만들기 실패: ".concat(e.message),tone:"error"});let t=o?null:a.graph,r=i?i():_.current;if(e.graph){let n=function(e,t){if(!t||0===t.nodes.length)return!1;if(!e)return!0;let r=new Map(e.nodes.map(e=>[e.id,e]));return t.nodes.some(e=>{let t=r.get(e.id);return!t||t.x!==e.x||t.y!==e.y})}(r,t),a=function(e,t){var r,n,a;let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=null==(r=o.keepPositions)||r,l=new Map((null!=(n=null==e?void 0:e.nodes)?n:[]).map(e=>[e.id,e])),i=t.nodes.map(e=>{let t=s?l.get(e.id):void 0;return t?{...e,x:t.x,y:t.y}:e}),d=new Set((null!=(a=null==e?void 0:e.edges)?a:[]).map(eg));return{graph:{...t,nodes:i},added:{nodes:t.nodes.filter(e=>!l.has(e.id)).map(e=>e.id),edges:t.edges.filter(e=>!d.has(eg(e))).map(eg)}}}(t,e.graph,{keepPositions:n});d(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),_.current=a.graph}R({role:"assistant",text:null!=(g=e.summary)?g:o?"그래프 초안을 만들었습니다.":"그래프를 고쳤습니다.",tone:e.ok?"ok":e.graph?"warn":"error",status:function(e){let t=e.base?" \xb7 기반 템플릿 ".concat(e.base):"",r=void 0!==e.attempts?"(시도 ".concat(e.attempts,")"):"";return e.ok?"초안".concat(t," \xb7 검증 통과").concat(r):"초안".concat(t," \xb7 검증 실패 ").concat(e.issues.length,"건").concat(r)}(e),...ex(e)?{baseLine:ex(e)}:{},...e.issues.length?{issues:e.issues}:{},...e.parseError?{parseError:e.parseError}:{},...e.graph?{before:t,applied:!0,laidBefore:r,...e.steps?{steps:e.steps}:{}}:{},prompt:n,userId:c})}finally{v(null)}}function z(e){var t,r,n;let a=E.current.find(t=>t.id===e);if(!a||"assistant"!==a.role||!a.applied||a.undone)return;let o=[...E.current].reverse().find(t=>"assistant"===t.role&&t.applied&&!t.undone&&t.id<e);u(null!=(t=a.before)?t:null,o&&"assistant"===o.role?o.steps:void 0),_.current=null!=(r=a.laidBefore)?r:null;let s=null!=(n=a.userId)?n:e;x(e=>e.map(e=>e.id>=s?{...e,undone:!0}:e))}function O(){var e;h("검증 오류를 고쳐줘"),null==(e=C.current)||e.focus()}(0,eu.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,M(c))},[c]);let D=null!=(o=null==(t=[...f].reverse().find(e=>"assistant"===e.role))?void 0:t.text)?o:"",V=null==(r=[...f].reverse().find(e=>"assistant"===e.role&&e.applied&&!e.undone))?void 0:r.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&&D?(0,n.jsx)("span",{"data-testid":"wizard-collapsed-line",className:"min-w-0 truncate text-xs text-muted-foreground lg:hidden",children:D}):null,(0,n.jsx)("span",{className:"text-xs text-muted-foreground ".concat(j&&D?"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:ec.map(e=>(0,n.jsx)("button",{type:"button",onClick:()=>{M(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,t)=>(0,n.jsx)("li",{children:e},t))}),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:()=>z(e.id),disabled:null!==b,title:e.id===V?"이 답 전의 캔버스로":"이 답과 그 뒤의 답을 모두 되돌립니다",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 t;let r=E.current.find(t=>t.id===e);if(!r||"assistant"!==r.role||!r.prompt)return;let n=r.applied?r.before?{graph:r.before,yaml:A(r.before)}:null:void 0;z(e);let a=g.trim();M(a?"".concat(r.prompt,"\n추가 지시: ").concat(a):r.prompt,n,null!=(t=r.userId)?t: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:O,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(),M(g)},children:[(0,n.jsx)("textarea",{ref:C,"aria-label":"만들고 싶은 일",value:g,rows:2,placeholder:"예: 매일 아침 AI 뉴스 요약해서 텔레그램으로",onChange:e=>h(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),M(g))},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 eb(e){let{onStart:t}=e,[r,o]=(0,a.useState)(""),[s,l]=(0,a.useState)(null);function i(e){if(!e.trim())return void l("무엇을 만들지 한 줄로 적어 주세요.");l(null),t(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(),i(r)},children:[(0,n.jsx)("textarea",{"aria-label":"만들고 싶은 일",value:r,rows:2,onChange:e=>o(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),i(r))},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:"만들기"})]}),s&&(0,n.jsx)("p",{role:"status",className:"mt-1 text-xs text-amber-500",children:s}),(0,n.jsx)("div",{className:"mt-2 flex flex-wrap gap-1.5 text-xs",children:ec.map(e=>(0,n.jsx)("button",{type:"button",onClick:()=>i(e),className:"rounded-full border border-border px-2.5 py-1 hover:bg-muted",children:e},e))})]})}var ev=r(81975);function ey(e){let{groups:t,onAdd:r}=e;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("strong",{children:"노드 팔레트"}),(0,n.jsx)("div",{className:"flex flex-wrap gap-4",children:t.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(t=>r?(0,n.jsxs)("button",{type:"button",title:t.description,"data-graph":t.graph,"aria-label":"".concat(e.label," ").concat(t.kind," 추가"),onClick:()=>r(t),className:"rounded border border-border px-2 py-0.5",children:[t.kind," ",t.plugin&&(0,n.jsx)("small",{children:t.plugin})]},"".concat(t.graph,":").concat(t.kind)):(0,n.jsxs)("span",{title:t.description,"data-graph":t.graph,className:"rounded border border-border px-2 py-0.5",children:[t.kind," ",t.plugin&&(0,n.jsx)("small",{children:t.plugin})]},"".concat(t.graph,":").concat(t.kind)))}),e.fallback&&(0,n.jsx)("p",{role:"status",className:"mt-1 text-warning",children:"어휘 목록을 불러오지 못해 코어 팔레트를 표시합니다."})]},e.graph))})]})}function ek(e){let{groups:t,onAdd:r}=e,a=t.reduce((e,t)=>e+t.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)(ey,{groups:t,onAdd:r})})]}),(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)(ey,{groups:t,onAdd:r})})]})}let ej={shared:function(e){let{data:t}=e;return(0,n.jsxs)("div",{className:"rounded border border-border bg-background px-3 py-2 text-xs","data-graph":t.graph,children:[(0,n.jsx)(i.h7,{type:"target",position:d.yX.Left}),(0,n.jsxs)("span",{children:["workflow"===t.graph?"작업 노드":"실행 단계 노드"," \xb7 ",t.kind]}),(0,n.jsx)("div",{className:"font-mono",children:t.id}),(0,n.jsx)(i.h7,{type:"source",position:d.yX.Right})]})}};function ew(e){let{groups:t,client:r}=e,[o,s]=(0,a.useState)([]),[l,d]=(0,a.useState)([]),[c,p]=(0,a.useState)({workflow:"",harness:""}),[m,f]=(0,a.useState)({workflow:"",harness:""}),[x,g]=(0,a.useState)({workflow:"",harness:""}),[h,b]=(0,a.useState)(!1);async function v(e,n){let a=c[e].trim();if(!a||!o.some(t=>t.graph===e))return void g(t=>({...t,[e]:"그래프 이름과 노드가 필요합니다."}));if("workflow"===e&&o.some(t=>{var r;return t.graph===e&&"subworkflow"===t.kind&&!(null==(r=t.workflow)?void 0:r.trim())}))return void g(t=>({...t,[e]:"subworkflow 참조 워크플로를 입력하세요."}));let s=function(e,t,r,n){let a=r.filter(t=>t.graph===e);if("workflow"===e){let e={name:t,nodes:[]};for(let t of a)e=t.kind.includes(":")?{...e,nodes:[...e.nodes,{id:t.id,kind:t.kind,inputs:{}}]}:"subworkflow"===t.kind?{...e,nodes:[...e.nodes,{id:t.id,kind:"subworkflow",workflow:t.workflow,inputs:{}}]}:(0,ev.iu)(e,t.kind,{id:t.id});return e={...e,nodes:e.nodes.map(e=>({...e,...n.filter(t=>t.to===e.id&&a.some(e=>e.id===t.from)).length?{depends_on:n.filter(t=>t.to===e.id&&a.some(e=>e.id===t.from)).map(e=>e.from)}:{}}))},(0,u.As)(e)}let o=S(t);for(let e of a)o=C(o,{kind:e.kind,id:e.id,x:e.x,y:e.y}).graph;return(o={...o,edges:n.filter(e=>a.some(t=>t.id===e.from)&&a.some(t=>t.id===e.to)).map(e=>({...e,outcome:""}))}).nodes.length&&(o=M(o,o.nodes[o.nodes.length-1].id,!0)),A(o)}(e,a,o,l);if("harness"===e){let r=O(V(s),t.find(t=>t.graph===e).kinds.map(e=>e.kind));if(!r.ok)return void g(t=>({...t,[e]:r.issues.map(e=>e.message).join(", ")}))}b(!0);try{let t=await r.validateGraph(e,s);if(!t.ok)return void g(r=>({...r,[e]:t.errors.map(e=>e.message).join(", ")}));n&&("workflow"===e?await r.saveWorkflow(a,{yaml:s,scope:"project"}):m.harness===a?await r.putRunGraphYaml(a,s):await r.createRunGraph(a,s),f(t=>({...t,[e]:a}))),g(t=>({...t,[e]:n?"저장했습니다.":"검증 통과"}))}catch(t){g(r=>({...r,[e]:t instanceof Error?t.message:String(t)}))}finally{b(!1)}}let y=o.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)(ek,{groups:t,onAdd:function(e){s(t=>{let r="".concat(e.graph,"-").concat(e.kind.split(":").pop().replace(/[^a-zA-Z0-9-]/g,"-")),n=1;for(;t.some(e=>e.id==="".concat(r,"-").concat(n));)n++;return[...t,{graph:e.graph,kind:e.kind,id:"".concat(r,"-").concat(n),x:40+t.length%5*210,y:40+130*Math.floor(t.length/5)}]})}}),o.filter(e=>"workflow"===e.graph&&"subworkflow"===e.kind).map(e=>{var t;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!=(t=e.workflow)?t:"",onChange:t=>s(r=>r.map(r=>r.id===e.id?{...r,workflow:t.target.value}:r)),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:t.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:t=>p(r=>({...r,[e.graph]:t.target.value})),className:"rounded border border-border bg-background px-2 py-1"})]}),(0,n.jsx)("button",{type:"button",disabled:h,onClick:()=>{v(e.graph,!1)},children:"검증"}),(0,n.jsx)("button",{type:"button",disabled:h,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)(i.Gc,{nodes:y,edges:k,nodeTypes:ej,fitView:!0,onNodesChange:e=>{let t=new Set(e.filter(e=>"remove"===e.type).map(e=>e.id));s(r=>r.filter(e=>!t.has(e.id)).map(t=>{let r=e.find(e=>"position"===e.type&&e.id===t.id);return(null==r?void 0:r.type)==="position"&&r.position?{...t,...r.position}:t})),t.size&&d(e=>e.filter(e=>!t.has(e.from)&&!t.has(e.to)))},onEdgesChange:e=>{let t=new Set(e.filter(e=>"remove"===e.type).map(e=>e.id));t.size&&d(e=>e.filter(e=>!t.has("".concat(e.from,":").concat(e.to))))},onConnect:e=>{let t=o.find(t=>t.id===e.source),r=o.find(t=>t.id===e.target);t&&r&&t.id!==r.id&&t.graph===r.graph&&d(e=>e.some(e=>e.from===t.id&&e.to===r.id)?e:[...e,{from:t.id,to:r.id}])},children:[(0,n.jsx)(i.VS,{}),(0,n.jsx)(i.H2,{})]})})]})}function eN(e){var t;let{context:r,client:o}=e,[s,l]=(0,a.useState)(null),[i,d]=(0,a.useState)(""),[u,c]=(0,a.useState)("view"),[p,m]=(0,a.useState)(!1),f=r&&(t=r).saved&&t.graphId.trim()?t.graphId:null;async function x(){if(f&&i.trim()&&!p){m(!0),l(null);try{await U(o,f,i.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),d("")},[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:i,onChange:e=>{d(e.target.value),l(null)},className:"rounded border border-border px-2 py-1"})]}),(0,n.jsx)("button",{type:"button",onClick:()=>{d("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||!i.trim()||p,title:f?"그래프 접근 권한을 설정합니다":"저장 안 된 변경은 공유할 수 없습니다. 먼저 저장하세요",className:"rounded border border-border px-2 py-1 disabled:opacity-50",children:"권한 설정"}),s&&(0,n.jsx)("span",{role:"status",children:s})]})}function eS(){let e=(0,c.Qj)();return e?(0,n.jsx)(eC,{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 eC(e){var t,r,i,d,u;let{client:c}=e,m=(0,l.useSearchParams)(),h="harness"===(null!=(i=null==m?void 0:m.get("mode"))?i:null)?"harness":"workflow",[b,v]=(0,a.useState)(h),[y,k]=(0,a.useState)(()=>(null==m?void 0:m.get("mode"))!=null);(0,a.useEffect)(()=>{v(h)},[h]);let j=(0,a.useCallback)(e=>{v(e),window.history.replaceState(null,"",function(e){let t=f.find(t=>t.graph===e);return"/app/editor/?mode=".concat(t.graph)}(e))},[]),w=(0,o.jE)(),[N,C]=(0,a.useState)(null),[I,E]=(0,a.useState)(null),[_,R]=(0,a.useState)(void 0),[M,z]=(0,a.useState)(""),A=(0,s.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,[t,r]=(0,a.useState)(void 0),[n,o]=(0,a.useState)(void 0),[s,l]=(0,a.useState)({}),[i,d]=(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,[]),g=(0,a.useCallback)(()=>u.current?{graph:u.current.graph,yaml:u.current.yaml}:null,[]),h=(0,a.useCallback)(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3?arguments[3]:void 0,s=arguments.length>4?arguments[4]:void 0;d(s&&Object.keys(s).length?s:void 0),a&&Object.keys(a).length&&l(e=>({...e,...a})),c.current+=1,m.current=!0,r({rev:c.current,graph:e,...n?{autoLayout:n}:{}}),o(t)},[]),b=(0,a.useCallback)((e,t)=>{var n,a;d(t&&Object.keys(t).length?t:void 0),c.current+=1,m.current=!0,r({rev:c.current,graph:null!=e?e:S(null!=(a=null==(n=u.current)?void 0:n.graphId)?a:"")}),o(void 0)},[]),v=(0,a.useCallback)(()=>{u.current=null,p.current=null,m.current=!1,r(void 0),o(void 0),l({}),d(void 0)},[]);return(0,a.useEffect)(()=>{if(!n)return;let t=setTimeout(()=>o(void 0),e);return()=>clearTimeout(t)},[n,e]),{replace:t,highlight:n,labels:s,steps:i,onChange:f,current:g,laid:x,apply:h,restore:b,reset:v}}(),[D,P]=(0,a.useState)(!1),G=(0,a.useCallback)(e=>{O.reset(),P(!!e.wizardPrompt),E(null),C({key:Date.now(),...e})},[O.reset]),F=null!=(d=null==m?void 0:m.get("wizard"))?d:null,T=(0,a.useRef)(null);(0,a.useEffect)(()=>{"harness"===b&&F&&T.current!==F&&(T.current=F,k(!0),G({saved:!1,wizardPrompt:F}))},[b,F,G]);let L=(0,a.useCallback)(e=>R(e),[]),B=(0,s.I)({queryKey:["graph-kinds","workflow"],queryFn:()=>c.getGraphKinds("workflow"),retry:!1}),K=(0,s.I)({queryKey:["graph-kinds","harness"],queryFn:()=>c.getGraphKinds("harness"),retry:!1}),U=(0,a.useMemo)(()=>{var e,t,r,n,a;return a=[...null!=(r=null==(e=B.data)?void 0:e.kinds)?r:[],...null!=(n=null==(t=K.data)?void 0:t.kinds)?n:[]],f.map(e=>{let{graph:t,label:r,fallbackKinds:n}=e,o=a.filter(e=>e.graph===t);return{graph:t,label:r,kinds:o.length?o:n.map(e=>({graph:t,kind:e,plugin:null,description:"",schema:{},core:!0})),fallback:0===o.length}})},[B.data,K.data]),Y=U.find(e=>e.graph===b).kinds,Z=U.find(e=>e.graph===b).fallback,W=e=>{e!==b&&(C(null),E(null),R(void 0),j(e)),k(!0)},q=(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:()=>W("workflow"),children:"워크플로 목록"}),(0,n.jsx)("button",{type:"button","aria-pressed":y&&"harness"===b,onClick:()=>W("harness"),children:"실행 그래프 목록"})]}),(0,n.jsx)("div",{className:y?"hidden":"flex min-h-0 flex-1 flex-col",children:(0,n.jsx)(ew,{groups:U,client:c})}),y&&(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col",children:[!("harness"===b&&N)&&(0,n.jsx)(eb,{onStart:e=>{j("harness"),G({saved:!1,wizardPrompt:e})}}),"workflow"===b?(0,n.jsx)(x.N,{palette:Y}):N?(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),R(void 0)},children:"← 그래프 목록"}),(0,n.jsx)(eN,{context:I,client:c},N.key),Z&&(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:M,onChange:e=>z(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==(t=A.data)?void 0:t.packs)?u:[]).map(e=>(0,n.jsxs)("option",{value:e.id,children:[e.title," (",e.id,")"]},e.id))]}),A.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)(er,{palette:Y,client:c,wizardMode:D,...N.graph?{initialGraph:N.graph,initialSaved:N.saved}:{},..._?{nodeStatus:_}:{},...O.replace?{replace:O.replace}:{},...O.highlight?{highlight:O.highlight}:{},nodeLabels:O.labels,...O.steps?{wizardSteps:O.steps}:{},onChange:q,installedPacks:null==(r=A.data)?void 0:r.packs,onKnowledgePackChange:z,renderActions:e=>(0,n.jsx)(ed,{context:e,client:c,onStatus:L}),onSaved:()=>{w.invalidateQueries({queryKey:["run-graphs"]})}},N.key)}),(0,n.jsx)(eh,{client:function(e){let t=e.graphWizard;return t?{graphWizard:(e,r)=>t(e,r)}:{graphWizard:async()=>{throw new p.Iu(404,"/v1/graphs/wizard",null)}}}(c),current:O.current,laid:O.laid,...M?{packId:M}:{},onApply:(e,t,r,n,a)=>{P(!0),O.apply(e,t,r,n,a)},onRestore:O.restore,...N.wizardPrompt?{initialPrompt:N.wizardPrompt}:{}},N.key)]})]}):(0,n.jsx)(g.F,{palette:Y,onNewGraph:()=>G({saved:!1}),onOpenInCanvas:(e,t)=>G({graph:V(t),saved:!0})})]})]})}function eI(){return(0,n.jsx)(a.Suspense,{fallback:(0,n.jsx)("p",{className:"p-4 text-sm",children:"편집기를 불러오는 중…"}),children:(0,n.jsx)(eS,{})})}},80938:(e,t,r)=>{"use strict";r.d(t,{$5:()=>d,dJ:()=>u});var n=r(20381);let a=new Set,o=new Set;function s(e,t){if(t!==a.has(e))for(let r of(t?a.add(e):a.delete(e),o))r()}function l(){return a.size>0}function i(e){return o.add(e),()=>{o.delete(e)}}function d(){return(0,n.useSyncExternalStore)(i,l,()=>!1)}function u(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];(0,n.useEffect)(()=>(s(e,t),()=>s(e,!1)),[e,t])}}},e=>{e.O(0,[2576,5457,5067,3573,5260,8080,2533,4599,244,6745,7956,9175,431,2479,4937,9828,8821,7358],()=>e(e.s=60820)),_N_E=e.O()}]);