elanous 0.2.41 → 0.2.43

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 (796) 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/{GiOLWmt4MqDZePubBjA4Q → Om5xS9jpjSXJCeTNGYEi4}/_buildManifest.js +1 -1
  4. package/apps/pwa/out/_next/static/chunks/{2fe2c302.41b517f88d6fe502.js → 0966f8a1.745fcd44f64a87ea.js} +1 -1
  5. package/apps/pwa/out/_next/static/chunks/{385e4574.e9886ab32759eda3.js → 0ad6802e.ae7afb63fdcb4491.js} +1 -1
  6. package/apps/pwa/out/_next/static/chunks/114.2b90424d1a3ce84c.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/1151-5c2bb8f002ca2dd6.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/1200.6a37c202f9f17e9a.js +226 -0
  9. package/apps/pwa/out/_next/static/chunks/1261-a616d5728e02e624.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/1313-19f737e0222c4444.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/1357.3bbef3976c37f94a.js +1 -0
  12. package/apps/pwa/out/_next/static/chunks/1362-20adddfaf662b0fa.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/{6874.d5cf7eb8edb2cabe.js → 1406.a1dc2ab6f8449374.js} +2 -2
  14. package/apps/pwa/out/_next/static/chunks/1737-9491fc6ab29b9ec6.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/1803-4f91a8e7dcaf042c.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/{5744.b9415e18ad623100.js → 1961.a81b12872c3e93a9.js} +1 -1
  17. package/apps/pwa/out/_next/static/chunks/1970cf59.2d4d8ce5d6c81853.js +1 -0
  18. package/apps/pwa/out/_next/static/chunks/1971-8890f3962ba7ee0a.js +1 -0
  19. package/apps/pwa/out/_next/static/chunks/2073-ba274e00e4f9efb4.js +1 -0
  20. package/apps/pwa/out/_next/static/chunks/{5471.1e611302ed3a7c53.js → 2144.25b292396712196d.js} +2 -2
  21. package/apps/pwa/out/_next/static/chunks/{3230-49298c3b73ef2268.js → 2268-53861f339e0b65a2.js} +1 -1
  22. package/apps/pwa/out/_next/static/chunks/{9834.63ab2bbc3153172e.js → 2312.0c8b61e22d3136d7.js} +1 -1
  23. package/apps/pwa/out/_next/static/chunks/{1800.f7ff51dc4978a958.js → 2573.387a707f6f9d720c.js} +2 -2
  24. package/apps/pwa/out/_next/static/chunks/273.f156eee28f11af77.js +1 -0
  25. package/apps/pwa/out/_next/static/chunks/2873.d2140e5a82546401.js +1 -0
  26. package/apps/pwa/out/_next/static/chunks/{9048.212083de42d25be3.js → 3072.01338851ca21a6f7.js} +2 -2
  27. package/apps/pwa/out/_next/static/chunks/3091.a5a4143dea33d197.js +90 -0
  28. package/apps/pwa/out/_next/static/chunks/3095.dc44586a5f83b86d.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/{2263.e09b6edea33bad2d.js → 3113.d7472bbc27d580c7.js} +1 -1
  30. package/apps/pwa/out/_next/static/chunks/3228-9650b6447b6fa288.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/3402.44b565b314f2263c.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/{addc2b32.8c4ff8f0aefe987d.js → 3557ac4a.c8931684475018ad.js} +1 -1
  33. package/apps/pwa/out/_next/static/chunks/360.ae9f9f4c33c395e8.js +79 -0
  34. package/apps/pwa/out/_next/static/chunks/3638.80412ea63aae8f3f.js +286 -0
  35. package/apps/pwa/out/_next/static/chunks/{a0a01613.6d1cca322238d7fe.js → 363bfab3.9623b9f89363541f.js} +1 -1
  36. package/apps/pwa/out/_next/static/chunks/3694.e0099884345f0198.js +64 -0
  37. package/apps/pwa/out/_next/static/chunks/3744.54f87db52acfd1ab.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/3903.3ef4656c67572764.js +1 -0
  39. package/apps/pwa/out/_next/static/chunks/3935.16701e33f8982dc9.js +1 -0
  40. package/apps/pwa/out/_next/static/chunks/3955.6922286237f2ac2b.js +24 -0
  41. package/apps/pwa/out/_next/static/chunks/3969.272ee7f9fd6c62e5.js +34 -0
  42. package/apps/pwa/out/_next/static/chunks/4199.ce86b281fd0a60b7.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/4311-6dd3144002cc0c2d.js +1 -0
  44. package/apps/pwa/out/_next/static/chunks/4426-2b230fad00c88930.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/{530.d26346e18089640a.js → 4445.7990c76b3751a918.js} +1 -1
  46. package/apps/pwa/out/_next/static/chunks/4447-14c5161fa59166c7.js +1 -0
  47. package/apps/pwa/out/_next/static/chunks/4856-b0b8075bba8c53f4.js +1 -0
  48. package/apps/pwa/out/_next/static/chunks/4870-de370d65e73c0bb5.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/4885-2c989165c4b29fad.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/4894.fec2ca9e99caefa2.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/5093.8f04b7f8cb899a95.js +94 -0
  52. package/apps/pwa/out/_next/static/chunks/5122-2bb177cebf89e19a.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/5154.5f56dc3902e3d275.js +36 -0
  54. package/apps/pwa/out/_next/static/chunks/529.64ff7257180b2ac9.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/5394.5dabeb0c62293a28.js +93 -0
  56. package/apps/pwa/out/_next/static/chunks/5461.08bf2404ff38ec85.js +1 -0
  57. package/apps/pwa/out/_next/static/chunks/5474-22e08a85583209b2.js +1 -0
  58. package/apps/pwa/out/_next/static/chunks/{1219.7e17964e0e7cd8e5.js → 5564.9e72532188f57586.js} +3 -3
  59. package/apps/pwa/out/_next/static/chunks/5567-265df39ed8fe9dcb.js +1 -0
  60. package/apps/pwa/out/_next/static/chunks/5570-a94ae19811cb2046.js +1 -0
  61. package/apps/pwa/out/_next/static/chunks/5574-b47c9ef2dceff1fd.js +1 -0
  62. package/apps/pwa/out/_next/static/chunks/5628.6ddb2d5ffba4ff4c.js +309 -0
  63. package/apps/pwa/out/_next/static/chunks/5730.43d7ccc09988e646.js +1 -0
  64. package/apps/pwa/out/_next/static/chunks/{1178.1aa9cad0e7695427.js → 5789.2da35c258292e1e5.js} +1 -1
  65. package/apps/pwa/out/_next/static/chunks/{4133.2056bb4d78f621af.js → 5824.da9527b15a3221e5.js} +1 -1
  66. package/apps/pwa/out/_next/static/chunks/5866.366966af47fdde5d.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/{4527.a69f2894d1bc9f4a.js → 5930.8b4df3b46c32b05a.js} +1 -1
  68. package/apps/pwa/out/_next/static/chunks/5963-c4d8469c52a0828b.js +1 -0
  69. package/apps/pwa/out/_next/static/chunks/6001.ec4049ceb3c43418.js +27 -0
  70. package/apps/pwa/out/_next/static/chunks/6120-471f03db1e299c0c.js +1 -0
  71. package/apps/pwa/out/_next/static/chunks/6175-41479e643aca1878.js +1 -0
  72. package/apps/pwa/out/_next/static/chunks/6291.a2de4f9787637075.js +104 -0
  73. package/apps/pwa/out/_next/static/chunks/6400-6699907c3537436a.js +1 -0
  74. package/apps/pwa/out/_next/static/chunks/6428.1f4327d6ae5fdf9a.js +287 -0
  75. package/apps/pwa/out/_next/static/chunks/644.02cb026fa44bcd0a.js +1 -0
  76. package/apps/pwa/out/_next/static/chunks/6466-6c87d60d3dd174fb.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/{9507.7026657a2f47eb64.js → 6540.c7bef57ad8f90a87.js} +16 -16
  78. package/apps/pwa/out/_next/static/chunks/6773.d4264665ab31bec0.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/6822.3c789f1a8443e774.js +1 -0
  80. package/apps/pwa/out/_next/static/chunks/{5574.f35accf4f132b29d.js → 6944.309f4e3ea54d1537.js} +1 -1
  81. package/apps/pwa/out/_next/static/chunks/7261-8ff69d3b2ee671fd.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/7266.084c6bbc70035140.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/7271.5c0100e7320aa856.js +1 -0
  84. package/apps/pwa/out/_next/static/chunks/7429-bf5731358c8f2f68.js +1 -0
  85. package/apps/pwa/out/_next/static/chunks/7464.01f7a0ae1215fbe7.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/7479.0fcad5f37eb64f0c.js +1 -0
  87. package/apps/pwa/out/_next/static/chunks/7483.427a2fe2049e388d.js +148 -0
  88. package/apps/pwa/out/_next/static/chunks/7502-be74718178e13e56.js +1 -0
  89. package/apps/pwa/out/_next/static/chunks/7530.0889722b19572065.js +24 -0
  90. package/apps/pwa/out/_next/static/chunks/7645.5b2ee3ad45c55ea3.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/7788.7d1c79f1a8e18946.js +1 -0
  92. package/apps/pwa/out/_next/static/chunks/7900.096f455c7c1efc53.js +77 -0
  93. package/apps/pwa/out/_next/static/chunks/7910-6f139bcafd238b9f.js +1 -0
  94. package/apps/pwa/out/_next/static/chunks/7966.f71c8958d1637548.js +1 -0
  95. package/apps/pwa/out/_next/static/chunks/{5947-135e26537d80a6b9.js → 8062-7cd0bcc7f01455ba.js} +3 -3
  96. package/apps/pwa/out/_next/static/chunks/8073.f6cf2f2c71aafbd0.js +1 -0
  97. package/apps/pwa/out/_next/static/chunks/8201.190b94088980f430.js +74 -0
  98. package/apps/pwa/out/_next/static/chunks/8205.282ca4bb62d54a0a.js +62 -0
  99. package/apps/pwa/out/_next/static/chunks/8313-dfa1021bb58a46d6.js +1 -0
  100. package/apps/pwa/out/_next/static/chunks/837-81336ebaca8198a8.js +1 -0
  101. package/apps/pwa/out/_next/static/chunks/8447.7963352ef5f71b76.js +1 -0
  102. package/apps/pwa/out/_next/static/chunks/8574-868e8129525ef6d9.js +1 -0
  103. package/apps/pwa/out/_next/static/chunks/8588.d1c6a2903727ce87.js +149 -0
  104. package/apps/pwa/out/_next/static/chunks/8637.90f92d5c8db4732c.js +1 -0
  105. package/apps/pwa/out/_next/static/chunks/{2743.5d3f76948be32b34.js → 868.6e953be05bcf6dca.js} +2 -2
  106. package/apps/pwa/out/_next/static/chunks/8706-e1fe0309343a2273.js +1 -0
  107. package/apps/pwa/out/_next/static/chunks/8749-06384cdfc4520add.js +1 -0
  108. package/apps/pwa/out/_next/static/chunks/{5964-7e21164a8f2cf0ce.js → 8861-cc1fa1c7b920fa8e.js} +1 -1
  109. package/apps/pwa/out/_next/static/chunks/8967-7dfebf710c9dec9d.js +1 -0
  110. package/apps/pwa/out/_next/static/chunks/{5159.115f1c2ca471386c.js → 8986.8e2e4efbfa655c59.js} +1 -1
  111. package/apps/pwa/out/_next/static/chunks/8997-3c564dbb3b58b055.js +1 -0
  112. package/apps/pwa/out/_next/static/chunks/923.2034d10ae91e9c20.js +1 -0
  113. package/apps/pwa/out/_next/static/chunks/9312.bc1b89c5d4368033.js +1 -0
  114. package/apps/pwa/out/_next/static/chunks/943.39ae5e82f4f1893f.js +1 -0
  115. package/apps/pwa/out/_next/static/chunks/9469.0500480de55fb205.js +32 -0
  116. package/apps/pwa/out/_next/static/chunks/9770.5f75bc6088b16109.js +1 -0
  117. package/apps/pwa/out/_next/static/chunks/9810-2543267050e58b82.js +1 -0
  118. package/apps/pwa/out/_next/static/chunks/9870.8419702475254745.js +8 -0
  119. package/apps/pwa/out/_next/static/chunks/9941-376d1b74d51b01a4.js +1 -0
  120. package/apps/pwa/out/_next/static/chunks/9958.385434ab04241758.js +1 -0
  121. package/apps/pwa/out/_next/static/chunks/{b2271e54.c1de3347976e90b0.js → aa57532f.510551854ff239b1.js} +1 -1
  122. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-deea1450b17cb8dc.js +1 -0
  123. package/apps/pwa/out/_next/static/chunks/app/approvals/page-70985b904f8650ef.js +1 -0
  124. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-a2e15e33e56a4353.js +1 -0
  125. package/apps/pwa/out/_next/static/chunks/app/board/page-fc72ce2db12d6ca9.js +1 -0
  126. package/apps/pwa/out/_next/static/chunks/app/botlab/page-be03e41f9436ebd9.js +1 -0
  127. package/apps/pwa/out/_next/static/chunks/app/bots/page-35a35999382da3f2.js +1 -0
  128. package/apps/pwa/out/_next/static/chunks/app/ceo/page-3ff5b1e6ca88b848.js +1 -0
  129. package/apps/pwa/out/_next/static/chunks/app/chat/page-a65101300a0ee5c1.js +1 -0
  130. package/apps/pwa/out/_next/static/chunks/app/consult/page-3aca5b6d67dba511.js +1 -0
  131. package/apps/pwa/out/_next/static/chunks/app/control/page-45b8ab0a71e61314.js +1 -0
  132. package/apps/pwa/out/_next/static/chunks/app/decisions/page-53046e282d4cda8e.js +1 -0
  133. package/apps/pwa/out/_next/static/chunks/app/design-check/page-17809e60e8354c17.js +1 -0
  134. package/apps/pwa/out/_next/static/chunks/app/editor/page-fd2442d347bf5898.js +1 -0
  135. package/apps/pwa/out/_next/static/chunks/app/exec/page-e9d720d6fc082e21.js +1 -0
  136. package/apps/pwa/out/_next/static/chunks/app/field/page-6b8b4267bab0a677.js +1 -0
  137. package/apps/pwa/out/_next/static/chunks/app/healthz/route-deea1450b17cb8dc.js +1 -0
  138. package/apps/pwa/out/_next/static/chunks/app/inside/page-8bcf6233ac7c17af.js +1 -0
  139. package/apps/pwa/out/_next/static/chunks/app/intake/page-7cc25591cfc2126f.js +1 -0
  140. package/apps/pwa/out/_next/static/chunks/app/layout-053e871f35c9beba.js +1 -0
  141. package/apps/pwa/out/_next/static/chunks/app/live/page-eff819f0c2d5e084.js +1 -0
  142. package/apps/pwa/out/_next/static/chunks/app/live-run/page-4d7e9d8db5274a87.js +1 -0
  143. package/apps/pwa/out/_next/static/chunks/app/loops/page-2b2d8f5aa5f69ad4.js +1 -0
  144. package/apps/pwa/out/_next/static/chunks/app/market/page-0b8f92c5062e68b1.js +1 -0
  145. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1bd9d0fdac2ced3d.js +1 -0
  146. package/apps/pwa/out/_next/static/chunks/app/morning/page-9ee28f7df07428ea.js +1 -0
  147. package/apps/pwa/out/_next/static/chunks/app/not-found-44b7a1ff468c6648.js +1 -0
  148. package/apps/pwa/out/_next/static/chunks/app/observatory/page-cbc6523711dc1b65.js +1 -0
  149. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-fdad47899c2695be.js +1 -0
  150. package/apps/pwa/out/_next/static/chunks/app/ops/release/{page-40f9e19149024298.js → page-79a8b5fee4c20871.js} +1 -1
  151. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-03e8ac9606aeaffb.js +1 -0
  152. package/apps/pwa/out/_next/static/chunks/app/outputs/page-4cd55c55ec287e2f.js +1 -0
  153. package/apps/pwa/out/_next/static/chunks/app/page-db17b4305404161e.js +1 -0
  154. package/apps/pwa/out/_next/static/chunks/app/reflection/page-30041d848350fd02.js +1 -0
  155. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-c540da022dbf86b0.js +1 -0
  156. package/apps/pwa/out/_next/static/chunks/app/sessions/page-9399efc538da057f.js +1 -0
  157. package/apps/pwa/out/_next/static/chunks/app/settings/devices/{page-a142dfb0331a05f5.js → page-ca2d09128c585ca4.js} +1 -1
  158. package/apps/pwa/out/_next/static/chunks/app/settings/page-0e2635aecd343038.js +1 -0
  159. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ef7f4399b6b7726e.js +1 -0
  160. package/apps/pwa/out/_next/static/chunks/app/setup/layout-deea1450b17cb8dc.js +1 -0
  161. package/apps/pwa/out/_next/static/chunks/app/setup/page-caf530535b875468.js +1 -0
  162. package/apps/pwa/out/_next/static/chunks/app/share/page-eaa20c1543a5fd8e.js +1 -0
  163. package/apps/pwa/out/_next/static/chunks/app/showroom/page-c541eb1b75120f61.js +1 -0
  164. package/apps/pwa/out/_next/static/chunks/app/tasks/page-ab5e213eda9479f4.js +1 -0
  165. package/apps/pwa/out/_next/static/chunks/app/term/page-0a815f34367b6db6.js +1 -0
  166. package/apps/pwa/out/_next/static/chunks/app/today/page-e858ba0ed9393b68.js +1 -0
  167. package/apps/pwa/out/_next/static/chunks/app/trace/page-1638ee9dd6e0582f.js +1 -0
  168. package/apps/pwa/out/_next/static/chunks/app/vault/page-4cf5a399109391f2.js +1 -0
  169. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b4396321238798ec.js +1 -0
  170. package/apps/pwa/out/_next/static/chunks/app/workflows/page-cb72bfd21006781a.js +1 -0
  171. package/apps/pwa/out/_next/static/chunks/app/workspace/page-6135d0242afbc434.js +1 -0
  172. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-a1dccf907eddb856.js +1 -0
  173. package/apps/pwa/out/_next/static/chunks/{53aeb4ee-51c92f8d683f5220.js → c7945435-b44d4dbe90ba0dcb.js} +1 -1
  174. package/apps/pwa/out/_next/static/chunks/{2fdf2931.b431eee4fb468bc3.js → cb0f8df8.09a4a6be97e3fc5f.js} +1 -1
  175. package/apps/pwa/out/_next/static/chunks/{c0c1a699.0ba79f97005965d4.js → d96660fb.cbc21a2a88539dbb.js} +1 -1
  176. package/apps/pwa/out/_next/static/chunks/ea514caa.05a24f78d9dffe5f.js +122 -0
  177. package/apps/pwa/out/_next/static/chunks/{83184dcd-0ee6247ff41eb3f2.js → fb7d20d5-6892502b6ee39ca6.js} +1 -1
  178. package/apps/pwa/out/_next/static/chunks/framework-e8a911e19b1be41f.js +1 -0
  179. package/apps/pwa/out/_next/static/chunks/main-7022f418fabba021.js +1 -0
  180. package/apps/pwa/out/_next/static/chunks/main-app-e5f15df755756a1e.js +1 -0
  181. package/apps/pwa/out/_next/static/chunks/pages/_app-4525f91e36940c9b.js +1 -0
  182. package/apps/pwa/out/_next/static/chunks/pages/_error-140f0e519c085b0f.js +1 -0
  183. package/apps/pwa/out/_next/static/chunks/webpack-8f22ef63dcb865b1.js +1 -0
  184. package/apps/pwa/out/_next/static/css/{b9d8151e48998417.css → 62c858ad53854f47.css} +1 -1
  185. package/apps/pwa/out/_next/static/css/d1f8bb401740a549.css +1 -0
  186. package/apps/pwa/out/approvals/index.html +1 -1
  187. package/apps/pwa/out/approvals/index.txt +23 -23
  188. package/apps/pwa/out/autopilot/index.html +1 -1
  189. package/apps/pwa/out/autopilot/index.txt +23 -23
  190. package/apps/pwa/out/board/index.html +1 -1
  191. package/apps/pwa/out/board/index.txt +23 -23
  192. package/apps/pwa/out/botlab/index.html +1 -1
  193. package/apps/pwa/out/botlab/index.txt +22 -22
  194. package/apps/pwa/out/bots/index.html +1 -1
  195. package/apps/pwa/out/bots/index.txt +22 -22
  196. package/apps/pwa/out/ceo/index.html +1 -1
  197. package/apps/pwa/out/ceo/index.txt +23 -23
  198. package/apps/pwa/out/chat/index.html +1 -1
  199. package/apps/pwa/out/chat/index.txt +22 -22
  200. package/apps/pwa/out/consult/index.html +1 -1
  201. package/apps/pwa/out/consult/index.txt +23 -23
  202. package/apps/pwa/out/control/index.html +1 -1
  203. package/apps/pwa/out/control/index.txt +23 -23
  204. package/apps/pwa/out/decisions/index.html +1 -1
  205. package/apps/pwa/out/decisions/index.txt +22 -22
  206. package/apps/pwa/out/design-check/index.html +1 -1
  207. package/apps/pwa/out/design-check/index.txt +23 -23
  208. package/apps/pwa/out/editor/index.html +1 -1
  209. package/apps/pwa/out/editor/index.txt +24 -25
  210. package/apps/pwa/out/exec/index.html +1 -1
  211. package/apps/pwa/out/exec/index.txt +23 -23
  212. package/apps/pwa/out/field/index.html +1 -1
  213. package/apps/pwa/out/field/index.txt +23 -23
  214. package/apps/pwa/out/healthz +1 -1
  215. package/apps/pwa/out/index.html +1 -1
  216. package/apps/pwa/out/index.txt +22 -22
  217. package/apps/pwa/out/inside/index.html +1 -1
  218. package/apps/pwa/out/inside/index.txt +23 -23
  219. package/apps/pwa/out/intake/index.html +1 -1
  220. package/apps/pwa/out/intake/index.txt +23 -23
  221. package/apps/pwa/out/live/index.html +1 -1
  222. package/apps/pwa/out/live/index.txt +24 -25
  223. package/apps/pwa/out/live-run/index.html +1 -1
  224. package/apps/pwa/out/live-run/index.txt +24 -25
  225. package/apps/pwa/out/loops/index.html +1 -1
  226. package/apps/pwa/out/loops/index.txt +22 -22
  227. package/apps/pwa/out/market/index.html +1 -1
  228. package/apps/pwa/out/market/index.txt +22 -22
  229. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  230. package/apps/pwa/out/missions/placeholder/index.txt +22 -22
  231. package/apps/pwa/out/morning/index.html +1 -1
  232. package/apps/pwa/out/morning/index.txt +23 -23
  233. package/apps/pwa/out/observatory/index.html +1 -1
  234. package/apps/pwa/out/observatory/index.txt +23 -23
  235. package/apps/pwa/out/ops/checklist/index.html +1 -1
  236. package/apps/pwa/out/ops/checklist/index.txt +22 -22
  237. package/apps/pwa/out/ops/release/index.html +1 -1
  238. package/apps/pwa/out/ops/release/index.txt +22 -22
  239. package/apps/pwa/out/ops/seats/index.html +1 -1
  240. package/apps/pwa/out/ops/seats/index.txt +22 -22
  241. package/apps/pwa/out/outputs/index.html +1 -1
  242. package/apps/pwa/out/outputs/index.txt +22 -22
  243. package/apps/pwa/out/reflection/index.html +1 -1
  244. package/apps/pwa/out/reflection/index.txt +23 -23
  245. package/apps/pwa/out/scheduler/index.html +1 -1
  246. package/apps/pwa/out/scheduler/index.txt +23 -23
  247. package/apps/pwa/out/sessions/index.html +1 -1
  248. package/apps/pwa/out/sessions/index.txt +22 -22
  249. package/apps/pwa/out/settings/devices/index.html +1 -1
  250. package/apps/pwa/out/settings/devices/index.txt +23 -23
  251. package/apps/pwa/out/settings/index.html +1 -1
  252. package/apps/pwa/out/settings/index.txt +23 -23
  253. package/apps/pwa/out/setup/done/index.html +1 -1
  254. package/apps/pwa/out/setup/done/index.txt +23 -23
  255. package/apps/pwa/out/setup/index.html +1 -1
  256. package/apps/pwa/out/setup/index.txt +23 -23
  257. package/apps/pwa/out/share/index.html +1 -1
  258. package/apps/pwa/out/share/index.txt +23 -23
  259. package/apps/pwa/out/showroom/index.html +1 -1
  260. package/apps/pwa/out/showroom/index.txt +22 -22
  261. package/apps/pwa/out/tasks/index.html +1 -1
  262. package/apps/pwa/out/tasks/index.txt +23 -23
  263. package/apps/pwa/out/term/index.html +1 -1
  264. package/apps/pwa/out/term/index.txt +23 -23
  265. package/apps/pwa/out/today/index.html +1 -1
  266. package/apps/pwa/out/today/index.txt +23 -23
  267. package/apps/pwa/out/trace/index.html +1 -1
  268. package/apps/pwa/out/trace/index.txt +23 -23
  269. package/apps/pwa/out/vault/index.html +1 -1
  270. package/apps/pwa/out/vault/index.txt +23 -23
  271. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  272. package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
  273. package/apps/pwa/out/workflows/index.html +1 -1
  274. package/apps/pwa/out/workflows/index.txt +23 -23
  275. package/apps/pwa/out/workspace/index.html +1 -1
  276. package/apps/pwa/out/workspace/index.txt +23 -23
  277. package/apps/pwa/out/worktrees/index.html +1 -1
  278. package/apps/pwa/out/worktrees/index.txt +23 -23
  279. package/catalog/external-commands.yaml +5 -3
  280. package/catalog/meta/catalogVersion.yaml +2 -1
  281. package/catalog/signing/catalog-signing-public.pem +3 -0
  282. package/docs/goal-context/04-mock-scenarios.md +13 -0
  283. package/graphs/catalog/catalog.yaml +1 -1
  284. package/graphs/heal/heal-loop.yaml +1 -0
  285. package/graphs/intake/intake-daily.yaml +16 -0
  286. package/graphs/intake/news-sources.yaml +1 -0
  287. package/graphs/intake/recipes.yaml +7 -0
  288. package/graphs/overlays/examples/research-runtime-empty-terminal.yaml +28 -0
  289. package/graphs/overlays/stop-heal-ladder.yaml +113 -0
  290. package/graphs/profiles/local.yaml +5 -0
  291. package/graphs/profiles/pod.yaml +4 -0
  292. package/graphs/units/verbs/recipes.yaml +11 -11
  293. package/graphs/work/research-report.yaml +10 -2
  294. package/package.json +6 -2
  295. package/plugins/demo-absorption-briefing/plugin.json +18 -0
  296. package/plugins/demo-absorption-briefing/skills/demo-absorption-briefing/SKILL.md +8 -0
  297. package/plugins/demo-browser-hand/plugin.json +13 -0
  298. package/plugins/demo-browser-hand/skills/demo-browser-hand/SKILL.md +8 -0
  299. package/plugins/demo-linear-secretary/plugin.json +15 -0
  300. package/plugins/demo-linear-secretary/skills/demo-linear-secretary/SKILL.md +8 -0
  301. package/plugins/demo-plugin-wizard/plugin.json +11 -0
  302. package/plugins/demo-plugin-wizard/skills/demo-plugin-wizard/SKILL.md +8 -0
  303. package/plugins/demo-research/plugin.json +16 -0
  304. package/plugins/demo-research/skills/demo-research/SKILL.md +8 -0
  305. package/plugins/demo-video-briefing/plugin.json +15 -0
  306. package/plugins/demo-video-briefing/skills/demo-video-briefing/SKILL.md +8 -0
  307. package/scripts/build-signed-catalog.ts +48 -0
  308. package/scripts/ci-typecheck-main-delta.sh +88 -0
  309. package/scripts/codex-fallback-live-probe.ts +1 -1
  310. package/scripts/demo/demo1104-parallel-scenes.ts +301 -0
  311. package/scripts/demo/demo1104-stage.config.ts +21 -0
  312. package/scripts/demo/demo1104-stage.ts +316 -0
  313. package/scripts/goal-method-audit.ts +17 -1
  314. package/scripts/graph-units/land-enqueue.ts +90 -0
  315. package/scripts/heal/run-role.ts +99 -5
  316. package/scripts/hooks/codex-notify.sh +32 -0
  317. package/scripts/install.sh +10 -38
  318. package/scripts/land-global-checks.ts +6 -1
  319. package/scripts/landing-heal/land-plan.ts +57 -0
  320. package/scripts/lib/decompose-ab.ts +1 -0
  321. package/scripts/lib/fixtures/tui-regress/help-insufficient-commands.txt +15 -0
  322. package/scripts/lib/fixtures/tui-regress/help-live.txt +42 -0
  323. package/scripts/lib/fixtures/tui-regress/help-missing-keys.txt +21 -0
  324. package/scripts/lib/fixtures/tui-regress/help-original.txt +51 -0
  325. package/scripts/lib/fixtures/tui-regress/help-shifted-input.txt +26 -0
  326. package/scripts/lib/tui-regress-checks.ts +33 -13
  327. package/scripts/release-loop/auto-approve-node.ts +1 -1
  328. package/scripts/release-loop/gate-autoheal-sim-evidence.ts +60 -0
  329. package/scripts/release-loop/gate-baseline-receipt.ts +47 -9
  330. package/scripts/release-loop/gate-image-pin.ts +81 -0
  331. package/scripts/release-loop/gate-method.ts +139 -0
  332. package/scripts/release-loop/gate-node-sim.ts +207 -0
  333. package/scripts/release-loop/gate-node.ts +463 -64
  334. package/scripts/release-loop/gate-pod-image-sticky-plan.ts +99 -0
  335. package/scripts/release-loop/gate-radius-live.ts +97 -13
  336. package/scripts/release-loop/gate-shard-dispatch.ts +43 -0
  337. package/scripts/release-loop/gate-traffic-mode.ts +151 -3
  338. package/scripts/release-loop/gate-train-receipts.ts +122 -0
  339. package/scripts/release-loop/node-verdict.ts +38 -25
  340. package/scripts/release-loop/preflight.ts +362 -8
  341. package/scripts/release-loop/resume-release.ts +83 -8
  342. package/scripts/release-loop/unattended-release.ts +20 -9
  343. package/scripts/rhythm/daily.ts +36 -4
  344. package/scripts/rhythm/linear-progress-sync.ts +298 -0
  345. package/scripts/ux-sim.ts +18 -1
  346. package/scripts/video-pipeline.ts +9 -1
  347. package/scripts/warm-pool-provider-config.ts +286 -0
  348. package/skills/omni-crawl/SKILL.md +5 -2
  349. package/skills/omni-crawl/scripts/main.ts +84 -23
  350. package/src/acp/agent-manager.ts +1 -0
  351. package/src/acp/codex-app-server-agent.ts +33 -0
  352. package/src/acp/codex-app-server-client.ts +153 -16
  353. package/src/acp/core-turn-bridge.ts +27 -9
  354. package/src/acp/event-router.ts +20 -1
  355. package/src/acp/server.ts +6 -0
  356. package/src/agent/registry.ts +2 -0
  357. package/src/agent/task-notification.ts +25 -5
  358. package/src/agent/types.ts +6 -0
  359. package/src/agent-mission/browser-roundtrip-coordinator.ts +85 -0
  360. package/src/agent-mission/claude-headless.ts +4 -1
  361. package/src/agent-mission/codex-exec.ts +105 -0
  362. package/src/agent-mission/driver.ts +192 -11
  363. package/src/agent-mission/grok-auth-status.ts +47 -0
  364. package/src/agent-mission/hand-hooks.ts +101 -0
  365. package/src/agent-mission/mission-cli.ts +63 -4
  366. package/src/agent-mission/mission-hand-reply.ts +118 -0
  367. package/src/agent-mission/mission-line.ts +180 -0
  368. package/src/agent-mission/mission-out.ts +833 -0
  369. package/src/agent-mission/tool-install.ts +200 -3
  370. package/src/agent-substrate/context-strategy.ts +4 -4
  371. package/src/agent-substrate/self-review-cli.ts +178 -13
  372. package/src/agents/general-purpose.md +1 -1
  373. package/src/auto-research/research-turn.ts +211 -53
  374. package/src/autopilot/pr-manager.ts +69 -10
  375. package/src/autopilot/pty-control-loop.ts +2 -0
  376. package/src/boot/daemon-tools/self-implement.ts +3 -1
  377. package/src/boot/daemon-tools/web-search.ts +1 -2
  378. package/src/briefing/brief-items.ts +55 -11
  379. package/src/capture/tui-self-report.ts +22 -6
  380. package/src/chat/index.ts +1 -1
  381. package/src/cli/agent-cli.ts +2 -1
  382. package/src/cli/catalog-cli.ts +31 -0
  383. package/src/cli/connector-cli.ts +16 -0
  384. package/src/cli/doctor-fix.ts +2 -2
  385. package/src/cli/fixtures/review-loop-breaker/opwaiver-32646-1694ccc7a170.json +1 -0
  386. package/src/cli/fixtures/review-loop-breaker/opwaiver-32853-bd8f73595c83.json +1 -0
  387. package/src/cli/fixtures/review-loop-breaker/opwaiver-33097-1cc85900413c.json +1 -0
  388. package/src/cli/fixtures/review-loop-breaker/opwaiver-33106-972f31e4a3ca.json +1 -0
  389. package/src/cli/fixtures/review-loop-breaker/opwaiver-33113-3ab51f05968f.json +1 -0
  390. package/src/cli/fixtures/review-loop-breaker/pr-33097-1cc85900413c.json +1 -0
  391. package/src/cli/intake-source-cli.ts +44 -8
  392. package/src/cli/msg-cli.ts +32 -3
  393. package/src/cli/pr-cli.ts +21 -1
  394. package/src/cli/pr-land-heavy-remote.ts +75 -5
  395. package/src/cli/pr-land-overlap-evidence.ts +113 -2
  396. package/src/cli/pr-land-pod-shadow-job.ts +202 -4
  397. package/src/cli/pr-land-pod-shadow.ts +9 -2
  398. package/src/cli/release-checklist-read-cli.ts +57 -19
  399. package/src/cli/release-cli.ts +23 -3
  400. package/src/cli/research-cli.ts +13 -5
  401. package/src/cli/setup-cli.ts +166 -6
  402. package/src/cli/setup-keys.ts +187 -0
  403. package/src/cli/task-plugin-wizard-host.ts +114 -0
  404. package/src/cli/tasks-cli.ts +61 -9
  405. package/src/cli/tui-test-cli.ts +186 -0
  406. package/src/compact/auto.ts +8 -1
  407. package/src/config.ts +4 -2
  408. package/src/connectors/linear-daily-progress.ts +228 -0
  409. package/src/connectors/linear-projector.ts +34 -12
  410. package/src/connectors/linear.ts +151 -7
  411. package/src/control-plane/ledger.ts +52 -2
  412. package/src/control-plane/server.ts +16 -2
  413. package/src/core-turn/deep-turn-bloom.ts +67 -0
  414. package/src/core-turn/research-policy.ts +37 -0
  415. package/src/core-turn/run-core-turn.ts +606 -95
  416. package/src/core-turn/run-goal-loop.ts +18 -0
  417. package/src/core-turn/types.ts +4 -0
  418. package/src/dashboard/chat/acp-chat.ts +10 -0
  419. package/src/dashboard/classic-sidetab-mission-job.ts +161 -0
  420. package/src/dashboard/classic-sidetab-mission-pair.ts +81 -0
  421. package/src/dashboard/classic-sidetab-mission-trio.ts +219 -0
  422. package/src/dashboard/classic-sidetab-mission.ts +347 -0
  423. package/src/dashboard/index.ts +517 -18
  424. package/src/dashboard/input/agent-wake.ts +23 -1
  425. package/src/dashboard/input/chat-main-acp-dispatch.ts +23 -0
  426. package/src/dashboard/input/chat-main-plain-turn-runtime.ts +17 -0
  427. package/src/dashboard/mission-cli-consumer.ts +165 -0
  428. package/src/dashboard/plugin-wizard-runtime.ts +50 -0
  429. package/src/dashboard/plugin-wizard-tool.ts +55 -0
  430. package/src/dashboard/seat-boot-preamble.ts +171 -1
  431. package/src/dashboard/side-basic-runtime.ts +54 -1
  432. package/src/dashboard/sidetab-runtime.ts +90 -1
  433. package/src/dashboard/skill-catalog-preamble.ts +101 -0
  434. package/src/dashboard/skill-detection-runtime.ts +55 -15
  435. package/src/dashboard/slash-runtime/dashboard-handlers.ts +15 -0
  436. package/src/dashboard/terminal-popup-runtime.ts +6 -3
  437. package/src/dashboard/turn-preamble.ts +53 -15
  438. package/src/dashboard/turn-prompt-runtime.ts +4 -2
  439. package/src/decisions/linear-progress-summary.ts +78 -0
  440. package/src/decisions/linear-progress-sync.ts +152 -0
  441. package/src/domains/outbound-alert.ts +49 -11
  442. package/src/domains/telegram-kind-route.ts +16 -9
  443. package/src/graph-runner/arg-allowance.ts +13 -0
  444. package/src/graph-runner/graph-cli.ts +23 -7
  445. package/src/graph-runner/graph-run-api.ts +3 -1
  446. package/src/graph-runner/graph-tick.ts +10 -2
  447. package/src/graph-runner/runner.ts +86 -18
  448. package/src/graph-wizard/mission-compose.ts +407 -12
  449. package/src/grok/agent-search.ts +14 -4
  450. package/src/grok/credential.ts +28 -11
  451. package/src/harness/dispatch-backpressure.ts +54 -1
  452. package/src/harness/dispatch-shadow-compare.ts +74 -0
  453. package/src/harness/harness-cli-command.ts +11 -1
  454. package/src/harness/harness-pod-dispatch.ts +81 -15
  455. package/src/harness/harness-stop.ts +155 -11
  456. package/src/harness/skill-exec.ts +21 -9
  457. package/src/harness/skill-select.ts +1 -1
  458. package/src/hooks/error-report-cloud.ts +101 -0
  459. package/src/hooks/receiver.ts +29 -2
  460. package/src/index.ts +159 -13
  461. package/src/instance/spawn-elanous.ts +6 -4
  462. package/src/intake-plane/actions.ts +354 -0
  463. package/src/intake-plane/adapters/telegram-ambient.ts +34 -18
  464. package/src/intake-plane/intake-sources.ts +78 -8
  465. package/src/intake-plane/items.ts +14 -4
  466. package/src/intake-plane/linear-mission-sync.ts +80 -0
  467. package/src/intake-plane/linear-secretary-runtime.ts +178 -0
  468. package/src/intake-plane/linear-wish.ts +227 -1
  469. package/src/life/life-cli.ts +168 -0
  470. package/src/life/life-kinds.ts +160 -0
  471. package/src/live-supply/budget-consumer.ts +78 -0
  472. package/src/live-supply/read.ts +3 -0
  473. package/src/live-supply/snapshot.ts +45 -0
  474. package/src/llm/provider-credentials.ts +8 -2
  475. package/src/llm.ts +168 -9
  476. package/src/loops/orchestrator/coordinator-shadow.ts +226 -0
  477. package/src/loops/orchestrator/tick.ts +13 -0
  478. package/src/maturity/feature-maturity.ts +4 -4
  479. package/src/msg/msg-sse-server.ts +3 -3
  480. package/src/msg/msg-store.ts +177 -19
  481. package/src/native-tool-catalog.ts +38 -4
  482. package/src/nexus/api/harness-traversal.ts +11 -0
  483. package/src/nexus/api/http-server.ts +37 -1
  484. package/src/nexus/api/mcp-public-allowlist.ts +2 -0
  485. package/src/nexus/index.ts +7 -2
  486. package/src/nexus/outbound/format.ts +9 -0
  487. package/src/nexus/outbound/router.ts +98 -13
  488. package/src/nexus/setup-status.ts +9 -0
  489. package/src/nexus/state/state.ts +3 -0
  490. package/src/oauth/codex-account-store.ts +20 -7
  491. package/src/oauth/codex-owner-mirror.ts +44 -0
  492. package/src/oauth/codex.ts +17 -2
  493. package/src/oauth/fallback-chain.ts +47 -17
  494. package/src/onboarding/first-run-doctor.ts +8 -1
  495. package/src/onboarding/first-run.ts +85 -26
  496. package/src/onboarding/key-setup.ts +103 -0
  497. package/src/onboarding/menu-answer.ts +13 -0
  498. package/src/onboarding/secret-prompt.ts +37 -0
  499. package/src/plugins/install/plugin-install.ts +59 -0
  500. package/src/pr-tool/census.ts +133 -2
  501. package/src/pty-shell/pty-control-ipc.ts +4 -1
  502. package/src/pty-shell/tui-run-state.ts +188 -2
  503. package/src/registry/catalog-server.ts +232 -0
  504. package/src/registry/loader.ts +45 -1
  505. package/src/registry/types.ts +1 -2
  506. package/src/release-loop/checklist-target-path-hint.ts +13 -0
  507. package/src/release-loop/checklist.ts +9 -1
  508. package/src/repl/index.ts +43 -2
  509. package/src/research/axis-fanout.ts +136 -16
  510. package/src/research/bloom-exemplars.ts +3 -1
  511. package/src/research/gap-followup.ts +13 -1
  512. package/src/research/plugin-discovery.ts +36 -14
  513. package/src/research-bridge/invoke.ts +22 -5
  514. package/src/research-bridge/types.ts +2 -0
  515. package/src/self-dev/ask-launch-flow.ts +72 -1
  516. package/src/self-dev/decompose.ts +119 -5
  517. package/src/self-dev/dev-cli.ts +4 -1
  518. package/src/self-dev/dev-pipeline.ts +5 -0
  519. package/src/self-dev/draft-residue.ts +64 -5
  520. package/src/self-dev/graph-front-nodes.ts +2 -1
  521. package/src/self-dev/graph-journey-route.ts +76 -21
  522. package/src/self-dev/launch-preflight-text.ts +5 -6
  523. package/src/self-dev/launch-preflight.ts +58 -0
  524. package/src/self-dev/orchestrate.ts +13 -3
  525. package/src/self-dev/review-provider-fallback.ts +9 -2
  526. package/src/self-dev/run-supervisor.ts +42 -4
  527. package/src/self-dev/run-types.ts +4 -0
  528. package/src/self-dev/shard-aggregate.ts +4 -0
  529. package/src/self-dev/shard-run.ts +36 -15
  530. package/src/self-implement/abandoned-classification.ts +12 -3
  531. package/src/self-implement/budget-gate.ts +7 -0
  532. package/src/self-implement/child-llm-preference.ts +10 -1
  533. package/src/self-implement/doctor-visit.ts +118 -8
  534. package/src/self-implement/elanous-tui-spawn.ts +3 -0
  535. package/src/self-implement/fixtures/tdd-green-missing-passing-child-transcript.txt +2 -0
  536. package/src/self-implement/gate-artifacts.ts +2 -1
  537. package/src/self-implement/goal-author-cli.ts +4 -2
  538. package/src/self-implement/goal-author.ts +684 -7
  539. package/src/self-implement/graph-overlay-yaml.ts +37 -4
  540. package/src/self-implement/graph-overlay.ts +3 -1
  541. package/src/self-implement/graph-profile-yaml.ts +107 -0
  542. package/src/self-implement/graph-yaml.ts +26 -3
  543. package/src/self-implement/headless-elanous-driver.ts +31 -2
  544. package/src/self-implement/heal-intake.ts +112 -4
  545. package/src/self-implement/heal-triage.ts +20 -0
  546. package/src/self-implement/host-regate.ts +27 -4
  547. package/src/self-implement/merge-train.ts +5 -0
  548. package/src/self-implement/off-diff-evidence.ts +249 -5
  549. package/src/self-implement/orchestrator.ts +365 -25
  550. package/src/self-implement/regate-detail.ts +38 -1
  551. package/src/self-implement/rework-child-provider.ts +25 -0
  552. package/src/self-implement/run-chart.ts +122 -0
  553. package/src/self-implement/run-ledger.ts +162 -11
  554. package/src/self-implement/run-stop.ts +188 -4
  555. package/src/self-implement/runtime-overlay-run-steps.ts +95 -0
  556. package/src/self-implement/stop-autoheal.ts +13 -0
  557. package/src/self-implement/tdd-evidence-tags.ts +9 -0
  558. package/src/self-implement/train-gate-receipt.ts +166 -0
  559. package/src/self-implement/train-gate-remote.ts +62 -18
  560. package/src/session/chat.ts +40 -4
  561. package/src/session/session-fanout.ts +2 -0
  562. package/src/session/streaming/acp-stream-sink.ts +2 -1
  563. package/src/session/streaming/chunk-producer.ts +6 -0
  564. package/src/session/streaming/stream-compositor.ts +3 -2
  565. package/src/session-runtime/index.ts +135 -5
  566. package/src/session-runtime/retry-policy.ts +1 -1
  567. package/src/session-runtime/tier-flip.ts +3 -3
  568. package/src/setup/llm-env-detect.ts +3 -0
  569. package/src/setup/service-key-catalog.ts +46 -0
  570. package/src/setup/service-keys.ts +241 -0
  571. package/src/sidetab-core/model.ts +19 -5
  572. package/src/sidetab-core/visible-agent-mission.ts +262 -0
  573. package/src/skills/name-match.ts +20 -0
  574. package/src/skills/tools/agent.ts +53 -6
  575. package/src/skills/tools/omni-search.ts +173 -13
  576. package/src/task-agent/parent-host.ts +10 -0
  577. package/src/task-agent/pod-distributor-entry.ts +3 -0
  578. package/src/task-agent/repair-outcomes.ts +65 -0
  579. package/src/task-agent/task-hand.ts +47 -7
  580. package/src/task-orchestrator/dispatcher.ts +14 -1
  581. package/src/task-orchestrator/linear-capture-events.ts +55 -0
  582. package/src/task-orchestrator/store.ts +16 -5
  583. package/src/task-orchestrator/surfaces/pod-artifact-return.ts +4 -0
  584. package/src/task-orchestrator/surfaces/pod-distributor.ts +48 -0
  585. package/src/task-orchestrator/surfaces/pod-failure-reason.ts +92 -1
  586. package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +38 -1
  587. package/src/task-orchestrator/surfaces/pod-ledger-events.ts +113 -14
  588. package/src/task-orchestrator/surfaces/pod-si-warm-entry.ts +33 -6
  589. package/src/task-orchestrator/surfaces/pod-source-bundle.ts +45 -9
  590. package/src/task-orchestrator/surfaces/pod-source-receive.ts +178 -16
  591. package/src/task-orchestrator/surfaces/pod-source-spec.ts +3 -3
  592. package/src/task-orchestrator/surfaces/pod-warm-switch.ts +2 -0
  593. package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +237 -41
  594. package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +80 -3
  595. package/src/task-orchestrator/surfaces/self-implement-pod.ts +337 -51
  596. package/src/task-orchestrator/surfaces/self-implement.ts +27 -3
  597. package/src/task-orchestrator/surfaces/warm-reuse-evidence.ts +169 -0
  598. package/src/task-orchestrator/types.ts +14 -0
  599. package/src/telegram.ts +14 -16
  600. package/src/terminal/coding-agent.ts +14 -5
  601. package/src/terminal/session-registry.ts +1 -1
  602. package/src/tokens.ts +35 -2
  603. package/src/tool-hints/gate.ts +1 -0
  604. package/src/tool-runtime/agent-runtime.ts +2 -0
  605. package/src/tool-runtime/browser-hand-runtime.ts +381 -0
  606. package/src/tool-runtime/browser-runtime.ts +2 -1
  607. package/src/tool-runtime/elanous-linear-issue-runtime.ts +76 -0
  608. package/src/tool-runtime/elanous-linear-secretary-runtime.ts +57 -0
  609. package/src/tool-runtime/elanous-skills-list-runtime.ts +5 -1
  610. package/src/tool-runtime/graph-mcp-runtimes.ts +240 -0
  611. package/src/tool-runtime/index.ts +6 -0
  612. package/src/tool-runtime/skill-exec-runtime.ts +33 -13
  613. package/src/tool-runtime/types.ts +4 -0
  614. package/src/tui/entry.ts +38 -5
  615. package/src/tui/sidetab/attach.ts +177 -1
  616. package/src/tui/sidetab/herdr-portal.ts +225 -0
  617. package/src/tui-client/local-chat-turn.ts +26 -13
  618. package/src/tui.ts +22 -0
  619. package/src/user-config.ts +34 -9
  620. package/src/user-intent/types.ts +4 -3
  621. package/src/ux-sim/browser-hand.ts +165 -0
  622. package/src/ux-sim/draft-inventory-builder.ts +198 -0
  623. package/src/ux-sim/fake-browser-page.ts +81 -0
  624. package/src/ux-sim/fake-kubectl.ts +37 -3
  625. package/src/ux-sim/fake-linear-device.ts +31 -0
  626. package/src/ux-sim/fault-pool-cap.ts +11 -6
  627. package/src/ux-sim/graph-engine-sim.ts +47 -0
  628. package/src/ux-sim/linear-secretary.ts +216 -0
  629. package/src/ux-sim/mock-scenario-catalog.json +93 -0
  630. package/src/ux-sim/mock-scenario-catalog.ts +274 -0
  631. package/src/ux-sim/onboarding-first-run-device.ts +31 -21
  632. package/src/ux-sim/scenario.ts +185 -48
  633. package/src/ux-sim/service-key-setup.ts +50 -0
  634. package/src/ux-sim/term-slash-device.ts +74 -0
  635. package/src/ux-sim/turn-throw-sim.ts +31 -0
  636. package/src/version/packed-revision.json +1 -1
  637. package/src/voice/voice-tts-singleton.ts +18 -3
  638. package/src/web-search/exa.ts +77 -0
  639. package/src/web-search/grok.ts +5 -9
  640. package/src/web-search/index.ts +30 -9
  641. package/src/web-search/provider.ts +4 -1
  642. package/src/web-search/x-intent.ts +5 -0
  643. package/apps/pwa/out/_next/static/chunks/1115.434ae2ecb0ad986d.js +0 -149
  644. package/apps/pwa/out/_next/static/chunks/1121.667cec0bcdbb3fdb.js +0 -36
  645. package/apps/pwa/out/_next/static/chunks/1197-54da59d250a6e476.js +0 -1
  646. package/apps/pwa/out/_next/static/chunks/1245.1cfd13b26dbd71d6.js +0 -287
  647. package/apps/pwa/out/_next/static/chunks/1494-f93046ff5c5a124d.js +0 -1
  648. package/apps/pwa/out/_next/static/chunks/1609.2b312797599b8e45.js +0 -1
  649. package/apps/pwa/out/_next/static/chunks/1661.0dd330f3d89f73f3.js +0 -1
  650. package/apps/pwa/out/_next/static/chunks/167-0c121e4b47e0f9da.js +0 -1
  651. package/apps/pwa/out/_next/static/chunks/1700.cdc2bf8cc685e221.js +0 -90
  652. package/apps/pwa/out/_next/static/chunks/1703-78e46acad29f3cfc.js +0 -1
  653. package/apps/pwa/out/_next/static/chunks/1765.679b29625c8e88d4.js +0 -77
  654. package/apps/pwa/out/_next/static/chunks/1971-7efb628c471dc5a0.js +0 -1
  655. package/apps/pwa/out/_next/static/chunks/1999-8de7b7bb36801913.js +0 -1
  656. package/apps/pwa/out/_next/static/chunks/2073.689dcb2680113d76.js +0 -1
  657. package/apps/pwa/out/_next/static/chunks/2198-557d49184104d165.js +0 -1
  658. package/apps/pwa/out/_next/static/chunks/221-440ce67fa9f5c839.js +0 -1
  659. package/apps/pwa/out/_next/static/chunks/2427-8ed8e98624cbd664.js +0 -1
  660. package/apps/pwa/out/_next/static/chunks/2457-725c5827bc003795.js +0 -1
  661. package/apps/pwa/out/_next/static/chunks/2491-2718b15a5ccb75a5.js +0 -1
  662. package/apps/pwa/out/_next/static/chunks/2527-5c636a43c7cc5dde.js +0 -1
  663. package/apps/pwa/out/_next/static/chunks/2692-1027cb16fe4ccf49.js +0 -1
  664. package/apps/pwa/out/_next/static/chunks/2773.0e80b9d325fb5635.js +0 -32
  665. package/apps/pwa/out/_next/static/chunks/2873-0f3cb56c8e3528ea.js +0 -1
  666. package/apps/pwa/out/_next/static/chunks/3097.864e92bdaa2f4d15.js +0 -79
  667. package/apps/pwa/out/_next/static/chunks/3136-d6870ba63300a93e.js +0 -1
  668. package/apps/pwa/out/_next/static/chunks/3173-0289113d434e83b7.js +0 -1
  669. package/apps/pwa/out/_next/static/chunks/325-dd9208a1a0ab7ce4.js +0 -1
  670. package/apps/pwa/out/_next/static/chunks/3283.528f430dd043fb4e.js +0 -74
  671. package/apps/pwa/out/_next/static/chunks/3295.cc8cb13b8f0dae1a.js +0 -1
  672. package/apps/pwa/out/_next/static/chunks/3688-86e3b88abf18cb3b.js +0 -1
  673. package/apps/pwa/out/_next/static/chunks/3804-7220467a5473a8df.js +0 -1
  674. package/apps/pwa/out/_next/static/chunks/3808.3e1e247ce7bdf889.js +0 -1
  675. package/apps/pwa/out/_next/static/chunks/3927.b5473ad109da44c5.js +0 -1
  676. package/apps/pwa/out/_next/static/chunks/3934-98ea94832e194796.js +0 -1
  677. package/apps/pwa/out/_next/static/chunks/4156.ba4de4a3664f04b4.js +0 -1
  678. package/apps/pwa/out/_next/static/chunks/4297-239ca82f293faab0.js +0 -1
  679. package/apps/pwa/out/_next/static/chunks/4320-dcc5a7734126f4c9.js +0 -1
  680. package/apps/pwa/out/_next/static/chunks/4434.94b4c552a2d91e69.js +0 -148
  681. package/apps/pwa/out/_next/static/chunks/4579.03e4092f73950965.js +0 -226
  682. package/apps/pwa/out/_next/static/chunks/4667.97e31aa38c95c475.js +0 -309
  683. package/apps/pwa/out/_next/static/chunks/4702.4a4adc1f16d7c93b.js +0 -64
  684. package/apps/pwa/out/_next/static/chunks/4815.481501c57b3568d9.js +0 -1
  685. package/apps/pwa/out/_next/static/chunks/487-d16e698ef14662d9.js +0 -1
  686. package/apps/pwa/out/_next/static/chunks/4888-7a38bf522c9cc6fe.js +0 -1
  687. package/apps/pwa/out/_next/static/chunks/5034-30e429d6bb086881.js +0 -1
  688. package/apps/pwa/out/_next/static/chunks/5040-35c494e60dadd97d.js +0 -1
  689. package/apps/pwa/out/_next/static/chunks/50c6ab1e.81a96e419350909d.js +0 -1
  690. package/apps/pwa/out/_next/static/chunks/5154.4b6a836179356f30.js +0 -94
  691. package/apps/pwa/out/_next/static/chunks/5228-a8200df486278f2d.js +0 -1
  692. package/apps/pwa/out/_next/static/chunks/5379.97af106d09566f69.js +0 -8
  693. package/apps/pwa/out/_next/static/chunks/5479-b6372e762719f92f.js +0 -1
  694. package/apps/pwa/out/_next/static/chunks/5534-699c5cbcbc96c5d7.js +0 -1
  695. package/apps/pwa/out/_next/static/chunks/5701.9c4e8f250312eeee.js +0 -24
  696. package/apps/pwa/out/_next/static/chunks/5892.2526d962339662d8.js +0 -1
  697. package/apps/pwa/out/_next/static/chunks/5937.c2df9e3447e1f667.js +0 -1
  698. package/apps/pwa/out/_next/static/chunks/5941.8210cc93c9202c0a.js +0 -286
  699. package/apps/pwa/out/_next/static/chunks/5975.4004f820ae3cecd5.js +0 -1
  700. package/apps/pwa/out/_next/static/chunks/6142-7ccd48795d7abd55.js +0 -1
  701. package/apps/pwa/out/_next/static/chunks/6160.bf9177b8c1bfb243.js +0 -1
  702. package/apps/pwa/out/_next/static/chunks/6398.71ba0690c8027555.js +0 -27
  703. package/apps/pwa/out/_next/static/chunks/6492.2bd5c10edc1a064e.js +0 -1
  704. package/apps/pwa/out/_next/static/chunks/6552.a3840aa7da35ad68.js +0 -62
  705. package/apps/pwa/out/_next/static/chunks/6736.1e36d3ac5fa5e41d.js +0 -24
  706. package/apps/pwa/out/_next/static/chunks/6900.3ccbe069bdd4556a.js +0 -1
  707. package/apps/pwa/out/_next/static/chunks/71327eb4.add50b365f94bf3a.js +0 -122
  708. package/apps/pwa/out/_next/static/chunks/7136.deca3e3a2ddaa374.js +0 -1
  709. package/apps/pwa/out/_next/static/chunks/7139-ee9f8ed2677a40b3.js +0 -1
  710. package/apps/pwa/out/_next/static/chunks/7191.fdc955f7d96064a4.js +0 -1
  711. package/apps/pwa/out/_next/static/chunks/7423-e0aa5d9e2962120e.js +0 -1
  712. package/apps/pwa/out/_next/static/chunks/7453.afc1ea7e05d56a8c.js +0 -1
  713. package/apps/pwa/out/_next/static/chunks/7503-5e6a3d7fe67e4a0c.js +0 -1
  714. package/apps/pwa/out/_next/static/chunks/7761-476fd7bf768abd34.js +0 -1
  715. package/apps/pwa/out/_next/static/chunks/7975.eafb12097a0a9e62.js +0 -1
  716. package/apps/pwa/out/_next/static/chunks/8050-9b364bdef8f71927.js +0 -1
  717. package/apps/pwa/out/_next/static/chunks/8152.64e253c35cccfaae.js +0 -1
  718. package/apps/pwa/out/_next/static/chunks/8190.620f0231b3924bcb.js +0 -1
  719. package/apps/pwa/out/_next/static/chunks/8448.45b6b1f1a99eeb35.js +0 -104
  720. package/apps/pwa/out/_next/static/chunks/8464-e24f10451b658aac.js +0 -1
  721. package/apps/pwa/out/_next/static/chunks/8477.e4c944bb3aa5d2f3.js +0 -1
  722. package/apps/pwa/out/_next/static/chunks/8710.ca385257d5ca422e.js +0 -1
  723. package/apps/pwa/out/_next/static/chunks/8830.627ccf294ec2465c.js +0 -1
  724. package/apps/pwa/out/_next/static/chunks/8880.64c445592f04acaf.js +0 -1
  725. package/apps/pwa/out/_next/static/chunks/8981.c706964c8ba27aff.js +0 -1
  726. package/apps/pwa/out/_next/static/chunks/9053.bd0fffaff8d3f836.js +0 -1
  727. package/apps/pwa/out/_next/static/chunks/9161-c66e723d7ec9d682.js +0 -1
  728. package/apps/pwa/out/_next/static/chunks/9185.1ecdf9b65c0bb684.js +0 -1
  729. package/apps/pwa/out/_next/static/chunks/9356.fccd5f58086b4ff5.js +0 -1
  730. package/apps/pwa/out/_next/static/chunks/9446.dc0406109371d329.js +0 -1
  731. package/apps/pwa/out/_next/static/chunks/9506.dcf25d467a42627e.js +0 -1
  732. package/apps/pwa/out/_next/static/chunks/9541.eb8e2f8480c7feca.js +0 -93
  733. package/apps/pwa/out/_next/static/chunks/9577.ed7582186efa5482.js +0 -1
  734. package/apps/pwa/out/_next/static/chunks/9579.4a8169600fff2058.js +0 -1
  735. package/apps/pwa/out/_next/static/chunks/9642-ff2e039eb62e3b92.js +0 -1
  736. package/apps/pwa/out/_next/static/chunks/9659-8f2323348113ad80.js +0 -1
  737. package/apps/pwa/out/_next/static/chunks/9724.4c5623af2db43153.js +0 -34
  738. package/apps/pwa/out/_next/static/chunks/9869.81a1e24ca682d5a0.js +0 -1
  739. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-8d9d76ea322d855c.js +0 -1
  740. package/apps/pwa/out/_next/static/chunks/app/approvals/page-ed2c4e59f9f1fe21.js +0 -1
  741. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-2dc99e03c5d76ca0.js +0 -1
  742. package/apps/pwa/out/_next/static/chunks/app/board/page-b5a3a788330e920f.js +0 -1
  743. package/apps/pwa/out/_next/static/chunks/app/botlab/page-14949db884bfa672.js +0 -1
  744. package/apps/pwa/out/_next/static/chunks/app/bots/page-ea76c85b36388a97.js +0 -1
  745. package/apps/pwa/out/_next/static/chunks/app/ceo/page-01716d20af62d325.js +0 -1
  746. package/apps/pwa/out/_next/static/chunks/app/chat/page-62baf6881a64b1e9.js +0 -1
  747. package/apps/pwa/out/_next/static/chunks/app/consult/page-f89ba590c2af8afa.js +0 -1
  748. package/apps/pwa/out/_next/static/chunks/app/control/page-22f8b0f78d9637e5.js +0 -1
  749. package/apps/pwa/out/_next/static/chunks/app/decisions/page-817f9d7e6820be80.js +0 -1
  750. package/apps/pwa/out/_next/static/chunks/app/design-check/page-ffb9bc0d2650249a.js +0 -1
  751. package/apps/pwa/out/_next/static/chunks/app/editor/page-f6d0e64873c0f629.js +0 -1
  752. package/apps/pwa/out/_next/static/chunks/app/exec/page-8bfa0d4ba23a209d.js +0 -1
  753. package/apps/pwa/out/_next/static/chunks/app/field/page-f5060462249e32c7.js +0 -1
  754. package/apps/pwa/out/_next/static/chunks/app/healthz/route-8d9d76ea322d855c.js +0 -1
  755. package/apps/pwa/out/_next/static/chunks/app/inside/page-b2049f8b1ef79117.js +0 -1
  756. package/apps/pwa/out/_next/static/chunks/app/intake/page-1446c5fa93907f11.js +0 -1
  757. package/apps/pwa/out/_next/static/chunks/app/layout-b48a7a07c5204156.js +0 -1
  758. package/apps/pwa/out/_next/static/chunks/app/live/page-e974b8c4ca47614c.js +0 -1
  759. package/apps/pwa/out/_next/static/chunks/app/live-run/page-8a919b869bd28594.js +0 -1
  760. package/apps/pwa/out/_next/static/chunks/app/loops/page-d31b8de6bfcd72ed.js +0 -1
  761. package/apps/pwa/out/_next/static/chunks/app/market/page-64765f817909db29.js +0 -1
  762. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-d128c8569a36ee9b.js +0 -1
  763. package/apps/pwa/out/_next/static/chunks/app/morning/page-b2679d357e9b9270.js +0 -1
  764. package/apps/pwa/out/_next/static/chunks/app/not-found-6fabec98a9e7b269.js +0 -1
  765. package/apps/pwa/out/_next/static/chunks/app/observatory/page-048f30149dcf1349.js +0 -1
  766. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-9113181d6b5a2725.js +0 -1
  767. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-1e7a755a13227611.js +0 -1
  768. package/apps/pwa/out/_next/static/chunks/app/outputs/page-3c8f8b67a203cf07.js +0 -1
  769. package/apps/pwa/out/_next/static/chunks/app/page-18032f5437215062.js +0 -1
  770. package/apps/pwa/out/_next/static/chunks/app/reflection/page-da3b739192fd0ee3.js +0 -1
  771. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-d332545571bd6fd1.js +0 -1
  772. package/apps/pwa/out/_next/static/chunks/app/sessions/page-5237aa5b3f3b8ec5.js +0 -1
  773. package/apps/pwa/out/_next/static/chunks/app/settings/page-d16e56c3989c147e.js +0 -1
  774. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-6b6593600869e2cd.js +0 -1
  775. package/apps/pwa/out/_next/static/chunks/app/setup/layout-8d9d76ea322d855c.js +0 -1
  776. package/apps/pwa/out/_next/static/chunks/app/setup/page-29e8b8a8396b55cb.js +0 -1
  777. package/apps/pwa/out/_next/static/chunks/app/share/page-b3414d856a1a7e2f.js +0 -1
  778. package/apps/pwa/out/_next/static/chunks/app/showroom/page-c3affa52b7ce961b.js +0 -1
  779. package/apps/pwa/out/_next/static/chunks/app/tasks/page-f21dddf9f95b6fab.js +0 -1
  780. package/apps/pwa/out/_next/static/chunks/app/term/page-f5a30a24745bf088.js +0 -1
  781. package/apps/pwa/out/_next/static/chunks/app/today/page-8c8569a09b4d4e34.js +0 -1
  782. package/apps/pwa/out/_next/static/chunks/app/trace/page-2ce32722c0243483.js +0 -1
  783. package/apps/pwa/out/_next/static/chunks/app/vault/page-4767b0d9c0a98c6c.js +0 -1
  784. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-116ee1339c387a75.js +0 -1
  785. package/apps/pwa/out/_next/static/chunks/app/workflows/page-35e8c50ca4ef7ffc.js +0 -1
  786. package/apps/pwa/out/_next/static/chunks/app/workspace/page-52e17113356bb891.js +0 -1
  787. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-7458ae05ed2ac1a0.js +0 -1
  788. package/apps/pwa/out/_next/static/chunks/framework-ad6c9dd524ad6ef8.js +0 -1
  789. package/apps/pwa/out/_next/static/chunks/main-app-2ddd1f2b44d6aa59.js +0 -1
  790. package/apps/pwa/out/_next/static/chunks/main-e3d82bdc358d20c5.js +0 -1
  791. package/apps/pwa/out/_next/static/chunks/pages/_app-71d5aa3896e1655f.js +0 -1
  792. package/apps/pwa/out/_next/static/chunks/pages/_error-03ffc54e00438546.js +0 -1
  793. package/apps/pwa/out/_next/static/chunks/webpack-56bb89af5a611d0b.js +0 -1
  794. package/apps/pwa/out/_next/static/css/be9019f696217521.css +0 -1
  795. package/apps/pwa/out/_next/static/css/d0a48dc099ed86cf.css +0 -1
  796. /package/apps/pwa/out/_next/static/{GiOLWmt4MqDZePubBjA4Q → Om5xS9jpjSXJCeTNGYEi4}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6348],{14074:(e,t,s)=>{Promise.resolve().then(s.bind(s,30139))},15508:(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()},21310:(e,t,s)=>{"use strict";s.d(t,{n:()=>d});var r=s(95332),n=s(30910),i=s(23631),a=s(73688),l=s(53714),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(345);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}}},25905:(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"}})}},30139:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>E});var r=s(46152),n=s(70132),i=s(34130);let a=(0,s(45890).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(75677),o=s(48365),c=s(95332),d=s(66352),u=s(68967),h=s(345),m=s(21310),p=s(15508),f=s(8313);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,{})}},34130:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(45890).A)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},39638:(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}},45890:(e,t,s)=>{"use strict";s.d(t,{A:()=>c});var r=s(95332);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}},48365:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(45890).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"}]])},66352:(e,t,s)=>{"use strict";s.d(t,{M1:()=>c,Qj:()=>d,tI:()=>o});var r=s(46152),n=s(95332),i=s(27864),a=s(345);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)}},70132:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(45890).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"}]])},75677:(e,t,s)=>{"use strict";s.d(t,{A:()=>r});let r=(0,s(45890).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"}]])}},e=>{e.O(0,[5474,8967,8313,4817,5122,7358],()=>e(e.s=14074)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6766],{44155:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>eI});var n=r(46152),a=r(95332),o=r(345),s=r(68967),l=r(17805),i=r(10210),d=r(17870);r(31008);var u=r(16901),c=r(66352),p=r(8313),m=r(61297);let f=[{graph:"workflow",label:"작업 노드",fallbackKinds:m.CF},{graph:"harness",label:"실행 단계 노드",fallbackKinds:m.DN}];var x=r(68442),g=r(62486);r(46570),r(42412);var h=r(56296),b=r(76436),v=r(37720);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 R(e,t){return{...e,edges:e.edges.filter((e,r)=>r!==t)}}function _(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 z(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 A(e){let t=new Set(e.nodes.map(e=>e.id));return e.terminals.filter(e=>t.has(e))}function M(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:A(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 D(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===A(e).length&&o("끝 노드가 없습니다 — 노드를 골라 \xab끝 노드\xbb 로 표시하세요")),{ok:0===a.length,issues:a}}function O(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;T(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 T(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 F(e,t,r){let n=e.nodes.map(e=>({...e}));return T(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:O(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 q=r(35661),W=r(36621);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"})]})},...W.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:_}=e,[z,T]=(0,a.useState)(()=>null!=d?d:S("")),[L,U]=(0,a.useState)({}),[Y,W]=(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:M(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,eR]=(0,a.useState)(void 0),e_=(0,a.useRef)(.85);e_.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"),eR(n<640?void 0:100*Math.floor(n/e_.current/100))});return t.observe(e),()=>t.disconnect()},[]);let ez=(0,a.useRef)(!1),eA=(0,a.useRef)({flow:eC,lineLength:eE});eA.current={flow:eC,lineLength:eE};let eM=(0,a.useCallback)(e=>ez.current||e.nodes.length<2?e:F(e,eA.current.flow,eA.current.lineLength),[]),eD=(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:e_.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)},[]),eO=(0,a.useRef)("horizontal:undefined");(0,a.useEffect)(()=>{let e="".concat(eC,":").concat(eE);e===eO.current||ez.current||(eO.current=e,T(e=>eM(e)),eD())},[eC,eE,eM,eD]);let[eV,eP]=(0,a.useState)({}),[eG,eT]=(0,a.useState)(()=>new Set),[eF,eL]=(0,a.useState)(null),[eB,eK]=(0,a.useState)(!1),eU=(0,a.useMemo)(()=>(0,v.S0)(B(z)),[z]),eY=(0,a.useMemo)(()=>(0,v.F8)(B(z)),[z]),eZ=(0,a.useMemo)(()=>{let e=new Map;for(let r of z.nodes){var t;let n=eY.get(r.id);n&&e.set(n,[...null!=(t=e.get(n))?t:[],r.id])}return e},[z,eY]);(0,a.useEffect)(()=>{eT(e=>{let t=new Set([...e].filter(e=>eU.includes(e)));return t.size===e.size?e:t})},[eU]);let eq=(eG.size>0||null!==eF)&&eU.length>0,eW=(0,a.useMemo)(()=>{var e;return null!==eF&&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))}}(z,eG,eF):eq?F(0===(e=null!==eF?new Set([...eG].filter(e=>e!==eF)):eG).size?z: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(z),e).graph,z),eC,eE):z},[z,eG,eF,eB,eq,eC,eE]),eQ=(0,a.useCallback)(e=>{eT(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)(()=>{eT(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===eF&&eD(300)},[eG,eF,eD]);let e$=(0,a.useRef)(null);(0,a.useEffect)(()=>{var e,t;x&&e$.current!==x.rev&&(e$.current=x.rev,T(eM(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"})),eD(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]),e2=(0,a.useMemo)(()=>s.map(e=>e.kind),[s]),e5=(0,a.useMemo)(()=>M(z),[z]),e4=(0,a.useMemo)(()=>D(z,e2),[z,e2]),e3=(null==eu?void 0:eu.yaml)===e5?eu:null,e6=(null==e3?void 0:e3.server)?e3.issues:[],e8=[...e4.issues,...e6],e7={graphId:z.graphId,yaml:e5,graph:z,valid:e4.ok&&0===e6.length,saved:(null==ef?void 0:ef.id)===z.graphId&&ef.yaml===e5&&(null===Y||Y===JSON.stringify(null!=er?er:{}))},e9=(0,a.useRef)(e7);e9.current=e7,(0,a.useEffect)(()=>{null==m||m(e9.current)},[m,z,e5,e7.valid,e7.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=>{eq||T(t=>{try{let r=e(t);return ed(null),r}catch(e){return ed(e instanceof Error?e.message:String(e)),t}})},[eq]),tt=(0,a.useCallback)(()=>eD(200),[eD]);function tr(e,t){if(eq)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 e8)r.nodeId&&t.set(r.nodeId,(null!=(e=t.get(r.nodeId))?e:0)+1);return t},[e8]),ta=(0,a.useMemo)(()=>new Set(A(eW)),[eW]),to=(0,a.useMemo)(()=>(0,b.gL)(eW.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)(eW.edges),{flow:eC,rename:G}),[eW.nodes,eW.edges,eV,eC]),ts=(0,b.d1)(eW.nodes.some(e=>e.id===es)?es:null,to),tl=eW.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:z.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:eW.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=eW.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=eW.edges[e],r=z.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)(eW.nodes.map(e=>{var t;return{id:e.id,position:{x:e.x,y:e.y},...null!=(t=eV[e.id])?t:P}}),eY),[eW,eV,eY]),tu=[...eB&&null!==eF?[]: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:e5,issues:e4.issues,server:!1});em("validate");try{let e=await l.validateGraph("harness",e5);ec({yaml:e5,issues:e.ok&&0===e.errors.length?[]:O(e5,e),server:!0})}catch(e){ec({yaml:e5,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=z.graphId;try{let t=await Z(l,e,e5,(null==ef?void 0:ef.id)===e?"update":"create",er);t.ok?(ex({id:e,yaml:e5,...void 0!==t.version?{version:t.version}:{}}),W(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:e5,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);ez.current=!1,T(eM(n)),U({}),H(r.steps),W(JSON.stringify(null!=(t=r.steps)?t:{})),eo(null),ec(null),ex("mine"===r.source?{id:r.id,yaml:M(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=z.nodes.find(e=>e.id===ea.id))?r:null,tx=(null==ea?void 0:ea.type)==="edge"&&null!=(o=z.edges[ea.index])?o:null,tg=e8.filter(e=>!e.nodeId),th="validate"===ep?null:e3,tb=(0,a.useRef)(null);return(0,a.useEffect)(()=>{var e;z.graphId||null==(e=tb.current)||e.focus()},[z.graphId]),(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col","data-graph-id":z.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:z.graphId,disabled:eq,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:()=>{T(S("")),H(void 0),U({}),W(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:e7.saved?"저장됨".concat((null==ef?void 0:ef.version)!==void 0?" \xb7 v".concat(ef.version):""):(null==ef?void 0:ef.id)===z.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||e7.saved,className:"rounded bg-primary px-3 py-1 text-primary-foreground disabled:opacity-50",children:"save"===ep?"저장 중…":"저장"}),null==p?void 0:p(e7)]})]}),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!==eF?(0,n.jsxs)("nav",{"aria-label":"묶음 위치","data-testid":"unit-breadcrumb",className:"flex items-center gap-1",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{eT(new Set(eU)),eL(null)},title:"모든 묶음을 접어 돌아갑니다",className:"font-mono text-muted-foreground hover:underline",children:z.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:["▣ ",eF]})]}):(0,n.jsx)("span",{className:"text-muted-foreground",children:eq?"접은 보기 — 묶음을 눌러 안쪽 그래프를 여세요 (편집은 통합 보기에서)":"통합 보기 — 모든 묶음이 한 그래프에 펼쳐 있습니다"}),(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:z.graphId||"부모"}),eF&&(0,n.jsxs)("span",{children:["› ",(0,n.jsx)("span",{children:eF})]}),(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:!eq,disabled:eq,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(eq||!n||!e2.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===z.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:q.T,onInit:e=>{eN.current=e},nodesDraggable:!eq,nodesConnectable:!eq,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&&z.nodes.some(e=>e.id===t.id)){let{id:e,position:r}=t;t.dragging&&(ez.current=!0),eq||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=>{!eq&&e.source&&e.target&&z.nodes.some(t=>t.id===e.source)&&z.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)&&!z.nodes.some(e=>e.id===t.id))return void eJ(t.id.slice(v.EQ.length));eq||eo({type:"node",id:t.id})}},onEdgeClick:(e,t)=>{if(eq)return;let r=eW.edges[Number(t.id.slice(1))],n=r?z.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"})]})]}),!eq&&(!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:z,nodeId:tf.id,palette:s,issues:e8.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==_||_(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=>R(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:["노드 ",z.nodes.length," \xb7 간선 ",z.edges.length,z.entry?" \xb7 시작 ".concat(z.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:e5})]})]})]})]}),(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),[A,M]=(0,a.useState)(null),D=u.nodes.filter(e=>e.id!==c).map(e=>e.id),O=D.includes(f)?f:null!=(o=D[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 T(){let e=S.trim();if(e!==N.id)try{_(u,N.id,{id:e}),b(t=>_(t,N.id,{id:e})),M(null),v(e)}catch(e){M(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:T,onKeyDown:e=>{"Enter"===e.key&&T()},className:"rounded border border-border bg-background px-2 py-1 font-mono text-foreground"})]}),A&&(0,n.jsx)("p",{role:"alert",className:"text-red-500",children:A}),(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=>_(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=>_(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=>_(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=>z(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:"선택 안 함"}),D.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===D.length?(0,n.jsx)("p",{className:"text-muted-foreground",children:"이을 다른 노드가 없습니다."}):(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-1",children:[(0,n.jsx)("select",{"aria-label":"연결할 노드",value:O,onChange:e=>g(e.target.value),className:"rounded border border-border bg-background px-1 py-1 font-mono text-foreground",children:D.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,O,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=>R(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(88476);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 R=(0,a.useRef)(null);function _(e){let t=N.current++;return x(r=>[...r,{...e,id:t}]),t}async function z(e,t,r){let n=e.trim();if(b)return;if(!n)return void _({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=_({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 _({role:"assistant",text:"취소했습니다 — 캔버스는 그대로입니다.",tone:"warn"});if("unsupported"===e.kind)return void _({role:"assistant",text:"이 Daemon 이 아직 그래프 마법사를 지원하지 않습니다 — 서버 업데이트 후 다시 시도하세요",tone:"error"});if("empty"===e.kind)return void _({role:"assistant",text:"무엇을 만들지 한 줄로 적어 주세요.",tone:"warn"});if("error"===e.kind)return void _({role:"assistant",text:"만들기 실패: ".concat(e.message),tone:"error"});let t=o?null:a.graph,r=i?i():R.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),R.current=a.graph}_({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 A(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),R.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 D(){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,z(c))},[c]);let O=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&&O?(0,n.jsx)("span",{"data-testid":"wizard-collapsed-line",className:"min-w-0 truncate text-xs text-muted-foreground lg:hidden",children:O}):null,(0,n.jsx)("span",{className:"text-xs text-muted-foreground ".concat(j&&O?"max-lg:hidden":""),children:"말하면 노드와 간선이 생깁니다"}),(0,n.jsx)("button",{type:"button",onClick:()=>w(e=>!e),"aria-expanded":!j,className:"ml-auto shrink-0 whitespace-nowrap rounded px-2 py-0.5 text-xs text-muted-foreground hover:bg-muted lg:hidden",children:j?"펼치기":"접기"})]}),(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col ".concat(j?"max-lg:hidden":""),children:[(0,n.jsxs)("ol",{ref:S,className:"flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto px-3 py-2 text-sm","aria-live":"polite",children:[0===f.length&&(0,n.jsxs)("li",{className:"text-xs text-muted-foreground",children:[(0,n.jsx)("p",{children:"만들고 싶은 일을 한 줄로 적으세요. 이어서 말하면 지금 그래프를 고칩니다."}),(0,n.jsx)("div",{className:"mt-2 flex flex-wrap gap-1.5",children:ec.map(e=>(0,n.jsx)("button",{type:"button",onClick:()=>{z(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:()=>A(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:M(r.before)}:null:void 0;A(e);let a=g.trim();z(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:D,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(),z(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(),z(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(93665);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=z(o,o.nodes[o.nodes.length-1].id,!0)),M(o)}(e,a,o,l);if("harness"===e){let r=D(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),[z,A]=(0,a.useState)(""),M=(0,s.I)({queryKey:["graph-wizard-packs"],queryFn:()=>c.getGraphWizardPacks(),enabled:"harness"===b&&!!c.getGraphWizardPacks,retry:!1}),D=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}}(),[O,P]=(0,a.useState)(!1),G=(0,a.useCallback)(e=>{D.reset(),P(!!e.wizardPrompt),E(null),C({key:Date.now(),...e})},[D.reset]),T=null!=(d=null==m?void 0:m.get("wizard"))?d:null,F=(0,a.useRef)(null);(0,a.useEffect)(()=>{"harness"===b&&T&&F.current!==T&&(F.current=T,k(!0),G({saved:!1,wizardPrompt:T}))},[b,T,G]);let L=(0,a.useCallback)(e=>_(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,q=e=>{e!==b&&(C(null),E(null),_(void 0),j(e)),k(!0)},W=(0,a.useCallback)(e=>{D.onChange(e),E(e)},[D.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:()=>q("workflow"),children:"워크플로 목록"}),(0,n.jsx)("button",{type:"button","aria-pressed":y&&"harness"===b,onClick:()=>q("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),_(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:z,onChange:e=>A(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=M.data)?void 0:t.packs)?u:[]).map(e=>(0,n.jsxs)("option",{value:e.id,children:[e.title," (",e.id,")"]},e.id))]}),M.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:O,...N.graph?{initialGraph:N.graph,initialSaved:N.saved}:{},...R?{nodeStatus:R}:{},...D.replace?{replace:D.replace}:{},...D.highlight?{highlight:D.highlight}:{},nodeLabels:D.labels,...D.steps?{wizardSteps:D.steps}:{},onChange:W,installedPacks:null==(r=M.data)?void 0:r.packs,onKnowledgePackChange:A,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:D.current,laid:D.laid,...z?{packId:z}:{},onApply:(e,t,r,n,a)=>{P(!0),D.apply(e,t,r,n,a)},onRestore:D.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,{})})}},66081:(e,t,r)=>{"use strict";r.d(t,{C:()=>d,DaemonProvider:()=>u,Q:()=>c});var n=r(46152),a=r(95332),o=r(55161),s=r(85839),l=r(84870),i=r(25905);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}},70616:(e,t,r)=>{Promise.resolve().then(r.bind(r,44155))},85839:(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}},88476:(e,t,r)=>{"use strict";r.d(t,{$5:()=>d,dJ:()=>u});var n=r(95332);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,[8731,7323,3357,5474,8967,1737,7261,8861,8062,4870,8313,4311,8997,8749,4817,5122,7358],()=>e(e.s=70616)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[650],{1598:(e,t,r)=>{"use strict";function n(e){return{slides:e.slides.map(e=>{let{image:t,caption:r,include:n}=e;return{image:t,caption:r,include:n}}),caption:{hook:e.caption.hook,body:e.caption.body},hashtags:[...e.hashtags],cover:{text:e.cover.text,sub:e.cover.sub},location:e.location}}r.d(t,{$Y:()=>l,LP:()=>c,Mz:()=>n,ll:()=>u,rH:()=>o});class s extends Error{constructor(e,t){super(t),this.status=e,this.name="GraphApprovalsApiError"}}let a={list:"목록을 보려면",decide:"승인하려면",save:"초안을 저장하려면"},l="/app/settings/#bearer-token";function o(e){return e instanceof s&&(401===e.status||403===e.status)}function c(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"decide";return e instanceof s?401===e.status||403===e.status?"".concat(a[t]," 이 기기를 데몬에 연결해야 합니다 — 설정 › 데몬 연결 › 연결 토큰 칸에 토큰을 넣어 주세요."):404===e.status?"이 실행을 찾지 못했습니다. 목록을 다시 확인해 주세요.":409===e.status?"이미 결정된 실행입니다. 목록을 다시 확인해 주세요.":400===e.status?"결정 내용을 확인한 뒤 다시 시도해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요.":e instanceof TypeError?"서버에 연결하지 못했습니다. 연결 상태를 확인해 주세요.":"승인 요청을 처리하지 못했습니다. 잠시 뒤 다시 시도해 주세요."}let i="/v1/graph-approvals";function u(e){var t,r;let n=(null!=(t=e.baseUrl)?t:"").replace(/\/+$/,""),a=null!=(r=e.fetchImpl)?r:fetch;async function l(t,r){let l={...r,headers:{"content-type":"application/json",...e.authHeader?{authorization:e.authHeader}:{}}},o=e.client?await e.client.fetchResponse(t,l):await a("".concat(n).concat(t),l),c=await o.json().catch(()=>null);if(!o.ok){let e=c&&"object"==typeof c&&"error"in c&&"string"==typeof c.error?c.error:"request-failed";throw new s(o.status,e)}return c}return{list:()=>l(i),decide:(e,t,r)=>l("".concat(i,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t)),{method:"POST",body:JSON.stringify({decision:r})}),saveFeedDraft:(e,t,r)=>l("".concat(i,"/").concat(encodeURIComponent(e),"/").concat(encodeURIComponent(t),"/feed-draft"),{method:"PUT",body:JSON.stringify(r)}),feedMedia:async(t,r,l)=>{let o="".concat(i,"/").concat(encodeURIComponent(t),"/").concat(encodeURIComponent(r),"/media?path=").concat(encodeURIComponent(l)),c={headers:e.authHeader?{authorization:e.authHeader}:{}},u=e.client?await e.client.fetchResponse(o,c):await a("".concat(n).concat(o),c);if(!u.ok)throw new s(u.status,"media-failed");return u.blob()}}}},55084:(e,t,r)=>{"use strict";r.d(t,{a:()=>o});var n=r(46152),s=r(95332),a=r(1598);let l=e=>JSON.stringify([e.graphId,e.runId]);function o(e){let{client:t,approvals:r,onDecided:o,onPendingChange:c}=e,i=(0,s.useMemo)(()=>(0,a.ll)({client:t}),[t]),[u,d]=(0,s.useState)([]),[m,p]=(0,s.useState)({}),[f,x]=(0,s.useState)(null),[h,b]=(0,s.useState)(""),g=(0,s.useRef)(0),y=r.map(l).join("|");function v(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:m;d(e),c(r.filter(r=>!t[l(r)]&&e.some(e=>l(e)===l(r))).length)}async function j(e,t){let n=l(e);if(f||m[n]||!r.some(e=>l(e)===n)||!u.some(e=>l(e)===n))return;let s=g.current;x(n),b("");try{if(await i.decide(e.graphId,e.runId,t),g.current!==s)return;let r={...m,[n]:t};p(r),v(u,r),o();let a=await i.list();g.current===s&&v(a.items,r)}catch(e){g.current===s&&b((0,a.LP)(e,"decide"))}finally{g.current===s&&x(null)}}return((0,s.useEffect)(()=>{let e=++g.current;return(d([]),b(""),y)?(i.list().then(t=>{g.current===e&&v(t.items)}).catch(t=>{g.current===e&&b((0,a.LP)(t,"list"))}),()=>{g.current+=1}):(c(0),()=>{g.current+=1})},[i,y]),0===r.length)?null:(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("h3",{className:"font-semibold",children:"게시 승인"}),h&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:h}),(0,n.jsx)("ul",{className:"space-y-2",children:r.map(e=>{let t=l(e),r=u.some(e=>l(e)===t);return(0,n.jsxs)("li",{className:"rounded-lg border border-border bg-background px-4 py-3 text-sm",children:[(0,n.jsx)("p",{children:e.message}),m[t]?(0,n.jsx)("p",{className:"mt-2 text-muted-foreground",children:"approved"===m[t]?"승인됨":"보류됨"}):r?(0,n.jsxs)("div",{className:"mt-2 flex gap-2",children:[(0,n.jsx)("button",{type:"button",disabled:null!==f,onClick:()=>void j(e,"approved"),className:"rounded-lg bg-primary px-3 py-1 text-primary-foreground disabled:opacity-50",children:"승인"}),(0,n.jsx)("button",{type:"button",disabled:null!==f,onClick:()=>void j(e,"rejected"),className:"rounded-lg border border-border px-3 py-1 disabled:opacity-50",children:"보류"})]}):(0,n.jsx)("p",{className:"mt-2 text-muted-foreground",children:"대기 중인 승인이 아닙니다."})]},t)})})]})}},66081:(e,t,r)=>{"use strict";r.d(t,{C:()=>i,DaemonProvider:()=>u,Q:()=>d});var n=r(46152),s=r(95332),a=r(55161),l=r(85839),o=r(84870),c=r(25905);let i=(0,s.createContext)(null);function u(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[u,d]=(0,s.useState)(r),[m,p]=(0,s.useState)(""),[f]=(0,s.useState)(()=>new o.ki(r));(0,s.useEffect)(()=>{let e=(0,a.Fp)();d(e),f.updateConfig(e),p((0,l.oD)()),(0,c.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[f]),(0,s.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();f.updateConfig(t),d(t),(0,c.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&p(t=>t===e.newValue?t:((0,c.cY)("webterm.provider.daemon.session-cross-tab",{previous:t||"(empty)",next:e.newValue}),e.newValue))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[f]);let x=e=>{d(t=>{let r={...t,...e};return(0,a.Qc)(e),f.updateConfig(r),(0,c.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},h=e=>{p(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,c.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,s.useMemo)(()=>({config:u,setConfig:x,client:f,sessionId:m,setSessionId:h}),[u,f,m]);return(0,n.jsx)(i.Provider,{value:b,children:t})}function d(){let e=(0,s.useContext)(i);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},67715:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>m});var n=r(46152),s=r(95332),a=r(66081),l=r(55084);let o={report:"보고서",pdf:"PDF",video:"영상",image:"그림",text:"글",link:"링크"};function c(e,t){if(e.startsWith("/v1/exec-requests/".concat(encodeURIComponent(t),"/files/")))return{url:e,daemonFile:!0};try{let t=new URL(e);if(("https:"===t.protocol||"http:"===t.protocol)&&!t.username&&!t.password)return{url:t.href,daemonFile:!1}}catch(e){}return null}function i(e){let{client:t,id:r,result:a}=e,[l,i]=(0,s.useState)(""),[u,d]=(0,s.useState)(!1),[m,p]=(0,s.useState)(null),f=c(a.url,r),x=a.title||o[a.kind],h=(null==f?void 0:f.daemonFile)&&("video"===a.kind||"image"===a.kind);if((0,s.useEffect)(()=>{let e;if(!h||!f)return;let r=!0;return p(null),i(""),t.fetchResponse(f.url).then(async t=>{if(!t.ok)throw Error("HTTP ".concat(t.status));let n=await t.blob();r&&p(e=URL.createObjectURL(n))}).catch(()=>{r&&i("결과 파일을 열지 못했습니다. 다시 시도해 주세요.")}),()=>{r=!1,e&&URL.revokeObjectURL(e)}},[t,h,null==f?void 0:f.url]),!f)return null;async function b(){if(!(null==f?void 0:f.daemonFile)||u)return;let e="pdf"===a.kind?window.open("","_blank"):null;if("pdf"===a.kind&&!e)return void i("결과 파일을 열지 못했습니다. 다시 시도해 주세요.");e&&(e.opener=null),d(!0),i("");try{let n=await t.fetchResponse(f.url);if(!n.ok)throw Error("HTTP ".concat(n.status));let s=URL.createObjectURL(await n.blob());if(e)e.closed?URL.revokeObjectURL(s):(e.location.replace(s),setTimeout(()=>URL.revokeObjectURL(s),6e4));else{var r;let e=document.createElement("a");e.href=s,e.download=decodeURIComponent(null!=(r=f.url.split("/").at(-1))?r:x),document.body.appendChild(e),e.click(),e.remove(),setTimeout(()=>URL.revokeObjectURL(s),6e4)}}catch(t){null==e||e.close(),i("결과 파일을 열지 못했습니다. 다시 시도해 주세요.")}finally{d(!1)}}return(0,n.jsxs)("li",{className:"rounded-lg border border-border bg-background px-4 py-3 text-sm",children:[h?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{className:"font-medium",children:x}),m&&("video"===a.kind?(0,n.jsx)("video",{controls:!0,src:m,"aria-label":x,className:"mt-2 max-w-full"}):(0,n.jsx)("img",{src:m,alt:x,className:"mt-2 max-w-full"}))]}):f.daemonFile?(0,n.jsx)("button",{type:"button",onClick:()=>void b(),disabled:u,className:"font-medium text-primary underline underline-offset-4 disabled:opacity-50",children:u?"여는 중…":x}):(0,n.jsx)("a",{href:f.url,target:"_blank",rel:"noopener noreferrer",className:"font-medium text-primary underline underline-offset-4",children:x}),(0,n.jsxs)("span",{className:"ml-2 text-muted-foreground",children:[a.seat.toUpperCase()," \xb7 ",o[a.kind]]}),a.sources&&a.sources.length>0&&(0,n.jsx)("ul",{className:"mt-2 flex flex-wrap gap-2","aria-label":"출처",children:a.sources.slice(0,3).map((e,t)=>{let s=c(e.url,r);return s&&!s.daemonFile?(0,n.jsx)("li",{children:(0,n.jsx)("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"text-primary underline underline-offset-4",children:e.title})},"".concat(e.url,":").concat(t)):null})}),l&&(0,n.jsx)("p",{role:"alert",className:"mt-1 text-destructive",children:l})]})}function u(e){switch(e){case"planning":return"계획 중";case"running":return"진행 중";case"done":return"완료";case"failed":return"멈춤"}}function d(e){switch(e){case"waiting":return"대기";case"running":return"진행 중";case"done":return"완료";case"failed":return"못 함"}}function m(){var e,t,r,o;let{client:c}=(0,a.Q)(),[m,p]=(0,s.useState)(""),[f,x]=(0,s.useState)(!1),[h,b]=(0,s.useState)([]),[g,y]=(0,s.useState)(!1),[v,j]=(0,s.useState)(""),[N,w]=(0,s.useState)(""),[k,R]=(0,s.useState)(null),[S,U]=(0,s.useState)(null),[C,I]=(0,s.useState)(""),[E,L]=(0,s.useState)(0),[O,P]=(0,s.useState)(null),D=(0,s.useRef)(new Map),F=(0,s.useRef)(0),T=(0,s.useRef)(k);T.current=k;let _=(0,s.useRef)(null),H=(0,s.useRef)(0),M=h.some(e=>"planning"===e.status||"running"===e.status),q=null==(e=h.find(e=>e.id===k))?void 0:e.status,Y=(null==S?void 0:S.id)===k&&(null===O?S.approvals.length>0:O>0);(0,s.useEffect)(()=>{var e,t;return F.current+=1,H.current+=1,_.current=null,D.current=new Map,p(""),x(!1),b([]),y(!1),j(""),w(""),R(new URLSearchParams(null!=(t=null==(e=window.location)?void 0:e.search)?t:"").get("request")),U(null),I(""),P(null),()=>{F.current+=1}},[c]),(0,s.useEffect)(()=>{let e=!0,t=!1;async function r(){if(!t){t=!0;try{let t=await c.listExecRequests();if(!e)return;for(let e of t.items)D.current.delete(e.id);b([...D.current.values(),...t.items].sort((e,t)=>t.createdAt.localeCompare(e.createdAt)||t.id.localeCompare(e.id))),j("")}catch(t){e&&j("맡긴 일을 읽지 못했습니다. 연결을 확인해 주세요.")}finally{t=!1,e&&y(!0)}}}r();let n=M?setInterval(()=>void r(),5e3):null;return()=>{e=!1,n&&clearInterval(n)}},[c,M]);let A=(0,s.useCallback)(async()=>{if(!k)return;let e=F.current,t=H.current,r="".concat(e,":").concat(t,":").concat(k);if(_.current!==r){_.current=r;try{let r=await c.getExecRequest(k);if(F.current!==e||H.current!==t||T.current!==k)return;U(r),I("")}catch(r){F.current===e&&H.current===t&&T.current===k&&I("상세를 읽지 못했습니다. 잠시 뒤 다시 시도해 주세요.")}finally{_.current===r&&(_.current=null)}}},[c,k]);async function V(e){e.preventDefault();let t=m.trim();if(!t||f)return;let r=F.current;x(!0),w("");try{let e=await c.submitExecRequest(t);if(F.current!==r)return;let n={id:e.id,text:t,createdAt:new Date().toISOString(),status:e.status,seats:[],resultCount:0};D.current.set(n.id,n),b(e=>[n,...e.filter(e=>e.id!==n.id)]),p("")}catch(e){F.current===r&&w("보내지 못했습니다. 연결을 확인하고 다시 시도해 주세요.")}finally{F.current===r&&x(!1)}}(0,s.useEffect)(()=>{k&&A()},[A,E]),(0,s.useEffect)(()=>{if(!k||"planning"!==q&&"running"!==q&&!Y)return;let e=setInterval(()=>void A(),5e3);return()=>clearInterval(e)},[k,q,Y,A]);let z=h.find(e=>e.id===k),J=(null==S?void 0:S.id)===k?S:null;return(0,n.jsxs)("main",{className:"mx-auto w-full max-w-2xl space-y-8 px-5 py-10 sm:py-14",children:[(0,n.jsxs)("section",{"aria-labelledby":"exec-compose",className:"space-y-4",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{id:"exec-compose",className:"text-2xl font-semibold tracking-tight",children:"COO 에게 맡기기"}),(0,n.jsx)("p",{className:"mt-2 text-sm text-muted-foreground",children:"할 일을 한 줄로 적어 보내세요. 자리별 진행과 결과를 여기서 볼 수 있습니다."})]}),(0,n.jsxs)("form",{onSubmit:V,className:"flex gap-2",children:[(0,n.jsx)("label",{htmlFor:"exec-text",className:"sr-only",children:"한 줄로 맡길 일"}),(0,n.jsx)("input",{id:"exec-text",name:"text",value:m,onChange:e=>p(e.target.value),placeholder:"한 줄로 맡길 일",className:"min-w-0 flex-1 rounded-lg border border-input bg-background px-3 py-2 text-sm"}),(0,n.jsx)("button",{type:"submit",disabled:!m.trim()||f,className:"rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground disabled:opacity-50",children:f?"보내는 중…":"보내기"})]}),N&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:N})]}),(0,n.jsxs)("section",{"aria-labelledby":"exec-list",className:"space-y-3",children:[(0,n.jsx)("h2",{id:"exec-list",className:"text-xl font-semibold",children:"맡긴 일"}),v&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:v}),!g&&0===h.length&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"불러오는 중…"}),g&&0===h.length&&!v&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"아직 맡긴 일이 없습니다."}),(0,n.jsx)("ul",{className:"space-y-2",children:h.map(e=>{var t;return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>{k!==e.id&&(H.current+=1,R(e.id),U(null),I(""),P(null))},"aria-expanded":k===e.id,className:"w-full rounded-xl border border-border bg-card p-4 text-left hover:border-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary",children:[(0,n.jsxs)("span",{className:"flex items-start justify-between gap-3",children:[(0,n.jsx)("span",{className:"min-w-0 truncate text-sm font-semibold",children:null!=(t=e.text.trim().split(/\r?\n/,1)[0])?t:""}),(0,n.jsx)("span",{className:"shrink-0 text-sm font-medium text-primary",children:u(e.status)})]}),e.seats.length>0&&(0,n.jsx)("span",{className:"mt-2 block truncate text-xs text-muted-foreground",children:e.seats.map(e=>"".concat(e.seat.toUpperCase()," ").concat(d(e.status))).join(" \xb7 ")}),e.resultCount>0&&(0,n.jsxs)("span",{className:"mt-1 block text-xs text-muted-foreground",children:["결과 ",e.resultCount,"개"]})]})},e.id)})})]}),k&&(0,n.jsxs)("section",{"aria-labelledby":"exec-detail",className:"space-y-5 rounded-xl border border-border bg-card p-5",children:[(0,n.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,n.jsx)("h2",{id:"exec-detail",className:"text-lg font-semibold",children:"맡긴 일 상세"}),(0,n.jsx)("button",{type:"button",onClick:()=>{H.current+=1,R(null),U(null),P(null)},className:"text-sm text-primary underline underline-offset-4",children:"닫기"})]}),(0,n.jsx)("p",{className:"whitespace-pre-wrap text-sm",children:null!=(t=null==J?void 0:J.text)?t:null==z?void 0:z.text}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:u(null!=(o=null!=(r=null==J?void 0:J.status)?r:null==z?void 0:z.status)?o:"planning")}),C&&(0,n.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:C}),!J&&!C&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"상세 불러오는 중…"}),J&&(0,n.jsxs)(n.Fragment,{children:[J.summary&&(0,n.jsx)("p",{className:"text-sm",children:J.summary}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("h3",{className:"font-semibold",children:"이렇게 나눠 맡겼습니다"}),0===J.seats.length&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"planning"===J.status?"COO 가 나누는 중입니다":"맡은 자리가 없습니다"}),(0,n.jsx)("ul",{className:"space-y-2",children:J.seats.map(e=>(0,n.jsxs)("li",{className:"rounded-lg border border-border bg-background px-4 py-3 text-sm",children:[(0,n.jsxs)("div",{className:"flex justify-between gap-2",children:[(0,n.jsxs)("span",{className:"font-semibold",children:[e.seat.toUpperCase()," \xb7 ",e.title]}),(0,n.jsx)("span",{className:"shrink-0 text-muted-foreground",children:d(e.status)})]}),"failed"===e.status&&e.reason&&(0,n.jsxs)("p",{className:"mt-2 text-destructive",children:["못 한 이유 \xb7 ",e.reason]})]},"".concat(e.seat,":").concat(e.title)))})]}),(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)("h3",{className:"font-semibold",children:"결과"}),0===J.results.length&&(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"아직 결과가 없습니다."}),(0,n.jsx)("ul",{className:"space-y-2",children:J.results.map(e=>(0,n.jsx)(i,{client:c,id:J.id,result:e},e.url))})]}),(0,n.jsx)(l.a,{client:c,approvals:J.approvals,onDecided:()=>L(e=>e+1),onPendingChange:P},J.id)]})]})]})}},78292:(e,t,r)=>{Promise.resolve().then(r.bind(r,67715))},85839:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>l,f6:()=>s,oD:()=>a});let n="elanous.daemon.sessionId";function s(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=s();return localStorage.setItem(n,t),t}function l(){let e=s();return localStorage.setItem(n,e),e}}},e=>{e.O(0,[4870,4817,5122,7358],()=>e(e.s=78292)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[141],{64272:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>c});var s=r(46152),l=r(95332),a=r(66081);let n=/^[a-z0-9][a-z0-9._-]{0,63}$/;function o(e){var t,r,o;let{event:i,refreshKey:c=0}=e,{client:u}=(0,a.Q)(),[d,m]=(0,l.useState)(null),[f,p]=(0,l.useState)(null),x=(null==d?void 0:d.event)===i&&d.refreshKey===c?d:null,h=(null==f?void 0:f.event)===i&&f.refreshKey===c?f.message:"";return((0,l.useEffect)(()=>{let e;if(!n.test(i))return;let t=!0,r="";m(null),p(null);let s=e=>{t&&m(t=>(null==t?void 0:t.event)===i&&t.refreshKey===c?{...t,...e}:t)};async function l(e){try{let l=await u.fetchResponse(e);if(!l.ok)throw Error("HTTP ".concat(l.status));let a=await l.blob();if(!t)return;r=URL.createObjectURL(a),s({videoUrl:r})}catch(e){s({error:"영상을 열지 못했습니다: ".concat(String(e))})}}async function a(){try{let r=await u.fieldReelStatus(i);if(!t)return;s({reel:{status:r.state,url:r.url},reelError:"failed"===r.state?r.error:void 0,error:void 0}),"done"===r.state&&r.url?await l(r.url):"done"!==r.state&&"failed"!==r.state&&(e=setTimeout(a,5e3))}catch(r){s({error:"영상 상태를 읽지 못했습니다: ".concat(String(r))}),t&&(e=setTimeout(a,5e3))}}return u.fetchJson("/v1/field/uploads?event=".concat(encodeURIComponent(i))).then(e=>{t&&(m({...e,event:i,refreshKey:c}),e.reel&&("done"===e.reel.status&&e.reel.url?l(e.reel.url):a()))}).catch(e=>{t&&p({event:i,refreshKey:c,message:"폴더 상태를 읽지 못했습니다: ".concat(String(e))})}),()=>{t=!1,e&&clearTimeout(e),r&&URL.revokeObjectURL(r)}},[u,i,c]),n.test(i))?(0,s.jsxs)("section",{"aria-label":"행사 폴더 상태",className:"space-y-3 rounded-xl border border-border bg-card p-5",children:[(0,s.jsx)("h2",{className:"text-lg font-semibold",children:i}),h&&(0,s.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:h}),!x&&!h&&(0,s.jsx)("p",{role:"status",className:"text-sm text-muted-foreground",children:"폴더 상태를 읽는 중…"}),x&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("p",{className:"text-sm",children:["폴더에 ",x.count,"개 \xb7 영상 ",(null==(t=x.reel)?void 0:t.status)==="done"?"완료":(null==(r=x.reel)?void 0:r.status)==="failed"?"만들지 못함":x.reel?"만드는 중":"없음"]}),(null==(o=x.reel)?void 0:o.status)==="failed"&&x.reelError&&(0,s.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:x.reelError}),x.error&&(0,s.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:x.error}),x.videoUrl&&(0,s.jsx)("video",{controls:!0,playsInline:!0,src:x.videoUrl,className:"mx-auto aspect-[9/16] max-h-[70vh] w-full max-w-xs rounded-lg bg-black","aria-label":"현장 세로 영상"})]})]}):null}let i=/^[a-z0-9][a-z0-9._-]{0,63}$/;function c(){let{client:e}=(0,a.Q)(),[t,r]=(0,l.useState)(""),n=(0,l.useRef)(!1),[c,u]=(0,l.useState)([]),[d,m]=(0,l.useState)(null),f=(0,l.useRef)(null),[p,x]=(0,l.useState)(""),[h,b]=(0,l.useState)(!1),[v,g]=(0,l.useState)(0),[y,j]=(0,l.useState)(0),[w,N]=(0,l.useState)("");(0,l.useEffect)(()=>{let t=!0;return e.fieldDefaultEvent().then(e=>{let{defaultEvent:s}=e;t&&i.test(s)&&!n.current&&r(s)}).catch(e=>{t&&N("행사 폴더를 불러오지 못했습니다: ".concat(String(e)))}),()=>{t=!1}},[e]);let k=i.test(t),S=t&&k?"":"영문 소문자\xb7숫자로 시작하고 영문 소문자\xb7숫자\xb7점\xb7밑줄\xb7하이픈만 사용해 주세요 (최대 64자).";async function U(r){if(r.preventDefault(),!h){if(!k)return void N(S);if(!c.length)return void N("사진\xb7영상을 먼저 골라 주세요.");b(!0),g(0),N("");try{await e.uploadField(t,c,p,g),g(100),j(e=>e+1),u([]),m(null),f.current&&(f.current.value=""),x("")}catch(e){N("올리지 못했습니다: ".concat(e instanceof Error?e.message:String(e)))}finally{b(!1)}}}return(0,s.jsxs)("main",{className:"mx-auto w-full max-w-xl space-y-6 px-5 py-10 sm:py-16",children:[(0,s.jsxs)("header",{className:"space-y-2",children:[(0,s.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"현장 올리기"}),(0,s.jsx)("p",{className:"text-sm text-muted-foreground",children:"사진\xb7영상을 행사 폴더에 모으면 세로 영상이 만들어집니다."})]}),(0,s.jsxs)("form",{onSubmit:U,noValidate:!0,className:"space-y-5 rounded-xl border border-border bg-card p-5 sm:p-8",children:[(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)("label",{htmlFor:"field-event",className:"block text-sm font-medium",children:"행사 폴더"}),(0,s.jsx)("input",{id:"field-event",name:"event",value:t,onChange:e=>{n.current=!0,r(e.target.value)},"aria-invalid":!k,"aria-describedby":k?void 0:"field-slug-error",autoCapitalize:"none",autoCorrect:"off",className:"w-full rounded-md border border-input bg-background px-3 py-2 font-mono text-sm"}),!k&&(0,s.jsx)("p",{id:"field-slug-error",className:"text-sm text-destructive",children:S})]}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)("label",{htmlFor:"field-files",className:"block text-sm font-medium",children:"사진\xb7영상 고르기"}),(0,s.jsx)("input",{ref:f,id:"field-files",name:"files",type:"file",multiple:!0,accept:"image/*,video/*",onChange:function(e){var t;let r=function(e){let t=[],r=0,s=0,l=0,a=0;for(let n of e){if(n.size>0x6400000){r+=1;continue}if(t.length>=20){l+=1;continue}if(a+n.size>262144e3){s+=1;continue}t.push(n),a+=n.size}let n=[r?"".concat(r,"개는 한 개가 100MB 를 넘습니다"):"",l?"".concat(l,"개는 한 번에 ").concat(20,"개를 넘습니다"):"",s?"".concat(s,"개는 합계 250MB 를 넘습니다"):""].filter(Boolean),o=r+l+s;return{kept:t,note:o?"".concat(o,"개는 빠집니다 — ").concat(n.join(" \xb7 ")):null}}(Array.from(null!=(t=e.target.files)?t:[]));u(r.kept),m(r.note),N("")},className:"block w-full rounded-md border border-input bg-background px-3 py-2 text-sm file:mr-3 file:rounded-md file:border-0 file:bg-primary file:px-3 file:py-1 file:text-primary-foreground"}),c.length>0&&(0,s.jsxs)("p",{className:"text-sm text-muted-foreground",children:[c.length,"개 골랐습니다"]}),d&&(0,s.jsx)("p",{role:"status",className:"text-sm text-orange-600 dark:text-orange-400",children:d})]}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)("label",{htmlFor:"field-caption",className:"block text-sm font-medium",children:"한 줄 설명(첫 장 자막 \xb7 선택)"}),(0,s.jsx)("input",{id:"field-caption",name:"caption",value:p,onChange:e=>x(e.target.value),className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm"})]}),w&&(0,s.jsx)("p",{role:"alert",className:"text-sm text-destructive",children:w}),(0,s.jsx)("button",{type:"submit",disabled:h||!k||!c.length,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:h?"올리는 중…":"올리기"}),h&&(0,s.jsxs)("div",{role:"status",className:"space-y-1 text-sm","aria-live":"polite",children:[(0,s.jsxs)("label",{htmlFor:"field-progress",children:["올리기 ",v,"%"]}),(0,s.jsx)("progress",{id:"field-progress",value:v,max:100,className:"w-full"})]})]}),k&&(0,s.jsx)(o,{event:t,refreshKey:y})]})}},64753:(e,t,r)=>{Promise.resolve().then(r.bind(r,64272))},66081:(e,t,r)=>{"use strict";r.d(t,{C:()=>c,DaemonProvider:()=>u,Q:()=>d});var s=r(46152),l=r(95332),a=r(55161),n=r(85839),o=r(84870),i=r(25905);let c=(0,l.createContext)(null);function u(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[u,d]=(0,l.useState)(r),[m,f]=(0,l.useState)(""),[p]=(0,l.useState)(()=>new o.ki(r));(0,l.useEffect)(()=>{let e=(0,a.Fp)();d(e),p.updateConfig(e),f((0,n.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[p]),(0,l.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,a.Fp)();p.updateConfig(t),d(t),(0,i.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,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)},[p]);let x=e=>{d(t=>{let r={...t,...e};return(0,a.Qc)(e),p.updateConfig(r),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},h=e=>{f(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},b=(0,l.useMemo)(()=>({config:u,setConfig:x,client:p,sessionId:m,setSessionId:h}),[u,p,m]);return(0,s.jsx)(c.Provider,{value:b,children:t})}function d(){let e=(0,l.useContext)(c);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},85839:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>n,f6:()=>l,oD:()=>a});let s="elanous.daemon.sessionId";function l(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function a(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(s,e),e):localStorage.getItem(s)}();if(e)return e;let t=l();return localStorage.setItem(s,t),t}function n(){let e=l();return localStorage.setItem(s,e),e}}},e=>{e.O(0,[4870,4817,5122,7358],()=>e(e.s=64753)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3787,6815,9492],{23808:()=>{}},_=>{_.O(0,[4817,5122,7358],()=>_(_.s=23808)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8891],{21576:(e,t,n)=>{"use strict";function s(e){return e.metaKey||e.ctrlKey}function r(e){let t=e.key.toLowerCase();return!s(e)||e.shiftKey||e.altKey||"k"!==t?s(e)&&e.shiftKey&&!e.altKey&&"j"===t?e.fromEditable?null:"toggle-role-judge":s(e)&&e.shiftKey&&!e.altKey&&"m"===t?e.fromEditable?null:"toggle-voice":s(e)&&e.shiftKey&&!e.altKey&&"y"===t?e.fromEditable?null:"toggle-tts":"?"!==e.key||s(e)||e.altKey?null:e.fromEditable?null:"open-help":"focus-broadcast-input"}function a(e){var t;if(!e)return!1;let n=e.tagName;if(!n)return!1;if("INPUT"===n||"TEXTAREA"===n||"SELECT"===n)return!0;let s=null==(t=e.getAttribute)?void 0:t.call(e,"contenteditable");return""===s||"true"===s}n.d(t,{ZQ:()=>r,_i:()=>a,nm:()=>l});let l=[{id:"focus-broadcast-input",combo:"⌘K / Ctrl+K",effect:"Focus broadcast input"},{id:"toggle-role-judge",combo:"⌘⇧J / Ctrl+⇧J",effect:"Toggle role-judge backend"},{id:"toggle-voice",combo:"⌘⇧M / Ctrl+⇧M",effect:"Toggle voice mode (mic)"},{id:"toggle-tts",combo:"⌘⇧Y / Ctrl+⇧Y",effect:"Toggle TTS mute"},{id:"open-help",combo:"?",effect:"Open this help overlay"}]},50724:(e,t,n)=>{"use strict";n.d(t,{InsidePage:()=>W});var s=n(46152),r=n(95332),a=n(17805),l=n(21576);let i=[{id:"loop-agent",title:"루프 에이전트",oneLine:"일을 반복 관측하고 다음 행동을 고릅니다.",docs:["docs/manual/MANUAL-execution-and-landing-loops-2026-09-29.md"],code:["src/harness/mission-solve-loop.ts","src/mission-loop/composite-cycle.ts"]},{id:"graph-engineering",title:"그래프 엔지니어링",oneLine:"실행의 노드와 경로를 그래프로 읽습니다.",docs:["docs/manual/MANUAL-graph-operations-2026-09-10.md"],code:["src/self-implement/graph-templates.ts","src/self-implement/graph-authority.ts"]},{id:"pty-intelligence",title:"PTY 인텔리전스",oneLine:"에이전트가 터미널의 실행과 관측을 연결합니다.",docs:["docs/manual/MANUAL-external-agent-pty-missions-2026-08-11.md"],code:["src/self-dev/dev-cli.ts"]},{id:"harness",title:"받침 \xb7 하니스",oneLine:"구현과 검증이 지나가는 실행 받침입니다.",docs:["docs/TECH-harness-execution-anatomy-current-state-2026-08-10.md"],code:["src/self-implement/orchestrator.ts","src/self-dev/dev-cli.ts"]},{id:"mission-fabric",title:"미션 패브릭",oneLine:"들어온 일을 미션으로 정하고 실행에 잇습니다.",docs:["docs/manual/MANUAL-mission-fabric-integration-2026-09-03.md"],code:["src/mission-loop/composite-cycle.ts","src/harness/mission-solve-loop.ts"]},{id:"observation",title:"바닥 \xb7 관측\xb7인지\xb7힐링",oneLine:"본 것을 이해하고 스스로 고치는 바닥입니다.",docs:["docs/manual/MANUAL-self-cognition-observability-2026-07-14.md"],code:["src/self-implement/orchestrator.ts"]}];var o=n(39587);function d(e){let{entry:t}=e,[n,a]=(0,r.useState)(!1);return(0,s.jsxs)("details",{open:n,style:{minWidth:0,border:"1px solid #68788f",borderRadius:12,padding:18,background:"#16263b"},children:[(0,s.jsx)("summary",{onClick:e=>{e.preventDefault(),a(e=>!e)},style:{cursor:"pointer",fontWeight:700,overflowWrap:"anywhere"},children:(0,o.t)(t.title)}),(0,s.jsx)("p",{children:(0,o.t)(t.oneLine)}),(0,s.jsxs)("div",{children:[(0,s.jsx)("strong",{children:"문서"}),(0,s.jsx)("ul",{children:t.docs.map(e=>(0,s.jsx)("li",{style:{overflowWrap:"anywhere"},children:(0,o.t)(e)},e))}),(0,s.jsx)("strong",{children:"코드"}),(0,s.jsx)("ul",{children:t.code.map(e=>(0,s.jsx)("li",{style:{overflowWrap:"anywhere"},children:(0,o.t)(e)},e))})]})]})}function c(){return(0,s.jsxs)("div",{"data-architecture-scene":!0,style:{width:"100%",maxWidth:1600,margin:"auto",display:"grid",gap:20,fontSize:18},children:[(0,s.jsx)("h2",{style:{fontSize:28,margin:0},children:"엘라누스의 구조"}),(0,s.jsx)("div",{"aria-label":"메인",style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(min(100%, 240px), 1fr))",gap:16},children:i.slice(0,2).map(e=>(0,s.jsx)(d,{entry:e},e.id))}),(0,s.jsx)("div",{"aria-label":"받침",style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(min(100%, 240px), 1fr))",gap:16},children:i.slice(2,4).map(e=>(0,s.jsx)(d,{entry:e},e.id))}),(0,s.jsx)("div",{"aria-label":"실행 이음",style:{width:"100%",maxWidth:480,justifySelf:"center"},children:(0,s.jsx)(d,{entry:i[4]})}),(0,s.jsx)("div",{"aria-label":"바닥",children:(0,s.jsx)(d,{entry:i[5]})})]})}var u=n(66081),p=n(8764);let m={currentMissionId:null,missions:{}},f=e=>null!==e&&"object"==typeof e&&!Array.isArray(e),h=e=>"string"==typeof e&&e.trim().length>0;function g(e){let t=e;if("string"==typeof t)try{t=JSON.parse(t)}catch(e){return null}if(!t||"object"!=typeof t||Array.isArray(t))return null;let n=t;if("wizard.step"!==n.category||"wizard.step"!==n.event||!n.data||"object"!=typeof n.data||Array.isArray(n.data))return null;let s=n.data;return"string"==typeof s.ts&&Number.isFinite(Date.parse(s.ts))&&"string"==typeof s.wizardId&&s.wizardId&&["request","research","draft","validate","install","done"].includes(s.step)&&"string"==typeof s.text?{ts:s.ts,wizardId:s.wizardId,step:s.step,text:s.text,...void 0===s.detail?{}:{detail:s.detail}}:null}function x(e,t){let n=e.logsStreamUrl({exactCategory:"wizard.step"});return n?(0,p.BX)(n,{events:{log:e=>{let n=g(e.data);n&&t(n)}}}):()=>{}}let y={currentRunId:null,runs:{}},b={start:"border-sky-400 bg-sky-500/15 text-sky-200",ok:"border-green-500 bg-green-500/15 text-green-300",fail:"border-red-500 bg-red-500/15 text-red-300"};function v(e){let{state:t,now:n,receivedAt:r,lastSettlement:a,lastActivityTs:l=null,activityStatus:i="loading",wizardSteps:d=[]}=e,c=t.currentRunId?t.runs[t.currentRunId]:null,u=!c||n-r>6e4,p=null==c?void 0:c.order.some(e=>"start"===c.nodes[e].phase),m=a&&!p&&n-a.receivedAt<15e3,f=a&&!p&&n-a.receivedAt>=15e3,h=c?Math.max(0,Math.floor((n-Date.parse(c.startedAt))/1e3)):0,g=c&&a?Math.max(0,Math.floor((Date.parse(a.ts)-Date.parse(c.startedAt))/1e3)):0,x=f?"fail"===a.phase?"실패 \xb7 ".concat(a.nodeId):"완료 \xb7 ".concat(g,"초"):null;return(0,s.jsxs)("section",{"aria-label":"라이브 트레이스",className:"min-w-0 space-y-6 p-6 text-lg leading-relaxed",children:[d.length>0&&(0,s.jsx)("ol",{"aria-label":"플러그인 마법사 흐름",children:d.map(e=>(0,s.jsxs)("li",{children:["마법사 ",e.step," \xb7 ",(0,o.t)(e.text)]},"".concat(e.wizardId,":").concat(e.step)))}),u?(0,s.jsxs)("div",{className:"space-y-4 text-muted-foreground",children:[(0,s.jsx)("p",{children:"지금 도는 런이 없습니다"}),(0,s.jsxs)("p",{role:"status",children:["마지막 활동: ",l&&Number.isFinite(Date.parse(l))?(0,s.jsxs)("time",{dateTime:l,children:[new Date(l).toLocaleString("ko-KR",{timeZone:"Asia/Seoul"})," KST"]}):"loading"===i?"확인 중":"unavailable"===i?"못 읽음":"기록 없음"]}),(0,s.jsx)("button",{type:"button",className:"rounded-lg border border-border px-5 py-3 text-lg",disabled:!0,children:"녹화 보기"})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("header",{className:"flex flex-wrap items-center gap-x-5 gap-y-2 break-all text-lg",children:[(0,s.jsx)("h2",{className:"font-semibold",children:c.graphId}),(0,s.jsxs)("span",{children:["런 ",c.runId.slice(0,6)]}),(0,s.jsxs)("span",{children:["경과 ",h,"초"]}),x&&(0,s.jsx)("span",{role:"status",children:x})]}),(0,s.jsxs)("div",{role:"list","aria-label":"노드 흐름",className:"flex flex-wrap gap-3",children:[m&&(0,s.jsx)("span",{className:"rounded-lg border border-border bg-muted px-3 py-1 text-sm text-muted-foreground",children:"다음 단계 준비 중"}),c.order.map(e=>{let t=c.nodes[e];return(0,s.jsxs)("div",{role:"listitem",className:"min-w-0 max-w-full break-all rounded-lg border px-5 py-3 ".concat(b[t.phase]),children:[(0,s.jsxs)("span",{className:"start"===t.phase?"animate-pulse":"",children:[t.nodeId," \xb7 ","start"===t.phase?"진행 중":"ok"===t.phase?"ok":"fail"]}),t.retries>0&&(0,s.jsxs)("span",{className:"ml-3","aria-label":"다시 ".concat(t.retries,"회"),children:["↻",t.retries]})]},e)})]})]})]})}function w(){let{client:e,config:t}=(0,u.Q)(),[n,a]=(0,r.useState)(()=>({client:e,baseUrl:t.baseUrl,token:t.token,state:y,receivedAt:0,lastSettlement:null,lastActivityTs:null,activityStatus:"loading"})),[l,i]=(0,r.useState)(0),[o,d]=(0,r.useState)([]),c=n.client===e&&n.baseUrl===t.baseUrl&&n.token===t.token;return(0,r.useEffect)(()=>{let n=!0;a({client:e,baseUrl:t.baseUrl,token:t.token,state:y,receivedAt:0,lastSettlement:null,lastActivityTs:null,activityStatus:"loading"}),d([]),e.listLogs({category:"graph.run",event:"node",limit:"1"}).then(s=>{n&&a(n=>{var r,a;if(n.client!==e||n.baseUrl!==t.baseUrl||n.token!==t.token)return n;let l=null==(a=s.logs)||null==(r=a[0])?void 0:r.ts,i="string"==typeof l&&Number.isFinite(Date.parse(l))?l:null,o=i&&(!n.lastActivityTs||Date.parse(i)>Date.parse(n.lastActivityTs))?i:n.lastActivityTs;return{...n,lastActivityTs:o,activityStatus:s.ok&&Array.isArray(s.logs)?"ready":"unavailable"}})}).catch(()=>{n&&a(n=>n.client===e&&n.baseUrl===t.baseUrl&&n.token===t.token?{...n,activityStatus:"unavailable"}:n)});let s=x(e,e=>{n&&d(t=>"request"===e.step?[e]:[...t.filter(t=>t.wizardId===e.wizardId),e].slice(-6))}),r=function(e,t){let n=e.logsStreamUrl({category:"graph.run"});return n?(0,p.BX)(n,{events:{log:e=>{let n=function(e){let t=e;if("string"==typeof t)try{t=JSON.parse(t)}catch(e){return null}if("object"!=typeof t||null===t||Array.isArray(t))return null;let n=t;if("graph.run"!==n.category||"node"!==n.event)return null;let s=n.data;return"object"!=typeof s||null===s||Array.isArray(s)?null:["graphId","runId","nodeId"].every(e=>"string"==typeof s[e]&&s[e].trim().length>0)&&("start"===s.phase||"ok"===s.phase||"fail"===s.phase)&&"string"==typeof n.ts&&Number.isFinite(Date.parse(n.ts))&&(void 0===s.seconds||"number"==typeof s.seconds&&Number.isFinite(s.seconds)&&!(s.seconds<0))?{kind:"node",graphId:s.graphId,runId:s.runId,nodeId:s.nodeId,phase:s.phase,ts:n.ts,...void 0===s.seconds?{}:{seconds:s.seconds}}:null}(e.data);n&&t(n)}}}):()=>{}}(e,s=>{if(!n)return;let r=Date.now();a(a=>{var l,i;if(!n)return a;let o=a.client===e&&a.baseUrl===t.baseUrl&&a.token===t.token,d=o?a.state:y,c=d.currentRunId===s.runId&&"start"!==s.phase&&(null==(i=d.runs[s.runId])||null==(l=i.nodes[s.nodeId])?void 0:l.phase)===s.phase,u=d.currentRunId!==s.runId&&d.runs[s.runId]?a.lastSettlement:"start"===s.phase||d.currentRunId!==s.runId?null:c?a.lastSettlement:{receivedAt:r,nodeId:s.nodeId,phase:s.phase,ts:s.ts},p=!o||!a.lastActivityTs||Date.parse(s.ts)>Date.parse(a.lastActivityTs)?s.ts:a.lastActivityTs;return{client:e,baseUrl:t.baseUrl,token:t.token,receivedAt:r,lastSettlement:u,lastActivityTs:p,activityStatus:o?a.activityStatus:"loading",state:function(e,t){var n,s,r,a;let l=Object.hasOwn(e.runs,t.runId)?e.runs[t.runId]:void 0,i=l&&Object.hasOwn(l.nodes,t.nodeId)?l.nodes[t.nodeId]:void 0,o={nodeId:t.nodeId,phase:t.phase,retries:(null!=(n=null==i?void 0:i.retries)?n:0)+("start"===t.phase&&i?1:0)},d={graphId:t.graphId,runId:t.runId,startedAt:null!=(s=null==l?void 0:l.startedAt)?s:t.ts,order:i?l.order:[...null!=(r=null==l?void 0:l.order)?r:[],t.nodeId],nodes:{...null==l?void 0:l.nodes,[t.nodeId]:o}};return{currentRunId:l&&null!=(a=e.currentRunId)?a:t.runId,runs:{...e.runs,[t.runId]:d}}}(d,s)}}),i(r)}),l=setInterval(()=>i(Date.now()),1e3);return()=>{n=!1,r(),s(),clearInterval(l)}},[e,t.baseUrl,t.token]),(0,s.jsx)(v,{state:c?n.state:y,now:l,receivedAt:n.receivedAt,lastSettlement:c?n.lastSettlement:null,lastActivityTs:c?n.lastActivityTs:null,activityStatus:c?n.activityStatus:"loading",wizardSteps:c?o:[]})}var j=n(62486),k=n(68442),I=n(61297);let A=I.DN.map(e=>({graph:"harness",kind:e,plugin:null,description:"",schema:{},core:!0})),S=I.CF.map(e=>({graph:"workflow",kind:e,plugin:null,description:"",schema:{},core:!0}));function N(){let{GraphEditor:e=j.F,WorkflowEditor:t=k.N}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[n,a]=(0,r.useState)("harness");return(0,s.jsxs)("section",{"aria-label":"그래프 편집기",className:"flex h-full min-h-[640px] min-w-0 flex-col",children:[(0,s.jsx)("div",{role:"tablist","aria-label":"그래프 편집 모드",className:"flex shrink-0 gap-2 border-b border-border px-4 py-3",children:["harness","workflow"].map(e=>(0,s.jsx)("button",{type:"button",role:"tab",id:"inside-editor-tab-".concat(e),"aria-controls":"inside-editor-panel-".concat(e),"aria-selected":n===e,onClick:()=>a(e),className:"rounded-lg px-4 py-2 text-lg min-[1440px]:text-[22px] ".concat(n===e?"bg-accent/15 text-text-primary":"text-text-tertiary hover:bg-surface-elevated"),children:"harness"===e?"실행 그래프":"워크플로"},e))}),(0,s.jsx)("div",{id:"inside-editor-panel-harness",role:"tabpanel","aria-labelledby":"inside-editor-tab-harness",hidden:"harness"!==n,className:"harness"===n?"min-h-0 min-w-0 flex-1 overflow-x-auto":"hidden",children:(0,s.jsx)("div",{className:"flex h-full min-h-[640px] min-w-[700px] flex-col min-[700px]:min-w-0",children:(0,s.jsx)(e,{palette:A,initialGraphId:"self-implement"})})}),(0,s.jsx)("div",{id:"inside-editor-panel-workflow",role:"tabpanel","aria-labelledby":"inside-editor-tab-workflow",hidden:"workflow"!==n,className:"workflow"===n?"min-h-0 min-w-0 flex-1 overflow-x-auto":"hidden",children:(0,s.jsx)("div",{className:"flex h-full min-h-[640px] min-w-[700px] flex-col min-[700px]:min-w-0",children:(0,s.jsx)(t,{palette:S})})})]})}var T=n(64856);let D=/^\s*(승인|거부|반려|보류|허용|차단|중단|취소)(?=$|[\s.,!?;:])/;function z(e){let{decisions:t,now:n=Date.now()}=e,r=Object.values(t.missions).flat().filter(e=>"answer"===e.step).sort((e,t)=>Date.parse(t.ts)-Date.parse(e.ts)||t.seq-e.seq),a=r[0],l=a?Math.max(0,Math.floor((n-Date.parse(a.ts))/6e4)):null,i=r.flatMap(e=>{var t;let s=null==(t=D.exec(e.detail.answer))?void 0:t[1];return s&&n-Date.parse(e.ts)<3e5?[{item:e,outcome:s}]:[]});return(0,s.jsxs)("section",{"aria-label":"PTY 인텔리전스",className:"min-w-0 rounded-xl border border-slate-600 p-5 text-lg leading-relaxed min-[1440px]:text-[22px]",children:[(0,s.jsx)("h2",{className:"mb-5 font-semibold",children:"PTY 판단"}),0===i.length?(0,s.jsxs)("p",{role:"status",children:["지금 PTY 판단이 없습니다 — 마지막 판단 ",null===l?"기록 없음":"".concat(l,"분 전")]}):(0,s.jsx)("ol",{"aria-label":"최근 PTY 판단",className:"space-y-4",children:i.slice(0,3).map(e=>{let{item:t,outcome:n}=e;return(0,s.jsxs)("li",{className:"min-w-0 rounded-lg border border-slate-600 p-4",children:[(0,s.jsx)("time",{dateTime:t.ts,children:(0,o.t)(t.ts)})," \xb7 ",(0,o.t)(n)]},"".concat(t.missionId,":").concat(t.seq))})})]})}let U=[{step:"request",label:"요청"},{step:"research",label:"조사"},{step:"draft",label:"초안"},{step:"validate",label:"검증"},{step:"install",label:"설치"},{step:"done",label:"끝"}],C={done:"border-green-500 bg-green-500/15 text-green-300",now:"border-sky-400 bg-sky-500/15 text-sky-200",todo:"border-slate-500 bg-slate-500/15 text-slate-300",failed:"border-red-500 bg-red-500/15 text-red-300"},E={done:"완료",now:"진행 중",todo:"대기",failed:"실패"};function L(e){let{events:t}=e,n=function(e){if(0===e.length)return[];let t=e.map((e,t)=>({event:e,order:t,time:function(e){let t=Date.parse(e);return Number.isFinite(t)?t:-1/0}(e.ts)})).sort((e,t)=>e.time-t.time||e.order-t.order),n=t[t.length-1].event.wizardId,s=t.filter(e=>e.event.wizardId===n),r=s[s.length-1].event,a=U.findIndex(e=>e.step===r.step);return U.map((e,t)=>{var n;let{step:l,label:i}=e,o=null==(n=s.filter(e=>e.event.step===l).at(-1))?void 0:n.event,d=(null==o?void 0:o.detail)!=null&&"object"==typeof o.detail&&!Array.isArray(o.detail)&&!1===o.detail.ok;return{step:l,label:i,state:"done"===r.step?"done":d?"failed":t<a?"done":t===a?"now":"todo",...o?{text:o.text,at:o.ts}:{}}})}(t);return(0,s.jsx)("section",{"aria-label":"마법사 → 마켓",className:"min-w-0 space-y-6 p-4 text-lg min-[1440px]:text-[22px]",children:0===n.length?(0,s.jsxs)("p",{children:["마법사가 아직 돌지 않았습니다 — ",(0,s.jsx)("code",{children:'elanous plugin make "<한 줄>"'})," 로 시작"]}):(0,s.jsx)("ol",{"aria-label":"마법사 단계",className:"grid grid-cols-1 gap-3 min-[900px]:grid-cols-6",children:n.map(e=>(0,s.jsxs)("li",{"data-wizard-step":e.step,"data-state":e.state,className:"min-w-0 rounded-xl border p-4 ".concat(C[e.state]),children:[(0,s.jsxs)("div",{className:"font-semibold",children:[e.label," ",(0,s.jsxs)("span",{className:"font-normal",children:["\xb7 ",E[e.state]]})]}),e.text&&(0,s.jsx)("p",{className:"mt-3 overflow-hidden text-ellipsis whitespace-nowrap",title:(0,o.t)(e.text),children:(0,o.t)(e.text)})]},e.step))})})}let M=e=>"".concat(e.wizardId,":").concat(e.step,":").concat(e.ts,":").concat(e.text);function R(){let{client:e}=(0,u.Q)(),[t,n]=(0,r.useState)(()=>({client:e,events:[]}));return(0,r.useEffect)(()=>{let t=!0;n({client:e,events:[]});let s=s=>{t&&s.length&&n(t=>({client:e,events:function(e,t){let n=new Map;for(let s of[...e,...t])n.set(M(s),s);return[...n.values()].sort((e,t)=>e.ts.localeCompare(t.ts)).slice(-50)}(t.client===e?t.events:[],s)}))},r=e.fetchJson;"function"==typeof r&&r.call(e,"/v1/logs?exactCategory=wizard.step&limit=".concat(50)).then(e=>{let t=null==e?void 0:e.logs;s(Array.isArray(t)?t.map(g).filter(e=>null!==e):[])}).catch(()=>{});let a=x(e,e=>s([e]));return()=>{t=!1,a()}},[e]),(0,s.jsx)(L,{events:t.client===e?t.events:[]})}var K=n(51672);let q=["문서 아키텍처","라이브 트레이스","루프 에이전트","그래프 편집기","마법사 → 마켓","PTY 인텔리전스"],O=q.length,F="elanous.inside.demo";function P(e){return null!==e&&/^[1-9]$/.test(e)&&Number(e)<=O?Number(e):1}function W(){let{loopInteraction:e=K.ZR}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,a.useSearchParams)();return(0,s.jsx)(Y,{search:t,loopInteraction:e})}function Y(e){let{search:t,loopInteraction:n=K.ZR,liveTrace:a=(0,s.jsx)(w,{}),editorScene:i=(0,s.jsx)(N,{}),loopScene:d,wizardScene:u=(0,s.jsx)(R,{}),ptyScene:p=(0,s.jsx)(_,{})}=e,m=(0,K.kU)(t,n.refParam),[f,h]=(0,r.useState)(()=>P(t.get("scene"))),[g,x]=(0,r.useState)(()=>"1"===t.get("demo")),y=(0,r.useRef)(null),b=(0,r.useRef)(f),v=(0,r.useRef)(g);b.current=f,v.current=g;let j=(0,r.useCallback)(e=>{let t=new URL(window.location.href);for(let[n,s]of Object.entries(e))t.searchParams.set(n,s);window.history.replaceState(window.history.state,"",t.toString())},[]),k=(0,r.useCallback)(e=>{e<1||e>O||(b.current=e,h(e),j({scene:String(e)}))},[j]),I=(0,r.useCallback)(()=>{let e=!v.current;v.current=e,x(e),j({demo:e?"1":"0"});try{window.localStorage.setItem(F,e?"1":"0")}catch(e){}},[j]);return(0,r.useEffect)(()=>{let e=t.get("demo"),n="1"===e;if(null===e)try{n="1"===window.localStorage.getItem(F)}catch(e){}else try{window.localStorage.setItem(F,n?"1":"0")}catch(e){}v.current=n,x(n);let s=P(t.get("scene"));b.current=s,h(s)},[t]),(0,r.useEffect)(()=>{window.dispatchEvent(new window.Event("elanous:inside-demo"))},[g]),(0,r.useEffect)(()=>{let e=e=>{if(!(e.altKey||e.ctrlKey||e.metaKey||(0,l._i)(e.target))){if("ArrowLeft"===e.key||"ArrowRight"===e.key){e.preventDefault();let t="ArrowRight"===e.key?1:-1;k(Math.min(O,Math.max(1,b.current+t)))}else if("d"===e.key.toLowerCase())I();else if("f"===e.key.toLowerCase()){var t;"function"==typeof(null==(t=y.current)?void 0:t.requestFullscreen)&&y.current.requestFullscreen().catch(()=>{})}}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[k,I]),(0,s.jsxs)("main",{ref:y,"data-inside-page":!0,style:{width:"100%",minHeight:"100vh",minWidth:0,padding:20,boxSizing:"border-box",background:"#0c1828",color:"#f1f5fa",fontSize:18},children:[(0,s.jsx)("style",{children:'@media (min-width: 1440px) {\n [data-inside-page] h1 { font-size: 40px !important; }\n [data-inside-page] nav button { font-size: 22px !important; }\n [data-inside-page] [data-inside-scene="1"] [data-architecture-scene],\n [data-inside-page] [data-inside-scene="2"] section,\n [data-inside-page] [data-inside-scene="2"] header,\n [data-inside-page] [data-inside-scene="2"] button,\n [data-inside-page] [data-inside-scene="2"] .text-sm { font-size: 22px !important; }\n }'}),(0,s.jsxs)("header",{style:{display:"flex",alignItems:"center",gap:16},children:[(0,s.jsx)("h1",{style:{fontSize:28,margin:0},children:"엘라누스 안쪽"}),g&&(0,s.jsx)("span",{"aria-label":"시연 모드",style:{fontSize:18},children:"시연"})]}),(0,s.jsx)("nav",{"aria-label":"장면 선택",style:{display:"flex",minHeight:48,overflowX:"auto",gap:8,margin:"18px 0",whiteSpace:"nowrap"},children:q.map((e,t)=>(0,s.jsx)("button",{type:"button","aria-current":f===t+1?"page":void 0,onClick:()=>k(t+1),style:{flexShrink:0,minHeight:48,padding:"8px 16px",fontSize:18,borderRadius:8,border:"1px solid #7188a5",color:"#fff",background:f===t+1?"#22558b":"#203147"},children:(0,o.t)("".concat(t+1," ").concat(e))},e))}),q.map((e,t)=>(0,s.jsx)("section",{"data-inside-scene":t+1,hidden:f!==t+1,"aria-label":(0,o.t)("".concat(t+1," ").concat(e)),style:{minWidth:0},children:0===t?(0,s.jsx)(c,{}):1===t?a:2===t?null!=d?d:(0,s.jsx)(T.p1,{initialLoopRef:m}):3===t?i:4===t?u:p},e))]})}function _(){let{client:e}=(0,u.Q)(),[t,n]=(0,r.useState)(()=>({client:e,decisions:m})),[a,l]=(0,r.useState)(()=>Date.now());return(0,r.useEffect)(()=>{let e=setInterval(()=>l(Date.now()),6e4);return()=>clearInterval(e)},[]),(0,r.useEffect)(()=>{let t=!0;n({client:e,decisions:m});let s=function(e,t){let n=e.logsStreamUrl({exactCategory:"pty.decision"});return n?(0,p.BX)(n,{events:{log:e=>{let n;try{n=JSON.parse(e.data)}catch(e){return}if(!n||"object"!=typeof n||Array.isArray(n))return;let s=n;if("pty.decision"!==s.category)return;let r=function(e){if(!f(e))return null;let{ts:t,missionId:n,seq:s,sessionId:r,terminalId:a,agent:l,step:i,text:o,detail:d}=e;if(!h(t)||!Number.isFinite(Date.parse(t))||!h(n)||!Number.isSafeInteger(s)||s<0||!h(r)||!h(a)||!h(l)||!h(o)||void 0!==d&&!f(d)||f(d)&&(void 0!==d.keys&&"string"!=typeof d.keys||void 0!==d.row&&(!Number.isSafeInteger(d.row)||d.row<0)))return null;let c={ts:t,missionId:n,seq:s,sessionId:r,terminalId:a,agent:l,text:o},u=f(d)?{...void 0!==d.keys?{keys:d.keys}:{},...void 0!==d.row?{row:d.row}:{}}:{};return"answer"===i?f(d)&&h(d.question)&&h(d.answer)?{...c,step:i,detail:{...u,question:d.question,answer:d.answer}}:null:"recover"===i?f(d)&&h(d.blocked)&&h(d.action)?{...c,step:i,detail:{...u,blocked:d.blocked,action:d.action}}:null:"done"===i?f(d)&&f(d.result)&&h(d.result.ref)&&("pr"===d.result.kind||"file"===d.result.kind||"text"===d.result.kind)?{...c,step:i,detail:{...u,result:{kind:d.result.kind,ref:d.result.ref}}}:null:"read"===i||"judge"===i||"input"===i?{...c,step:i,...void 0!==d?{detail:u}:{}}:null}(s.data);r&&s.event===r.step&&t(r)}}}):()=>{}}(e,s=>{t&&n(t=>({client:e,decisions:function(e,t){let n=Object.hasOwn(e.missions,t.missionId)?e.missions[t.missionId]:[];if(n.some(e=>e.seq===t.seq))return e;let s=[...n,t].sort((e,t)=>e.seq-t.seq),r={...e.missions,[t.missionId]:s},a=e.currentMissionId?r[e.currentMissionId]:void 0,l=s.at(-1),i=null==a?void 0:a.at(-1);return{missions:r,currentMissionId:!i||Date.parse(l.ts)>Date.parse(i.ts)?t.missionId:e.currentMissionId}}(t.client===e?t.decisions:m,s)}))});return()=>{t=!1,s()}},[e]),(0,s.jsx)(z,{decisions:t.client===e?t.decisions:m,now:a})}},54335:(e,t,n)=>{Promise.resolve().then(n.bind(n,50724))}},e=>{e.O(0,[8731,7323,3357,5474,8967,1737,7261,8861,8062,4870,8313,4311,3228,8997,8749,4856,4817,5122,7358],()=>e(e.s=54335)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[131],{14357:(e,t,r)=>{"use strict";r.d(t,{GM:()=>l,J3:()=>i,WF:()=>n,bR:()=>s,m:()=>o,r5:()=>a});let n="/v1/devices",a="/v1/approvals/merges",s="/v1/templates/capability-preview",i="/v1/idle-nudge/preview",l="/v1/morning-digest/showroom",o="/v1/next-fluent/dispatch"},23868:(e,t,r)=>{"use strict";r.d(t,{$:()=>o});var n=r(46152),a=r(76219),s=r(96620),i=r(55627);let l=(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 o(e){let{className:t,variant:r="default",size:s="default",...o}=e;return(0,n.jsx)(a.$,{"data-slot":"button",className:(0,i.cn)(l({variant:r,size:s,className:t})),...o})}},55627:(e,t,r)=>{"use strict";r.d(t,{cn:()=>s});var n=r(38410),a=r(20318);function s(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,a.QP)((0,n.$)(t))}},66081:(e,t,r)=>{"use strict";r.d(t,{C:()=>c,DaemonProvider:()=>u,Q:()=>d});var n=r(46152),a=r(95332),s=r(55161),i=r(85839),l=r(84870),o=r(25905);let c=(0,a.createContext)(null);function u(e){let{children:t}=e,r={baseUrl:"",token:"",provider:""},[u,d]=(0,a.useState)(r),[p,f]=(0,a.useState)(""),[h]=(0,a.useState)(()=>new l.ki(r));(0,a.useEffect)(()=>{let e=(0,s.Fp)();d(e),h.updateConfig(e),f((0,i.oD)()),(0,o.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[h]),(0,a.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,s.Fp)();h.updateConfig(t),d(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)},[h]);let m=e=>{d(t=>{let r={...t,...e};return(0,s.Qc)(e),h.updateConfig(r),(0,o.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),r})},v=e=>{f(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,o.cY)("webterm.provider.daemon.session-set",{sessionId:e})},g=(0,a.useMemo)(()=>({config:u,setConfig:m,client:h,sessionId:p,setSessionId:v}),[u,h,p]);return(0,n.jsx)(c.Provider,{value:g,children:t})}function d(){let e=(0,a.useContext)(c);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},66638:(e,t,r)=>{"use strict";r.d(t,{V5:()=>s,tV:()=>i});var n=r(14357);class a extends Error{constructor(e,t,r){super(r||t),this.status=e,this.error=t,this.reason=r,this.name="MergeApprovalsApiError"}}function s(e,t){return e instanceof a?401===e.status||"unauthorized"===e.error?{text:"이 기기에 소유자 토큰이 없어 승인 목록을 못 읽었습니다 — 이미 연결된 기기의 설정 › 연결 토큰 만들기 에서 토큰을 만들어, 이 기기의 설정 › 데몬 연결 › 연결 토큰 칸에 붙이면 바로 보입니다.",href:"/app/settings/#bearer-token"}:"gh-failed"===e.error?{text:"데몬이 GitHub 를 읽지 못했습니다(데몬 기계의 gh 로그인\xb7네트워크) — 잠시 뒤 다시 열어 보세요.".concat(e.reason?" 사유: ".concat(e.reason.split("\n")[0].slice(0,160)):"")}:"gh-invalid-response"===e.error?{text:"GitHub 응답을 해석하지 못했습니다 — 잠시 뒤 다시 열어 보세요."}:"approvals-repo-unknown"===e.error?{text:"승인할 저장소를 모릅니다 — 데몬 설정 intake.approvals.repo(예: owner/repo)를 채워 주세요.",href:"/app/settings/"}:e.reason?{text:e.reason}:{text:"".concat(t," (").concat(e.status," ").concat(e.error,")")}:e instanceof TypeError?{text:"데몬에 닿지 못했습니다 — 데몬이 켜져 있는지, 이 기기가 같은 네트워크(tailnet)에 있는지 확인하세요."}:{text:e instanceof Error&&e.message?e.message:t}}function i(e){var t,r;let s=null!=(t=e.fetchImpl)?t:fetch,i=(null!=(r=e.baseUrl)?r:"").replace(/\/+$/,"");async function l(t,r){let n={...r,headers:{"content-type":"application/json",...e.authHeader?{authorization:e.authHeader}:{}}},l=e.client?await e.client.fetchResponse(t,n):await s("".concat(i).concat(t),n),o=await l.json().catch(()=>null);if(!l.ok){var c;let e=o&&"object"==typeof o?o:{};throw new a(l.status,null!=(c=e.error)?c:"request-failed",e.reason)}return o}return{list:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"open";return l("merged"===e?"".concat(n.r5,"?state=merged"):n.r5)},get:e=>l("".concat(n.r5,"/").concat(e)),check:(e,t)=>l("".concat(n.r5,"/").concat(e,"/check"),{method:"POST",body:JSON.stringify({headSha:t})}),merge:(e,t)=>l("".concat(n.r5,"/").concat(e,"/merge"),{method:"POST",body:JSON.stringify({headSha:t})})}}},69706:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var n=r(46152),a=r(36120),s=r.n(a),i=r(95332),l=r(66081),o=r(66638);function c(e){let{items:t}=e,r=t.filter(e=>"OPEN"===e.state&&!e.draft);if(0===r.length)return null;let a=r.slice(0,3);return(0,n.jsx)("div",{className:"mx-auto max-w-lg px-4 pt-4",children:(0,n.jsxs)("section",{"aria-label":"승인 대기",className:"rounded-lg border border-emerald-600/40 bg-emerald-500/10 p-3 text-sm",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,n.jsxs)("p",{className:"font-semibold",children:["흡수 아이디어 승인 대기 ",r.length,"건"]}),(0,n.jsx)(s(),{href:"/approvals",className:"rounded-md bg-emerald-700 px-3 py-1 text-white hover:bg-emerald-800",children:"Approvals 에서 보기 →"})]}),(0,n.jsxs)("ul",{className:"mt-2 space-y-1",children:[a.map(e=>(0,n.jsxs)("li",{className:"break-words",children:[(0,n.jsxs)(s(),{href:"/approvals?pr=".concat(e.number),className:"underline",children:["#",e.number]})," \xb7 ",e.title]},e.number)),r.length>a.length&&(0,n.jsxs)("li",{className:"text-muted-foreground",children:["외 ",r.length-a.length,"건"]})]})]})})}function u(){let{client:e}=(0,l.Q)(),t=(0,i.useMemo)(()=>(0,o.tV)({client:e}),[e]),[r,a]=(0,i.useState)([]);return(0,i.useEffect)(()=>{let e=!0;return t.list().then(t=>{let{items:r}=t;e&&a(r)}).catch(()=>{e&&a([])}),()=>{e=!1}},[t]),(0,n.jsx)(c,{items:r})}var d=r(70390);function p(){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(u,{}),(0,n.jsx)(d.SY,{})]})}},70390:(e,t,r)=>{"use strict";r.d(t,{SY:()=>b});var n=r(46152),a=r(95332),s=r(66081),i=r(23868),l=r(93778);let o=["absorbed","discarded","routed","checked"],c={new:"대기 중",queued:"대기 중",absorbed:"흡수됨",routed:"다른 갈래로 넘김",checked:"확인됨",discarded:"버림",deferred:"미룸"};function u(e){var t,r,n;if(null===e)return{label:"찾을 수 없음",settled:!1,noteRef:null};let a=null!=(r=e.outputs)?r:[];return{label:Object.hasOwn(c,e.status)?c[e.status]:e.status,settled:o.includes(e.status),noteRef:null!=(n=null==(t=a.find(e=>"note"===e.kind))?void 0:t.ref)?n:null}}let d={"headless.spawn":"실행 시작","gate.baseline":"게이트 검사","review.diff-scope":"리뷰 중","headless.done":"실행 종료","run-terminal":"종료"};function p(e){var t,r,n,a,s;let i=e.at(-1),l=e.find(e=>"run-terminal"===e.event),o=null==l||null==(t=l.payload)?void 0:t.runStatus;return{stage:i?null!=(n=d[i.event])?n:i.event:null,lastEventAt:null!=(a=null==i?void 0:i.ts)?a:null,done:void 0!==l,outcome:l?"completed"===o||"failed"===o?o:"unknown":null,error:null!=(s=null==l||null==(r=l.payload)?void 0:r.error)?s:null}}let f="elanous.intake.recent",h={absorb:"→ 흡수",tasks:"→ 작업",graph:"→ 그래프","ask-human":"→ 직접 고르세요"};function m(e){if(null==e?void 0:e.storage)return e.storage;try{return globalThis.localStorage}catch(e){return null}}function v(e){try{var t;let r=null==(t=m(e))?void 0:t.getItem(f);if(!r)return[];let n=JSON.parse(r);return Array.isArray(n)?n:[]}catch(e){return[]}}async function g(e,t,r){let n=(0,l.cE)(r);return"absorb"===t?{absorbIds:(await (0,l.IH)(e,r)).ids,recentPreview:n}:{acceptanceId:(await (0,l.ZJ)(e,r)).acceptanceId,recentPreview:n}}function b(){var e,t;let{state:r,deps:o}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{client:c,sessionId:d}=(0,s.Q)(),[b,x]=(0,a.useState)(""),[y,k]=(0,a.useState)(!1),[w,I]=(0,a.useState)(null),[j,S]=(0,a.useState)(null),[N,E]=(0,a.useState)(null),[O,z]=(0,a.useState)(null),[C,T]=(0,a.useState)({}),[R,J]=(0,a.useState)(null),P=(0,a.useRef)(null),[U,D]=(0,a.useState)([]),[M,_]=(0,a.useState)({}),A=(0,a.useRef)(M),V=(0,a.useMemo)(()=>[...new Set(U.filter(e=>"absorb"===e.track).flatMap(e=>{var t;return null!=(t=e.ids)?t:[]}))],[U]),$=(0,a.useRef)(V);$.current=V;let Y=(0,a.useRef)(()=>{}),[H,q]=(0,a.useState)(null),[F,G]=(0,a.useState)(!1),Q=(0,a.useRef)(!1),B=(0,a.useRef)(0),L=(0,a.useRef)(b);L.current=b;let W=(0,a.useRef)(null),Z=(0,a.useRef)(C),K=(0,a.useRef)(U),X=(0,a.useMemo)(()=>[...new Set([...U.filter(e=>"graph"===e.track).map(e=>e.runId),null==O?void 0:O.runId].filter(e=>!!e))],[U,null==O?void 0:O.runId]);(0,a.useEffect)(()=>{D(v(o))},[o]),(0,a.useEffect)(()=>{K.current=U},[U]),(0,a.useEffect)(()=>{let e=!1,t=new Map,r=async n=>{var a;if(e||!$.current.includes(n)||u(null!=(a=A.current[n])?a:null).settled)return;let s=null;try{s=await (0,l.Gm)(c,n)}catch(e){}e||(A.current={...A.current,[n]:s},_(A.current),$.current.includes(n)&&!u(s).settled?t.set(n,setTimeout(()=>{r(n)},6e4)):t.delete(n))};return Y.current=e=>{var n;t.has(e)||u(null!=(n=A.current[e])?n:null).settled||(t.set(e,null),r(e))},$.current.forEach(Y.current),()=>{for(let r of(e=!0,t.values()))null!==r&&clearTimeout(r);t.clear(),Y.current=()=>{}}},[c]),(0,a.useEffect)(()=>{V.forEach(Y.current)},[V]);let ee=(0,a.useCallback)(e=>{var t,r;D(function(e,t){let r=[e,...v(t)].slice(0,20);try{var n;null==(n=m(t))||n.setItem(f,JSON.stringify(r))}catch(e){}return r}({...e,at:null!=(r=null==o||null==(t=o.now)?void 0:t.call(o))?r:new Date().toISOString()},o))},[o]),et=(0,a.useCallback)(async()=>{let e=b.trim();if(e&&!y){k(!0),I(null),S(null);try{var t;let r=await g(c,"absorb",e),n=null!=(t=r.absorbIds)?t:[];$.current=[...new Set([...n,...$.current])],S(n),ee({track:"absorb",preview:r.recentPreview,ids:n}),n.forEach(Y.current)}catch(e){I(e instanceof Error?e.message:String(e))}finally{k(!1)}}},[y,c,ee,b]),er=(0,a.useCallback)(async()=>{var e;let t=b.trim();if(!t||y||!d)return;let r=null!=(e=P.current)?e:crypto.randomUUID();P.current=r,k(!0),I(null),J(null);try{let e=await (0,l.qI)(c,t,d,r);P.current=null,J(e.cardId),ee({track:"split",preview:(0,l.cE)(t),cardId:e.cardId})}catch(e){I(e instanceof Error?e.message:String(e))}finally{k(!1)}},[y,c,ee,d,b]),en=(0,a.useCallback)(async()=>{let e=b.trim();if(e&&!y){k(!0),I(null),E(null),z(null);try{var t;let r=await g(c,"graph",e);E(null!=(t=r.acceptanceId)?t:null),W.current=Date.now(),ee({track:"graph",preview:r.recentPreview,acceptanceId:r.acceptanceId})}catch(e){I(e instanceof Error?e.message:String(e))}finally{k(!1)}}},[y,c,ee,b]);(0,a.useEffect)(()=>{let e=++B.current;if(q(null),!b.trim())return;let t=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e)},n=e.trim();if(!n)return()=>{};let a=r.setTimeout(()=>t(n),500);return()=>r.clearTimeout(a)}(b,t=>{(0,l.sg)(c,t).then(t=>{B.current===e&&q(t)},()=>{B.current===e&&q(null)})});return()=>{++B.current,t()}},[c,b]);let ea=(0,a.useCallback)(async()=>{let e=b.trim();if(!e||Q.current||y||(null==H?void 0:H.reason)!=="rule-unknown")return;let t=++B.current;Q.current=!0,G(!0);try{let r=await (0,l.sg)(c,e,{classify:!0});B.current===t&&L.current.trim()===e&&q(r)}catch(r){B.current===t&&L.current.trim()===e&&q({track:"ask-human",confidence:0,reason:"classifier-failed:request-error",decidedBy:"classifier"})}finally{Q.current=!1,G(!1)}},[y,c,null==H?void 0:H.reason,b]);(0,a.useEffect)(()=>{if(!N)return;let e=!1,t=async()=>{var t,r;if(e)return;let n=null!=(t=W.current)?t:Date.now();if(!(Date.now()-n>3e5))try{let t=await (0,l.PM)(c,N);if(!e&&(z(t),t.runId&&K.current.some(e=>"graph"===e.track&&e.acceptanceId===N&&e.runId!==t.runId))){let e=K.current.map(e=>"graph"===e.track&&e.acceptanceId===N?{...e,runId:t.runId}:e);K.current=e;try{null==(r=m(o))||r.setItem(f,JSON.stringify(e))}catch(e){}D(e)}}catch(e){}};t();let r=setInterval(()=>{t()},5e3);return()=>{e=!0,clearInterval(r)}},[N,c,o]),(0,a.useEffect)(()=>{Z.current=C},[C]),(0,a.useEffect)(()=>{let e;if(0===X.length)return;let t=!1,r=!1,n=async()=>{if(t||r)return;let a=X.filter(e=>{var t;return!p(null!=(t=Z.current[e])?t:[]).done});if(0!==a.length){r=!0;try{let e=await Promise.allSettled(a.map(e=>(0,l.dy)(c,e)));if(t)return;let r={};e.forEach((e,t)=>{"fulfilled"===e.status&&(r[a[t]]=e.value)}),Object.keys(r).length>0&&(Z.current={...Z.current,...r},T(Z.current))}finally{r=!1,!t&&X.some(e=>{var t;return!p(null!=(t=Z.current[e])?t:[]).done})&&(e=setTimeout(()=>{n()},3e4))}}};return n(),()=>{t=!0,e&&clearTimeout(e)}},[c,X]);let es=null!=r?r:{text:b,busy:y,error:w,absorbIds:j,acceptanceId:N,graph:O,runEvents:C,wishCardId:R,recent:U,route:H},ei=(0,a.useMemo)(()=>{var e,t;return es.acceptanceId?{acceptanceId:es.acceptanceId,phase:null==(e=es.graph)?void 0:e.phase,runId:null==(t=es.graph)?void 0:t.runId}:null},[es.acceptanceId,es.graph]),el=0===es.text.trim().length,eo=null!=(e=es.route)?e:null,ec=eo?"absorb"===(t=eo.track)?"absorb":"tasks"===t?"split":"graph"===t?"graph":null:null,eu=e=>ec===e?"ring-2 ring-ring":void 0;return(0,n.jsxs)("section",{className:"mx-auto flex max-w-lg flex-col gap-4 p-4","data-testid":"intake-front-door",children:[(0,n.jsx)("header",{className:"space-y-1",children:(0,n.jsx)("h1",{className:"font-heading text-lg font-medium",children:"Intake"})}),(0,n.jsx)("textarea",{value:es.text,onChange:e=>{P.current=null,x(e.target.value)},rows:6,disabled:es.busy,"data-testid":"intake-front-door-field","aria-label":"intake",className:"w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-sm shadow-xs focus:outline-none focus:ring-2 focus:ring-ring"}),(0,n.jsx)("p",{className:"text-xs text-muted-foreground","data-testid":"intake-front-door-explainer",children:"보내면 elanous 가 이 글을 처리합니다(흡수 \xb7 작업 분할 \xb7 그래프 실행)."}),eo&&(0,n.jsxs)("div",{"data-testid":"intake-route-chip","data-auto-submit":"0",className:"space-y-0.5 text-sm",children:[(0,n.jsx)("p",{"data-testid":"intake-route-chip-label",children:h[eo.track]}),"classifier"===eo.decidedBy&&(0,n.jsxs)("p",{"data-testid":"intake-route-chip-classifier",children:["분류기 판정 \xb7 확신 ",Math.round(100*eo.confidence),"%"]}),(0,n.jsx)("p",{"data-testid":"intake-route-chip-reason",className:"text-xs text-muted-foreground",children:function(e){if("classifier"!==e.decidedBy)return e.reason;if(e.reason.startsWith("classifier-failed:"))return"분류기가 못 갈랐습니다 — 직접 골라 주세요";if(e.reason.startsWith("classifier-low-confidence:")){var t,r;let n=e.reason.slice(26);return"분류기 추정: ".concat(null!=(r=null==(t=h[n])?void 0:t.slice(2))?r:n," (확신 낮음)")}return e.reason}(eo)}),"rule-unknown"===eo.reason&&(0,n.jsx)(i.$,{type:"button",size:"sm",variant:"outline",disabled:F||es.busy||el,onClick:()=>void ea(),"data-testid":"intake-route-classify",children:"분류기로 가르기"})]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,n.jsx)(i.$,{type:"button",size:"sm",className:eu("absorb"),"aria-pressed":"absorb"===ec,disabled:el||es.busy,onClick:()=>void et(),"data-testid":"intake-absorb","data-emphasized":"absorb"===ec?"true":"false",children:"흡수"}),(0,n.jsx)(i.$,{type:"button",size:"sm",variant:"outline",className:eu("split"),"aria-pressed":"split"===ec,disabled:el||es.busy||!d,onClick:()=>void er(),"data-testid":"intake-split","data-emphasized":"split"===ec?"true":"false",children:"작업으로 나누기"}),(0,n.jsx)(i.$,{type:"button",size:"sm",variant:"secondary",className:eu("graph"),"aria-pressed":"graph"===ec,disabled:el||es.busy,onClick:()=>void en(),"data-testid":"intake-graph","data-emphasized":"graph"===ec?"true":"false",children:"그래프로 실행"})]}),es.absorbIds&&(0,n.jsxs)("div",{"data-testid":"intake-absorb-result",className:"space-y-1 text-sm",children:[(0,n.jsx)("p",{children:"대기열에 넣었습니다(아침 정기 흡수에서 처리)"}),(0,n.jsx)("ul",{children:es.absorbIds.map(e=>(0,n.jsx)("li",{"data-testid":"intake-absorb-id",children:e},e))})]}),ei&&(0,n.jsxs)("div",{"data-testid":"intake-graph-result",className:"space-y-1 text-sm",children:[(0,n.jsx)("p",{"data-testid":"intake-acceptance-id",children:ei.acceptanceId}),ei.phase&&(0,n.jsx)("p",{"data-testid":"intake-graph-phase",children:ei.phase}),ei.runId&&(0,n.jsx)("p",{"data-testid":"intake-graph-run",children:ei.runId})]}),es.error&&(0,n.jsx)("p",{className:"text-sm text-destructive","data-testid":"intake-front-door-error",children:es.error}),es.wishCardId&&(0,n.jsxs)("p",{className:"text-sm","data-testid":"intake-wish-card-id",children:["소원 카드 ",es.wishCardId]}),es.recent.length>0&&(0,n.jsx)("ul",{"data-testid":"intake-recent",className:"space-y-1 text-xs text-muted-foreground",children:es.recent.map((e,t)=>{var r;let a=(e=>{var t,r,n;let a=null!=(r=e.runId)?r:e.acceptanceId===es.acceptanceId?null==ei?void 0:ei.runId:void 0;return a?p(null!=(n=null==(t=es.runEvents)?void 0:t[a])?n:[]):null})(e);return(0,n.jsxs)("li",{"data-testid":"intake-recent-row",children:[e.track," \xb7 ",e.preview,e.ids?" \xb7 ".concat(e.ids.join(", ")):"","absorb"===e.track&&(null==(r=e.ids)?void 0:r.map(e=>{var t,r,a;let s=Object.hasOwn(M,e)?u(null!=(r=M[e])?r:null):null,i=(null==(t=M[e])?void 0:t.status)==="absorbed";return(0,n.jsxs)("span",{"data-testid":"intake-absorb-status",children:[" \xb7 ","흡수: ",null!=(a=null==s?void 0:s.label)?a:"조회 중",(null==s?void 0:s.noteRef)?" \xb7 ".concat(s.noteRef):"",i?" \xb7 위키: 준비 중":""]},e)})),e.cardId?" \xb7 카드 ".concat(e.cardId):"",e.acceptanceId?" \xb7 ".concat(e.acceptanceId):"",(null==a?void 0:a.stage)&&(0,n.jsxs)("span",{"data-testid":"intake-run-stage",children:[" \xb7 단계: ",a.stage]}),(null==a?void 0:a.lastEventAt)&&(0,n.jsxs)("time",{"data-testid":"intake-run-last-event",dateTime:a.lastEventAt,children:[" \xb7 마지막 사건: ",a.lastEventAt]}),(null==a?void 0:a.done)&&(0,n.jsxs)("span",{"data-testid":"intake-run-outcome",children:[" \xb7 ","completed"===a.outcome?"완료":"failed"===a.outcome?"실패":"결과 미상",a.error?" \xb7 ".concat(a.error.split("\n")[0]):""]})]},"".concat(e.at,"-").concat(t))})})]})}},72331:(e,t,r)=>{Promise.resolve().then(r.bind(r,69706))},85839:(e,t,r)=>{"use strict";r.d(t,{Zr:()=>i,f6:()=>a,oD:()=>s});let n="elanous.daemon.sessionId";function a(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"s-".concat(Date.now().toString(36),"-").concat(Math.random().toString(36).slice(2,10))}function s(){let e=function(){let e=new URLSearchParams(window.location.search).get("session");return e?(localStorage.setItem(n,e),e):localStorage.getItem(n)}();if(e)return e;let t=a();return localStorage.setItem(n,t),t}function i(){let e=a();return localStorage.setItem(n,e),e}},93778:(e,t,r)=>{"use strict";r.d(t,{Gm:()=>u,IH:()=>s,PM:()=>o,ZJ:()=>l,cE:()=>a,dy:()=>c,qI:()=>i,sg:()=>d});let n=/https?:\/\/[^\s<>"']+/g;function a(e){return e.slice(0,40)}async function s(e,t){let r=function(e){var t;let r=null!=(t=e.match(n))?t:[];return 0===r.length?[{text:e}]:r.map(e=>({url:e}))}(t),a=await e.fetchJson("/v1/intake-ledger/items",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({items:r,source:"pwa"})});return{ids:a.ids,added:a.added,merged:a.merged}}function i(e,t,r,n){return e.fetchJson("/v1/task-cards/wish",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t,sessionId:r,ref:n})})}async function l(e,t){return{acceptanceId:(await e.fetchJson("/v1/harness/ask",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t})})).acceptanceId}}function o(e,t){return e.fetchJson("/v1/harness/ask-status?acceptanceId=".concat(encodeURIComponent(t)))}function c(e,t){return e.fetchJson("/v1/harness/run-events?runId=".concat(encodeURIComponent(t)))}function u(e,t){return e.fetchJson("/v1/intake-ledger/items/".concat(encodeURIComponent(t)))}function d(e,t,r){return e.fetchJson("/v1/intake/route",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({text:t,consent:"route",source:"pwa",...(null==r?void 0:r.classify)!==void 0?{classify:r.classify}:{}})})}}},e=>{e.O(0,[837,4426,6120,4870,4817,5122,7358],()=>e(e.s=72331)),_N_E=e.O()}]);