elanous 0.2.12 → 0.2.13

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 (289) 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/chunks/{1394-ee3795b112907122.js → 1394-931c9827067b2276.js} +1 -1
  4. package/apps/pwa/out/_next/static/chunks/{3992-2e522a8ac5f2afde.js → 3992-fe5c06d6b31f8b25.js} +1 -1
  5. package/apps/pwa/out/_next/static/chunks/5250-c78ca295585bbf95.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/6511-ff8360be3d65aaa4.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/6588-ba380869b67c4fa7.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/{7758-0b018a9e4fc56200.js → 7758-85c2b53f731da024.js} +1 -1
  9. package/apps/pwa/out/_next/static/chunks/{8605-0259994816604c49.js → 8605-9da4678f8a310d18.js} +1 -1
  10. package/apps/pwa/out/_next/static/chunks/9906-e7b8b5310a169dfe.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/app/approvals/{page-cb169620945d1952.js → page-e5b4e1b256f41076.js} +1 -1
  12. package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-cefe8169e36cf62a.js → page-e49b9b76c565a0b1.js} +1 -1
  13. package/apps/pwa/out/_next/static/chunks/app/board/page-b4f032c893b21cc9.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/app/botlab/page-f14987d5850a31e0.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/app/bots/page-b433308aad13ceb6.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/app/chat/{page-813c4a52c9d05ca8.js → page-4c1dbb21861beab2.js} +1 -1
  17. package/apps/pwa/out/_next/static/chunks/app/consult/{page-4731f2c215358937.js → page-c85b816e3b269dbb.js} +1 -1
  18. package/apps/pwa/out/_next/static/chunks/app/control/{page-a022b257950f39e6.js → page-f6bc66b919b2ea7d.js} +1 -1
  19. package/apps/pwa/out/_next/static/chunks/app/design-check/{page-a2ffc717e04b8b0a.js → page-60603c1e056c9b25.js} +1 -1
  20. package/apps/pwa/out/_next/static/chunks/app/editor/{page-b59ee4e70fc18fcf.js → page-a0ea8f5a2341ee6b.js} +1 -1
  21. package/apps/pwa/out/_next/static/chunks/app/exec/page-45c5bf04b4a605e6.js +1 -0
  22. package/apps/pwa/out/_next/static/chunks/app/field/{page-c172dabd796eb7a3.js → page-36c6c4183353ac9e.js} +1 -1
  23. package/apps/pwa/out/_next/static/chunks/app/inside/{page-1efd0cb9e0ed9d13.js → page-cb2eb0fd809980da.js} +1 -1
  24. package/apps/pwa/out/_next/static/chunks/app/intake/{page-d5dc7ff69a37b4cf.js → page-31012264da8a341f.js} +1 -1
  25. package/apps/pwa/out/_next/static/chunks/app/layout-50309aeb0bdd554a.js +1 -0
  26. package/apps/pwa/out/_next/static/chunks/app/live/page-bc00e964e855f4df.js +1 -0
  27. package/apps/pwa/out/_next/static/chunks/app/market/{page-dfca9b7d2de0b135.js → page-0696ee3fac9fe56c.js} +1 -1
  28. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-793fa536b3a6ef37.js → page-66c27608f651b866.js} +1 -1
  29. package/apps/pwa/out/_next/static/chunks/app/morning/{page-6dd3bfbbde2a5c2c.js → page-6ddd2109b7fc3a80.js} +1 -1
  30. package/apps/pwa/out/_next/static/chunks/app/not-found-4e50b7298c1f69a5.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/app/observatory/{page-77447356baad75d2.js → page-7a2bf830038a2264.js} +1 -1
  32. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-1f327f18694fabca.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-e5cef2fe6e4028df.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-cf596128d2b420ba.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/app/outputs/{page-6d604227e1664b71.js → page-f672536f14f0969f.js} +1 -1
  36. package/apps/pwa/out/_next/static/chunks/app/page-b52365662232db89.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/app/reflection/{page-4048543b4b7ad5e0.js → page-e7a6c80f288b1948.js} +1 -1
  38. package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-4c3a3126abed551a.js → page-29a709616df9b050.js} +1 -1
  39. package/apps/pwa/out/_next/static/chunks/app/sessions/{page-64b0aecb1ca75e75.js → page-fee842d7c2151129.js} +1 -1
  40. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-78b40a344ed22f24.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/app/settings/page-75d199f448171014.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-a011dd5b0bff29c5.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/app/setup/{page-9547b5cec7cf76bf.js → page-d92e32d51ab5157e.js} +1 -1
  44. package/apps/pwa/out/_next/static/chunks/app/share/page-5f21aed6932ef375.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/app/showroom/page-1e1a53946804debf.js +1 -0
  46. package/apps/pwa/out/_next/static/chunks/app/tasks/{page-2cddeb9e2aeedc55.js → page-a1833cd43d832601.js} +1 -1
  47. package/apps/pwa/out/_next/static/chunks/app/term/{page-e297866051595d81.js → page-63d14a4d8fe1e1c1.js} +1 -1
  48. package/apps/pwa/out/_next/static/chunks/app/today/{page-baba2e047872fb0f.js → page-2a511d320f762e06.js} +1 -1
  49. package/apps/pwa/out/_next/static/chunks/app/trace/{page-e895da4ec9cac345.js → page-1c3e03f88dac1e21.js} +1 -1
  50. package/apps/pwa/out/_next/static/chunks/app/vault/page-c4d5289c2ea97a89.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b91f8952deaeaf27.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/app/workflows/page-71b43a2588489987.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/app/workspace/{page-2e9e2fb01c9da1c9.js → page-2b256feed331546f.js} +1 -1
  54. package/apps/pwa/out/_next/static/chunks/app/worktrees/{page-d62ceb13411ebba4.js → page-505bb96d69a8622c.js} +1 -1
  55. package/apps/pwa/out/approvals/index.html +1 -1
  56. package/apps/pwa/out/approvals/index.txt +13 -13
  57. package/apps/pwa/out/autopilot/index.html +1 -1
  58. package/apps/pwa/out/autopilot/index.txt +13 -13
  59. package/apps/pwa/out/board/index.html +1 -1
  60. package/apps/pwa/out/board/index.txt +13 -13
  61. package/apps/pwa/out/botlab/index.html +1 -1
  62. package/apps/pwa/out/botlab/index.txt +13 -13
  63. package/apps/pwa/out/bots/index.html +1 -1
  64. package/apps/pwa/out/bots/index.txt +13 -13
  65. package/apps/pwa/out/chat/index.html +1 -1
  66. package/apps/pwa/out/chat/index.txt +13 -13
  67. package/apps/pwa/out/consult/index.html +1 -1
  68. package/apps/pwa/out/consult/index.txt +13 -13
  69. package/apps/pwa/out/control/index.html +1 -1
  70. package/apps/pwa/out/control/index.txt +13 -13
  71. package/apps/pwa/out/design-check/index.html +1 -1
  72. package/apps/pwa/out/design-check/index.txt +13 -13
  73. package/apps/pwa/out/editor/index.html +1 -1
  74. package/apps/pwa/out/editor/index.txt +13 -13
  75. package/apps/pwa/out/exec/index.html +1 -1
  76. package/apps/pwa/out/exec/index.txt +13 -13
  77. package/apps/pwa/out/field/index.html +1 -1
  78. package/apps/pwa/out/field/index.txt +13 -13
  79. package/apps/pwa/out/healthz +1 -1
  80. package/apps/pwa/out/index.html +1 -1
  81. package/apps/pwa/out/index.txt +13 -13
  82. package/apps/pwa/out/inside/index.html +1 -1
  83. package/apps/pwa/out/inside/index.txt +13 -13
  84. package/apps/pwa/out/intake/index.html +1 -1
  85. package/apps/pwa/out/intake/index.txt +13 -13
  86. package/apps/pwa/out/live/index.html +1 -1
  87. package/apps/pwa/out/live/index.txt +13 -13
  88. package/apps/pwa/out/market/index.html +1 -1
  89. package/apps/pwa/out/market/index.txt +13 -13
  90. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  91. package/apps/pwa/out/missions/placeholder/index.txt +13 -13
  92. package/apps/pwa/out/morning/index.html +1 -1
  93. package/apps/pwa/out/morning/index.txt +13 -13
  94. package/apps/pwa/out/observatory/index.html +1 -1
  95. package/apps/pwa/out/observatory/index.txt +13 -13
  96. package/apps/pwa/out/ops/checklist/index.html +1 -1
  97. package/apps/pwa/out/ops/checklist/index.txt +13 -13
  98. package/apps/pwa/out/ops/release/index.html +1 -1
  99. package/apps/pwa/out/ops/release/index.txt +13 -13
  100. package/apps/pwa/out/ops/seats/index.html +1 -1
  101. package/apps/pwa/out/ops/seats/index.txt +13 -13
  102. package/apps/pwa/out/outputs/index.html +1 -1
  103. package/apps/pwa/out/outputs/index.txt +13 -13
  104. package/apps/pwa/out/reflection/index.html +1 -1
  105. package/apps/pwa/out/reflection/index.txt +14 -14
  106. package/apps/pwa/out/scheduler/index.html +1 -1
  107. package/apps/pwa/out/scheduler/index.txt +13 -13
  108. package/apps/pwa/out/sessions/index.html +1 -1
  109. package/apps/pwa/out/sessions/index.txt +13 -13
  110. package/apps/pwa/out/settings/devices/index.html +1 -1
  111. package/apps/pwa/out/settings/devices/index.txt +13 -13
  112. package/apps/pwa/out/settings/index.html +1 -1
  113. package/apps/pwa/out/settings/index.txt +13 -13
  114. package/apps/pwa/out/setup/done/index.html +1 -1
  115. package/apps/pwa/out/setup/done/index.txt +13 -13
  116. package/apps/pwa/out/setup/index.html +1 -1
  117. package/apps/pwa/out/setup/index.txt +13 -13
  118. package/apps/pwa/out/share/index.html +1 -1
  119. package/apps/pwa/out/share/index.txt +13 -13
  120. package/apps/pwa/out/showroom/index.html +1 -1
  121. package/apps/pwa/out/showroom/index.txt +13 -13
  122. package/apps/pwa/out/tasks/index.html +1 -1
  123. package/apps/pwa/out/tasks/index.txt +13 -13
  124. package/apps/pwa/out/term/index.html +1 -1
  125. package/apps/pwa/out/term/index.txt +13 -13
  126. package/apps/pwa/out/today/index.html +1 -1
  127. package/apps/pwa/out/today/index.txt +13 -13
  128. package/apps/pwa/out/trace/index.html +1 -1
  129. package/apps/pwa/out/trace/index.txt +13 -13
  130. package/apps/pwa/out/vault/index.html +1 -1
  131. package/apps/pwa/out/vault/index.txt +13 -13
  132. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  133. package/apps/pwa/out/workflows/chat-ui/index.txt +13 -13
  134. package/apps/pwa/out/workflows/index.html +1 -1
  135. package/apps/pwa/out/workflows/index.txt +13 -13
  136. package/apps/pwa/out/workspace/index.html +1 -1
  137. package/apps/pwa/out/workspace/index.txt +13 -13
  138. package/apps/pwa/out/worktrees/index.html +1 -1
  139. package/apps/pwa/out/worktrees/index.txt +13 -13
  140. package/examples/teams/personas/backend.yaml +4 -0
  141. package/examples/teams/personas/pm.yaml +4 -0
  142. package/examples/teams/personas/qa.yaml +4 -0
  143. package/examples/teams/small-product.yaml +20 -0
  144. package/graphs/lecture/lecture-note.yaml +28 -0
  145. package/graphs/lecture/recipes.yaml +17 -0
  146. package/package.json +2 -1
  147. package/scripts/context-hooks/emit.ts +36 -14
  148. package/scripts/coord-channel-watch.sh +1 -0
  149. package/scripts/discord-seat-probe.ts +144 -0
  150. package/scripts/hq/hq-standby.sh +65 -0
  151. package/scripts/hq/standby-promote.ts +173 -0
  152. package/scripts/hq/standby-role.ts +59 -0
  153. package/scripts/hq/standby-snapshot.ts +226 -0
  154. package/scripts/hq/standby-verify.ts +219 -0
  155. package/scripts/lecture-note/node.ts +256 -0
  156. package/scripts/release-loop/gate-node.ts +53 -15
  157. package/scripts/release-loop/ops-upgrade-node.ts +17 -5
  158. package/scripts/test-deterministic.ts +53 -3
  159. package/skills/omni-crawl/SKILL.md +16 -16
  160. package/skills/omni-crawl/package-lock.json +1 -544
  161. package/skills/omni-crawl/package.json +3 -4
  162. package/skills/omni-crawl/scripts/main.ts +13 -13
  163. package/skills/omni-crawl/scripts/monitor.ts +8 -8
  164. package/skills/omni-crawl/src/apify.ts +13 -2
  165. package/skills/omni-crawl/src/capture.ts +6 -0
  166. package/skills/omni-crawl/src/registry.ts +2 -2
  167. package/skills/omni-crawl/src/stdout-json.ts +4 -0
  168. package/skills/omni-digest/SKILL.md +10 -11
  169. package/skills/omni-digest/package-lock.json +0 -545
  170. package/skills/omni-digest/package.json +2 -5
  171. package/skills/omni-digest/scripts/main.ts +3 -3
  172. package/skills/omni-digest/src/delegate.ts +5 -5
  173. package/skills/omni-digest/src/fetch.ts +2 -2
  174. package/skills/omni-digest/src/media.ts +25 -11
  175. package/skills/omni-digest/src/visual.ts +3 -2
  176. package/skills/omni-market/scripts/main.ts +1 -1
  177. package/skills/omni-market/scripts/stdout-json.ts +4 -0
  178. package/src/agent/identity-env.ts +11 -0
  179. package/src/agent-mission/driver.ts +12 -7
  180. package/src/agent-mission/duo.ts +94 -0
  181. package/src/agent-mission/pty-decision.ts +1 -1
  182. package/src/autopilot/track-agent-shadow.ts +2 -1
  183. package/src/autopilot/track-agent.ts +4 -1
  184. package/src/boot/daemon-prompt-request.ts +3 -0
  185. package/src/boot/daemon-prompt-turn.ts +6 -2
  186. package/src/boot/daemon-runtime.ts +48 -16
  187. package/src/cli/decisions-cli.ts +51 -19
  188. package/src/cli/outputs-cli.ts +92 -0
  189. package/src/cli/persona-cli.ts +29 -0
  190. package/src/cli/pod-cli.ts +10 -3
  191. package/src/cli/pr-cli.ts +15 -1
  192. package/src/cli/release-cli.ts +108 -28
  193. package/src/context-bus/condense.ts +194 -0
  194. package/src/context-bus/context-day.ts +82 -0
  195. package/src/context-bus/context-now-surfaces.ts +15 -2
  196. package/src/context-bus/long-term-memory.ts +118 -22
  197. package/src/context-bus/nightly-condense.ts +1 -1
  198. package/src/decisions/decision-cards.ts +13 -7
  199. package/src/decisions/decision-ledger.ts +43 -17
  200. package/src/graph-kinds/registry.ts +2 -2
  201. package/src/graph-runner/graph-approval-card.ts +2 -2
  202. package/src/graph-runner/graph-grow.ts +64 -11
  203. package/src/graph-runner/graph-tick.ts +9 -2
  204. package/src/graph-runner/runner.ts +81 -17
  205. package/src/harness/harness-cli-command.ts +27 -1
  206. package/src/harness/harness-queue-child.ts +37 -0
  207. package/src/harness/harness-queue.ts +306 -0
  208. package/src/hooks/github-shadow.ts +72 -2
  209. package/src/hooks/receiver.ts +4 -2
  210. package/src/hq/hq.ts +318 -0
  211. package/src/hq/lease.ts +210 -0
  212. package/src/hq/ledger-write-target.ts +41 -0
  213. package/src/index.ts +199 -7
  214. package/src/intake-plane/discord-seat-work.ts +13 -6
  215. package/src/intake-plane/linear-wish.ts +44 -0
  216. package/src/intake-plane/persona-answer.ts +5 -0
  217. package/src/intake-plane/telegram-seat-work.ts +13 -6
  218. package/src/intake-plane/wish-card.ts +1 -1
  219. package/src/loops/checker.ts +178 -0
  220. package/src/loops/loop-cli.ts +37 -3
  221. package/src/loops/observe.ts +49 -0
  222. package/src/loops/orchestrator/overlap.ts +141 -0
  223. package/src/loops/orchestrator/traffic.ts +150 -0
  224. package/src/loops/package/verify.ts +125 -0
  225. package/src/loops/verdict.ts +22 -0
  226. package/src/maturity/feature-maturity.ts +3 -3
  227. package/src/memory.ts +37 -4
  228. package/src/nexus/api/card-followup-route.ts +118 -0
  229. package/src/nexus/api/decisions-route.ts +68 -0
  230. package/src/nexus/api/http-server.ts +47 -0
  231. package/src/nexus/api/personas.ts +2 -1
  232. package/src/nexus/api/skill-exec-route.ts +97 -0
  233. package/src/persona/loader.ts +18 -0
  234. package/src/persona/persona-todo.ts +14 -9
  235. package/src/persona/presets.ts +2 -1
  236. package/src/persona/team.ts +105 -0
  237. package/src/persona/types.ts +4 -0
  238. package/src/pod-lease/host-lease.ts +130 -20
  239. package/src/release-loop/landed-but-yellow.ts +12 -0
  240. package/src/seat-dispatch/seat-ask.ts +57 -12
  241. package/src/seat-loop/seat-loop.ts +90 -16
  242. package/src/seat-loop/seat-pack.ts +127 -0
  243. package/src/self-dev/ask-launch-flow.ts +3 -0
  244. package/src/self-implement/l8-merge-queue.ts +157 -1
  245. package/src/steward/launch.ts +5 -1
  246. package/src/steward/readiness.ts +125 -0
  247. package/src/steward/rescue.ts +75 -0
  248. package/src/steward/triage.ts +48 -9
  249. package/src/task-cards/card-cli.ts +78 -0
  250. package/src/task-orchestrator/surfaces/pod-lease.ts +18 -6
  251. package/src/task-orchestrator/surfaces/pod-pool.ts +27 -10
  252. package/src/task-orchestrator/surfaces/self-implement-pod.ts +38 -8
  253. package/src/telegram-dispatch-forward.ts +1 -1
  254. package/src/telegram-fabric-plan.ts +90 -0
  255. package/src/telegram-project-command.ts +10 -4
  256. package/src/telegram.ts +5 -0
  257. package/src/tool-runtime/elanous-control-runtimes.ts +2 -1
  258. package/src/user-config.ts +94 -10
  259. package/src/version/packed-revision.json +1 -1
  260. package/src/workflow-runtime/executor.ts +4 -0
  261. package/src/workflow-runtime/node-catalog.ts +13 -0
  262. package/src/workflow-runtime/nodes/knowledge.ts +38 -0
  263. package/src/workflow-runtime/schema.ts +17 -1
  264. package/src/workflow-runtime/types.ts +13 -1
  265. package/apps/pwa/out/_next/static/chunks/1147-466ec15afacc1a65.js +0 -1
  266. package/apps/pwa/out/_next/static/chunks/7277-0b2fc7c16ba2d64b.js +0 -1
  267. package/apps/pwa/out/_next/static/chunks/9906-482c6619b3fdda20.js +0 -1
  268. package/apps/pwa/out/_next/static/chunks/9920-5cfdc5e8fd209825.js +0 -1
  269. package/apps/pwa/out/_next/static/chunks/app/board/page-d2e35228bc497119.js +0 -1
  270. package/apps/pwa/out/_next/static/chunks/app/botlab/page-5c05b0da4bc1392c.js +0 -1
  271. package/apps/pwa/out/_next/static/chunks/app/bots/page-e0ccdb576812b523.js +0 -1
  272. package/apps/pwa/out/_next/static/chunks/app/exec/page-a67e11ba962337b5.js +0 -1
  273. package/apps/pwa/out/_next/static/chunks/app/layout-e71c84189e8c683e.js +0 -1
  274. package/apps/pwa/out/_next/static/chunks/app/live/page-1d6a533ce5a6efcb.js +0 -1
  275. package/apps/pwa/out/_next/static/chunks/app/not-found-490653e8d4cc8852.js +0 -1
  276. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-29e961191f6057df.js +0 -1
  277. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-c822f55b884d9104.js +0 -1
  278. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fa4ccfc432424e52.js +0 -1
  279. package/apps/pwa/out/_next/static/chunks/app/page-9c7e8f744a765daf.js +0 -1
  280. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-4292d0149020e8a7.js +0 -1
  281. package/apps/pwa/out/_next/static/chunks/app/settings/page-db14d0be7f1c460c.js +0 -1
  282. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-e5d8072cd7cfef73.js +0 -1
  283. package/apps/pwa/out/_next/static/chunks/app/share/page-e6dcb83265530636.js +0 -1
  284. package/apps/pwa/out/_next/static/chunks/app/showroom/page-45248f08d6aecae5.js +0 -1
  285. package/apps/pwa/out/_next/static/chunks/app/vault/page-4344faf20216233b.js +0 -1
  286. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-698bb29f11864b89.js +0 -1
  287. package/apps/pwa/out/_next/static/chunks/app/workflows/page-bd6a6dc1ddc273f2.js +0 -1
  288. /package/apps/pwa/out/_next/static/{-6XrAoD3eU7NyMHAE4xPS → D51l8jUBplJrIpWvENsDK}/_buildManifest.js +0 -0
  289. /package/apps/pwa/out/_next/static/{-6XrAoD3eU7NyMHAE4xPS → D51l8jUBplJrIpWvENsDK}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9920],{3472:(e,t,r)=>{"use strict";r.d(t,{AF:()=>n});let n={all:["nexus"],health:()=>[...n.all,"health"],snapshot:()=>[...n.all,"snapshot"],tabs:e=>e?[...n.all,"tabs",{kind:e}]:[...n.all,"tabs"],tab:e=>[...n.all,"tab",e],templates:()=>[...n.all,"templates"],template:e=>[...n.all,"template",e],config:()=>[...n.all,"config"],switches:()=>[...n.all,"switches"],switch:e=>[...n.all,"switch",e],secrets:()=>[...n.all,"secrets"],bindingChannels:()=>[...n.all,"bindings","channels"],bindings:e=>[...n.all,"bindings",e],binding:(e,t)=>[...n.all,"binding",e,t],logsTail:(e,t)=>t?[...n.all,"logs",e,{lines:t}]:[...n.all,"logs",e],workflows:()=>[...n.all,"workflows"],workflow:e=>[...n.all,"workflow",e],workflowRun:e=>[...n.all,"workflow-run",e],workflowRuns:()=>[...n.all,"workflow-runs"],pendingApprovals:()=>[...n.all,"workflow-pending-approvals"],platforms:()=>[...n.all,"platforms"],providers:()=>[...n.all,"providers"],worktrees:()=>[...n.all,"worktrees"],designCheck:()=>[...n.all,"design-check"],designPreviews:()=>[...n.all,"design-previews"],designPreview:e=>[...n.all,"design-preview",e],registryCatalog:()=>[...n.all,"registry-catalog"],resolvedView:()=>[...n.all,"resolved-view"]};n.snapshot(),n.tabs(),n.health(),n.snapshot(),n.config(),n.switches()},23716:(e,t,r)=>{"use strict";r.d(t,{N:()=>tK});var n=r(54456);let a=/^[a-z0-9]+(-[a-z0-9]+)*$/;function l(e){return e.trim().replace(/[^a-zA-Z0-9-]+/g,"-").replace(/^-+|-+$/g,"")}function s(e){return/\.ya?ml$/i.test(e.name)?e.size>262144?{ok:!1,reason:"파일 크기는 256KB 이하여야 합니다."}:e.text.trim()?{ok:!0,yaml:e.text,suggestedName:l(e.name.replace(/\.ya?ml$/i,"").toLowerCase())||"workflow"}:{ok:!1,reason:"내용이 비어 있는 파일은 가져올 수 없습니다."}:{ok:!1,reason:"YAML 파일(.yaml 또는 .yml)을 선택해 주세요."}}var o=r(60500),i=r(29972),d=r(23596),c=r(27982),u=r(35044),p=r(31470),x=r(47341),m=r(27017),h=r(38102),f=r(90429),g=r(60796),b=r(13784),y=r(8286),v=r(56125),j=r(75591),w=r(4198),k=r(80079),N=r(75027),C=r(4118),S=r(45086),A=r(17217),T=r(43468),E=r(26858),M=r(37958);r(44992),r(98706);var _=r(83253);let R=/^\*\/(\d+) \* \* \* \*$/,I=/^0 \*\/(\d+) \* \* \*$/,O=/^(\d+) (\d+) \* \* \*$/,L=/^(\d+) (\d+) \* \* 1-5$/,P=/^(\d+) (\d+) \* \* ([0-6])$/,D=/^(\d+) (\d+) (\d+) \* \*$/,z=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function F(e){return e.toString().padStart(2,"0")}function W(e){let t=e.trim();if(!t)return{text:"(empty expression)",matched:!1};let r=R.exec(t);if(r){let e=Number(r[1]);return{text:"Every ".concat(e," minute").concat(1===e?"":"s"),matched:!0}}let n=I.exec(t);if(n){let e=Number(n[1]);return{text:"Every ".concat(e," hour").concat(1===e?"":"s"),matched:!0}}let a=L.exec(t);if(a)return{text:"Every weekday at ".concat(F(Number(a[2])),":").concat(F(Number(a[1]))),matched:!0};let l=P.exec(t);if(l){let e=z[Number(l[3])];return{text:"Every ".concat(e," at ").concat(F(Number(l[2])),":").concat(F(Number(l[1]))),matched:!0}}let s=O.exec(t);if(s)return{text:"Every day at ".concat(F(Number(s[2])),":").concat(F(Number(s[1]))),matched:!0};let o=D.exec(t);return o?{text:"Day ".concat(Number(o[3])," of every month at ").concat(F(Number(o[2])),":").concat(F(Number(o[1]))),matched:!0}:{text:"Custom: ".concat(t),matched:!1}}let $=[{id:"every-5-min",label:"Every 5 min",expression:"*/5 * * * *"},{id:"every-hour",label:"Hourly",expression:"0 */1 * * *"},{id:"daily-9am",label:"Daily 9am",expression:"0 9 * * *"},{id:"weekdays-9am",label:"Weekdays 9am",expression:"0 9 * * 1-5"},{id:"weekly-mon-9am",label:"Mon 9am",expression:"0 9 * * 1"},{id:"monthly-1st-9am",label:"1st 9am",expression:"0 9 1 * *"}];function q(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"string"==typeof e?e:t}function U(e){return"string"==typeof e.prompt?"prompt":"string"==typeof e.bash?"bash":"string"==typeof e.skill?"skill":"string"==typeof e.cft?"cft":void 0!==e.approval&&"object"==typeof e.approval&&null!==e.approval?"approval":void 0!==e.if&&"object"==typeof e.if&&null!==e.if&&"string"==typeof e.if.condition?"if":void 0!==e.switch&&"object"==typeof e.switch&&null!==e.switch&&"string"==typeof e.switch.value&&Array.isArray(e.switch.cases)?"switch":void 0!==e.iteration&&"object"==typeof e.iteration&&null!==e.iteration&&"string"==typeof e.iteration.items&&"string"==typeof e.iteration.body?"iteration":void 0!==e.classify&&"object"==typeof e.classify&&null!==e.classify&&"string"==typeof e.classify.input&&Array.isArray(e.classify.classes)?"classify":void 0!==e.extract&&"object"==typeof e.extract&&null!==e.extract&&"string"==typeof e.extract.input&&"object"==typeof e.extract.schema?"extract":void 0!==e.set&&"object"==typeof e.set&&null!==e.set&&"object"==typeof e.set.fields?"set":void 0!==e.filter&&"object"==typeof e.filter&&null!==e.filter&&"string"==typeof e.filter.items&&"string"==typeof e.filter.condition?"filter":void 0!==e.template&&"object"==typeof e.template&&null!==e.template&&"string"==typeof e.template.template?"template":void 0!==e.http&&"object"==typeof e.http&&null!==e.http&&"string"==typeof e.http.url?"http":void 0!==e.scheduleTrigger&&"object"==typeof e.scheduleTrigger&&null!==e.scheduleTrigger&&"string"==typeof e.scheduleTrigger.type?"scheduleTrigger":void 0!==e.webhookTrigger&&"object"==typeof e.webhookTrigger&&null!==e.webhookTrigger&&"string"==typeof e.webhookTrigger.path?"webhookTrigger":void 0!==e.discordTrigger&&"object"==typeof e.discordTrigger&&null!==e.discordTrigger&&"string"==typeof e.discordTrigger.kind?"discordTrigger":void 0!==e.telegramTrigger&&"object"==typeof e.telegramTrigger&&null!==e.telegramTrigger&&"string"==typeof e.telegramTrigger.kind?"telegramTrigger":void 0!==e.manualTrigger&&"object"==typeof e.manualTrigger&&null!==e.manualTrigger?"manualTrigger":void 0!==e.chatTrigger&&"object"==typeof e.chatTrigger&&null!==e.chatTrigger&&"string"==typeof e.chatTrigger.path?"chatTrigger":"unknown"}function G(e){let t=e.kind;return"string"==typeof t&&/^[a-z0-9-]+:[a-z0-9-]+$/.test(t)?t:null}function H(e,t){var r;return"unknown"===t&&null!=(r=G(e))?r:t}function K(e){var t;return e?(null!=(t=e.split("\n").find(e=>e.trim().length>0))?t:"").trim().slice(0,64):""}function J(e,t){let{nodes:r,edges:n}=function(e){var t,r,n,a,l,s,o,i,d,c,u,p;let x=[],m=[],h=new Set;for(let f of null!=(t=e.nodes)?t:[]){let e,t;if(!f||"string"!=typeof f.id||0===f.id.length||h.has(f.id))continue;h.add(f.id);let g=U(f),b="";switch(g){case"prompt":b=K(f.prompt);break;case"bash":b=K(f.bash);break;case"skill":b=String(null!=(r=f.skill)?r:"").slice(0,64);break;case"cft":b=String(null!=(n=f.cft)?n:"").slice(0,64);break;case"approval":{let t=f.approval;b=K(null==t?void 0:t.message),"string"==typeof(null==t?void 0:t.delivery)&&t.delivery.length>0&&(e=t.delivery);break}case"if":{let e=null==(a=f.if)?void 0:a.condition;b="string"==typeof e?e.slice(0,64):"";break}case"switch":{let e=f.switch,t=Array.isArray(null==e?void 0:e.cases)?" → ".concat(e.cases.length," case").concat(1===e.cases.length?"":"s"):"";b="".concat((null!=(l=null==e?void 0:e.value)?l:"").slice(0,40)).concat(t);break}case"iteration":{let e=f.iteration;b="over ".concat((null!=(s=null==e?void 0:e.items)?s:"").slice(0,32));break}case"classify":{let e=f.classify,t=Array.isArray(null==e?void 0:e.classes)?e.classes.length:0;b="".concat(t," class").concat(1===t?"":"es"," from ").concat((null!=(o=null==e?void 0:e.input)?o:"").slice(0,24));break}case"extract":{let e=f.extract,t=(null==e?void 0:e.schema)?Object.keys(e.schema).length:0;b="".concat(t," field").concat(1===t?"":"s"," from ").concat((null!=(i=null==e?void 0:e.input)?i:"").slice(0,24));break}case"set":{let e=f.set,t=(null==e?void 0:e.fields)?Object.keys(e.fields).length:0;b="set ".concat(t," field").concat(1===t?"":"s");break}case"filter":{let e=f.filter;b="filter ".concat((null!=(d=null==e?void 0:e.items)?d:"").slice(0,28)," on ").concat((null!=(c=null==e?void 0:e.condition)?c:"").slice(0,24));break}case"template":{let e=f.template,t=K(null==e?void 0:e.template);b="tpl: ".concat(t.slice(0,56));break}case"http":case"scheduleTrigger":case"webhookTrigger":case"discordTrigger":case"telegramTrigger":case"manualTrigger":case"chatTrigger":b=null!=(u=function(e,t){switch(e){case"scheduleTrigger":return function(e){if(!e)return"⏰ schedule";let t=e.type;if("cron"===t){let t=q(e.cron),r=q(e.timezone),n=W(t),a=!1===e.enabled?" \xb7 disabled":"",l="number"==typeof e.max_runs?" \xb7 max ".concat(e.max_runs," runs"):"";return"⏰ ".concat(n.text).concat(r?" ".concat(r):"").concat(l).concat(a)}if("interval"===t){let t="number"==typeof e.interval?e.interval:0,r=!1===e.enabled?" \xb7 disabled":"";if(t>=36e5&&t%36e5==0){let e=t/36e5;return"⏰ Every ".concat(e," hour").concat(1===e?"":"s").concat(r)}if(t>=6e4&&t%6e4==0){let e=t/6e4;return"⏰ Every ".concat(e," minute").concat(1===e?"":"s").concat(r)}let n=Math.max(1,Math.round(t/1e3));return"⏰ Every ".concat(n,"s").concat(r)}return"⏰ schedule"}(t.scheduleTrigger);case"webhookTrigger":return function(e){if(!e)return"\uD83D\uDD17 webhook";let t=q(e.method,"POST"),r=q(e.path),n=e.auth&&"object"==typeof e.auth?e.auth:null,a=n?" \xb7 ".concat(q(n.type)):"";return"\uD83D\uDD17 ".concat(t," ").concat(r).concat(a)}(t.webhookTrigger);case"http":return function(e){if(!e)return"\uD83C\uDF10 http";let t=q(e.method,"GET"),r=q(e.url),n="number"==typeof e.timeout?" \xb7 ".concat(Math.round(e.timeout/1e3),"s"):"";return"\uD83C\uDF10 ".concat(t," ").concat(r.slice(0,48)).concat(n)}(t.http);case"discordTrigger":return function(e){if(!e)return"\uD83D\uDCAC discord";let t=q(e.kind,"message"),r=[],n=q(e.channel);return n&&r.push("#".concat(n)),q(e.user)&&r.push("@".concat(q(e.user))),q(e.pattern)&&r.push("/".concat(q(e.pattern),"/")),r.push(t),"\uD83D\uDCAC ".concat(r.join(" \xb7 "))}(t.discordTrigger);case"telegramTrigger":var r=t.telegramTrigger;if(!r)return"✈️ telegram";let n=q(r.kind,"message"),a=[];return q(r.chat)&&a.push("@".concat(q(r.chat))),"command"===n&&q(r.command)&&a.push("/".concat(q(r.command))),q(r.user)&&a.push("from:".concat(q(r.user))),q(r.pattern)&&a.push("/".concat(q(r.pattern),"/")),a.push(n),"✈️ ".concat(a.join(" \xb7 "));case"manualTrigger":var l=t.manualTrigger;let s=q(null==l?void 0:l.description);return s?"▶ ".concat(s):"▶ Manual \xb7 explicit run";case"chatTrigger":return function(e){if(!e)return"\uD83D\uDCAD Chat";let t=q(e.path,"/chat"),r="per-session"===e.sessionMode?" \xb7 per-session":"",n=!0===e.streaming?" \xb7 streaming":"";return"\uD83D\uDCAD Chat: ".concat(t).concat(r).concat(n)}(t.chatTrigger);default:return null}}(g,f))?u:"";break;default:b=""}if("unknown"===g&&G(f)){let e=f.inputs,t=e&&"object"==typeof e?Object.values(e).find(e=>"string"==typeof e&&""!==e.trim()):void 0;b=t?K(t):""}if("if"===g)t=["then","else"];else if("switch"===g){let e=null==(p=f.switch)?void 0:p.cases;Array.isArray(e)&&(t=[...e.filter(e=>"string"==typeof e&&e.length>0),"default"])}for(let r of(x.push({id:f.id,variant:g,badge:H(f,g),label:f.id,preview:b,hasWhen:"string"==typeof f.when&&""!==f.when.trim(),..."string"==typeof f.trigger_rule?{triggerRule:f.trigger_rule}:{},hasToolPolicy:Array.isArray(f.allowed_tools)||Array.isArray(f.denied_tools),...void 0!==e?{approvalDelivery:e}:{},...t?{branches:t}:{}}),Array.isArray(f.depends_on)?f.depends_on:[]))"string"==typeof r&&0!==r.length&&m.push({id:"".concat(r,"->").concat(f.id),source:r,target:f.id})}return{nodes:x,edges:m}}(e),a=function(e){var t,r,n;let a=null!=(t=e.direction)?t:"LR",l=new _.Ay.graphlib.Graph;for(let t of(l.setDefaultEdgeLabel(()=>({})),l.setGraph({rankdir:a,ranksep:null!=(r=e.rankSep)?r:"LR"===a?100:80,nodesep:null!=(n=e.nodeSep)?n:"LR"===a?40:60,marginx:20,marginy:20}),e.nodes))l.setNode(t.id,{width:200,height:64});for(let t of e.edges)l.setEdge(t.source,t.target);_.Ay.layout(l);let s=e.nodes.map(e=>{var t,r,n,a;let s=l.node(e.id),o=(null!=(t=null==s?void 0:s.x)?t:0)-100,i=(null!=(r=null==s?void 0:s.y)?r:0)-32;return{...e,position:{x:o,y:i},width:null!=(n=null==s?void 0:s.width)?n:200,height:null!=(a=null==s?void 0:s.height)?a:64}}),o=0,i=0;for(let e of s)o=Math.max(o,e.position.x+e.width),i=Math.max(i,e.position.y+e.height);return{nodes:s,edges:e.edges,bounds:{width:o,height:i}}}({nodes:r,edges:n,...(null==t?void 0:t.direction)?{direction:t.direction}:{}}),l=function(e){let t=e._meta;if(!t||"object"!=typeof t)return{};let r=t.layout;if(!r||"object"!=typeof r)return{};let n={};for(let[e,t]of Object.entries(r))t&&"object"==typeof t&&"number"==typeof t.x&&"number"==typeof t.y&&(n[e]={x:t.x,y:t.y});return n}(e);if(0===Object.keys(l).length)return a;let s=0,o=0;return{nodes:a.nodes.map(e=>{let t=l[e.id],r=null!=t?t:e.position,n={...e,position:r};return s=Math.max(s,r.x+e.width),o=Math.max(o,r.y+e.height),n}),edges:a.edges,bounds:{width:s,height:o}}}var B=r(10641);function Y(e,t){var r;let n=new Set((null!=(r=e.nodes)?r:[]).map(e=>e.id)),a="unknown"===t?"node":t;for(let e=1;e<1e4;e+=1){let t="".concat(a,"-").concat(e);if(!n.has(t))return t}return"".concat(a,"-").concat(Date.now())}function X(e,t,r){var n,a;let l=null!=(n=null==r?void 0:r.id)?n:Y(e,t),s=function(e,t){switch(e){case"prompt":return{id:t,prompt:"Describe the desired behaviour…"};case"bash":return{id:t,bash:"echo todo"};case"skill":return{id:t,skill:"omni-digest",arguments:"$ARGUMENTS"};case"cft":return{id:t,cft:"pdca",config:{goal:"TBD",phase:"plan"}};case"approval":return{id:t,approval:{message:"Continue?"}};case"if":return{id:t,if:{condition:"$ARGUMENTS == 'yes'"}};case"switch":return{id:t,switch:{value:"$ARGUMENTS",cases:["a","b"]}};case"iteration":return{id:t,iteration:{items:'["a","b","c"]',body:"echo $index $item"}};case"classify":return{id:t,classify:{input:"$ARGUMENTS",classes:["question","command","other"]}};case"extract":return{id:t,extract:{input:"$ARGUMENTS",schema:{name:"person name",date:"ISO date if present"}}};case"set":return{id:t,set:{fields:{greeting:"Hello $ARGUMENTS"}}};case"filter":return{id:t,filter:{items:'["a","b","c"]',condition:"$item != 'b'"}};case"template":return{id:t,template:{template:"Hello {{ARGUMENTS}}!"}};case"http":return{id:t,http:{method:"GET",url:"https://api.example.com/items",headers:{Accept:"application/json"}}};case"scheduleTrigger":return{id:t,scheduleTrigger:{type:"interval",interval:36e5}};case"webhookTrigger":return{id:t,webhookTrigger:{method:"POST",path:"/hooks/example"}};case"discordTrigger":return{id:t,discordTrigger:{kind:"message"}};case"telegramTrigger":return{id:t,telegramTrigger:{kind:"message"}};case"manualTrigger":return{id:t,manualTrigger:{description:"Run manually"}};case"chatTrigger":return{id:t,chatTrigger:{path:"/chat",sessionMode:"stateless",streaming:!1}};default:return{id:t,bash:"echo placeholder"}}}(t,l);return{...e,nodes:[...null!=(a=e.nodes)?a:[],s]}}function V(e,t){var r;let n=(null!=(r=e.nodes)?r:[]).filter(e=>e.id!==t).map(e=>{let r=Array.isArray(e.depends_on)?e.depends_on.filter(e=>e!==t):void 0;if(void 0===r)return e;if(0===r.length){let{depends_on:t,...r}=e;return r}return{...e,depends_on:r}});return{...e,nodes:n}}function Q(e,t,r){var n,a;if(!(null!=(n=e.nodes)?n:[]).find(e=>e.id===t))return e;let l=e._meta&&"object"==typeof e._meta?{...e._meta}:{},s=l.layout&&"object"==typeof l.layout?{...l.layout}:{},o=new Set((null!=(a=e.nodes)?a:[]).map(e=>e.id));for(let e of Object.keys(s))o.has(e)||delete s[e];return s[t]={x:Math.round(r.x),y:Math.round(r.y)},l.layout=s,{...e,_meta:l}}function Z(e){if(!e._meta||"object"!=typeof e._meta)return e;let t={...e._meta};if(!("layout"in t))return e;if(delete t.layout,0===Object.keys(t).length){let{_meta:t,...r}=e;return r}return{...e,_meta:t}}function ee(e){var t;let r={};for(let t of("string"==typeof e.name&&(r.name=e.name),"string"==typeof e.description&&(r.description=e.description),Object.keys(e)))"name"!==t&&"description"!==t&&"nodes"!==t&&(r[t]=e[t]);return r.nodes=null!=(t=e.nodes)?t:[],(0,B.As)(r,{lineWidth:0,defaultStringType:"PLAIN",singleQuote:!1})}function et(e){try{let t=(0,B.parse)(e);if(!t||"object"!=typeof t||!Array.isArray(t.nodes))return null;return t}catch(e){return null}}var er=r(65338);let en={running:{dot:"#3b82f6",label:"Running"},done:{dot:"#22c55e",label:"Done"},failed:{dot:"#ef4444",label:"Failed"},skipped:{dot:"#9ca3af",label:"Skipped"},awaiting_approval:{dot:"#f59e0b",label:"Awaiting approval"}},ea={all:"\uD83D\uDCE3",modal:"\uD83D\uDDA5",terminal:"⌨",telegram:"\uD83D\uDCF2",discord:"\uD83D\uDCAC",pushcut:"\uD83D\uDD14"},el="application/x-elanous-node",es=new Set(["prompt","bash","skill","cft","approval","if","switch","iteration","classify","extract","set","filter","template","http","scheduleTrigger","webhookTrigger","discordTrigger","telegramTrigger","manualTrigger","chatTrigger"]);function eo(e,t,r){let n=X(e,t.core?t.kind:"unknown"),a=n.nodes.at(-1).id;return{def:Q(t.core?n:{...n,nodes:[...n.nodes.slice(0,-1),{id:a,kind:t.kind,inputs:{}}]},a,r),id:a}}let ei=e=>"elanous.workflow.notes.".concat(e);function ed(e){try{var t;let r=JSON.parse(null!=(t=localStorage.getItem(ei(e)))?t:"[]");if(!Array.isArray(r))return[];return r.filter(e=>null!==e&&"object"==typeof e&&"string"==typeof e.id&&"number"==typeof e.x&&Number.isFinite(e.x)&&"number"==typeof e.y&&Number.isFinite(e.y)&&"string"==typeof e.text).map(e=>{let{id:t,x:r,y:n,text:a}=e;return{id:t,x:r,y:n,text:a}})}catch(e){return[]}}function ec(e,t,r){return e.map(e=>e.id===t?{...e,...r}:e)}function eu(e,t){return e.filter(e=>e.id!==t)}async function ep(e){try{let{parse:t}=await Promise.resolve().then(r.bind(r,10641)),n=t(e);if(!n||"object"!=typeof n||!Array.isArray(n.nodes))return null;return n}catch(e){return null}}let ex={prompt:"#8b5cf6",bash:"#22c55e",skill:"#f59e0b",cft:"#06b6d4",approval:"#ef4444",if:"#ec4899",switch:"#d946ef",iteration:"#a855f7",classify:"#0ea5e9",extract:"#14b8a6",set:"#84cc16",filter:"#10b981",template:"#f97316",http:"#3b82f6",scheduleTrigger:"#6366f1",webhookTrigger:"#a78bfa",discordTrigger:"#5865f2",telegramTrigger:"#0088cc",manualTrigger:"#64748b",chatTrigger:"#9333ea",unknown:"#9ca3af"};function em(e,t){if(!Array.from(e.dataTransfer.types).includes(el))return null;let r=function(e){try{let t=JSON.parse(e);if(!t||"object"!=typeof t||Array.isArray(t)||"workflow"!==t.graph||"string"!=typeof t.kind||"boolean"!=typeof t.core||"string"!=typeof t.description||void 0!==t.plugin&&null!==t.plugin&&"string"!=typeof t.plugin||(t.core?!es.has(t.kind):!/^[a-z0-9-]+:[a-z0-9-]+$/.test(t.kind)))return null;return t}catch(e){return null}}(e.dataTransfer.getData(el));return r&&(t?t.some(e=>e.kind===r.kind&&e.core===r.core):r.core)?r:null}function eh(e){let{palette:t,yaml:r,definition:a,editable:l,onChangeYaml:s,onNodeClick:i,nodeStatuses:d,nodeIssues:c,cycleNodeIds:u,focusNodeId:p,focusNonce:x,onRun:m}=e,[h,f]=(0,o.useState)(null!=a?a:null),[g,b]=(0,o.useState)(!1),y=(0,o.useRef)(null),v=(0,o.useRef)(null),[j,w]=(0,o.useState)(()=>{var e;return{name:null!=(e=null==a?void 0:a.name)?e:null,items:(null==a?void 0:a.name)?ed(a.name):[]}}),k=(0,o.useRef)(j),N=null!=(eE=null==h?void 0:h.name)?eE:null,C=j.name===N?j.items:[];(0,o.useEffect)(()=>{if(!N||k.current.name===N)return;let e={name:N,items:ed(N)};k.current=e,w(e)},[N]);let S=(0,o.useCallback)(e=>{if(!l||!N)return;let t=e(k.current.name===N?k.current.items:ed(N));k.current={name:N,items:t};try{localStorage.setItem(ei(N),JSON.stringify(t))}catch(e){}w(k.current)},[l,N]),A=(0,o.useCallback)(()=>{var e,t;if(!l||!N)return;let r=null==(e=v.current)?void 0:e.getBoundingClientRect(),n=y.current,a=r?{x:r.left+r.width/2,y:r.top+r.height/2}:{x:100,y:60},s=null!=(t=null==n?void 0:n.screenToFlowPosition(a))?t:r?{x:r.width/2,y:r.height/2}:a;S(e=>(function(e,t){let r=new Set(e.map(e=>e.id)),n=1;for(;r.has("note-".concat(n));)n++;return[...e,{id:"note-".concat(n),x:t.x,y:t.y,text:""}]})(e,{x:s.x-100,y:s.y-60}))},[S,l,N]),[T,M]=(0,o.useState)([]),{record:_,undo:R,redo:I,canUndo:O,canRedo:L}=(0,er.U)(),P=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(a){f(a),b(!1);return}let e=!1;return(async()=>{let t=await ep(r);e||(f(t),b(null===t))})(),()=>{e=!0}},[r,a]);let D=(0,o.useCallback)(e=>{var t;if(!s)return;let n=null!=(t=et(r))?t:h;if(!n)return;let a=e(n);try{let e=ee(a);if(e===r)return;_(r),f(a),s(e)}catch(e){}},[s,h,_,r]),z=(0,o.useCallback)(e=>{null!==e&&s&&(f(et(e)),s(e))},[s]),F=(0,o.useCallback)(()=>{s&&z(R(r))},[s,z,R,r]),W=(0,o.useCallback)(()=>{s&&z(I(r))},[s,z,I,r]),$=(0,o.useCallback)(()=>{var e;let t=null!=(e=et(r))?e:h;if(!t)return;let n=function(e,t){var r;let n=new Set(t),a=(null!=(r=e.nodes)?r:[]).filter(e=>n.has(e.id));if(0===a.length)return null;let l=new Set(a.map(e=>e.id)),s=new Map(J(e).nodes.map(e=>[e.id,e.position])),o={};for(let e of a){let t=s.get(e.id);t&&(o[e.id]={...t})}return{nodes:a.map(e=>{let t=structuredClone(e);if(Array.isArray(t.depends_on)){let e=t.depends_on.filter(e=>l.has(e));e.length>0?t.depends_on=e:delete t.depends_on}return t}),layout:o}}(t,T);n&&(P.current=n)},[r,h,T]),q=(0,o.useCallback)(()=>{P.current&&s&&D(e=>(function(e,t){var r,n;if(0===t.nodes.length)return e;let a=null!=(r=e.nodes)?r:[],l=[],s=new Map;for(let r of t.nodes){let t=Y({...e,nodes:[...a,...l]},U(r));s.set(r.id,t),l.push({...structuredClone(r),id:t})}let o=e._meta&&"object"==typeof e._meta?{...e._meta}:{},i=o.layout&&"object"==typeof o.layout?{...o.layout}:{};for(let e=0;e<l.length;e+=1){let r=l[e],a=null==(n=r.depends_on)?void 0:n.map(e=>s.get(e)).filter(e=>void 0!==e);(null==a?void 0:a.length)?r.depends_on=a:delete r.depends_on;let o=t.layout[t.nodes[e].id];o&&(i[r.id]={x:o.x+40,y:o.y+40})}return Object.keys(i).length>0&&(o.layout=i),{...e,nodes:[...a,...l],...Object.keys(o).length>0?{_meta:o}:{}}})(e,P.current))},[D,s]),G=(0,o.useMemo)(()=>{if(!h)return null;try{return J(h)}catch(e){return null}},[h]),H=(0,o.useMemo)(()=>{var e;return[...(null!=(e=null==G?void 0:G.nodes)?e:[]).map(e=>{var t,r;let n=null!=(t=null==u?void 0:u.has(e.id))&&t,a=null==c?void 0:c[e.id],l=null==d?void 0:d[e.id],s=(r=null==l?void 0:l.status)?"workflow-node-status workflow-node-status-".concat(r):"workflow-node-status";return{id:e.id,type:"workflow",position:e.position,data:{raw:e,statusEntry:l,issues:a,inCycle:n},className:s,style:{background:"var(--surface, #0f1117)",color:"var(--text-primary, #e5e7eb)",border:n?"2px dashed #ef4444":"1.5px solid ".concat(ex[e.variant]),borderRadius:8,padding:0,width:e.width,fontSize:11,textAlign:"left"}}}),...C.map(e=>({id:"annotation:".concat(e.id),type:"note",position:{x:e.x,y:e.y},data:{text:e.text,editable:!0===l,onTextChange:t=>S(r=>ec(r,e.id,{text:t})),onRemove:()=>S(t=>eu(t,e.id))},draggable:!0===l,selectable:!1,style:{padding:0,border:0,background:"transparent",width:200}}))]},[G,d,c,u,C,l,S]),K=(0,o.useMemo)(()=>({workflow:eC,note:eg}),[]),B=(0,o.useMemo)(()=>G?G.edges.map(e=>{let t=(null==u?void 0:u.has(e.source))===!0&&u.has(e.target);return{id:e.id,source:e.source,target:e.target,animated:!1,style:t?{stroke:"#ef4444",strokeWidth:2,strokeDasharray:"6 4"}:{stroke:"var(--text-tertiary, #6b7280)",strokeWidth:1.5}}}):[],[G,u]),en=(0,o.useCallback)(e=>{l&&e.source&&e.target&&D(t=>(function(e,t,r){var n;if(t===r)return e;let a=(null!=(n=e.nodes)?n:[]).map(e=>{if(e.id!==r)return e;let n=Array.isArray(e.depends_on)?[...e.depends_on]:[];return n.includes(t)?e:(n.push(t),{...e,depends_on:n})});return{...e,nodes:a}})(t,e.source,e.target))},[l,D]),ea=(0,o.useCallback)(e=>{if(!l)return;let t=new Map(C.map(e=>["annotation:".concat(e.id),e.id])),r=e.filter(e=>"remove"===e.type),n=r.map(e=>t.get(e.id)).filter(e=>void 0!==e);n.length>0&&S(e=>n.reduce((e,t)=>eu(e,t),e));let a=r.filter(e=>!e.id.startsWith("annotation:"));a.length>0&&D(e=>a.reduce((e,t)=>V(e,t.id),e));let s=e.filter(e=>"position"===e.type&&!1===e.dragging&&void 0!==e.position),o=s.filter(e=>t.has(e.id));o.length>0&&S(e=>o.reduce((e,r)=>ec(e,t.get(r.id),{x:r.position.x,y:r.position.y}),e));let i=s.filter(e=>!e.id.startsWith("annotation:"));i.length>0&&D(e=>i.reduce((e,t)=>Q(e,t.id,t.position),e))},[l,D,C,S]),es=(0,o.useCallback)(e=>{if(!l)return;let t=e.filter(e=>"remove"===e.type);0!==t.length&&D(e=>t.reduce((e,t)=>{var r;let[n,a]=t.id.split("->");if(!n||!a)return e;let l=(null!=(r=e.nodes)?r:[]).map(e=>{if(e.id!==a||!Array.isArray(e.depends_on))return e;let t=e.depends_on.filter(e=>e!==n);if(t.length===e.depends_on.length)return e;if(0===t.length){let{depends_on:t,...r}=e;return r}return{...e,depends_on:t}});return{...e,nodes:l}},e))},[l,D]),[eh,eS]=(0,o.useState)(!1),eA=(0,o.useCallback)(e=>{D(t=>X(t,e)),eS(!1)},[D]),eT=(0,o.useCallback)(e=>{D(t=>e.core?X(t,e.kind):{...t,nodes:[...t.nodes,{id:Y(t,"unknown"),kind:e.kind,inputs:{}}]})},[D]);var eE,eM,e_,eR,eI,eO=(0,o.useMemo)(()=>{if(!l)return[];let e=[];return e.push({key:"z",metaOrCtrl:!0,shift:!1,handler:F},{key:"z",metaOrCtrl:!0,shift:!0,handler:W},{key:"c",metaOrCtrl:!0,handler:$},{key:"v",metaOrCtrl:!0,handler:q}),e.push({key:"n",handler:()=>eS(e=>!e)}),e.push({key:"t",shift:!0,alt:!0,handler:()=>D(e=>Z(e))}),e.push({key:"Escape",handler:()=>eS(!1),preventDefault:!1}),e.push({key:"d",metaOrCtrl:!0,handler:()=>{let e=T[0];e&&D(t=>(function(e,t){var r,n;let a=(null!=(r=e.nodes)?r:[]).find(e=>e.id===t);if(!a)return e;let l=Y(e,U(a)),{id:s,depends_on:o,...i}=a,d={...i,id:l};return{...e,nodes:[...null!=(n=e.nodes)?n:[],d]}})(t,e))}}),e.push({key:"F2",handler:()=>{let e=T[0];e&&i&&i(e)}}),m&&e.push({key:"Enter",metaOrCtrl:!0,handler:()=>m()}),e},[l,D,$,i,q,W,m,F,T]),eL={enabled:!0===l};let eP=null==(e_=null==eL?void 0:eL.enabled)||e_;return((0,o.useEffect)(()=>{if(!eP||0===eO.length)return;let e=e=>{if(!function(e){if(!e||!e.tagName)return!1;let t=e.tagName.toLowerCase();return"input"===t||"textarea"===t||e.isContentEditable}(e.target)){for(let t of eO)if(function(e,t){if(e.key.toLowerCase()!==t.key.toLowerCase())return!1;if(e.metaOrCtrl){if(!(t.metaKey||t.ctrlKey))return!1}else if(void 0!==e.meta&&e.meta!==t.metaKey||void 0!==e.ctrl&&e.ctrl!==t.ctrlKey)return!1;return(void 0===e.alt||e.alt===t.altKey)&&(void 0===e.shift||e.shift===t.shiftKey)}(t,e)){!1!==t.preventDefault&&e.preventDefault(),t.handler(e);return}}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[eP,eO]),g)?(0,n.jsx)("div",{className:"flex h-full items-center justify-center text-[11px] text-text-tertiary",children:"YAML parse failed — switch to YAML view to fix."}):h?(eR=null!=(eM=null==G?void 0:G.nodes.length)?eM:0,eI=C.length,0===eR&&0===eI)?(0,n.jsxs)("div",{ref:v,className:"relative flex h-full items-center justify-center text-[11px] text-text-tertiary",onDragOver:e=>{l&&Array.from(e.dataTransfer.types).includes(el)&&(e.preventDefault(),e.dataTransfer.dropEffect="copy")},onDrop:e=>{if(!l)return;let r=em(e,t);r&&(e.preventDefault(),D(e=>eo(e,r,{x:0,y:0}).def))},children:[l&&(0,n.jsx)(ey,{palette:t,editable:!0===l,onAdd:eT}),l&&(0,n.jsx)(eb,{canUndo:O,canRedo:L,onUndo:F,onRedo:W}),l&&(0,n.jsx)(ef,{onAdd:A}),l?"No nodes yet — pick a variant from the palette.":"No nodes yet — switch to YAML view to add one."]}):(0,n.jsxs)("div",{ref:v,className:"relative h-full w-full",children:[l&&(0,n.jsx)(ey,{palette:t,editable:!0===l,onAdd:eT}),l&&(0,n.jsx)(eb,{canUndo:O,canRedo:L,onUndo:F,onRedo:W}),l&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(ef,{onAdd:A}),(0,n.jsx)(ek,{onTidy:()=>D(e=>Z(e))})]}),l&&eh&&(0,n.jsx)(eN,{onPick:eA,onClose:()=>eS(!1)}),(0,n.jsxs)(E.Gc,{nodes:H,edges:B,nodeTypes:K,nodesDraggable:null!=l&&l,nodesConnectable:null!=l&&l,elementsSelectable:null!=l&&l,deleteKeyCode:l?["Backspace","Delete"]:null,onConnect:l?en:void 0,onNodesChange:l?ea:void 0,onEdgesChange:l?es:void 0,onInit:e=>{y.current=e},onDragOver:e=>{l&&Array.from(e.dataTransfer.types).includes(el)&&(e.preventDefault(),e.dataTransfer.dropEffect="copy")},onDrop:e=>{let r=y.current;if(!l||!r)return;let n=em(e,t);if(!n)return;e.preventDefault();let a=r.screenToFlowPosition({x:e.clientX,y:e.clientY});D(e=>eo(e,n,a).def)},onNodeClick:i?(e,t)=>{"note"!==t.type&&i(t.id)}:void 0,onSelectionChange:e=>{let{nodes:t}=e;return M(t.filter(e=>"note"!==e.type).map(e=>e.id))},proOptions:{hideAttribution:!0},connectionLineComponent:l?ev:void 0,fitView:!0,children:[(0,n.jsx)(E.VS,{variant:E._5.Dots,gap:16,size:1}),(0,n.jsx)(E.H2,{showInteractive:!1}),H.length>=10&&(0,n.jsx)(E.of,{position:"bottom-right",pannable:!0,zoomable:!0,bgColor:"#16171c",maskColor:"rgba(12, 12, 14, 0.6)",nodeColor:"#7188a5"}),void 0!==p&&(0,n.jsx)(ej,{focusNodeId:null!=p?p:null,focusNonce:null!=x?x:0}),(0,n.jsx)(ew,{selectedIds:T})]})]}):(0,n.jsx)("div",{className:"flex h-full items-center justify-center text-[11px] text-text-tertiary",children:"Parsing…"})}function ef(e){let{onAdd:t}=e;return(0,n.jsx)("button",{type:"button",onClick:t,title:"메모 추가",className:"absolute right-20 top-3 z-10 rounded-md border border-amber-500 bg-amber-100 px-2 py-1 text-[10px] text-amber-950 shadow-md hover:bg-amber-200",children:"메모 추가"})}function eg(e){let{data:t}=e;return(0,n.jsxs)("div",{className:"rounded-md border border-amber-400 bg-amber-100 p-2 text-amber-950 shadow-md",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between pb-1 text-[10px] font-semibold",children:[(0,n.jsx)("span",{children:"메모"}),t.editable&&(0,n.jsx)("button",{type:"button",onClick:t.onRemove,title:"메모 지우기","aria-label":"메모 지우기",className:"nodrag text-amber-900",children:"\xd7"})]}),t.editable?(0,n.jsx)("textarea",{"aria-label":"메모 내용",value:t.text,onChange:e=>t.onTextChange(e.target.value),className:"nodrag nowheel block min-h-20 w-full resize-y rounded bg-amber-50 p-1 text-xs text-amber-950 outline-amber-600"}):(0,n.jsx)("div",{className:"min-h-20 whitespace-pre-wrap break-words text-xs",children:t.text})]})}function eb(e){let{canUndo:t,canRedo:r,onUndo:a,onRedo:l}=e;return(0,n.jsxs)("div",{className:"absolute right-3 top-12 z-10 flex gap-1",children:[(0,n.jsx)("button",{type:"button",onClick:a,disabled:!t,title:"Undo (Cmd/Ctrl+Z)",className:"rounded border border-border bg-surface-elevated px-2 py-1 text-[10px] text-text-tertiary disabled:opacity-50",children:"Undo"}),(0,n.jsx)("button",{type:"button",onClick:l,disabled:!r,title:"Redo (Cmd/Ctrl+Shift+Z)",className:"rounded border border-border bg-surface-elevated px-2 py-1 text-[10px] text-text-tertiary disabled:opacity-50",children:"Redo"})]})}function ey(e){let{palette:t,editable:r,onAdd:a}=e,l=[{v:"prompt",label:"+ prompt"},{v:"bash",label:"+ bash"},{v:"skill",label:"+ skill"},{v:"cft",label:"+ cft"},{v:"approval",label:"+ approval"},{v:"if",label:"+ if"},{v:"switch",label:"+ switch"},{v:"iteration",label:"+ loop"},{v:"classify",label:"+ classify"},{v:"extract",label:"+ extract"},{v:"set",label:"+ set"},{v:"filter",label:"+ filter"},{v:"template",label:"+ template"},{v:"http",label:"+ http"},{v:"scheduleTrigger",label:"+ schedule"},{v:"webhookTrigger",label:"+ webhook"}];return(0,n.jsx)("div",{className:"absolute left-3 top-3 z-10 flex flex-col gap-1 rounded-md border border-border bg-surface-elevated p-1 shadow-md",children:(null!=t?t:l.map(e=>{let{v:t}=e;return{graph:"workflow",kind:t,core:!0,plugin:null,description:""}})).map(e=>{var t,s;return(0,n.jsxs)("button",{type:"button",draggable:r,onDragStart:t=>{if(!r)return void t.preventDefault();t.dataTransfer.setData(el,JSON.stringify(e)),t.dataTransfer.effectAllowed="copy"},onClick:()=>a(e),className:"rounded px-2 py-0.5 text-left text-[10px] text-text-tertiary transition-colors hover:bg-surface hover:text-text-primary",style:{minWidth:80},children:[null!=(s=null==(t=l.find(t=>{let{v:r}=t;return r===e.kind}))?void 0:t.label)?s:"+ ".concat(e.kind),e.plugin&&(0,n.jsx)("span",{className:"ml-1 rounded bg-accent/15 px-1 text-accent",children:e.plugin})]},e.kind)})})}function ev(e){let{fromX:t,fromY:r,toX:a,toY:l}=e;return(0,n.jsxs)("g",{className:"workflow-edge-pending",children:[(0,n.jsx)("path",{d:"M ".concat(t,",").concat(r," C ").concat(t+60,",").concat(r," ").concat(a-60,",").concat(l," ").concat(a,",").concat(l),fill:"none",stroke:"var(--accent, #8b5cf6)",strokeWidth:1.8,strokeDasharray:"4 3"}),(0,n.jsx)("circle",{cx:a,cy:l,r:4,fill:"var(--accent, #8b5cf6)"})]})}function ej(e){let{focusNodeId:t,focusNonce:r}=e,n=(0,E.VH)();return(0,o.useEffect)(()=>{if(!t)return;let e=setTimeout(()=>{n.fitView({nodes:[{id:t}],duration:300,padding:.3})},0);return()=>{clearTimeout(e)}},[t,r,n]),null}function ew(e){let{selectedIds:t}=e,r=(0,E.VH)(),n=t.join(",");return(0,o.useEffect)(()=>{if(t.length<=1)return;let e=setTimeout(()=>{r.fitView({nodes:t.map(e=>({id:e})),duration:300,padding:.25})},0);return()=>{clearTimeout(e)}},[n,r]),null}function ek(e){let{onTidy:t}=e;return(0,n.jsx)("button",{type:"button",onClick:t,title:"Tidy-up auto-layout (Shift+Alt+T)",className:"absolute right-3 top-3 z-10 rounded-md border border-border bg-surface-elevated px-2 py-1 text-[10px] text-text-tertiary shadow-md hover:bg-surface hover:text-text-primary",children:"✨ Tidy"})}function eN(e){let{onPick:t,onClose:r}=e,[a,l]=(0,o.useState)(""),s=[{v:"prompt",label:"prompt",help:"Run an LLM prompt with the run context."},{v:"bash",label:"bash",help:"Run a shell snippet."},{v:"skill",label:"skill",help:"Invoke a registered skill (e.g. omni-digest)."},{v:"cft",label:"cft",help:"Run a CFT (e.g. pdca, swot)."},{v:"approval",label:"approval",help:"Pause for human approval."},{v:"if",label:"if",help:"Branch on a boolean condition (then / else)."},{v:"switch",label:"switch",help:"N-way branch on an expression value."},{v:"iteration",label:"iteration",help:"Run a bash body for each element of an array."},{v:"classify",label:"classify",help:"LLM picks one class label from a list."},{v:"extract",label:"extract",help:"LLM fills a JSON schema from free text."},{v:"set",label:"set",help:"Build a record of derived values."},{v:"filter",label:"filter",help:"Keep array elements where a condition holds."},{v:"template",label:"template",help:"{{var}} substitution into a string template."},{v:"http",label:"http",help:"HTTP request (GET/POST/...). Parsed JSON output."},{v:"scheduleTrigger",label:"schedule",help:"Cron / interval trigger (daemon-side dispatch v2)."},{v:"webhookTrigger",label:"webhook",help:"HTTP entry point (daemon-side dispatch v2)."}].filter(e=>e.label.includes(a.toLowerCase())||e.help.toLowerCase().includes(a.toLowerCase()));return(0,n.jsxs)("div",{className:"absolute right-0 top-0 z-20 flex h-full w-72 flex-col border-l border-border bg-surface-elevated shadow-xl",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between border-b border-border px-3 py-2",children:[(0,n.jsx)("span",{className:"text-xs font-semibold",children:"Add node"}),(0,n.jsx)("button",{type:"button",onClick:r,className:"text-[11px] text-text-tertiary hover:text-text-primary",title:"Close (Esc)",children:"✕"})]}),(0,n.jsx)("div",{className:"border-b border-border px-3 py-2",children:(0,n.jsx)("input",{type:"text",value:a,onChange:e=>l(e.target.value),placeholder:"Search variants…",autoFocus:!0,className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs"})}),(0,n.jsxs)("ul",{className:"flex-1 overflow-y-auto px-2 py-2",children:[0===s.length&&(0,n.jsx)("li",{className:"px-2 py-1 text-[11px] text-text-tertiary",children:"No matches."}),s.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>t(e.v),className:"flex w-full flex-col items-start gap-0.5 rounded px-2 py-1.5 text-left text-[11px] hover:bg-surface",children:[(0,n.jsx)("span",{className:"inline-block rounded px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wider text-white",style:{background:ex[e.v]},children:e.label}),(0,n.jsx)("span",{className:"text-text-tertiary",children:e.help})]})},e.v))]})]})}function eC(e){let{data:t}=e,{raw:r,statusEntry:a,issues:l}=t,s=(0,E.Pj)(e=>e.transform[2]<.7),o=r.branches;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(E.h7,{type:"target",position:M.yX.Left}),s?(0,n.jsx)(eS,{raw:r,statusEntry:a}):function(e,t,r){var a,l,s,o;let i=t?en[t.status]:null,d=(s=e.approvalDelivery)&&null!=(o=ea[s])?o:null,c=t?"Last run: ".concat(null!=(a=null==i?void 0:i.label)?a:t.status)+(void 0!==t.durationMs?" \xb7 ".concat(t.durationMs,"ms"):"")+(t.error?" \xb7 ".concat(t.error):"")+(t.reason?" \xb7 ".concat(t.reason):""):void 0,u=null!=(l=null==r?void 0:r.length)?l:0,p=u>0?"".concat(u," validation issue").concat(1===u?"":"s",":\n")+r.map(e=>"\xb7 ".concat(e.message)).join("\n"):void 0;return(0,n.jsxs)("div",{style:{padding:"6px 8px"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:2},children:[(0,n.jsx)("span",{style:{display:"inline-block",padding:"0 5px",borderRadius:3,fontSize:9,fontWeight:600,textTransform:"uppercase",letterSpacing:.4,background:ex[e.variant],color:"white"},children:e.badge}),(0,n.jsx)("span",{style:{fontWeight:500,fontSize:11},children:e.id}),i&&(0,n.jsx)("span",{"aria-label":c,title:c,style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:i.dot,flexShrink:0,boxShadow:(null==t?void 0:t.status)==="running"?"0 0 0 2px ".concat(i.dot,"33"):void 0}}),u>0&&(0,n.jsx)("span",{"aria-label":p,title:p,style:{fontSize:10,color:"#ef4444",fontWeight:700,flexShrink:0},children:"⚠"}),d&&(0,n.jsx)("span",{"aria-label":"delivery: ".concat(e.approvalDelivery),title:"Delivery: ".concat(e.approvalDelivery),style:{fontSize:10,marginLeft:"auto",flexShrink:0},children:d})]}),e.preview&&(0,n.jsx)("div",{style:{fontSize:10,opacity:.75,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:e.preview}),(e.hasWhen||e.triggerRule||e.hasToolPolicy)&&(0,n.jsxs)("div",{style:{display:"flex",gap:4,marginTop:3,fontSize:9,opacity:.7},children:[e.hasWhen&&(0,n.jsx)("span",{children:"when"}),e.triggerRule&&(0,n.jsx)("span",{children:e.triggerRule}),e.hasToolPolicy&&(0,n.jsx)("span",{children:"tools"})]})]})}(r,a,l),o&&o.length>0?o.map((e,t)=>{let r=(t+1)/(o.length+1)*100;return(0,n.jsx)(E.h7,{type:"source",position:M.yX.Right,id:e,style:{top:"".concat(r,"%")},children:(0,n.jsx)("span",{"aria-hidden":!0,style:{position:"absolute",right:14,top:-2,fontSize:8,color:"var(--text-tertiary, #6b7280)",pointerEvents:"none",whiteSpace:"nowrap"},children:e})},e)}):(0,n.jsx)(E.h7,{type:"source",position:M.yX.Right})]})}function eS(e){let{raw:t,statusEntry:r}=e,a=r?en[r.status]:null;return(0,n.jsxs)("div",{style:{padding:"4px 8px",display:"flex",alignItems:"center",gap:6},children:[(0,n.jsx)("span",{style:{display:"inline-block",padding:"0 5px",borderRadius:3,fontSize:9,fontWeight:600,textTransform:"uppercase",letterSpacing:.4,background:ex[t.variant],color:"white"},children:t.badge}),(0,n.jsx)("span",{style:{fontSize:11,fontWeight:500},children:t.id}),a&&(0,n.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:a.dot,marginLeft:"auto"}})]})}M.rN;var eA=r(81707),eT=r(75361),eE=r(96783),eM=r(89782);let e_='name: my-workflow\ndescription: |\n Manual-trigger smoke. Edit me \xb7 click ▶ Run now to fire.\n\nnodes:\n - id: start\n manualTrigger:\n description: Click ▶ Run now to fire this workflow\n\n - id: work\n bash: echo "hello"\n depends_on: [start]\n';function eR(e){let{onApply:t,onOpenAI:r,onClose:a}=e,[l,i]=(0,o.useState)("template"),[d,c]=(0,o.useState)(null),u=(0,o.useRef)(0),p=(0,T.M1)();(0,o.useEffect)(()=>()=>{u.current++},[]);let x=async e=>{if(!e)return;let r=++u.current;c(null);try{let n=s({name:e.name,size:e.size,text:"pending"});if(!n.ok)return void c(n.reason);let a=await e.text();if(r!==u.current)return;let l=s({name:e.name,size:e.size,text:a});if(!l.ok)return void c(l.reason);t(l.yaml,l.suggestedName),m()}catch(e){r===u.current&&c("파일을 읽지 못했습니다. 다시 선택해 주세요.")}},m=()=>{u.current++,a()},h=(0,eA.I)({queryKey:["nexus","workflow-templates"],queryFn:()=>p.getWorkflowTemplates(),staleTime:6e4});return(0,n.jsx)("div",{role:"dialog","aria-modal":"true",className:"fixed inset-0 z-50 flex items-end justify-center bg-black/40 backdrop-blur-sm px-3 py-3 sm:items-center",onClick:m,children:(0,n.jsxs)("div",{className:"flex max-h-[85vh] w-full max-w-3xl flex-col gap-2 rounded-t-2xl border border-border bg-surface-elevated shadow-xl sm:rounded-lg",onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("header",{className:"flex items-center justify-between border-b border-border px-4 py-3",children:[(0,n.jsx)("h2",{className:"text-sm font-semibold",children:"New workflow"}),(0,n.jsx)("button",{type:"button",onClick:m,className:"rounded p-1 text-text-tertiary hover:bg-surface","aria-label":"Close",children:(0,n.jsx)(eT.A,{className:"h-4 w-4"})})]}),(0,n.jsxs)("nav",{className:"flex items-center gap-1 border-b border-border px-2",children:[(0,n.jsx)(eI,{active:"template"===l,onClick:()=>{u.current++,i("template")},icon:(0,n.jsx)(eE.A,{className:"h-3 w-3"}),children:"Template"}),(0,n.jsx)(eI,{active:"blank"===l,onClick:()=>{u.current++,i("blank")},icon:(0,n.jsx)(eM.A,{className:"h-3 w-3"}),children:"Blank"}),(0,n.jsx)(eI,{active:"file"===l,onClick:()=>i("file"),icon:(0,n.jsx)(eE.A,{className:"h-3 w-3"}),children:"파일"}),(0,n.jsx)(eI,{active:"ai"===l,onClick:()=>{u.current++,i("ai"),r()},icon:(0,n.jsx)(g.A,{className:"h-3 w-3"}),children:"AI generate"})]}),(0,n.jsxs)("div",{className:"flex-1 overflow-auto px-3 pb-3",children:["template"===l&&(0,n.jsx)(eO,{query:h,onPick:e=>{t(e.yaml,e.id),m()}}),"blank"===l&&(0,n.jsx)(eL,{onCreate:()=>{t(e_,"my-workflow"),m()}}),"file"===l&&(0,n.jsxs)("div",{className:"flex flex-col gap-2 px-3 py-4",children:[(0,n.jsx)("label",{htmlFor:"workflow-import-file",className:"text-[12px] text-text-secondary",children:"YAML 파일 가져오기 (최대 256KB)"}),(0,n.jsx)("input",{id:"workflow-import-file",type:"file",accept:".yaml,.yml",onChange:e=>{var t;x(null==(t=e.currentTarget.files)?void 0:t[0])},className:"max-w-full text-xs text-text-primary"}),d&&(0,n.jsx)("p",{role:"alert",className:"text-[11px] text-error",children:d})]}),"ai"===l&&(0,n.jsx)("div",{className:"px-3 py-4 text-[12px] text-text-tertiary",children:"The NL prompt panel is open. Describe your workflow there to let R3 synthesize trigger + nodes for you."})]})]})})}function eI(e){let{active:t,onClick:r,icon:a,children:l}=e;return(0,n.jsxs)("button",{type:"button",onClick:r,className:"flex items-center gap-1 rounded-t-md border-b-2 px-3 py-2 text-[11px] font-medium ".concat(t?"border-accent text-accent":"border-transparent text-text-tertiary hover:text-text-secondary"),children:[a,l]})}function eO(e){var t,r;let{query:a,onPick:l}=e;if(a.isLoading)return(0,n.jsxs)("div",{className:"flex items-center gap-2 px-2 py-4 text-[11px] text-text-tertiary",children:[(0,n.jsx)(j.A,{className:"h-3 w-3 animate-spin"}),"Loading templates…"]});if(a.isError)return(0,n.jsx)("div",{className:"px-2 py-4 text-[11px] text-error",children:"Failed to load templates."});let s=null!=(r=null==(t=a.data)?void 0:t.templates)?r:[];return 0===s.length?(0,n.jsx)("div",{className:"px-2 py-4 text-[11px] text-text-tertiary",children:"No templates available."}):(0,n.jsx)("div",{className:"grid grid-cols-1 gap-2 pt-2 sm:grid-cols-2 lg:grid-cols-3",children:s.map(e=>(0,n.jsxs)("button",{type:"button",onClick:()=>l(e),className:"flex flex-col gap-1 rounded-lg border border-border bg-surface px-3 py-2 text-left text-xs hover:border-accent/40 hover:bg-surface-elevated",children:[(0,n.jsx)("span",{className:"font-medium text-text-primary",children:e.title}),(0,n.jsx)("span",{className:"line-clamp-2 text-[11px] text-text-tertiary",children:e.description}),(0,n.jsx)("span",{className:"mt-1 flex flex-wrap gap-1",children:e.tags.map(e=>(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-1.5 py-0.5 text-[9px] text-text-tertiary",children:e},e))})]},e.id))})}function eL(e){let{onCreate:t}=e;return(0,n.jsxs)("div",{className:"flex flex-col gap-3 px-3 py-4",children:[(0,n.jsx)("p",{className:"text-[12px] text-text-secondary",children:"Start with a 2-node manual-trigger scaffold. Edit names + bodies in the editor, then click ▶ Run now to fire."}),(0,n.jsx)("pre",{className:"rounded-md border border-border bg-surface p-3 font-mono text-[11px] leading-relaxed text-text-primary",children:e_}),(0,n.jsx)("div",{className:"flex justify-end",children:(0,n.jsx)("button",{type:"button",onClick:t,className:"rounded-md bg-accent px-4 py-1.5 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover",children:"Create"})})]})}function eP(e){var t;let{name:r,onLoad:a,onClose:l}=e,s=(0,T.M1)(),i=(0,eA.I)({queryKey:["nexus","workflow-history",r],queryFn:()=>s.getWorkflowHistory(r)}),[d,c]=(0,o.useState)(null),[u,p]=(0,o.useState)(!1),[x,m]=(0,o.useState)(!1),h=(0,o.useRef)(0);(0,o.useLayoutEffect)(()=>(c(null),p(!1),m(!1),()=>{h.current++}),[r]);let g=async e=>{if(null!==d)return;let t=++h.current;c(e),p(!1),m(!1);try{let{yaml:n}=await s.getWorkflowHistoryVersion(r,e);if(t!==h.current)return;a(n),m(!0)}catch(e){t===h.current&&p(!0)}finally{t===h.current&&c(null)}};return(0,n.jsxs)("section",{"aria-label":"".concat(r," 이전 판"),className:"flex min-h-0 flex-1 flex-col bg-surface",children:[(0,n.jsxs)("header",{className:"flex items-center gap-2 border-b border-border px-3 py-2",children:[(0,n.jsx)(f.A,{className:"h-4 w-4 text-text-tertiary"}),(0,n.jsxs)("h2",{className:"min-w-0 flex-1 truncate text-sm font-medium",children:[r," \xb7 이전 판"]}),(0,n.jsx)("button",{type:"button",onClick:()=>{h.current++,l()},"aria-label":"이전 판 닫기",className:"rounded p-1 text-text-tertiary hover:bg-surface-elevated",children:(0,n.jsx)(eT.A,{className:"h-4 w-4"})})]}),x&&(0,n.jsx)("p",{role:"status",className:"border-b border-border px-3 py-2 text-xs text-success",children:"이전 판을 초안에 불러왔습니다. 저장하려면 Save를 누르세요."}),u&&(0,n.jsx)("p",{role:"alert",className:"border-b border-border px-3 py-2 text-xs text-error",children:"이전 판을 불러오지 못했습니다. 다시 시도해 주세요."}),i.isLoading?(0,n.jsxs)("p",{role:"status",className:"flex items-center gap-2 px-3 py-4 text-xs text-text-tertiary",children:[(0,n.jsx)(j.A,{className:"h-3 w-3 animate-spin"}),"이전 판을 읽는 중…"]}):i.isError?(0,n.jsxs)("p",{role:"alert",className:"flex items-center gap-2 px-3 py-4 text-xs text-error",children:[(0,n.jsx)(b.A,{className:"h-3 w-3"}),"이전 판 목록을 읽지 못했습니다."]}):(null==(t=i.data)?void 0:t.versions.length)?(0,n.jsx)("ul",{className:"min-h-0 flex-1 overflow-y-auto",children:i.data.versions.map(e=>(0,n.jsxs)("li",{className:"flex items-center gap-2 border-b border-border px-3 py-2 text-xs",children:[(0,n.jsx)("time",{dateTime:e.createdAt,className:"min-w-0 flex-1 text-text-primary",children:new Date(e.createdAt).toLocaleString()}),(0,n.jsxs)("span",{className:"shrink-0 text-text-tertiary",children:[e.size.toLocaleString()," B"]}),(0,n.jsx)("button",{type:"button",disabled:null!==d,onClick:()=>void g(e.id),className:"shrink-0 rounded-md border border-border px-2 py-1 text-text-primary hover:bg-surface-elevated disabled:opacity-50",children:d===e.id?"불러오는 중…":"불러오기"})]},e.id))}):(0,n.jsx)("p",{className:"px-3 py-4 text-xs text-text-tertiary",children:"아직 이전 판이 없습니다"})]})}var eD=r(9394),ez=r(35448),eF=r(39681),eW=r(3389);function e$(e){var t;let{result:r,onApply:a,onRefine:l,onCancel:s}=e,o=null!=(t=r.yaml)?t:"";return(0,n.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40 px-4 py-6",role:"dialog","aria-modal":"true",onClick:s,children:(0,n.jsxs)("div",{className:"flex max-h-[80vh] w-full max-w-3xl flex-col gap-3 rounded-lg border border-border bg-surface-elevated p-4 shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("header",{className:"flex items-center justify-between",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"rounded bg-surface px-1.5 py-0.5 text-[10px] uppercase tracking-wide text-text-tertiary",children:"Synth preview"}),r.workflowName&&(0,n.jsx)("span",{className:"font-mono text-sm font-medium text-text-primary",children:r.workflowName}),r.repaired&&(0,n.jsx)("span",{className:"rounded-full border border-warning/30 bg-warning/10 px-2 py-0.5 text-[10px] text-warning",children:"self-repaired"})]}),(0,n.jsx)("button",{type:"button",onClick:s,className:"rounded p-1 text-text-tertiary hover:bg-surface hover:text-text-primary","aria-label":"Cancel",children:(0,n.jsx)(eT.A,{className:"h-4 w-4"})})]}),r.triggerSummary&&(0,n.jsxs)("div",{className:"rounded-md border border-accent/30 bg-accent/10 px-3 py-2 text-xs text-accent",children:[(0,n.jsx)("span",{className:"font-medium",children:"Trigger: "}),r.triggerSummary]}),!r.ok&&r.error&&(0,n.jsxs)("div",{className:"flex items-start gap-2 rounded-md border border-error/40 bg-error/10 px-3 py-2 text-xs text-error",children:[(0,n.jsx)(ez.A,{className:"mt-0.5 h-4 w-4 shrink-0"}),(0,n.jsx)("span",{children:r.error})]}),(0,n.jsx)("div",{className:"flex-1 overflow-auto rounded-md border border-border bg-surface",children:(0,n.jsx)("pre",{className:"m-0 whitespace-pre p-3 font-mono text-[11px] leading-relaxed text-text-primary",children:o||"(no yaml — synth failed)"})}),(0,n.jsxs)("footer",{className:"flex items-center justify-between gap-2",children:[(0,n.jsx)("span",{className:"text-[11px] text-text-tertiary",children:"Apply writes the YAML into the editor draft. Save (panel footer) commits to disk."}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsxs)("button",{type:"button",onClick:l,className:"flex items-center gap-1 rounded-md border border-border px-3 py-1 text-[11px] text-text-secondary hover:bg-surface",children:[(0,n.jsx)(eF.A,{className:"h-3 w-3"}),"Refine"]}),(0,n.jsx)("button",{type:"button",onClick:s,className:"rounded-md border border-border px-3 py-1 text-[11px] text-text-secondary hover:bg-surface",children:"Cancel"}),(0,n.jsxs)("button",{type:"button",onClick:()=>{o&&a(o,r.workflowName)},disabled:!r.ok||!o,className:"flex items-center gap-1 rounded-md bg-accent px-3 py-1 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:[(0,n.jsx)(eW.A,{className:"h-3 w-3"}),"Apply"]})]})]})]})})}function eq(e){let{currentYaml:t,skills:r,onGenerated:a,onClose:l}=e,[s,i]=(0,o.useState)(""),[d,c]=(0,o.useState)(""),[u,p]=(0,o.useState)(null),x=(0,A.up)(),m=(0,A.hM)(),h=!!(t&&t.trim().length>0),f=x.error instanceof Error?x.error.message:m.error instanceof Error?m.error.message:x.isError||m.isError?"generation failed":null;return(0,n.jsxs)("div",{className:"border-b border-border bg-surface-elevated",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between px-3 py-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(g.A,{className:"h-4 w-4 text-accent"}),(0,n.jsx)("span",{className:"text-xs font-medium",children:h?"Refine workflow with AI":"Generate workflow from text"})]}),(0,n.jsx)("button",{type:"button",onClick:l,className:"rounded p-1 text-text-tertiary hover:bg-surface hover:text-text-primary","aria-label":"Close NL prompt",children:(0,n.jsx)(eT.A,{className:"h-3 w-3"})})]}),(0,n.jsxs)("div",{className:"px-3 pb-3",children:[(0,n.jsx)("textarea",{value:s,onChange:e=>i(e.target.value),placeholder:h?'How should this workflow change? e.g. "add a slack notification at the end"':'Describe the workflow. e.g. "Research the latest Apple Silicon benchmarks, summarize, and push to my iPhone."',rows:3,spellCheck:!1,className:"w-full resize-none rounded-md border border-border bg-surface px-2 py-1.5 text-xs leading-snug focus:border-accent focus:outline-none"}),(0,n.jsxs)("div",{className:"mt-2 flex items-center justify-between gap-2",children:[(0,n.jsxs)("select",{value:d,onChange:e=>c(e.target.value),className:"rounded-md border border-border bg-surface px-2 py-1 text-[11px] text-text-secondary focus:border-accent focus:outline-none",title:"LLM provider (default = your user-config)",children:[(0,n.jsx)("option",{value:"",children:"Default provider"}),(0,n.jsx)("option",{value:"anthropic",children:"anthropic"}),(0,n.jsx)("option",{value:"openai",children:"openai"}),(0,n.jsx)("option",{value:"grok",children:"grok"}),(0,n.jsx)("option",{value:"gemini",children:"gemini"}),(0,n.jsx)("option",{value:"local",children:"local"})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{if(!s.trim()||m.isPending)return;let e={intent:s.trim(),preview:!0};h&&t&&(e.context="current yaml:\n".concat(t)),m.mutate(e,{onSuccess:e=>p(e)})},disabled:!s.trim()||m.isPending||x.isPending,className:"flex items-center gap-1 rounded-md border border-accent/40 bg-accent/10 px-3 py-1 text-[11px] font-medium text-accent hover:bg-accent/20 disabled:opacity-50",title:"Trigger-aware synth via R3 native skill (cron \xb7 webhook \xb7 discord \xb7 telegram \xb7 manual \xb7 chat all supported)",children:m.isPending?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(j.A,{className:"h-3 w-3 animate-spin"}),"Synthing…"]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(eD.A,{className:"h-3 w-3"}),"Synth (trigger-aware)"]})}),(0,n.jsx)("button",{type:"button",onClick:()=>{if(!s.trim()||x.isPending)return;let e={prompt:s.trim()};d&&(e.provider=d),r&&r.length>0&&(e.skills=r),h&&t&&(e.currentYaml=t),x.mutate(e,{onSuccess:e=>{a(e)}})},disabled:!s.trim()||x.isPending||m.isPending,className:"flex items-center gap-1 rounded-md bg-accent px-3 py-1 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:x.isPending?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(j.A,{className:"h-3 w-3 animate-spin"}),"Generating…"]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(g.A,{className:"h-3 w-3"}),h?"Refine":"Generate"]})})]})]}),f&&(0,n.jsxs)("div",{className:"mt-2 flex items-start gap-1.5 rounded-md border border-error/40 bg-error/10 px-2 py-1 text-[11px] text-error",children:[(0,n.jsx)(ez.A,{className:"mt-0.5 h-3 w-3 shrink-0"}),(0,n.jsx)("span",{children:f})]}),u&&(0,n.jsx)(e$,{result:u,onApply:(e,t)=>{p(null),a({yaml:e,warnings:[],raw:e,definition:void 0})},onRefine:()=>p(null),onCancel:()=>p(null)}),x.data&&x.data.warnings.length>0&&(0,n.jsx)("ul",{className:"mt-2 max-h-24 overflow-y-auto rounded-md border border-warning/40 bg-warning/10 px-2 py-1 text-[11px] text-warning",children:x.data.warnings.slice(0,5).map((e,t)=>(0,n.jsxs)("li",{className:"flex items-start gap-1",children:[(0,n.jsx)(ez.A,{className:"mt-0.5 h-3 w-3 shrink-0"}),(0,n.jsx)("span",{children:e})]},t))})]})]})}let eU={valid:"bg-success/10 text-success border-success/30",warning:"bg-warning/10 text-warning border-warning/30",error:"bg-error/10 text-error border-error/30"};function eG(e){let{variantLabel:t,validationStatus:r=null,validationMessage:a,children:l}=e;return(0,n.jsxs)("div",{className:"rounded-md border border-border bg-surface-elevated",children:[(0,n.jsxs)("header",{className:"flex items-center justify-between border-b border-border px-3 py-2",children:[(0,n.jsx)("span",{className:"rounded bg-surface px-1.5 py-0.5 text-[10px] uppercase tracking-wide text-text-tertiary",children:t}),r&&(0,n.jsx)("span",{className:"rounded-full border px-2 py-0.5 text-[10px] ".concat(eU[r]),role:"status",children:null!=a?a:r})]}),(0,n.jsx)("div",{className:"grid grid-cols-1 gap-2 px-3 py-3 md:grid-cols-2",children:l})]})}function eH(e){let{label:t,full:r,hint:a,children:l}=e;return(0,n.jsxs)("label",{className:"flex flex-col gap-1 ".concat(r?"md:col-span-2":""),children:[(0,n.jsx)("span",{className:"text-[10px] uppercase tracking-wide text-text-tertiary",children:t}),l,a&&(0,n.jsx)("span",{className:"text-[10px] text-text-tertiary",children:a})]})}function eK(e){let t=null==e?void 0:e.scheduleTrigger;return t&&"object"==typeof t?{type:"cron"===t.type?"cron":"interval",cron:"string"==typeof t.cron?t.cron:void 0,interval:"number"==typeof t.interval?t.interval:void 0,timezone:"string"==typeof t.timezone?t.timezone:void 0,jitter_seconds:"number"==typeof t.jitter_seconds?t.jitter_seconds:void 0,max_runs:"number"==typeof t.max_runs?t.max_runs:void 0,enabled:"boolean"==typeof t.enabled?t.enabled:void 0}:{type:"interval",interval:36e5}}function eJ(e){var t,r,a,l,s,i;let{definition:d,nodeId:c,onChange:u}=e,p=(null!=(t=d.nodes)?t:[]).find(e=>e.id===c),x=eK(p),[m,h]=(0,o.useState)(x.type),[f,g]=(0,o.useState)(null!=(r=x.cron)?r:"0 9 * * *"),[b,y]=(0,o.useState)(String(null!=(a=x.interval)?a:36e5)),[v,j]=(0,o.useState)(null!=(l=x.timezone)?l:"Asia/Seoul"),[w,k]=(0,o.useState)(String(null!=(s=x.jitter_seconds)?s:"")),[N,C]=(0,o.useState)(String(null!=(i=x.max_runs)?i:"")),[S,A]=(0,o.useState)(!1!==x.enabled);(0,o.useEffect)(()=>{let e=eK(p);h(e.type),e.cron&&g(e.cron),"number"==typeof e.interval&&y(String(e.interval)),e.timezone&&j(e.timezone),k("number"==typeof e.jitter_seconds?String(e.jitter_seconds):""),C("number"==typeof e.max_runs?String(e.max_runs):""),A(!1!==e.enabled)},[c,p]);let T=(0,o.useCallback)(()=>{let e=Number(b),t=""===w?void 0:Number(w),r=""===N?void 0:Number(N);return{type:m,cron:"cron"===m?f.trim():void 0,interval:"interval"===m&&Number.isFinite(e)?e:void 0,timezone:v.trim()||void 0,jitter_seconds:Number.isFinite(t)?t:void 0,max_runs:Number.isFinite(r)?r:void 0,enabled:S}},[m,f,b,v,w,N,S]),E=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(p)return E.current&&clearTimeout(E.current),E.current=setTimeout(()=>{u(function(e,t,r){var n;let a={type:r.type};"cron"===r.type&&r.cron&&(a.cron=r.cron),"interval"===r.type&&"number"==typeof r.interval&&(a.interval=r.interval),r.timezone&&(a.timezone=r.timezone),"number"==typeof r.jitter_seconds&&(a.jitter_seconds=r.jitter_seconds),"number"==typeof r.max_runs&&(a.max_runs=r.max_runs),"boolean"==typeof r.enabled&&(a.enabled=r.enabled);let l=(null!=(n=e.nodes)?n:[]).map(e=>e.id===t?{...e,scheduleTrigger:a}:e);return{...e,nodes:l}}(d,c,T()))},500),()=>{E.current&&clearTimeout(E.current)}},[p,c,d,T,u]);let M="cron"===m?W(f):null,_=Number(b)/1e3,R=S&&("cron"!==m||(null==M?void 0:M.matched))?"valid":"warning",I=S?"cron"===m?(null==M?void 0:M.matched)?"cron ok":"custom cron":Number.isFinite(_)&&_>0?"every ".concat(_,"s"):"interval invalid":"disabled";return(0,n.jsxs)(eG,{variantLabel:"Schedule",validationStatus:R,validationMessage:I,children:[(0,n.jsx)(eH,{label:"type",children:(0,n.jsxs)("select",{value:m,onChange:e=>h(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:[(0,n.jsx)("option",{value:"cron",children:"cron"}),(0,n.jsx)("option",{value:"interval",children:"interval"})]})}),(0,n.jsx)(eH,{label:"enabled",children:(0,n.jsxs)("label",{className:"flex items-center gap-2 text-xs",children:[(0,n.jsx)("input",{type:"checkbox",checked:S,onChange:e=>A(e.target.checked)}),(0,n.jsx)("span",{className:"text-text-tertiary",children:S?"on":"off"})]})}),"cron"===m&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(eH,{label:"presets",full:!0,children:(0,n.jsx)("div",{className:"flex flex-wrap gap-1",children:$.map(e=>(0,n.jsx)("button",{type:"button",onClick:()=>g(e.expression),"data-preset":e.id,className:"rounded-md border border-border px-2 py-0.5 font-mono text-[10px] text-text-tertiary hover:bg-surface",children:e.label},e.id))})}),(0,n.jsx)(eH,{label:"cron expression",full:!0,hint:null==M?void 0:M.text,children:(0,n.jsx)("input",{value:f,onChange:e=>g(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})})]}),"interval"===m&&(0,n.jsx)(eH,{label:"interval (ms)",hint:"= ".concat(_||"?","s"),children:(0,n.jsx)("input",{type:"number",min:1e3,value:b,onChange:e=>y(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"timezone (IANA)",hint:"e.g. Asia/Seoul \xb7 UTC \xb7 America/Los_Angeles",children:(0,n.jsx)("input",{value:v,onChange:e=>j(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"jitter (seconds \xb7 optional)",children:(0,n.jsx)("input",{type:"number",min:0,value:w,onChange:e=>k(e.target.value),placeholder:"e.g. 30",className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"max runs (optional)",children:(0,n.jsx)("input",{type:"number",min:1,step:1,value:N,onChange:e=>C(e.target.value),placeholder:"unlimited",className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})})]})}let eB=["GET","POST","PUT","PATCH","DELETE"];function eY(e){let t=null==e?void 0:e.webhookTrigger;if(!t||"object"!=typeof t)return{method:"POST",path:"/hooks/example",auth:"none"};let r=eB.includes(t.method)?t.method:"POST",n="string"==typeof t.path?t.path:"/hooks/example",a=t.auth&&"object"==typeof t.auth?t.auth:null;return a&&"bearer"===a.type?{method:r,path:n,auth:"bearer",token:"string"==typeof a.token?a.token:""}:a&&"basic"===a.type?{method:r,path:n,auth:"basic",username:"string"==typeof a.username?a.username:"",password:"string"==typeof a.password?a.password:""}:{method:r,path:n,auth:"none"}}function eX(e){var t,r,a,l;let{definition:s,nodeId:i,onChange:d}=e,c=(null!=(t=s.nodes)?t:[]).find(e=>e.id===i),u=eY(c),[p,x]=(0,o.useState)(u.method),[m,h]=(0,o.useState)(u.path),[f,g]=(0,o.useState)(u.auth),[b,y]=(0,o.useState)(null!=(r=u.token)?r:""),[v,j]=(0,o.useState)(null!=(a=u.username)?a:""),[w,k]=(0,o.useState)(null!=(l=u.password)?l:"");(0,o.useEffect)(()=>{var e,t,r;let n=eY(c);x(n.method),h(n.path),g(n.auth),y(null!=(e=n.token)?e:""),j(null!=(t=n.username)?t:""),k(null!=(r=n.password)?r:"")},[i,c]);let N=(0,o.useCallback)(()=>({method:p,path:m,auth:f,token:b,username:v,password:w}),[p,m,f,b,v,w]),C=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(c)return C.current&&clearTimeout(C.current),C.current=setTimeout(()=>{d(function(e,t,r){var n,a,l;let s={method:r.method,path:r.path};"bearer"===r.auth&&r.token?s.auth={type:"bearer",token:r.token}:"basic"===r.auth&&(r.username||r.password)&&(s.auth={type:"basic",username:null!=(n=r.username)?n:"",password:null!=(a=r.password)?a:""});let o=(null!=(l=e.nodes)?l:[]).map(e=>e.id===t?{...e,webhookTrigger:s}:e);return{...e,nodes:o}}(s,i,N()))},500),()=>{C.current&&clearTimeout(C.current)}},[c,i,s,N,d]);let S=m.trim()?m.startsWith("/")?/\s/.test(m)?{ok:!1,message:"no whitespace in path"}:{ok:!0,message:"path ok"}:{ok:!1,message:"path must start with '/'"}:{ok:!1,message:"path required"},A=S.ok?"valid":"error",T="".concat(p," ").concat(m);return(0,n.jsxs)(eG,{variantLabel:"Webhook",validationStatus:A,validationMessage:S.message,children:[(0,n.jsx)(eH,{label:"method",children:(0,n.jsx)("select",{value:p,onChange:e=>x(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:eB.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})}),(0,n.jsx)(eH,{label:"path",hint:"URL: ".concat(T),children:(0,n.jsx)("input",{value:m,onChange:e=>h(e.target.value),placeholder:"/hooks/deploy",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"auth",full:!0,children:(0,n.jsx)("div",{className:"flex gap-2 text-xs",children:["none","bearer","basic"].map(e=>(0,n.jsxs)("label",{className:"flex items-center gap-1",children:[(0,n.jsx)("input",{type:"radio",name:"webhook-auth",checked:f===e,onChange:()=>g(e)}),(0,n.jsx)("span",{className:"text-text-tertiary",children:e})]},e))})}),"bearer"===f&&(0,n.jsx)(eH,{label:"token",full:!0,children:(0,n.jsx)("input",{type:"password",value:b,onChange:e=>y(e.target.value),placeholder:"bearer token",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),"basic"===f&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(eH,{label:"username",children:(0,n.jsx)("input",{value:v,onChange:e=>j(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"password",children:(0,n.jsx)("input",{type:"password",value:w,onChange:e=>k(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})})]})]})}let eV=["GET","POST","PUT","PATCH","DELETE","HEAD"];function eQ(e){let t=null==e?void 0:e.http;if(!t||"object"!=typeof t)return{method:"GET",url:"https://api.example.com/items",headers:[],body:"",auth:"none",timeoutMs:3e4};let r=eV.includes(t.method)?t.method:"GET",n="string"==typeof t.url?t.url:"",a=Object.entries(t.headers&&"object"==typeof t.headers?t.headers:{}).filter(e=>{let[,t]=e;return"string"==typeof t}).map(e=>{let[t,r]=e;return{key:t,value:r}}),l="string"==typeof t.body?t.body:"",s="number"==typeof t.timeout?t.timeout:3e4,o=t.auth&&"object"==typeof t.auth?t.auth:null;return o&&"bearer"===o.type?{method:r,url:n,headers:a,body:l,auth:"bearer",token:"string"==typeof o.token?o.token:"",timeoutMs:s}:o&&"basic"===o.type?{method:r,url:n,headers:a,body:l,auth:"basic",username:"string"==typeof o.username?o.username:"",password:"string"==typeof o.password?o.password:"",timeoutMs:s}:{method:r,url:n,headers:a,body:l,auth:"none",timeoutMs:s}}function eZ(e){var t,r,a,l;let{definition:s,nodeId:i,onChange:d}=e,c=(null!=(t=s.nodes)?t:[]).find(e=>e.id===i),u=eQ(c),[p,x]=(0,o.useState)(u.method),[m,h]=(0,o.useState)(u.url),[f,g]=(0,o.useState)(u.headers),[b,y]=(0,o.useState)(u.body),[v,j]=(0,o.useState)(u.auth),[w,k]=(0,o.useState)(null!=(r=u.token)?r:""),[N,C]=(0,o.useState)(null!=(a=u.username)?a:""),[S,A]=(0,o.useState)(null!=(l=u.password)?l:""),[T,E]=(0,o.useState)(u.timeoutMs);(0,o.useEffect)(()=>{var e,t,r;let n=eQ(c);x(n.method),h(n.url),g(n.headers),y(n.body),j(n.auth),k(null!=(e=n.token)?e:""),C(null!=(t=n.username)?t:""),A(null!=(r=n.password)?r:""),E(n.timeoutMs)},[i,c]);let M=(0,o.useCallback)(()=>({method:p,url:m,headers:f,body:b,auth:v,token:w,username:N,password:S,timeoutMs:T}),[p,m,f,b,v,w,N,S,T]),_=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(c)return _.current&&clearTimeout(_.current),_.current=setTimeout(()=>{d(function(e,t,r){var n,a,l;let s={method:r.method,url:r.url};if(r.headers.length>0){let e={};for(let t of r.headers)t.key.trim()&&(e[t.key.trim()]=t.value);Object.keys(e).length>0&&(s.headers=e)}r.body.trim()&&(s.body=r.body),"bearer"===r.auth&&r.token?s.auth={type:"bearer",token:r.token}:"basic"===r.auth&&(r.username||r.password)&&(s.auth={type:"basic",username:null!=(n=r.username)?n:"",password:null!=(a=r.password)?a:""}),r.timeoutMs&&3e4!==r.timeoutMs&&(s.timeout=r.timeoutMs);let o=(null!=(l=e.nodes)?l:[]).map(e=>e.id===t?{...e,http:s}:e);return{...e,nodes:o}}(s,i,M()))},500),()=>{_.current&&clearTimeout(_.current)}},[c,i,s,M,d]);let R=function(e){if(!e.trim())return{ok:!1,message:"url required"};try{return new URL(e),{ok:!0,message:"url ok"}}catch(e){return{ok:!1,message:"invalid URL"}}}(m),I=R.ok?"valid":"error",O=(e,t,r)=>{g(n=>n.map((n,a)=>a===e?{key:t,value:r}:n))};return(0,n.jsxs)(eG,{variantLabel:"HTTP",validationStatus:I,validationMessage:R.message,children:[(0,n.jsx)(eH,{label:"method",children:(0,n.jsx)("select",{value:p,onChange:e=>x(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:eV.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})}),(0,n.jsx)(eH,{label:"timeout (ms)",hint:"= ".concat(Math.round(T/1e3),"s"),children:(0,n.jsx)("input",{type:"number",min:1e3,max:12e4,step:1e3,value:T,onChange:e=>E(Number(e.target.value)),className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"url",full:!0,hint:"supports $ARGUMENTS variable",children:(0,n.jsx)("input",{value:m,onChange:e=>h(e.target.value),placeholder:"https://api.example.com/items",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"headers",full:!0,children:(0,n.jsxs)("div",{className:"flex flex-col gap-1",children:[f.map((e,t)=>(0,n.jsxs)("div",{className:"flex gap-1",children:[(0,n.jsx)("input",{value:e.key,onChange:r=>O(t,r.target.value,e.value),placeholder:"Accept",spellCheck:!1,className:"flex-1 rounded-md border border-border bg-surface px-2 py-0.5 font-mono text-[11px]"}),(0,n.jsx)("input",{value:e.value,onChange:r=>O(t,e.key,r.target.value),placeholder:"application/json",spellCheck:!1,className:"flex-1 rounded-md border border-border bg-surface px-2 py-0.5 font-mono text-[11px]"}),(0,n.jsx)("button",{type:"button",onClick:()=>g(e=>e.filter((e,r)=>r!==t)),className:"rounded px-1.5 text-[11px] text-text-tertiary hover:bg-error/10 hover:text-error","aria-label":"Remove header",children:"\xd7"})]},t)),(0,n.jsx)("button",{type:"button",onClick:()=>g(e=>[...e,{key:"",value:""}]),className:"self-start rounded-md border border-border px-2 py-0.5 text-[10px] text-text-tertiary hover:bg-surface",children:"+ header"})]})}),(0,n.jsx)(eH,{label:"body (string)",full:!0,hint:"GET"===p||"HEAD"===p?"usually empty for GET/HEAD":"JSON / raw text",children:(0,n.jsx)("textarea",{value:b,onChange:e=>y(e.target.value),rows:3,spellCheck:!1,className:"w-full resize-none rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"auth",full:!0,children:(0,n.jsx)("div",{className:"flex gap-2 text-xs",children:["none","bearer","basic"].map(e=>(0,n.jsxs)("label",{className:"flex items-center gap-1",children:[(0,n.jsx)("input",{type:"radio",name:"http-auth",checked:v===e,onChange:()=>j(e)}),(0,n.jsx)("span",{className:"text-text-tertiary",children:e})]},e))})}),"bearer"===v&&(0,n.jsx)(eH,{label:"token",full:!0,children:(0,n.jsx)("input",{type:"password",value:w,onChange:e=>k(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),"basic"===v&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(eH,{label:"username",children:(0,n.jsx)("input",{value:N,onChange:e=>C(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"password",children:(0,n.jsx)("input",{type:"password",value:S,onChange:e=>A(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})})]})]})}let e0=["message","mention","reaction"];function e1(e){let t=null==e?void 0:e.discordTrigger;return t&&"object"==typeof t?{kind:e0.includes(t.kind)?t.kind:"message",channel:"string"==typeof t.channel?t.channel:void 0,user:"string"==typeof t.user?t.user:void 0,pattern:"string"==typeof t.pattern?t.pattern:void 0}:{kind:"message"}}function e2(e){if(!e)return{ok:!0,message:"no filter"};try{return new RegExp(e),{ok:!0,message:"pattern ok"}}catch(e){return{ok:!1,message:"invalid regex"}}}function e3(e){var t,r,a,l;let{definition:s,nodeId:i,onChange:d}=e,c=(null!=(t=s.nodes)?t:[]).find(e=>e.id===i),u=e1(c),[p,x]=(0,o.useState)(u.kind),[m,h]=(0,o.useState)(null!=(r=u.channel)?r:""),[f,g]=(0,o.useState)(null!=(a=u.user)?a:""),[b,y]=(0,o.useState)(null!=(l=u.pattern)?l:"");(0,o.useEffect)(()=>{var e,t,r;let n=e1(c);x(n.kind),h(null!=(e=n.channel)?e:""),g(null!=(t=n.user)?t:""),y(null!=(r=n.pattern)?r:"")},[i,c]);let v=(0,o.useCallback)(()=>({kind:p,channel:m,user:f,pattern:b}),[p,m,f,b]),j=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(c)return j.current&&clearTimeout(j.current),j.current=setTimeout(()=>{d(function(e,t,r){var n,a,l,s;let o={kind:r.kind};(null==(n=r.channel)?void 0:n.trim())&&(o.channel=r.channel.trim()),(null==(a=r.user)?void 0:a.trim())&&(o.user=r.user.trim()),(null==(l=r.pattern)?void 0:l.trim())&&(o.pattern=r.pattern.trim());let i=(null!=(s=e.nodes)?s:[]).map(e=>e.id===t?{...e,discordTrigger:o}:e);return{...e,nodes:i}}(s,i,v()))},500),()=>{j.current&&clearTimeout(j.current)}},[c,i,s,v,d]);let w=e2(b),k=[m&&"#".concat(m),f&&"@".concat(f),b&&"/".concat(b,"/")].filter(Boolean).join(" \xb7 "),N=w.ok?"valid":"error",C=w.ok?k||"no filters":w.message;return(0,n.jsxs)(eG,{variantLabel:"Discord",validationStatus:N,validationMessage:C,children:[(0,n.jsx)(eH,{label:"kind",children:(0,n.jsx)("select",{value:p,onChange:e=>x(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:e0.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})}),(0,n.jsx)(eH,{label:"channel (name or id)",hint:"e.g. ops \xb7 1234567890",children:(0,n.jsx)("input",{value:m,onChange:e=>h(e.target.value),placeholder:"ops",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"user (regex \xb7 optional)",hint:"match by username — e.g. .* \xb7 admin",children:(0,n.jsx)("input",{value:f,onChange:e=>g(e.target.value),placeholder:".*",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"pattern (regex \xb7 optional)",full:!0,hint:"match message body — e.g. ^배포",children:(0,n.jsx)("input",{value:b,onChange:e=>y(e.target.value),placeholder:"^deploy",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})})]})}let e5=["message","command","callback_query"];function e4(e){let t=null==e?void 0:e.telegramTrigger;return t&&"object"==typeof t?{kind:e5.includes(t.kind)?t.kind:"message",chat:"string"==typeof t.chat?t.chat:void 0,user:"string"==typeof t.user?t.user:void 0,command:"string"==typeof t.command?t.command:void 0,pattern:"string"==typeof t.pattern?t.pattern:void 0}:{kind:"message"}}function e6(e){var t,r,a,l,s;let{definition:i,nodeId:d,onChange:c}=e,u=(null!=(t=i.nodes)?t:[]).find(e=>e.id===d),p=e4(u),[x,m]=(0,o.useState)(p.kind),[h,f]=(0,o.useState)(null!=(r=p.chat)?r:""),[g,b]=(0,o.useState)(null!=(a=p.user)?a:""),[y,v]=(0,o.useState)(null!=(l=p.command)?l:""),[j,w]=(0,o.useState)(null!=(s=p.pattern)?s:"");(0,o.useEffect)(()=>{var e,t,r,n;let a=e4(u);m(a.kind),f(null!=(e=a.chat)?e:""),b(null!=(t=a.user)?t:""),v(null!=(r=a.command)?r:""),w(null!=(n=a.pattern)?n:"")},[d,u]);let k=(0,o.useCallback)(()=>({kind:x,chat:h,user:g,command:y,pattern:j}),[x,h,g,y,j]),N=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(u)return N.current&&clearTimeout(N.current),N.current=setTimeout(()=>{c(function(e,t,r){var n,a,l,s,o;let i={kind:r.kind};(null==(n=r.chat)?void 0:n.trim())&&(i.chat=r.chat.trim()),(null==(a=r.user)?void 0:a.trim())&&(i.user=r.user.trim()),"command"===r.kind&&(null==(l=r.command)?void 0:l.trim())&&(i.command=r.command.trim()),(null==(s=r.pattern)?void 0:s.trim())&&(i.pattern=r.pattern.trim());let d=(null!=(o=e.nodes)?o:[]).map(e=>e.id===t?{...e,telegramTrigger:i}:e);return{...e,nodes:d}}(i,d,k()))},500),()=>{N.current&&clearTimeout(N.current)}},[u,d,i,k,c]);let C=e2(j),S=[h&&"@".concat(h),g&&"from:".concat(g),"command"===x&&y&&"/".concat(y),j&&"/".concat(j,"/")].filter(Boolean).join(" \xb7 "),A=C.ok?"valid":"error",T=C.ok?S||"no filters":C.message;return(0,n.jsxs)(eG,{variantLabel:"Telegram",validationStatus:A,validationMessage:T,children:[(0,n.jsx)(eH,{label:"kind",children:(0,n.jsx)("select",{value:x,onChange:e=>m(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:e5.map(e=>(0,n.jsx)("option",{value:e,children:e},e))})}),(0,n.jsx)(eH,{label:"chat (id or @group)",hint:"e.g. @my_group \xb7 -1001234567890",children:(0,n.jsx)("input",{value:h,onChange:e=>f(e.target.value),placeholder:"@my_group",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),"command"===x&&(0,n.jsx)(eH,{label:"command",hint:"match telegram /command (no slash)",full:!0,children:(0,n.jsx)("input",{value:y,onChange:e=>v(e.target.value),placeholder:"summary",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"user (regex \xb7 optional)",hint:"match by username or id",children:(0,n.jsx)("input",{value:g,onChange:e=>b(e.target.value),placeholder:".*",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"pattern (regex \xb7 optional)",full:!0,hint:"match message body — e.g. ^배포",children:(0,n.jsx)("input",{value:j,onChange:e=>w(e.target.value),placeholder:"^summarize",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})})]})}function e9(e){let t=null==e?void 0:e.manualTrigger;return t&&"object"==typeof t?{description:"string"==typeof t.description?t.description:void 0}:{}}function e8(e){var t,r;let{definition:a,nodeId:l,onChange:s}=e,i=(null!=(t=a.nodes)?t:[]).find(e=>e.id===l),d=e9(i),[c,u]=(0,o.useState)(null!=(r=d.description)?r:"");(0,o.useEffect)(()=>{var e;u(null!=(e=e9(i).description)?e:"")},[l,i]);let p=(0,o.useCallback)(()=>({description:c}),[c]),x=(0,o.useRef)(null);return(0,o.useEffect)(()=>{if(i)return x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{s(function(e,t,r){var n,a;let l={};(null==(n=r.description)?void 0:n.trim())&&(l.description=r.description.trim());let s=(null!=(a=e.nodes)?a:[]).map(e=>e.id===t?{...e,manualTrigger:l}:e);return{...e,nodes:s}}(a,l,p()))},500),()=>{x.current&&clearTimeout(x.current)}},[i,l,a,p,s]),(0,n.jsxs)(eG,{variantLabel:"Manual",validationStatus:"valid",validationMessage:"explicit run only",children:[(0,n.jsx)(eH,{label:"description (optional)",full:!0,hint:"rendered on the node card \xb7 helps remind future-you why this workflow runs manually",children:(0,n.jsx)("input",{value:c,onChange:e=>u(e.target.value),placeholder:"e.g. Build then deploy on demand",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs"})}),(0,n.jsx)(eH,{label:"behaviour",full:!0,children:(0,n.jsxs)("p",{className:"rounded-md border border-border bg-surface px-2 py-1.5 text-[11px] leading-snug text-text-tertiary",children:["The daemon never auto-subscribes to a Manual trigger. Run it via",(0,n.jsx)("code",{className:"mx-1 rounded bg-surface-elevated px-1 font-mono",children:"elanous wf run <name>"}),"or the PWA ",(0,n.jsx)("span",{className:"font-semibold",children:"▶ Run now"})," button (Group D dry-run)."]})})]})}function e7(e){let t=null==e?void 0:e.chatTrigger;if(!t||"object"!=typeof t)return{path:"/chat",auth:"none",sessionMode:"stateless",streaming:!1};let r="string"==typeof t.path?t.path:"/chat",n=t.auth&&"object"==typeof t.auth?t.auth:null,a=n&&"bearer"===n.type?"bearer":"none",l=n&&"bearer"===n.type&&"string"==typeof n.token?n.token:"";return{path:r,auth:a,token:l,sessionMode:"per-session"===t.sessionMode?"per-session":"stateless",streaming:!0===t.streaming}}function te(e){var t,r;let{definition:a,nodeId:l,onChange:s}=e,i=(null!=(t=a.nodes)?t:[]).find(e=>e.id===l),d=e7(i),[c,u]=(0,o.useState)(d.path),[p,x]=(0,o.useState)(d.auth),[m,h]=(0,o.useState)(null!=(r=d.token)?r:""),[f,g]=(0,o.useState)(d.sessionMode),[b,y]=(0,o.useState)(d.streaming);(0,o.useEffect)(()=>{var e;let t=e7(i);u(t.path),x(t.auth),h(null!=(e=t.token)?e:""),g(t.sessionMode),y(t.streaming)},[l,i]);let v=(0,o.useCallback)(()=>({path:c,auth:p,token:m,sessionMode:f,streaming:b}),[c,p,m,f,b]),j=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(i)return j.current&&clearTimeout(j.current),j.current=setTimeout(()=>{s(function(e,t,r){var n;let a={path:r.path};"bearer"===r.auth&&r.token&&(a.auth={type:"bearer",token:r.token}),"stateless"!==r.sessionMode&&(a.sessionMode=r.sessionMode),r.streaming&&(a.streaming=!0);let l=(null!=(n=e.nodes)?n:[]).map(e=>e.id===t?{...e,chatTrigger:a}:e);return{...e,nodes:l}}(a,l,v()))},500),()=>{j.current&&clearTimeout(j.current)}},[i,l,a,v,s]);let w=c.trim()?c.startsWith("/")?/\s/.test(c)?{ok:!1,message:"no whitespace in path"}:{ok:!0,message:"path ok"}:{ok:!1,message:"path must start with '/'"}:{ok:!1,message:"path required"},k=w.ok?"valid":"error";return(0,n.jsxs)(eG,{variantLabel:"Chat",validationStatus:k,validationMessage:w.message,children:[(0,n.jsx)(eH,{label:"path",hint:"POST /v1/workflows/<name>".concat(c),children:(0,n.jsx)("input",{value:c,onChange:e=>u(e.target.value),placeholder:"/chat",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"session mode",children:(0,n.jsxs)("select",{value:f,onChange:e=>g(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:[(0,n.jsx)("option",{value:"stateless",children:"stateless"}),(0,n.jsx)("option",{value:"per-session",children:"per-session"})]})}),(0,n.jsx)(eH,{label:"auth",full:!0,children:(0,n.jsx)("div",{className:"flex gap-2 text-xs",children:["none","bearer"].map(e=>(0,n.jsxs)("label",{className:"flex items-center gap-1",children:[(0,n.jsx)("input",{type:"radio",name:"chat-auth",checked:p===e,onChange:()=>x(e)}),(0,n.jsx)("span",{className:"text-text-tertiary",children:e})]},e))})}),"bearer"===p&&(0,n.jsx)(eH,{label:"token",full:!0,children:(0,n.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"bearer token",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(eH,{label:"streaming response",full:!0,children:(0,n.jsxs)("label",{className:"flex items-center gap-2 text-xs",children:[(0,n.jsx)("input",{type:"checkbox",checked:b,onChange:e=>y(e.target.checked)}),(0,n.jsx)("span",{className:"text-text-tertiary",children:"stream the last-node output as SSE (v2 daemon wire — flag persisted now)"})]})}),(0,n.jsx)(eH,{label:"v2 follow-ups",full:!0,children:(0,n.jsx)("p",{className:"rounded-md border border-border bg-surface px-2 py-1.5 text-[11px] leading-snug text-text-tertiary",children:"v1 = webhook mode minimal. Hosted chat page \xb7 AI memory \xb7 file upload \xb7 multi-response Chat nodes are deferred to v2 (BACKLOG follow-up \xb7 per n8n ChatTrigger 961 LOC reference)."})})]})}let tt=new Set(["type","title","description","default","enum","format","writeOnly","x-multiline","properties","required","items","minLength","maxLength","pattern","minimum","maximum","minItems","maxItems"]),tr=new Set(["string","number","integer","boolean","object","array"]);function tn(e){return null===e||"object"!=typeof e||Array.isArray(e)?null:e}function ta(e){let t=e.type;return"string"==typeof t&&tr.has(t)?t:null}function tl(e,t){return e?"".concat(e,".").concat(t):t}function ts(e,t,r){let[n,...a]=t.split("."),l={...e};if(0===a.length)return void 0===r?delete l[n]:l[n]=r,l;let s=l[n],o=null===s||"object"!=typeof s||Array.isArray(s)?{}:s;return l[n]=ts(o,a.join("."),r),l}function to(e,t){if(""!==t){if("number"===e.type||"integer"===e.type){let e=Number(t);return Number.isFinite(e)?e:t}return t}}function ti(e){let{schema:t,value:r,onChange:a}=e,l=(0,o.useMemo)(()=>(function(e){let t=[],r=[],n=new Set;return!function e(a,l,s,o){let i=tn(a);if(!i||n.has(i))return void r.push(l||"(root)");for(let e of(n.add(i),Object.keys(i)))tt.has(e)||r.push(tl(l,e));let d=ta(i);void 0===i.type||d||r.push(tl(l,"type"));let c=null!=d?d:void 0===i.type?tn(i.properties)||Array.isArray(i.required)?"object":void 0!==i.items?"array":null:null;if(l&&c&&t.push({path:l,type:c,label:"string"==typeof i.title?i.title:l.split(".").at(-1),..."string"==typeof i.description?{description:i.description}:{},required:o,...Object.hasOwn(i,"default")?{default:i.default}:{},...Array.isArray(i.enum)?{enum:[...i.enum]}:{},multiline:function(e,t,r){var n;if("textarea"===t.format||"multiline"===t.format||"markdown"===t.format||!0===t["x-multiline"])return!0;if("string"!==e||Array.isArray(t.enum)||"password"===t.format||"secret"===t.format||!0===t.writeOnly)return!1;let a=null!=(n=r.split(".").at(-1))?n:"",l="string"==typeof t.title?t.title:"";return/markdown|body|text/i.test(a)||/markdown|본문/i.test(l)}(c,i,l),secret:"password"===i.format||"secret"===i.format||!0===i.writeOnly}),s<6){if(("object"===d||void 0===i.type)&&tn(i.properties)){let t=new Set(Array.isArray(i.required)?i.required:[]);for(let[r,n]of Object.entries(i.properties))e(n,tl(l,r),s+1,t.has(r))}("array"===d||void 0===i.type)&&void 0!==i.items&&e(i.items,"".concat(l,"[]"),s+1,!1)}n.delete(i)}(e,"",0,!1),{fields:t,unsupported:r}})(t),[t]),{leaves:s,arrays:i}=(0,o.useMemo)(()=>(function(e){let t=[],r=[];for(let n of e)n.path.includes("[]")||("array"===n.type?r.push(n):"object"!==n.type&&t.push(n));return{leaves:t,arrays:r}})(l.fields),[l]),d=(0,o.useMemo)(()=>(function(e,t){let r=[],n=new Set;return!function e(t,a,l,s){let o=tn(t);if(!o||n.has(o))return;n.add(o);let i=ta(o);if(i&&!("object"===i?null!==tn(a):"array"===i?Array.isArray(a):"integer"===i?"number"==typeof a&&Number.isInteger(a):"number"===i?"number"==typeof a&&Number.isFinite(a):typeof a===i)){r.push({path:l,message:"Must be ".concat("integer"===i?"an integer":"a ".concat(i),".")}),n.delete(o);return}if(Array.isArray(o.enum)&&!o.enum.some(e=>(function e(t,r){if(t===r)return!0;if(Array.isArray(t)||Array.isArray(r))return Array.isArray(t)&&Array.isArray(r)&&t.length===r.length&&t.every((t,n)=>e(t,r[n]));let n=tn(t),a=tn(r);if(!n||!a)return!1;let l=Object.keys(n);return l.length===Object.keys(a).length&&l.every(t=>Object.hasOwn(a,t)&&e(n[t],a[t]))})(e,a))&&r.push({path:l,message:"Must be one of the allowed values."}),"string"==typeof a){let e=Array.from(a).length;if("number"==typeof o.minLength&&e<o.minLength&&r.push({path:l,message:"Must have at least ".concat(o.minLength," characters.")}),"number"==typeof o.maxLength&&e>o.maxLength&&r.push({path:l,message:"Must have at most ".concat(o.maxLength," characters.")}),"string"==typeof o.pattern)try{new RegExp(o.pattern).test(a)||r.push({path:l,message:"Does not match the required pattern."})}catch(e){}}"number"==typeof a&&("number"==typeof o.minimum&&a<o.minimum&&r.push({path:l,message:"Must be at least ".concat(o.minimum,".")}),"number"==typeof o.maximum&&a>o.maximum&&r.push({path:l,message:"Must be at most ".concat(o.maximum,".")})),Array.isArray(a)&&("number"==typeof o.minItems&&a.length<o.minItems&&r.push({path:l,message:"Must have at least ".concat(o.minItems," items.")}),"number"==typeof o.maxItems&&a.length>o.maxItems&&r.push({path:l,message:"Must have at most ".concat(o.maxItems," items.")}));let d=tn(a);if(d&&("object"===i||void 0===o.type)){if(Array.isArray(o.required))for(let e of o.required)"string"!=typeof e||Object.hasOwn(d,e)&&void 0!==d[e]||r.push({path:tl(l,e),message:"Required."});if(s<6){let t=tn(o.properties);if(t)for(let[r,n]of Object.entries(t))Object.hasOwn(d,r)&&void 0!==d[r]&&e(n,d[r],tl(l,r),s+1)}}s<6&&("array"===i||void 0===o.type)&&Array.isArray(a)&&void 0!==o.items&&a.forEach((t,r)=>e(o.items,t,"".concat(l,"[").concat(r,"]"),s+1)),n.delete(o)}(e,t,"",0),r})(t,r),[t,r]);return(0,n.jsxs)("div",{className:"col-span-full flex flex-col gap-2","data-schema-form":!0,children:[l.unsupported.length>0&&(0,n.jsxs)("p",{className:"text-[11px] text-warning","data-schema-unsupported":!0,children:["이 노드의 설정 일부는 폼이 다루지 않습니다(",l.unsupported.slice(0,3).join(", "),l.unsupported.length>3?" 외 ".concat(l.unsupported.length-3):"",") — YAML 에서 고치세요."]}),i.length>0&&(0,n.jsxs)("p",{className:"text-[11px] text-text-tertiary",children:["목록 칸(",i.map(e=>e.label).join(", "),")은 YAML 에서 고치세요."]}),s.map(e=>{var t,l;let s,o=function(e,t){let r=e;for(let e of t.split(".")){if(null===r||"object"!=typeof r||Array.isArray(r))return;r=r[e]}return r}(r,e.path),i="schema-".concat(e.path),c=(t=e.path,null==(l=d.find(e=>e.path===t))?void 0:l.message),u="".concat(e.label).concat(e.required?" *":""),p="w-full rounded-md border border-border bg-surface px-2 py-1 text-xs";return s="boolean"===e.type?(0,n.jsx)("input",{id:i,type:"checkbox",checked:!0===o,onChange:t=>a(ts(r,e.path,t.target.checked))}):e.enum&&e.enum.length>0?(0,n.jsxs)("select",{id:i,className:p,value:void 0===o?"":String(o),onChange:t=>{let n=e.enum.find(e=>String(e)===t.target.value);a(ts(r,e.path,""===t.target.value?void 0:n))},children:[(0,n.jsx)("option",{value:"",children:"(비움)"}),e.enum.map(e=>(0,n.jsx)("option",{value:String(e),children:String(e)},String(e)))]}):e.multiline?(0,n.jsx)("textarea",{id:i,rows:4,className:"".concat(p," font-mono"),value:"string"==typeof o?o:void 0===o?"":String(o),onChange:t=>a(ts(r,e.path,to(e,t.target.value)))}):(0,n.jsx)("input",{id:i,type:e.secret?"password":"number"===e.type||"integer"===e.type?"number":"text",autoComplete:e.secret?"off":void 0,className:p,placeholder:void 0!==e.default?String(e.default):void 0,value:void 0===o?"":String(o),onChange:t=>a(ts(r,e.path,to(e,t.target.value)))}),(0,n.jsxs)("div",{className:"flex flex-col gap-0.5","data-schema-field":e.path,children:[(0,n.jsx)("label",{htmlFor:i,className:"text-[11px] text-text-secondary",children:u}),s,e.description&&(0,n.jsx)("span",{className:"text-[10px] text-text-tertiary",children:e.description}),c&&(0,n.jsx)("span",{className:"text-[11px] text-error",role:"alert","data-schema-error":e.path,children:c})]},e.path)})]})}let td=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,tc=/^[A-Za-z_][A-Za-z0-9_]*$/;function tu(e,t,r){var n,a;if(!/^\$[A-Za-z0-9_.-]*$/.test(r))return[];let l=new Map((null!=(n=e.nodes)?n:[]).map(e=>[e.id,e])),s=l.get(t),o=new Set(["$ARGUMENTS","$ARTIFACTS_DIR"]),i=new Set([t]),d=[...null!=(a=null==s?void 0:s.depends_on)?a:[]];for(;d.length;){let e=d.pop();if(i.has(e))continue;i.add(e);let t=l.get(e);if(!t||(d.push(...Array.isArray(t.depends_on)?t.depends_on:[]),!td.test(e)))continue;o.add("$".concat(e,".output"));let r=t.output_format;if(!r||"object"!=typeof r||Array.isArray(r))continue;let n=r.properties;if(!(!n||"object"!=typeof n||Array.isArray(n)))for(let t of Object.keys(n))tc.test(t)&&o.add("$".concat(e,".output.").concat(t))}return[...o].filter(e=>e.startsWith(r))}function tp(e,t){if(null===t)return null;let r=e.slice(0,t),n=/\$[A-Za-z0-9_.-]*$/.exec(r);if(!n)return null;let a=t-n[0].length;return a>0&&/[\\$]/.test(e[a-1])?null:{start:a,typed:n[0]}}function tx(e){let{definition:t,nodeId:r,value:a,onChange:l,className:s,spellCheck:i,placeholder:d,rows:c,multiline:u=!1}=e,p=(0,o.useRef)(null),x=(0,o.useRef)(null),m=(0,o.useRef)(null),h=(0,o.useRef)(null),[f,g]=(0,o.useState)(null),[b,y]=(0,o.useState)(!1),[v,j]=(0,o.useState)(0),[w,k]=(0,o.useState)(!1),N=b?null:tp(a,f),C=N&&!w?tu(t,r,N.typed):[],S=w?tu(t,r,"$"):[];(0,o.useEffect)(()=>{if(!w||"undefined"==typeof document)return;let e=e=>{x.current&&!x.current.contains(e.target)&&k(!1)},t=e=>{"Escape"===e.key&&(e.preventDefault(),k(!1))};return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t)}},[w]);let A=e=>{var t,r;m.current={start:null!=(t=e.selectionStart)?t:a.length,end:null!=(r=e.selectionEnd)?r:a.length}};(0,o.useLayoutEffect)(()=>{null!==h.current&&p.current&&(p.current.focus(),p.current.setSelectionRange(h.current,h.current),h.current=null)},[a]);let T=e=>{A(e.target),g(e.target.selectionStart),y(!1),j(0),l(e)},E=e=>{var t;let r=p.current;if(!r)return;let{value:n,cursor:a}=e,s=null==(t=Object.getOwnPropertyDescriptor(u?HTMLTextAreaElement.prototype:HTMLInputElement.prototype,"value"))?void 0:t.set;s&&(h.current=a,s.call(r,n),l({target:r,currentTarget:r,type:"change",nativeEvent:new Event("input"),preventDefault:()=>{},stopPropagation:()=>{}}),g(a),m.current={start:a,end:a},y(!0))},M=e=>{var t,r;let n=p.current,l=null!=(t=null==n?void 0:n.selectionStart)?t:f;if(!n||null===l)return;let s=function(e,t,r,n){let a=tp(e,t);return a?{value:e.slice(0,a.start)+n+e.slice(r),cursor:a.start+n.length}:null}(a,l,null!=(r=n.selectionEnd)?r:l,e);s&&E(s)},_=e=>{"Escape"===e.key&&w?(e.preventDefault(),k(!1)):"Escape"===e.key&&C.length?(e.preventDefault(),y(!0)):C.length&&("ArrowDown"===e.key||"ArrowUp"===e.key)?(e.preventDefault(),j(t=>(t+("ArrowDown"===e.key?1:-1)+C.length)%C.length)):C.length&&("Enter"===e.key||"Tab"===e.key)&&(e.preventDefault(),M(C[Math.min(v,C.length-1)]))},R={ref:e=>{p.current=e},value:a,spellCheck:i,className:s,"aria-autocomplete":"list","aria-expanded":C.length>0};return(0,n.jsxs)("span",{ref:x,className:"relative grid w-full grid-cols-[minmax(0,1fr)_auto] items-start gap-1",children:[u?(0,n.jsx)("textarea",{...R,rows:c,placeholder:d,onChange:T,onKeyDown:_,onFocus:e=>{A(e.target),g(e.target.selectionStart)},onSelect:e=>{A(e.currentTarget),g(e.currentTarget.selectionStart)},onBlur:()=>g(null),onClick:()=>y(!1)}):(0,n.jsx)("input",{...R,type:"text",placeholder:d,onChange:T,onKeyDown:_,onFocus:e=>{A(e.target),g(e.target.selectionStart)},onSelect:e=>{A(e.currentTarget),g(e.currentTarget.selectionStart)},onBlur:()=>g(null),onClick:()=>y(!1)}),(0,n.jsx)("button",{type:"button","aria-label":"변수 넣기","aria-haspopup":"listbox","aria-expanded":w,className:"rounded px-1.5 py-0.5 text-xs whitespace-nowrap bg-surface-elevated text-foreground border border-border hover:bg-surface",onMouseDown:e=>{!w&&p.current&&A(p.current),e.preventDefault()},onClick:()=>{w||!p.current||m.current||A(p.current),k(e=>!e)},children:"변수 넣기"}),w&&(0,n.jsx)("span",{role:"listbox","aria-label":"사용 가능한 변수",className:"absolute left-0 top-full z-30 max-h-48 w-full overflow-y-auto rounded-md border border-border bg-surface-elevated shadow-lg",children:0===S.length?(0,n.jsx)("span",{className:"block px-2 py-1 text-xs",children:"쓸 수 있는 변수가 없습니다"}):S.map(e=>(0,n.jsxs)("button",{type:"button",role:"option","aria-selected":!1,className:"block w-full px-2 py-1 text-left text-xs hover:bg-surface",onMouseDown:e=>e.preventDefault(),onClick:()=>(e=>{var t,r,n;let l=null!=(t=m.current)?t:{start:a.length,end:a.length};E((r=l.start,n=l.end,{value:a.slice(0,r)+e+a.slice(n),cursor:r+e.length})),k(!1)})(e),children:[(0,n.jsx)("span",{className:"font-mono",children:e})," \xb7 ",function(e){if("$ARGUMENTS"===e)return"실행할 때 받은 인자";if("$ARTIFACTS_DIR"===e)return"산출물 폴더";let t=/^\$([a-z0-9]+(?:-[a-z0-9]+)*)\.output(?:\.([A-Za-z_][A-Za-z0-9_]*))?$/.exec(e);return t?t[2]?"".concat(t[1]," 노드 결과의 ").concat(t[2]):"".concat(t[1]," 노드 결과"):e}(e)]},e))}),C.length>0&&(0,n.jsx)("span",{role:"listbox","aria-label":"Expression suggestions",className:"absolute left-0 top-full z-20 max-h-48 w-full overflow-y-auto rounded-md border border-border bg-surface-elevated shadow-lg",children:C.map((e,t)=>(0,n.jsx)("button",{type:"button",role:"option","aria-selected":t===v,className:"block w-full px-2 py-1 text-left font-mono text-xs hover:bg-surface ".concat(t===v?"bg-surface":""),onMouseDown:e=>e.preventDefault(),onClick:()=>M(e),children:e},e))})]})}function tm(e){var t;let{plugin:r,client:a}=e,[l,s]=(0,o.useState)(null),[i,d]=(0,o.useState)({}),[c,u]=(0,o.useState)(0),[p,x]=(0,o.useState)(null),[m,h]=(0,o.useState)(!1),[f,g]=(0,o.useState)(null),[b,y]=(0,o.useState)(!0),[v,j]=(0,o.useState)(!1),w=(0,o.useRef)(null);((null==(t=w.current)?void 0:t.plugin)!==r||w.current.client!==a)&&(w.current={plugin:r,client:a});let k=w.current;async function N(e){h(!0),g(null);try{await a.putPluginCredentials(r,e)}catch(e){w.current===k&&(g("자격 정보를 저장하지 못했습니다. 다시 시도해 주세요."),h(!1));return}if(w.current===k){d({}),u(e=>e+1),x(null),j(!0);try{let e=await a.getPluginCredentials(r);w.current===k&&(s(e),j(!1))}catch(e){w.current===k&&g("자격 정보는 저장됐지만 상태를 확인하지 못했습니다. 다시 시도해 주세요.")}finally{w.current===k&&h(!1)}}}return(0,o.useEffect)(()=>{w.current=k;let e=!0;return s(null),j(!1),d({}),u(e=>e+1),x(null),g(null),h(!1),y(!0),a.getPluginCredentials(r).then(t=>{e&&w.current===k&&s(t)}).catch(()=>{e&&w.current===k&&g("자격 상태를 불러오지 못했습니다.")}).finally(()=>{e&&w.current===k&&y(!1)}),()=>{e=!1,w.current===k&&(w.current=null)}},[a,r,k]),(0,n.jsxs)("section",{className:"col-span-full space-y-2 rounded-md border border-border p-3","aria-label":"자격",children:[(0,n.jsx)("h3",{className:"text-xs font-medium",children:"자격"}),b&&(0,n.jsx)("p",{role:"status",children:"자격 상태를 불러오는 중…"}),f&&(0,n.jsx)("p",{role:"alert",children:f}),!b&&(null==l?void 0:l.fields.length)===0&&(0,n.jsx)("p",{children:"필요한 자격 항목이 없습니다."}),l&&l.fields.length>0&&(0,n.jsxs)("form",{onSubmit:function(e){if(e.preventDefault(),m||!l)return;let t={};for(let e of l.fields){let r=i[e.name];(null==r?void 0:r.trim())&&(t[e.name]=r)}Object.keys(t).length>0&&N(t)},className:"space-y-2",children:[l.fields.map(e=>(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsxs)("label",{htmlFor:"plugin-credential-".concat(r,"-").concat(e.name),className:"block text-xs",children:[e.name," ",(0,n.jsxs)("span",{className:"text-text-tertiary",children:["(",e.env,")"]})]}),(0,n.jsx)("p",{role:"status",className:"text-xs",children:v?"확인하지 못함":e.set?"저장됨":"비어 있음"}),(0,n.jsx)("input",{id:"plugin-credential-".concat(r,"-").concat(e.name),type:"password",autoComplete:"new-password",disabled:m,onChange:t=>d(r=>({...r,[e.name]:t.target.value})),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs"},"".concat(r,"-").concat(e.name,"-").concat(c)),e.set&&(p===e.name?(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsx)("span",{children:"이 항목을 지울까요?"}),(0,n.jsx)("button",{type:"button",disabled:m,onClick:()=>void N({[e.name]:null}),children:"지우기 확인"}),(0,n.jsx)("button",{type:"button",disabled:m,onClick:()=>x(null),children:"취소"})]}):(0,n.jsx)("button",{type:"button",disabled:m,onClick:()=>x(e.name),children:"지우기"}))]},e.name)),(0,n.jsx)("button",{type:"submit",disabled:m||!Object.values(i).some(e=>e.trim()),children:m?"저장 중…":"저장"})]})]})}function th(e){return e?JSON.stringify(["id","bash","prompt","skill","arguments","cft","approval","when","depends_on"].map(t=>{var r;return null!=(r=e[t])?r:null})):""}function tf(e){var t,r,a,l;let{definition:s,nodeId:i,skills:d,onChange:c,onClose:u,onDelete:p,palette:x,credentialsClient:m}=e,h=(0,o.useMemo)(()=>{var e,t;return null!=(t=(null!=(e=s.nodes)?e:[]).find(e=>e.id===i))?t:null},[s,i]),f=(0,o.useMemo)(()=>h?U(h):"unknown",[h]),[g,b]=(0,o.useState)(null!=(t=null==h?void 0:h.id)?t:""),[v,j]=(0,o.useState)("string"==typeof(null==h?void 0:h.bash)?h.bash:""),[w,k]=(0,o.useState)("string"==typeof(null==h?void 0:h.prompt)?h.prompt:""),[N,C]=(0,o.useState)("string"==typeof(null==h?void 0:h.skill)?h.skill:""),[S,A]=(0,o.useState)("string"==typeof(null==h?void 0:h.arguments)?h.arguments:""),[T,E]=(0,o.useState)("string"==typeof(null==h?void 0:h.cft)?h.cft:""),M=(null==h?void 0:h.approval)&&"object"==typeof h.approval?h.approval:null,[_,R]=(0,o.useState)(null!=(r=null==M?void 0:M.message)?r:""),[I,O]=(0,o.useState)(null!=(a=null==M?void 0:M.delivery)?a:"modal"),[L,P]=(0,o.useState)("string"==typeof(null==h?void 0:h.when)?h.when:""),[D,z]=(0,o.useState)(Array.isArray(null==h?void 0:h.depends_on)?[...h.depends_on]:[]),F=(0,o.useRef)(null),W=(0,o.useRef)(null);(0,o.useEffect)(()=>{var e,t;if(!h)return;let r=th(h),n=F.current;if(n&&n.id===i&&n.fields===r||(F.current={id:i,fields:r},n&&n.id===i&&W.current===r))return;b(h.id),j("string"==typeof h.bash?h.bash:""),k("string"==typeof h.prompt?h.prompt:""),C("string"==typeof h.skill?h.skill:""),A("string"==typeof h.arguments?h.arguments:""),E("string"==typeof h.cft?h.cft:"");let a=h.approval&&"object"==typeof h.approval?h.approval:null;R(null!=(e=null==a?void 0:a.message)?e:""),O(null!=(t=null==a?void 0:a.delivery)?t:"modal"),P("string"==typeof h.when?h.when:""),z(Array.isArray(h.depends_on)?[...h.depends_on]:[])},[i,h]);let $=(0,o.useMemo)(()=>{var e,t;let r="string"==typeof(null==h?void 0:h.kind)?h.kind:null;return r&&null!=(t=null==x||null==(e=x.find(e=>e.kind===r))?void 0:e.plugin)?t:null},[h,x]),q=(0,o.useMemo)(()=>{var e,t;let r="string"==typeof(null==h?void 0:h.kind)?h.kind:null;return r&&null!=(t=null==x||null==(e=x.find(e=>e.kind===r&&e.schema))?void 0:e.schema)?t:null},[h,x]),G=(0,o.useMemo)(()=>{let e=null==h?void 0:h.inputs;return e&&"object"==typeof e&&!Array.isArray(e)?e:{}},[h]),[K,J]=(0,o.useState)(G);(0,o.useEffect)(()=>{J(G)},[i,G]),(0,o.useEffect)(()=>{if(!h||!q||JSON.stringify(K)===JSON.stringify(G))return;let e=setTimeout(()=>{var e;c({...s,nodes:(null!=(e=s.nodes)?e:[]).map(e=>e.id===i?{...e,inputs:K}:e)})},500);return()=>clearTimeout(e)},[K,G,q,h,i,s,c]);let B=(0,o.useCallback)(()=>{var e,t;if(!h)return{};let r={};if(g!==h.id&&/^[a-z0-9]+(-[a-z0-9]+)*$/.test(g)&&(r.id=g),"bash"===f&&v!==h.bash&&(r.bash=v),"prompt"===f&&w!==h.prompt&&(r.prompt=w),"skill"===f&&(N!==h.skill&&(r.skill=N),S!==(null!=(e=h.arguments)?e:"")&&(r.arguments=S)),"cft"===f&&T!==h.cft&&(r.cft=T),"approval"===f){let e=null!=M?M:{message:"",delivery:"modal"};(_!==e.message||I!==(null!=(t=e.delivery)?t:"modal"))&&(r.approval={message:_,delivery:I})}L!==("string"==typeof h.when?h.when:"")&&(r.when=L.trim()?L:null);let n=Array.isArray(h.depends_on)?h.depends_on:[];return(D.length!==n.length||D.some((e,t)=>n[t]!==e))&&(r.depends_on=D),r},[h,f,M,g,v,w,N,S,T,_,I,L,D]),Y=(0,o.useRef)(null);if((0,o.useEffect)(()=>{if(h)return Y.current&&clearTimeout(Y.current),Y.current=setTimeout(()=>{var e,t;let r=B();if(0===Object.keys(r).length)return;let n=function(e,t,r){var n,a;if(!(null!=(n=e.nodes)?n:[]).find(e=>e.id===t))return e;let l=e,s=t;r.id&&r.id!==t&&(s=(l=function(e,t,r){var n,a;if(t===r||new Set((null!=(n=e.nodes)?n:[]).map(e=>e.id)).has(r))return e;let l=(null!=(a=e.nodes)?a:[]).map(e=>{let n=e;return e.id===t&&(n={...n,id:r}),Array.isArray(n.depends_on)&&(n={...n,depends_on:n.depends_on.map(e=>e===t?r:e)}),n});return{...e,nodes:l}}(e,t,r.id))===e?t:r.id);let o=(null!=(a=l.nodes)?a:[]).map(e=>{if(e.id!==s)return e;let t={...e},n=U(e),a=["bash","prompt","skill","cft","approval"].find(e=>void 0!==r[e]);return a&&a!==n&&"unknown"!==n&&(delete t[n],"skill"===n&&delete t.arguments,"cft"===n&&delete t.config),void 0!==r.bash&&(t.bash=r.bash),void 0!==r.prompt&&(t.prompt=r.prompt),void 0!==r.skill&&(t.skill=r.skill),void 0!==r.arguments&&(t.arguments=r.arguments),void 0!==r.cft&&(t.cft=r.cft),void 0!==r.config&&(t.config=r.config),void 0!==r.approval&&(t.approval=r.approval),null===r.when?delete t.when:"string"==typeof r.when&&(t.when=r.when),void 0!==r.depends_on&&(0===r.depends_on.length?delete t.depends_on:t.depends_on=[...r.depends_on]),t});return{...l,nodes:o}}(s,i,r);n!==s&&(W.current=th(null!=(t=(null!=(e=n.nodes)?e:[]).find(e=>e.id===("string"==typeof r.id?r.id:i)))?t:null),c(n))},500),()=>{Y.current&&clearTimeout(Y.current)}},[h,i,s,B,c]),!h)return(0,n.jsx)("div",{className:"border-t border-border bg-surface-elevated px-3 py-3 text-[11px] text-text-tertiary",children:"Node not found — it may have been deleted."});if("scheduleTrigger"===f||"webhookTrigger"===f||"http"===f||"discordTrigger"===f||"telegramTrigger"===f||"manualTrigger"===f||"chatTrigger"===f)return(0,n.jsxs)("div",{className:"border-t border-border bg-surface-elevated",children:[(0,n.jsxs)("header",{className:"flex items-center justify-between px-3 py-2",children:[(0,n.jsx)("span",{className:"font-mono text-xs text-text-primary",children:i}),(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsxs)("button",{type:"button",onClick:p,className:"flex items-center gap-1 rounded px-2 py-0.5 text-[11px] text-error hover:bg-error/10",title:"Delete this node",children:[(0,n.jsx)(y.A,{className:"h-3 w-3"}),"Delete"]}),(0,n.jsx)("button",{type:"button",onClick:u,className:"rounded p-1 text-text-tertiary hover:bg-surface","aria-label":"Close node editor",children:(0,n.jsx)(eT.A,{className:"h-3 w-3"})})]})]}),(0,n.jsxs)("div",{className:"px-3 pb-3",children:["scheduleTrigger"===f&&(0,n.jsx)(eJ,{definition:s,nodeId:i,onChange:c}),"webhookTrigger"===f&&(0,n.jsx)(eX,{definition:s,nodeId:i,onChange:c}),"http"===f&&(0,n.jsx)(eZ,{definition:s,nodeId:i,onChange:c}),"discordTrigger"===f&&(0,n.jsx)(e3,{definition:s,nodeId:i,onChange:c}),"telegramTrigger"===f&&(0,n.jsx)(e6,{definition:s,nodeId:i,onChange:c}),"manualTrigger"===f&&(0,n.jsx)(e8,{definition:s,nodeId:i,onChange:c}),"chatTrigger"===f&&(0,n.jsx)(te,{definition:s,nodeId:i,onChange:c})]})]});let X=(null!=(l=s.nodes)?l:[]).filter(e=>e.id!==i);return(0,n.jsxs)("div",{className:"border-t border-border bg-surface-elevated",children:[(0,n.jsxs)("header",{className:"flex items-center justify-between px-3 py-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"rounded bg-surface px-1.5 py-0.5 text-[10px] uppercase tracking-wide text-text-tertiary",children:h?H(h,f):f}),(0,n.jsx)("span",{className:"font-mono text-xs text-text-primary",children:i})]}),(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsxs)("button",{type:"button",onClick:p,className:"flex items-center gap-1 rounded px-2 py-0.5 text-[11px] text-error hover:bg-error/10",title:"Delete this node",children:[(0,n.jsx)(y.A,{className:"h-3 w-3"}),"Delete"]}),(0,n.jsx)("button",{type:"button",onClick:u,className:"rounded p-1 text-text-tertiary hover:bg-surface","aria-label":"Close node editor",children:(0,n.jsx)(eT.A,{className:"h-3 w-3"})})]})]}),(0,n.jsxs)("div",{className:"grid grid-cols-1 gap-2 px-3 pb-3 md:grid-cols-2",children:[(0,n.jsx)(tg,{label:"id",children:(0,n.jsx)("input",{value:g,onChange:e=>b(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),(0,n.jsx)(tg,{label:"when (gating expression)",children:(0,n.jsx)(tx,{definition:s,nodeId:i,value:L,onChange:e=>P(e.target.value),placeholder:"e.g. \"$prev.output == 'ok'\"",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"},"".concat(i,":when"))}),q&&(0,n.jsx)(ti,{schema:q,value:K,onChange:J}),$&&m&&(0,n.jsx)(tg,{label:"자격",full:!0,children:(0,n.jsx)(tm,{plugin:$,client:m})}),"bash"===f&&(0,n.jsx)(tg,{label:"bash",full:!0,children:(0,n.jsx)(tx,{definition:s,nodeId:i,multiline:!0,value:v,onChange:e=>j(e.target.value),rows:4,spellCheck:!1,className:"w-full resize-none rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"},"".concat(i,":bash"))}),"prompt"===f&&(0,n.jsx)(tg,{label:"prompt",full:!0,children:(0,n.jsx)(tx,{definition:s,nodeId:i,multiline:!0,value:w,onChange:e=>k(e.target.value),rows:4,spellCheck:!1,className:"w-full resize-none rounded-md border border-border bg-surface px-2 py-1 text-xs"},"".concat(i,":prompt"))}),"skill"===f&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(tg,{label:"skill",children:[(0,n.jsx)("input",{value:N,onChange:e=>C(e.target.value),list:"workflow-skill-options",spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"}),d&&d.length>0&&(0,n.jsx)("datalist",{id:"workflow-skill-options",children:d.map(e=>(0,n.jsx)("option",{value:e},e))})]}),(0,n.jsx)(tg,{label:"arguments",full:!0,children:(0,n.jsx)(tx,{definition:s,nodeId:i,multiline:!0,value:S,onChange:e=>A(e.target.value),rows:3,spellCheck:!1,className:"w-full resize-none rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"},"".concat(i,":arguments"))})]}),"cft"===f&&(0,n.jsx)(tg,{label:"cft",full:!0,children:(0,n.jsx)("input",{value:T,onChange:e=>E(e.target.value),spellCheck:!1,className:"w-full rounded-md border border-border bg-surface px-2 py-1 font-mono text-xs"})}),"approval"===f&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(tg,{label:"message",full:!0,children:(0,n.jsx)("textarea",{value:_,onChange:e=>R(e.target.value),rows:2,spellCheck:!1,className:"w-full resize-none rounded-md border border-border bg-surface px-2 py-1 text-xs"})}),(0,n.jsx)(tg,{label:"delivery channel",children:(0,n.jsxs)("select",{value:I,onChange:e=>O(e.target.value),className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs",children:[(0,n.jsx)("option",{value:"all",children:"all (race)"}),(0,n.jsx)("option",{value:"modal",children:"modal (PWA)"}),(0,n.jsx)("option",{value:"terminal",children:"terminal"}),(0,n.jsx)("option",{value:"telegram",children:"telegram"}),(0,n.jsx)("option",{value:"discord",children:"discord"}),(0,n.jsx)("option",{value:"pushcut",children:"pushcut"})]})})]}),(0,n.jsx)(tg,{label:"depends_on",full:!0,children:(0,n.jsx)(tb,{value:D,options:X.map(e=>e.id),onChange:z})})]})]})}function tg(e){let{label:t,full:r,children:a}=e;return(0,n.jsxs)("label",{className:"flex flex-col gap-1 ".concat(r?"md:col-span-2":""),children:[(0,n.jsx)("span",{className:"text-[10px] uppercase tracking-wide text-text-tertiary",children:t}),a]})}function tb(e){let{value:t,options:r,onChange:a}=e;return 0===r.length?(0,n.jsx)("span",{className:"text-[11px] text-text-tertiary",children:"No other nodes to depend on."}):(0,n.jsx)("div",{className:"flex flex-wrap gap-1",children:r.map(e=>{let r=t.includes(e);return(0,n.jsx)("button",{type:"button",onClick:()=>{t.includes(e)?a(t.filter(t=>t!==e)):a([...t,e])},className:"rounded-md border px-2 py-0.5 font-mono text-[10px] transition-colors ".concat(r?"border-accent bg-accent/15 text-accent":"border-border text-text-tertiary hover:bg-surface"),children:e},e)})})}var ty=r(59405),tv=r(23869),tj=r(3472),tw=r(89762);let tk=e=>["nexus","workflow-pins",e];function tN(e,t){for(let r=e.length-1;r>=0;r--){let n=e[r];if("node_done"===n.type&&n.nodeId===t&&n.result)return n.result}return null}function tC(e){var t,r,a,l,s,i,d;let{workflowName:c,nodeId:u,events:p,readOnly:x}=e,m=tN(p,u),h=function(e){let t=(0,T.M1)();return(0,eA.I)({queryKey:tk(e),queryFn:()=>t.getWorkflowPins(e),enabled:e.length>0})}(c),f=function(){let e=(0,T.M1)(),t=(0,ty.jE)();return(0,tw.n)({mutationFn:t=>{let{name:r,nodeId:n,value:a,note:l}=t;return e.putWorkflowPin(r,n,a,l)},onSuccess:(e,r)=>{let{name:n}=r;return t.invalidateQueries({queryKey:tk(n)})}})}(),g=function(){let e=(0,T.M1)(),t=(0,ty.jE)();return(0,tw.n)({mutationFn:t=>{let{name:r,nodeId:n}=t;return e.deleteWorkflowPin(r,n)},onSuccess:(e,r)=>{let{name:n}=r;return t.invalidateQueries({queryKey:tk(n)})}})}(),[b,y]=(0,o.useState)(!1),v=null==(t=h.data)?void 0:t.pins[u],j=null==m?void 0:m.output,w=void 0!==j?function(e){let t,r=!1;if("string"==typeof e)try{t=JSON.stringify(JSON.parse(e),null,2),r=!0}catch(r){t=e}else try{let n=JSON.stringify(e,null,2);t=null!=n?n:String(e),r=void 0!==n}catch(r){t=String(e)}return{text:t.slice(0,4e3),isJson:r,truncated:t.length>4e3}}(j):null,k=b&&(null==w?void 0:w.truncated)?function(e){if("string"==typeof e)try{return JSON.stringify(JSON.parse(e),null,2)}catch(t){return e}try{var t;return null!=(t=JSON.stringify(e,null,2))?t:String(e)}catch(t){return String(e)}}(j):null==w?void 0:w.text,N=f.isPending||g.isPending,C=null!=(i=f.error)?i:g.error,S=(0,T.M1)(),E=(0,ty.jE)(),M=function(){let e=(0,T.M1)();return!0===(0,eA.I)({queryKey:["nexus","workflow-run-modes"],queryFn:async()=>!0===(await e.getHealth()).workflowRunModes,staleTime:1/0,retry:!1}).data}(),_=(0,A.b_)({enabled:!x&&M}),R=(0,o.useMemo)(()=>{var e,t;return(null!=(t=null==(e=_.data)?void 0:e.runs)?t:[]).filter(e=>e.workflowName===c).sort((e,t)=>t.startedAt-e.startedAt).slice(0,5).map(e=>e.runId)},[null==(r=_.data)?void 0:r.runs,c]),[I,O]=(0,o.useState)(0);(0,o.useEffect)(()=>{O(0)},[R[0]]);let L=null!=(d=R[I])?d:null,P=(0,A.uz)(!x&&M?L:null);(0,o.useEffect)(()=>{var e;(null==(e=P.data)?void 0:e.mode)==="only"&&I+1<R.length&&O(I+1)},[null==(a=P.data)?void 0:a.mode,I,R.length]);let D=void 0!==P.data&&"only"!==P.data.mode&&(null==(l=P.data)?void 0:l.events)&&(null==(s=tN(P.data.events,u))?void 0:s.ok)===!1,[z,F]=(0,o.useState)(!1),[W,$]=(0,o.useState)(null),q=async e=>{if(!x&&M&&!z&&("retry"!==e||L&&D)){F(!0),$(null);try{(await S.runWorkflow(c,"","test"===e?{onlyNode:u}:{fromNode:u,fromRunId:L})).mode!==("test"===e?"only":"from")&&$("서버가 전체 실행으로 처리했습니다"),await E.invalidateQueries({queryKey:tj.AF.workflowRuns()})}catch(e){e instanceof tv.I7?$("먼저 고정하거나 한 번 전체 실행이 필요한 노드: ".concat(e.nodes.join(", "))):$("실행 실패: ".concat(e instanceof Error?e.message:String(e)))}finally{F(!1)}}};return(0,n.jsxs)("section",{"aria-label":"".concat(u," 마지막 실행 결과"),className:"max-h-64 overflow-y-auto border-t border-border bg-surface px-3 py-2 text-xs",children:[(0,n.jsxs)("h3",{className:"font-semibold",children:["마지막 실행 결과 \xb7 ",u]}),m?(0,n.jsxs)("div",{className:"mt-2 space-y-2",children:[(0,n.jsxs)("p",{className:m.ok?"text-success":"text-error",children:[m.ok?"성공":"실패",void 0!==m.durationMs?" \xb7 ".concat((m.durationMs/1e3).toFixed(2),"초"):""]}),!m.ok&&m.error&&(0,n.jsx)("p",{role:"alert",className:"break-words text-error",children:m.error}),w&&(0,n.jsxs)("details",{className:"rounded border border-border bg-surface-elevated px-2 py-1",children:[(0,n.jsx)("summary",{className:"cursor-pointer",children:"출력"}),(0,n.jsx)("pre",{className:"mt-2 max-h-40 overflow-auto whitespace-pre-wrap break-all font-mono text-[11px]",children:k}),w.truncated&&(0,n.jsx)("button",{type:"button",onClick:()=>y(e=>!e),className:"mt-1 text-accent underline",children:b?"접기":"전체 보기"})]})]}):(0,n.jsx)("p",{className:"mt-2 text-text-tertiary",children:"아직 실행 기록이 없습니다"}),!x&&(0,n.jsxs)("div",{className:"mt-2 flex flex-wrap gap-2 border-t border-border pt-2",children:[(0,n.jsx)("button",{type:"button",disabled:!M||z,onClick:()=>void q("test"),className:"rounded border border-border px-2 py-1 disabled:opacity-50",children:"이 노드만 시험"}),(0,n.jsx)("button",{type:"button",disabled:!M||z||!L||!D,onClick:()=>void q("retry"),className:"rounded border border-border px-2 py-1 disabled:opacity-50",children:"실패 노드부터 다시"}),!M&&(0,n.jsx)("p",{className:"w-full text-text-tertiary",children:"서버가 아직 이 기능을 지원하지 않습니다"}),W&&(0,n.jsx)("p",{role:"alert",className:"w-full text-error",children:W})]}),(0,n.jsxs)("div",{className:"mt-2 border-t border-border pt-2",children:[h.isError&&(0,n.jsx)("p",{role:"alert",className:"text-error",children:"고정 상태를 읽지 못했습니다."}),v&&(0,n.jsx)("span",{className:"rounded bg-accent/15 px-1.5 py-0.5 text-accent",children:"고정됨"}),!x&&!h.isError&&!h.isPending&&(v?(0,n.jsx)("button",{type:"button",disabled:N,onClick:async()=>{f.reset();try{await g.mutateAsync({name:c,nodeId:u})}catch(e){}},className:"ml-2 rounded border border-border px-2 py-1 disabled:opacity-50",children:"고정 풀기"}):void 0!==j?(0,n.jsxs)("div",{children:[(0,n.jsx)("button",{type:"button",disabled:N,onClick:async()=>{g.reset();try{await f.mutateAsync({name:c,nodeId:u,value:j})}catch(e){}},className:"rounded border border-border px-2 py-1 disabled:opacity-50",children:"이 출력 고정"}),(0,n.jsx)("p",{className:"mt-1 text-text-tertiary",children:"다음 실행부터 이 노드는 실제로 돌지 않고 이 값을 씁니다."})]}):null),!x&&C&&(0,n.jsxs)("p",{role:"alert",className:"mt-1 text-error",children:["고정 변경 실패: ",C.message]})]})]})}var tS=r(36581),tA=r(50733),tT=r(60287);let tE="미리보기 권한이 없습니다 — 채팅 트리거의 hostedUi 설정을 확인하세요";function tM(e){let{workflow:t,onClose:r}=e,{config:a}=(0,tS.Q)(),[l]=(0,o.useState)(()=>crypto.randomUUID()),[s,i]=(0,o.useState)({kind:"loading"}),[d,c]=(0,o.useState)([]),[u,p]=(0,o.useState)(""),[x,m]=(0,o.useState)(!1),[h,f]=(0,o.useState)(null),g=(0,o.useRef)(!0),b=(0,o.useRef)(null),y=(0,o.useRef)(0),v=a.baseUrl.replace(/\/$/,"");(0,o.useEffect)(()=>{g.current=!0;let e=!1;return i({kind:"loading"}),(0,tT.XQ)(t,{origin:v}).then(r=>{if(!e){if(!(null==r?void 0:r.path)){i({kind:"unavailable"}),(0,tA.cY)("workflows.chat-preview",{workflow:t,outcome:"no-trigger",chars:0});return}i({kind:"ready",config:r}),(0,tA.cY)("workflows.chat-preview",{workflow:t,outcome:"ready",chars:0})}}).catch(r=>{if(e)return;let n=r instanceof Error&&/^chat-config (401|403)\b/.test(r.message);i({kind:n?"forbidden":"unavailable"}),(0,tA.cY)("workflows.chat-preview",{workflow:t,outcome:n?"forbidden":"config-error",chars:0})}),()=>{var t;e=!0,g.current=!1,null==(t=b.current)||t.abort()}},[t,v]);let j=async()=>{if("ready"!==s.kind||x||!u.trim())return;let e=u.trim(),r="u-".concat(y.current++),n="a-".concat(y.current++),o=new AbortController;b.current=o,c(t=>[...t,{id:r,role:"user",text:e},{id:n,role:"assistant",text:"",pending:!0}]),p(""),f(null),m(!0);let i="";try{let r=await (0,tT.gJ)({origin:v,chatPath:s.config.path,message:e,sessionId:l,bearer:a.token,streaming:s.config.streaming,signal:o.signal});if("buffered"===r.kind)i=r.response;else for await(let e of r.frames){if(!g.current)break;if("token"===e.event)i+=e.data,c(e=>e.map(e=>e.id===n?{...e,text:i}:e));else if("done"===e.event){try{let t=JSON.parse(e.data);"string"==typeof t.response&&(i=t.response)}catch(e){}break}else if("error"===e.event)throw Error("chat stream error")}g.current&&(c(e=>e.map(e=>e.id===n?{...e,text:i,pending:!1}:e)),(0,tA.cY)("workflows.chat-preview",{workflow:t,outcome:"sent",chars:i.length}))}catch(e){if(g.current){let r=e instanceof Error&&/^chat (401|403)\b/.test(e.message);c(e=>e.filter(e=>e.id!==n)),f(r?tE:"메시지를 보내지 못했습니다"),(0,tA.cY)("workflows.chat-preview",{workflow:t,outcome:r?"forbidden":"send-error",chars:0})}}finally{g.current&&m(!1),b.current===o&&(b.current=null)}};return(0,n.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,n.jsxs)("header",{className:"flex items-center justify-between border-b border-border px-3 py-2",children:[(0,n.jsx)("h2",{className:"text-sm font-medium",children:"대화 미리보기"}),(0,n.jsx)("button",{type:"button",onClick:r,"aria-label":"대화 미리보기 닫기",className:"text-xs text-text-tertiary hover:text-text-primary",children:"닫기"})]}),(0,n.jsxs)("div",{className:"min-h-0 flex-1 space-y-3 overflow-y-auto px-3 py-3 text-sm","aria-live":"polite",children:["loading"===s.kind&&(0,n.jsx)("p",{className:"text-text-tertiary",children:"채팅을 불러오는 중…"}),"unavailable"===s.kind&&(0,n.jsx)("p",{role:"status",children:"이 워크플로에는 채팅 트리거가 없습니다"}),"forbidden"===s.kind&&(0,n.jsx)("p",{role:"alert",className:"text-error",children:tE}),d.map(e=>(0,n.jsxs)("div",{className:"break-words",children:[(0,n.jsxs)("span",{className:"text-xs text-text-tertiary",children:["user"===e.role?"나":"답변",e.pending?" \xb7 입력 중…":""]}),(0,n.jsx)("p",{className:"whitespace-pre-wrap",children:e.text})]},e.id)),h&&(0,n.jsx)("p",{role:"alert",className:"text-error",children:h})]}),"ready"===s.kind&&(0,n.jsxs)("form",{className:"flex gap-2 border-t border-border p-3",onSubmit:e=>{e.preventDefault(),j()},children:[(0,n.jsx)("input",{type:"text","aria-label":"대화 메시지",value:u,onChange:e=>p(e.target.value),disabled:x,className:"min-w-0 flex-1 rounded-md border border-border bg-surface px-2 py-1 text-sm"}),(0,n.jsx)("button",{type:"submit",disabled:x||!u.trim(),className:"rounded-md bg-primary px-3 py-1 text-xs text-primary-foreground disabled:opacity-50",children:"보내기"})]})]})}var t_=r(52360);let tR={running:"Running",orphaned:"Orphaned",done:"Done",failed:"Failed",unknown:"Unknown"},tI={running:"bg-info/10 text-info ring-info/30",orphaned:"bg-text-tertiary/10 text-text-tertiary ring-border",done:"bg-success/10 text-success ring-success/30",failed:"bg-error/10 text-error ring-error/30",unknown:"bg-surface-elevated text-text-tertiary ring-border"};function tO(e){let{onSelect:t,selectedRunId:r,enabled:a}=e,l=(0,A.b_)({enabled:null==a||a}),[s,i]=(0,o.useState)("all"),d=(0,o.useMemo)(()=>{var e,t;let r=null!=(t=null==(e=l.data)?void 0:e.runs)?t:[];return"all"===s?r:r.filter(e=>e.status===s)},[l.data,s]),c=(0,o.useMemo)(()=>{var e,t;let r={all:0,running:0,orphaned:0,done:0,failed:0};for(let n of null!=(t=null==(e=l.data)?void 0:e.runs)?t:[])r.all+=1,n.status in r&&(r[n.status]+=1);return r},[l.data]);return l.isLoading?(0,n.jsxs)("div",{className:"flex h-full items-center justify-center text-[11px] text-text-tertiary",children:[(0,n.jsx)(j.A,{className:"mr-1.5 h-3 w-3 animate-spin"}),"loading runs…"]}):l.error?(0,n.jsxs)("div",{className:"flex h-full items-center justify-center text-[11px] text-error",children:[(0,n.jsx)(b.A,{className:"mr-1.5 h-3 w-3"}),"failed to load runs: ",l.error.message]}):(0,n.jsxs)("div",{className:"flex h-full flex-col",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 border-b border-border px-3 py-2",children:[(0,n.jsx)(f.A,{className:"h-3.5 w-3.5 text-text-tertiary"}),(0,n.jsx)("span",{className:"text-xs font-medium",children:"Recent runs"}),(0,n.jsxs)("span",{className:"text-[10px] text-text-tertiary",children:["(",c.all,")"]}),(0,n.jsx)("div",{className:"ml-auto flex items-center gap-1",children:["all","running","done","failed","orphaned"].map(e=>(0,n.jsx)(tL,{label:"all"===e?"all":tR[e],count:c[e],active:s===e,onClick:()=>i(e)},e))})]}),0===d.length?(0,n.jsx)("div",{className:"flex flex-1 items-center justify-center text-[11px] text-text-tertiary",children:"all"===s?"No runs yet — pick a workflow + click Run to start one.":"No ".concat(tR[s].toLowerCase()," runs.")}):(0,n.jsx)("ul",{className:"flex-1 overflow-y-auto",children:d.map(e=>(0,n.jsx)(tP,{run:e,selected:e.runId===r,onSelect:()=>t(e.runId,e.workflowName)},e.runId))})]})}function tL(e){let{label:t,count:r,active:a,onClick:l}=e;return(0,n.jsxs)("button",{type:"button",onClick:l,className:"rounded-md px-1.5 py-0.5 text-[10px] transition-colors ".concat(a?"bg-primary/15 text-primary ring-1 ring-primary/30":"text-text-tertiary hover:bg-surface-elevated"),children:[t,r>0&&(0,n.jsx)("span",{className:"ml-1 opacity-70",children:r})]})}function tP(e){let{run:t,selected:r,onSelect:a}=e;return(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:a,className:"flex w-full items-center gap-2 border-b border-border px-3 py-2 text-left text-[11px] transition-colors hover:bg-surface-elevated ".concat(r?"bg-primary/10":""),children:[(0,n.jsx)(tD,{status:t.status}),(0,n.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,n.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,n.jsx)(i.A,{className:"h-3 w-3 shrink-0 text-text-tertiary"}),(0,n.jsx)("span",{className:"truncate font-medium",children:t.workflowName})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2 text-[9px] text-text-tertiary",children:[(0,n.jsx)("span",{className:"font-mono",children:t.runId.slice(0,22)}),(0,n.jsx)("span",{children:"\xb7"}),(0,n.jsx)("span",{children:function(e){let t=Date.now()-e;return t<6e4?"".concat(Math.max(1,Math.floor(t/1e3)),"s ago"):t<36e5?"".concat(Math.floor(t/6e4),"m ago"):t<864e5?"".concat(Math.floor(t/36e5),"h ago"):"".concat(Math.floor(t/864e5),"d ago")}(t.startedAt)}),t.arguments&&t.arguments.length>0&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{children:"\xb7"}),(0,n.jsx)("span",{className:"truncate italic",children:t.arguments.slice(0,30)})]})]})]}),(0,n.jsx)("span",{className:"shrink-0 rounded px-1.5 py-0.5 text-[9px] font-medium uppercase ring-1 ".concat(tI[t.status]),children:tR[t.status]})]})})}function tD(e){let{status:t}=e;return"running"===t?(0,n.jsx)(j.A,{className:"h-3.5 w-3.5 shrink-0 animate-spin text-info"}):"done"===t?(0,n.jsx)(S.A,{className:"h-3.5 w-3.5 shrink-0 text-success"}):"failed"===t?(0,n.jsx)(b.A,{className:"h-3.5 w-3.5 shrink-0 text-error"}):"orphaned"===t?(0,n.jsx)(t_.A,{className:"h-3.5 w-3.5 shrink-0 text-text-tertiary"}):(0,n.jsx)("span",{className:"h-3.5 w-3.5 shrink-0 rounded-full bg-text-tertiary/30"})}function tz(e){var t,r;let{runId:a,message:l,onDismiss:s,onResolved:i}=e,[d,c]=(0,o.useState)(""),u=(0,A.Yk)(),p=(0,A.Ux)(),x=u.isPending||p.isPending;(0,o.useEffect)(()=>{let e=e=>{"Escape"!==e.key||x||s()};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[x,s]);let m=async()=>{try{await u.mutateAsync({runId:a,response:d.trim()?d:void 0}),null==i||i("approved")}catch(e){}},h=async()=>{try{await p.mutateAsync({runId:a,reason:d.trim()?d:void 0}),null==i||i("rejected")}catch(e){}};return(0,n.jsx)("div",{role:"dialog","aria-modal":"true","aria-labelledby":"approval-modal-title",className:"fixed inset-0 z-50 flex items-end justify-center bg-black/40 backdrop-blur-sm sm:items-center",children:(0,n.jsxs)("div",{className:"w-full max-w-md rounded-t-2xl border border-border bg-surface shadow-xl sm:rounded-lg",children:[(0,n.jsxs)("header",{className:"flex items-center justify-between border-b border-border px-4 py-3",children:[(0,n.jsxs)("h2",{id:"approval-modal-title",className:"flex items-center gap-2 text-sm font-semibold",children:[(0,n.jsx)(b.A,{className:"h-4 w-4 text-warning"}),"Approval needed"]}),(0,n.jsx)("button",{type:"button",onClick:s,disabled:x,"aria-label":"Close approval modal",className:"rounded-md p-1 text-text-tertiary hover:bg-surface-elevated disabled:opacity-50",children:(0,n.jsx)(eT.A,{className:"h-3.5 w-3.5"})})]}),(0,n.jsxs)("div",{className:"space-y-2 px-4 py-3",children:[(0,n.jsxs)("div",{className:"text-[10px] uppercase tracking-wide text-text-tertiary",children:["run \xb7 ",(0,n.jsx)("span",{className:"font-mono",children:a.slice(0,28)})]}),(0,n.jsx)("p",{className:"whitespace-pre-wrap text-[13px] leading-snug",children:l}),(0,n.jsxs)("label",{className:"block pt-2 text-[10px] uppercase tracking-wide text-text-tertiary",children:["Response (optional \xb7 captured into ",(0,n.jsx)("code",{className:"font-mono",children:"$node.output"})," when capture_response: true)"]}),(0,n.jsx)("textarea",{value:d,onChange:e=>c(e.target.value),placeholder:"LGTM / type a reason for rejection / leave empty for bare approval",rows:3,disabled:x,className:"w-full resize-none rounded-md border border-border bg-surface-elevated px-2 py-1.5 font-mono text-[11px] focus:outline-none focus:ring-1 focus:ring-primary disabled:opacity-50"}),(u.error||p.error)&&(0,n.jsx)("p",{className:"text-[11px] text-error",children:(null!=(t=u.error)?t:p.error)instanceof Error?(null!=(r=u.error)?r:p.error).message:"request failed"})]}),(0,n.jsxs)("footer",{className:"flex items-center justify-end gap-2 border-t border-border px-4 py-3",children:[(0,n.jsxs)("button",{type:"button",onClick:h,disabled:x,className:"flex items-center gap-1 rounded-md border border-error/40 px-3 py-1.5 text-[11px] text-error hover:bg-error/10 disabled:opacity-50",children:[p.isPending?(0,n.jsx)(j.A,{className:"h-3 w-3 animate-spin"}):(0,n.jsx)(b.A,{className:"h-3 w-3"}),"Reject"]}),(0,n.jsxs)("button",{type:"button",onClick:m,disabled:x,className:"flex items-center gap-1 rounded-md bg-primary px-3 py-1.5 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:[u.isPending?(0,n.jsx)(j.A,{className:"h-3 w-3 animate-spin"}):(0,n.jsx)(S.A,{className:"h-3 w-3"}),"Approve"]})]})]})})}let tF="elanous.workflows.layout",tW={leftCollapsed:!1,rightCollapsed:!1,canvasOnly:!1,leftWidthPx:240,rightWidthPx:320};function t$(e,t){return Number.isFinite(e)?e<160?160:e>640?640:Math.round(e):t}let tq="(max-width: 639px)";function tU(e){if(!window.matchMedia)return()=>{};let t=window.matchMedia(tq);return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}function tG(){var e,t;return!!(null==(e=(t=window).matchMedia)?void 0:e.call(t,tq).matches)}let tH={project:"Project",global:"Global",builtin:"Built-in"};function tK(){let{palette:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,T.Qj)()?(0,n.jsx)(tB,{palette:e}):(0,n.jsx)(tJ,{})}function tJ(){return(0,n.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 px-6 py-10 text-center",children:[(0,n.jsx)(i.A,{className:"h-8 w-8 text-text-tertiary"}),(0,n.jsx)("h2",{className:"text-base font-semibold",children:"Workflows"}),(0,n.jsx)("p",{className:"max-w-md text-sm text-text-tertiary",children:"Daemon 연결이 설정되지 않았습니다. Settings 에서 Base URL 을 입력하면 워크플로우 목록이 표시됩니다."}),(0,n.jsx)("a",{href:"/app/settings/",className:"rounded-md border border-border px-3 py-1 text-sm text-text-primary hover:bg-surface-elevated",children:"Settings"})]})}function tB(e){var t,r,s,N,C,S,E,M,_,R,I,O,L,P,D,z,F;let{palette:W}=e,$=(0,T.M1)(),q=(0,A.mP)(),[U,G]=(0,o.useState)(null),H=(0,o.useSyncExternalStore)(tU,tG,()=>!1),[K,J]=(0,o.useState)(null),B=null!=K?K:U?"canvas":"list",[Y,X]=(0,o.useState)(null),[Q,Z]=(0,o.useState)(""),[er,en]=(0,o.useState)(null),[ea,el]=(0,o.useState)(""),[es,eo]=(0,o.useState)(null),[ei,ed]=(0,o.useState)(!1),[ec,eu]=(0,o.useState)(!1),[ep,ex]=(0,o.useState)(""),[em,ef]=(0,o.useState)(null),[eg,eb]=(0,o.useState)("graph"),[ey,ev]=(0,o.useState)(!1),[ej,ew]=(0,o.useState)(!1),[ek,eN]=(0,o.useState)(!1),[eC,eS]=(0,o.useState)(null),[eA,eT]=(0,o.useState)(null),eE=(0,A.j3)(null!=U?U:"",{enabled:!!U&&!ei}),eM=(0,A.yM)(),e_=(0,A.oE)(),eI=(0,A.xd)(),eO=(0,A.XL)(),eL=(0,A.b_)(),eD=(0,o.useMemo)(()=>{var e,t,r;return U&&(null==(e=eL.data)?void 0:e.runs)&&null!=(r=null==(t=function(e,t){let r=null;for(let n of e)n.workflowName===t&&(!r||n.startedAt>r.startedAt)&&(r=n);return r}(eL.data.runs,U))?void 0:t.runId)?r:null},[U,null==(t=eL.data)?void 0:t.runs]),ez=null!=es?es:eD,eF=(0,A.uz)(ez),eW=(0,o.useMemo)(()=>{var e;if(null==(e=eF.data)?void 0:e.events)return function(e){let t={};for(let n of e)if(n.nodeId)switch(n.type){case"node_start":t[n.nodeId]||(t[n.nodeId]={status:"running"});break;case"node_done":{let e=n.result;if(null==e?void 0:e.ok)t[n.nodeId]={status:"done",durationMs:e.durationMs};else{let r={status:"failed"};(null==e?void 0:e.durationMs)!==void 0&&(r.durationMs=e.durationMs),(null==e?void 0:e.error)&&(r.error=e.error),t[n.nodeId]=r}break}case"node_skipped":{let e={status:"skipped"};n.reason&&(e.reason=n.reason),t[n.nodeId]=e;break}case"approval_pending":t[n.nodeId]={status:"awaiting_approval"};break;case"approval_resolved":var r;(null==(r=t[n.nodeId])?void 0:r.status)==="awaiting_approval"&&delete t[n.nodeId]}return t}(eF.data.events)},[null==(r=eF.data)?void 0:r.events]),e$=(0,A.zD)();(0,A.Ck)();let eU=(0,o.useMemo)(()=>{var e,t,r;return null!=(r=(null!=(t=null==(e=e$.data)?void 0:e.pending)?t:[]).find(e=>e.runId===es))?r:null},[e$.data,es]),eG=null!=(L=null==(s=e$.data)?void 0:s.pending.length)?L:0,[eH,eK]=(0,o.useState)(new Set);(0,o.useEffect)(()=>{eK(new Set)},[es]),(0,o.useEffect)(()=>{var e;ei||(null==(e=eE.data)?void 0:e.yaml)!==void 0&&eE.data.name===U&&(Z(eE.data.yaml),en(U))},[null==(N=eE.data)?void 0:N.yaml,null==(C=eE.data)?void 0:C.name,ei,U]);let eJ=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(!Q.trim())return;let e=setTimeout(()=>{var e;null==(e=eJ.current)||e.abort();let t=new AbortController;eJ.current=t,eI.mutateAsync({yaml:Q,signal:t.signal}).catch(()=>void 0)},600);return()=>{var t;clearTimeout(e),null==(t=eJ.current)||t.abort()}},[Q]);let eB=(0,o.useMemo)(()=>{var e,t;let r={project:[],global:[],builtin:[]};for(let n of null!=(t=null==(e=q.data)?void 0:e.workflows)?t:[])r[n.source].push(n);return r},[null==(S=q.data)?void 0:S.workflows]),eY=null==(E=eI.data)?void 0:E.validation,eX=eY&&!eY.ok?eY.issues:[],eV=(0,o.useMemo)(()=>Q.trim()?et(Q):null,[Q]),eQ=!!(null==eV?void 0:eV.nodes.some(e=>null!==e.chatTrigger&&"object"==typeof e.chatTrigger&&!Array.isArray(e.chatTrigger))),eZ=(0,o.useMemo)(()=>{if(eV&&0!==eX.length)return function(e,t){let r={},n=[];for(let a of e){let e=function(e,t){if("string"!=typeof e)return null;let r=/^nodes\[(\d+)\]/.exec(e);if(!r)return null;let n=Number.parseInt(r[1],10);if(!Number.isFinite(n)||n<0)return null;let a=Array.isArray(t.nodes)?t.nodes:[];if(n>=a.length)return null;let l=a[n];return l&&"string"==typeof l.id&&0!==l.id.length?l.id:null}(a.path,t);e?(r[e]||(r[e]=[]),r[e].push(a)):n.push(a)}return{byNodeId:r,rootIssues:n}}(eX,eV).byNodeId},[eV,eX]),e0=(0,o.useMemo)(()=>{if(!eV)return;let e=function(e){var t,r;let n=Array.isArray(e.nodes)?e.nodes:[],a=new Set,l=new Map;for(let e of n)e&&"string"==typeof e.id&&0!==e.id.length&&a.add(e.id);for(let e of n)if(e&&"string"==typeof e.id&&0!==e.id.length)for(let r of Array.isArray(e.depends_on)?e.depends_on:[]){if("string"!=typeof r||0===r.length||!a.has(r))continue;let n=null!=(t=l.get(r))?t:[];n.push(e.id),l.set(r,n)}let s=new Set,o=new Map,i=[];for(let e of a)(null!=(r=o.get(e))?r:0)===0&&function e(t){var r,n;for(let a of(o.set(t,1),i.push(t),null!=(r=l.get(t))?r:[])){let t=null!=(n=o.get(a))?n:0;if(1===t){let e=i.lastIndexOf(a);if(e>=0)for(let t=e;t<i.length;t++)s.add(i[t])}else 0===t&&e(a)}o.set(t,2),i.pop()}(e);return s}(eV);return e.size>0?e:void 0},[eV]),e1=e=>{ew(!1),X(null),en(null),G(e),J("canvas"),ev(!1),ed(!1),eo(null),eS(null)},e2=async()=>{if(ef(null),ei){let e=ep.trim()?a.test(ep.trim())?null:"이름은 소문자\xb7숫자와 하이픈(-)만 쓸 수 있습니다. 예: weekly-report":"워크플로 이름을 먼저 적어 주세요.";if(e)return void ef(e)}let e=ei?ep.trim():U;if(!e)return;let t=ei?function(e,t){let r=/^name:[^\n]*$/m;return r.test(e)?e.replace(r,"name: ".concat(t)):"name: ".concat(t,"\n").concat(e)}(Q,e):Q;t!==Q&&Z(t);try{await eM.mutateAsync({name:e,body:{yaml:t,scope:"project"}}),ed(!1),G(e),en(e)}catch(e){ef(function(e){var t,r,n,a;let l="object"==typeof e&&null!==e&&"status"in e?Number(e.status):NaN,s="object"==typeof e&&null!==e&&"body"in e?e.body:void 0,o=s&&"object"==typeof s&&"reason"in s&&"string"==typeof s.reason?s.reason:"",i=s&&"object"==typeof s&&"validation"in s&&null!=(n=null==(t=s.validation)?void 0:t.issues)?n:[];return 401===l||403===l?"저장 권한이 없습니다. 설정에서 연결 토큰을 확인해 주세요.":/name mismatch/i.test(o)?"이름 칸과 워크플로 이름이 달라 저장하지 못했습니다. 다시 저장해 주세요.":i.length?"저장하지 못했습니다: ".concat(String(null!=(a=null==(r=i[0])?void 0:r.message)?a:"").slice(0,120)):409===l?"같은 이름의 워크플로가 이미 있습니다. 다른 이름을 적어 주세요.":"저장하지 못했습니다. 잠시 뒤 다시 시도해 주세요."}(e))}},e3=async()=>{if(U)try{let e=await eO.mutateAsync({name:U,args:ea});eo(e.runId)}catch(e){}},e5=async()=>{var e,t;if(!U||(null==(e=eE.data)?void 0:e.source)==="builtin")return;let r=(null==(t=eE.data)?void 0:t.source)==="global"?"global":"project";try{await e_.mutateAsync({name:U,scope:r}),G(null),J("list"),X(null),en(null),Z("")}catch(e){}},e4=(null==(M=eE.data)?void 0:M.source)==="builtin",e6=eI.isPending?"pending":eY?eY.ok?"ok":"error":"idle",e9=function(){let[e,t]=(0,o.useState)(()=>tW),r=(0,o.useRef)(!1);(0,o.useEffect)(()=>{t(function(){try{var e,t,r;let n=window.localStorage.getItem(tF);if(!n)return{...tW};return(e=JSON.parse(n))&&"object"==typeof e?{leftCollapsed:"boolean"==typeof e.leftCollapsed?e.leftCollapsed:tW.leftCollapsed,rightCollapsed:"boolean"==typeof e.rightCollapsed?e.rightCollapsed:tW.rightCollapsed,canvasOnly:"boolean"==typeof e.canvasOnly?e.canvasOnly:tW.canvasOnly,leftWidthPx:t$(null!=(t=e.leftWidthPx)?t:tW.leftWidthPx,tW.leftWidthPx),rightWidthPx:t$(null!=(r=e.rightWidthPx)?r:tW.rightWidthPx,tW.rightWidthPx)}:{...tW}}catch(e){return{...tW}}}()),r.current=!0},[]),(0,o.useEffect)(()=>{if(r.current)try{window.localStorage.setItem(tF,JSON.stringify(e))}catch(e){}},[e]);let n=(0,o.useCallback)(()=>{t(e=>({...e,leftCollapsed:!e.leftCollapsed}))},[]),a=(0,o.useCallback)(()=>{t(e=>({...e,rightCollapsed:!e.rightCollapsed}))},[]),l=(0,o.useCallback)(()=>{t(e=>({...e,canvasOnly:!e.canvasOnly}))},[]),s=(0,o.useCallback)(e=>{t(t=>({...t,leftWidthPx:t$(e,t.leftWidthPx)}))},[]),i=(0,o.useCallback)(e=>{t(t=>({...t,rightWidthPx:t$(e,t.rightWidthPx)}))},[]),d=(0,o.useCallback)(()=>{t({...tW})},[]);return(0,o.useMemo)(()=>({...e,toggleLeft:n,toggleRight:a,toggleCanvasOnly:l,setLeftWidth:s,setRightWidth:i,reset:d}),[e,n,a,l,s,i,d])}(),e8=H?"list"===B:!e9.canvasOnly,e7=H?"run"===B:!e9.canvasOnly,te=e9.leftCollapsed?40:e9.leftWidthPx,tt=e9.rightCollapsed?40:e9.rightWidthPx;(0,o.useEffect)(()=>{let e=e=>{var t;if("\\"!==e.key||!(e.metaKey||e.ctrlKey))return;let r=e.target,n=null==r||null==(t=r.tagName)?void 0:t.toLowerCase();"input"===n||"textarea"===n||null!=r&&r.isContentEditable||(e.preventDefault(),e9.toggleCanvasOnly())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[e9]);let tr=(0,o.useCallback)((e,t)=>{let r="left"===e?e9.leftWidthPx:e9.rightWidthPx,n="left"===e?e9.setLeftWidth:e9.setRightWidth,a="left"===e?1:-1;try{t.target.setPointerCapture(t.pointerId)}catch(e){}let l=e=>{n(r+a*(e.clientX-t.clientX))},s=()=>{window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",s);try{t.target.releasePointerCapture(t.pointerId)}catch(e){}};window.addEventListener("pointermove",l),window.addEventListener("pointerup",s)},[e9]);return(0,n.jsxs)("div",{className:"flex h-full flex-col",children:[(0,n.jsxs)("header",{className:"flex items-center justify-between border-b border-border px-4 py-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(i.A,{className:"h-4 w-4 text-text-tertiary"}),(0,n.jsx)("h1",{className:"text-sm font-semibold",children:"Workflows"}),(0,n.jsxs)("span",{className:"text-xs text-text-tertiary",children:[null!=(P=null==(_=q.data)?void 0:_.workflows.length)?P:0," declared"]})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[!H&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{type:"button",onClick:e9.toggleLeft,title:e9.leftCollapsed?"Show workflow list":"Collapse workflow list",className:"flex items-center gap-1 rounded-md border border-border px-2 py-1 text-[11px] text-text-tertiary hover:bg-surface-elevated",children:e9.leftCollapsed?(0,n.jsx)(d.A,{className:"h-3 w-3"}):(0,n.jsx)(c.A,{className:"h-3 w-3"})}),(0,n.jsx)("button",{type:"button",onClick:e9.toggleCanvasOnly,title:e9.canvasOnly?"Exit canvas-only (Cmd+\\)":"Canvas-only mode (Cmd+\\)",className:"flex items-center gap-1 rounded-md border px-2 py-1 text-[11px] transition-colors ".concat(e9.canvasOnly?"border-accent/50 bg-accent/15 text-accent":"border-border text-text-tertiary hover:bg-surface-elevated"),children:e9.canvasOnly?(0,n.jsx)(u.A,{className:"h-3 w-3"}):(0,n.jsx)(p.A,{className:"h-3 w-3"})}),(0,n.jsx)("button",{type:"button",onClick:e9.toggleRight,title:e9.rightCollapsed?"Show run panel":"Collapse run panel",className:"flex items-center gap-1 rounded-md border border-border px-2 py-1 text-[11px] text-text-tertiary hover:bg-surface-elevated",children:e9.rightCollapsed?(0,n.jsx)(x.A,{className:"h-3 w-3"}):(0,n.jsx)(m.A,{className:"h-3 w-3"})})]}),eG>0&&(0,n.jsxs)("button",{type:"button",onClick:()=>{var e;if(eU&&eH.has(eU.runId))return void(eU&&eK(e=>{let t=new Set(e);return t.delete(eU.runId),t}));let t=null==(e=e$.data)?void 0:e.pending[0];t&&t.runId!==es&&eo(t.runId)},title:eU&&eH.has(eU.runId)?"Re-open approval modal for this run":"".concat(eG," run(s) waiting on approval — click to view"),className:"relative flex items-center gap-1 rounded-md border border-warning/40 bg-warning/10 px-2 py-1 text-[11px] text-warning hover:bg-warning/20",children:[(0,n.jsx)(h.A,{className:"h-3 w-3"}),(0,n.jsx)("span",{children:eG}),(0,n.jsx)("span",{className:"absolute -right-1 -top-1 h-2 w-2 animate-pulse rounded-full bg-warning ring-2 ring-surface"})]}),(0,n.jsxs)("button",{type:"button",onClick:()=>{ev(e=>!e),H&&J("canvas")},className:"flex items-center gap-1 rounded-md border px-2 py-1 text-[11px] transition-colors ".concat(ey?"border-primary/40 bg-primary/15 text-primary":"border-border text-text-tertiary hover:bg-surface-elevated"),children:[(0,n.jsx)(f.A,{className:"h-3 w-3"}),ey?"Editor":"All runs"]}),(0,n.jsxs)("button",{type:"button",onClick:()=>eN(e=>!e),title:ek?"Hide AI prompt":"Describe a workflow in plain text",className:"flex items-center gap-1 rounded-md border px-2 py-1 text-[11px] transition-colors ".concat(ek?"border-accent/50 bg-accent/15 text-accent":"border-border text-text-tertiary hover:bg-surface-elevated"),children:[(0,n.jsx)(g.A,{className:"h-3 w-3"}),"AI"]}),(0,n.jsx)("button",{type:"button",onClick:()=>eu(!0),className:"rounded-md bg-primary px-3 py-1 text-xs font-medium text-primary-foreground hover:bg-accent-hover transition-colors",children:"+ New"})]})]}),H&&(0,n.jsx)("nav",{"aria-label":"편집기 칸",role:"tablist",className:"flex border-b border-border",children:[["list","목록"],["canvas","캔버스"],["run","실행"]].map(e=>{let[t,r]=e;return(0,n.jsx)("button",{type:"button",role:"tab","aria-selected":B===t,onClick:()=>{J(t),"canvas"===t&&ev(!1)},className:"min-w-0 flex-1 px-2 py-2 text-xs font-medium ".concat(B===t?"border-b-2 border-accent text-text-primary":"text-text-tertiary"),children:r},t)})}),(0,n.jsxs)("div",{className:"flex flex-1 overflow-hidden",children:[e8&&(0,n.jsx)("aside",{style:H?void 0:{width:te},className:"shrink-0 overflow-y-auto border-r border-border ".concat(H?"w-full min-w-0":""),children:!H&&e9.leftCollapsed?(0,n.jsx)("button",{type:"button",onClick:e9.toggleLeft,title:"Expand workflow list",className:"flex h-full w-full items-center justify-center text-text-tertiary hover:bg-surface-elevated",children:(0,n.jsx)(d.A,{className:"h-4 w-4"})}):["project","global","builtin"].map(e=>(0,n.jsx)(tY,{label:tH[e],entries:eB[e],selected:U,onSelect:e1},e))}),!H&&e8&&!e9.leftCollapsed&&(0,n.jsx)("div",{role:"separator","aria-orientation":"vertical","aria-label":"Resize workflow list",onPointerDown:e=>tr("left",{clientX:e.clientX,pointerId:e.pointerId,target:e.currentTarget}),className:"w-1 shrink-0 cursor-col-resize bg-transparent hover:bg-accent/30"}),(!H||"canvas"===B)&&(0,n.jsx)("section",{className:"flex flex-1 flex-col overflow-hidden min-w-0",children:ey?(0,n.jsx)(tO,{selectedRunId:es,onSelect:(e,t)=>{eo(e),X(null),en(null),G(t),ed(!1),ev(!1),H&&J("run")}}):ej&&U&&!ei?(0,n.jsx)(eP,{name:U,onLoad:e=>{Z(e),eb("yaml")},onClose:()=>ew(!1)},U):(0,n.jsxs)(n.Fragment,{children:[ek&&(0,n.jsx)(eq,{currentYaml:Q,onClose:()=>eN(!1),onGenerated:e=>{var t;e.yaml&&(Z(e.yaml),(null==(t=e.definition)?void 0:t.name)&&(ed(!0),X(null),en(null),G(null),ex(e.definition.name),eo(null)))}}),ei&&(0,n.jsxs)("div",{className:"border-b border-border px-3 py-2",children:[(0,n.jsx)("label",{className:"block text-[10px] uppercase tracking-wide text-text-tertiary",children:"Workflow name (kebab-case)"}),(0,n.jsx)("input",{type:"text",value:ep,onChange:e=>ex(e.target.value),placeholder:"my-workflow",className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-sm font-mono",autoFocus:!0})]}),!ei&&U&&(0,n.jsxs)("div",{className:"flex items-center justify-between border-b border-border px-3 py-2",children:[(0,n.jsxs)("div",{className:"flex items-center gap-3",children:[(0,n.jsx)("span",{className:"text-sm font-medium",children:U}),e4&&(0,n.jsx)("span",{className:"rounded bg-surface-elevated px-1.5 py-0.5 text-[10px] text-text-tertiary",children:"read-only (built-in)"}),(0,n.jsx)(tX,{mode:eg,onChange:eb})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[er===U&&(null==(R=eE.data)?void 0:R.name)===U&&eQ&&(0,n.jsx)("button",{type:"button",onClick:()=>{X(U),H?J("run"):e9.rightCollapsed&&e9.toggleRight()},className:"rounded-md border border-border px-2 py-1 text-xs text-text-primary hover:bg-surface-elevated",children:"대화 미리보기"}),(0,n.jsx)(tV,{status:e6})]})]}),"graph"===eg&&Q.trim()?(0,n.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden bg-surface",children:[(0,n.jsx)("div",{className:eC?"flex-1 min-h-[180px] overflow-hidden":"flex-1 overflow-hidden",children:(0,n.jsx)(eh,{palette:W,yaml:Q,editable:!e4,onChangeYaml:Z,onNodeClick:e=>eS(e),nodeStatuses:eW,nodeIssues:eZ,cycleNodeIds:e0,focusNodeId:null!=(D=null==eA?void 0:eA.id)?D:null,focusNonce:null!=(z=null==eA?void 0:eA.nonce)?z:0,onRun:U&&!ei?e3:void 0})}),eC&&(null==eV?void 0:eV.nodes.some(e=>e.id===eC))&&(0,n.jsxs)("div",{className:"max-h-[50%] shrink-0 overflow-y-auto border-t border-border",children:[!e4&&(0,n.jsx)(tf,{definition:eV,nodeId:eC,palette:W,credentialsClient:$,onChange:e=>Z(ee(e)),onClose:()=>eS(null),onDelete:()=>{Z(ee(V(eV,eC))),eS(null)}}),U&&!ei&&(0,n.jsx)(tC,{workflowName:U,nodeId:eC,events:null!=(F=null==(I=eF.data)?void 0:I.events)?F:[],readOnly:e4},"".concat(U,":").concat(eC))]})]}):(0,n.jsx)("textarea",{value:Q,onChange:e=>Z(e.target.value),readOnly:e4,placeholder:"Select a workflow on the left or click + New to start",spellCheck:!1,className:"flex-1 resize-none border-0 bg-surface px-3 py-2 font-mono text-xs leading-snug focus:outline-none"}),eX.length>0&&(0,n.jsx)("ul",{className:"max-h-32 overflow-y-auto border-t border-border bg-surface-elevated px-3 py-2 text-[11px]",children:eX.slice(0,8).map((e,t)=>{var r,a;let l=eV&&null!=(a=eZ&&(null==(r=Object.entries(eZ).find(t=>{let[,r]=t;return r.includes(e)}))?void 0:r[0]))?a:null,s=!!l;return(0,n.jsxs)("li",{className:"flex items-start gap-1.5 text-error ".concat(s?"cursor-pointer hover:bg-surface":""),...s?{onClick:()=>{eb("graph"),eT(e=>{var t;return{id:l,nonce:(null!=(t=null==e?void 0:e.nonce)?t:0)+1}})},role:"button",tabIndex:0}:{},title:s?'Jump to node "'.concat(l,'"'):void 0,children:[(0,n.jsx)(b.A,{className:"mt-0.5 h-3 w-3 shrink-0"}),(0,n.jsxs)("span",{children:[(0,n.jsx)("span",{className:"font-mono text-text-tertiary",children:e.path||"(root)"})," ",e.message]})]},t)})}),(0,n.jsxs)("footer",{className:"flex items-center justify-end gap-2 border-t border-border px-3 py-2",children:[em&&(0,n.jsx)("p",{role:"alert",className:"mr-auto text-[11px] text-error",children:em}),U&&!ei&&(0,n.jsxs)("button",{type:"button",onClick:()=>ew(!0),className:"flex items-center gap-1 rounded-md border border-border px-2 py-1 text-[11px] text-text-primary hover:bg-surface-elevated",children:[(0,n.jsx)(f.A,{className:"h-3 w-3"}),"이전 판"]}),U&&!e4&&!ei&&(0,n.jsxs)("button",{type:"button",onClick:e5,className:"flex items-center gap-1 rounded-md border border-error/40 px-2 py-1 text-[11px] text-error hover:bg-error/10",children:[(0,n.jsx)(y.A,{className:"h-3 w-3"}),"Delete"]}),(0,n.jsxs)("button",{type:"button",onClick:()=>{if(!Q.trim())return;let e=URL.createObjectURL(new Blob([Q],{type:"application/x-yaml"}));try{var t;let r=document.createElement("a");r.href=e,t=ei?ep:null!=U?U:"",r.download="".concat(l(t)||"workflow",".yaml"),document.body.appendChild(r);try{r.click()}finally{r.remove()}}finally{URL.revokeObjectURL(e)}},disabled:!Q.trim(),className:"flex items-center gap-1 rounded-md border border-border px-2 py-1 text-[11px] text-text-primary hover:bg-surface-elevated disabled:opacity-50",children:[(0,n.jsx)(v.A,{className:"h-3 w-3"}),"내보내기"]}),(0,n.jsxs)("button",{type:"button",onClick:e2,disabled:!U&&!ei||e4||eM.isPending,className:"flex items-center gap-1 rounded-md bg-primary px-3 py-1 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:[eM.isPending?(0,n.jsx)(j.A,{className:"h-3 w-3 animate-spin"}):(0,n.jsx)(w.A,{className:"h-3 w-3"}),"Save"]})]})]})}),!H&&e7&&!e9.rightCollapsed&&(0,n.jsx)("div",{role:"separator","aria-orientation":"vertical","aria-label":"Resize run panel",onPointerDown:e=>tr("right",{clientX:e.clientX,pointerId:e.pointerId,target:e.currentTarget}),className:"w-1 shrink-0 cursor-col-resize bg-transparent hover:bg-accent/30"}),e7&&(0,n.jsx)("aside",{style:H?void 0:{width:tt},className:"flex shrink-0 flex-col overflow-hidden border-l border-border ".concat(H?"w-full min-w-0":""),children:!H&&e9.rightCollapsed?(0,n.jsx)("button",{type:"button",onClick:e9.toggleRight,title:"Expand run panel",className:"flex h-full w-full items-center justify-center text-text-tertiary hover:bg-surface-elevated",children:(0,n.jsx)(x.A,{className:"h-4 w-4"})}):Y&&Y===U&&er===U&&(null==(O=eE.data)?void 0:O.name)===U&&eQ&&!ei?(0,n.jsx)(tM,{workflow:Y,onClose:()=>X(null)},Y):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"border-b border-border px-3 py-2",children:[(0,n.jsx)("label",{className:"block text-[10px] uppercase tracking-wide text-text-tertiary",children:"Arguments"}),(0,n.jsx)("input",{type:"text",value:ea,onChange:e=>el(e.target.value),placeholder:"passed as $ARGUMENTS",className:"w-full rounded-md border border-border bg-surface px-2 py-1 text-xs"}),(0,n.jsxs)("button",{type:"button",onClick:e3,disabled:!U||ei||eO.isPending,className:"mt-2 flex w-full items-center justify-center gap-1 rounded-md bg-accent px-2 py-1.5 text-[11px] font-medium text-primary-foreground hover:bg-accent-hover disabled:opacity-50",children:[eO.isPending?(0,n.jsx)(j.A,{className:"h-3 w-3 animate-spin"}):(0,n.jsx)(k.A,{className:"h-3 w-3"}),"Run"]})]}),(0,n.jsxs)("div",{className:"flex-1 overflow-y-auto px-3 py-2 text-[11px]",children:[!es&&(0,n.jsx)("p",{className:"text-text-tertiary",children:"No active run. Press Run to start."}),es&&eF.data&&(0,n.jsx)(tQ,{runId:es,events:eF.data.events,ok:eF.data.ok,outputs:eF.data.outputs})]})]})})]}),ec&&(0,n.jsx)(eR,{onApply:(e,t)=>{ew(!1),X(null),en(null),ed(!0),J("canvas"),G(null),ex(null!=t?t:""),Z(e),eo(null),eS(null),ev(!1),ef(null)},onOpenAI:()=>{eu(!1),ev(!1),eN(!0)},onClose:()=>eu(!1)}),eU&&!eH.has(eU.runId)&&(0,n.jsx)(tz,{runId:eU.runId,message:eU.message,onDismiss:()=>eK(e=>{let t=new Set(e);return t.add(eU.runId),t})})]})}function tY(e){let{label:t,entries:r,selected:a,onSelect:l}=e;return 0===r.length?null:(0,n.jsxs)("div",{className:"border-b border-border",children:[(0,n.jsx)("h2",{className:"px-3 py-1.5 text-[10px] font-medium uppercase tracking-wide text-text-tertiary",children:t}),(0,n.jsx)("ul",{children:r.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>l(e.name),className:["block w-full px-3 py-1.5 text-left text-xs transition-colors",a===e.name?"bg-accent/15 text-text-primary":"text-text-secondary hover:bg-surface-elevated"].join(" "),title:e.path,children:[(0,n.jsx)("div",{className:"font-medium",children:e.name}),(0,n.jsxs)("div",{className:"truncate text-[10px] text-text-tertiary",children:[e.nodeCount," node",1===e.nodeCount?"":"s"]})]})},e.path))})]})}function tX(e){let{mode:t,onChange:r}=e;return(0,n.jsxs)("div",{className:"flex items-center rounded-md border border-border text-[10px]",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>r("yaml"),className:"flex items-center gap-1 px-2 py-0.5 ".concat("yaml"===t?"bg-surface-elevated text-text-primary":"text-text-tertiary"),children:[(0,n.jsx)(N.A,{className:"h-3 w-3"}),"YAML"]}),(0,n.jsxs)("button",{type:"button",onClick:()=>r("graph"),className:"flex items-center gap-1 px-2 py-0.5 ".concat("graph"===t?"bg-surface-elevated text-text-primary":"text-text-tertiary"),children:[(0,n.jsx)(C.A,{className:"h-3 w-3"}),"Graph"]})]})}function tV(e){let{status:t}=e;return"pending"===t?(0,n.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-text-tertiary",children:[(0,n.jsx)(j.A,{className:"h-3 w-3 animate-spin"}),"validating"]}):"ok"===t?(0,n.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-success",children:[(0,n.jsx)(S.A,{className:"h-3 w-3"}),"valid"]}):"error"===t?(0,n.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-error",children:[(0,n.jsx)(b.A,{className:"h-3 w-3"}),"invalid"]}):null}function tQ(e){let{runId:t,events:r,ok:a,outputs:l}=e;return(0,n.jsxs)("div",{className:"space-y-2 font-mono",children:[(0,n.jsxs)("div",{className:"text-[10px] text-text-tertiary",children:["runId: ",t]}),(0,n.jsx)("ul",{className:"space-y-1",children:r.map((e,t)=>{var r,a;return(0,n.jsxs)("li",{className:"flex items-start gap-1.5",children:[(0,n.jsx)("span",{className:"mt-0.5 h-1.5 w-1.5 rounded-full bg-text-tertiary"}),(0,n.jsxs)("span",{className:"break-all",children:[(0,n.jsx)("span",{className:"text-text-tertiary",children:e.type}),e.nodeId&&(0,n.jsx)("span",{className:"ml-1",children:e.nodeId}),e.reason&&(0,n.jsxs)("span",{className:"ml-1 text-text-tertiary",children:["— ",e.reason]}),e.error&&(0,n.jsxs)("span",{className:"ml-1 text-error",children:["— ",e.error]}),(null==(r=e.result)?void 0:r.ok)===!1&&(0,n.jsxs)("span",{className:"ml-1 text-error",children:["— ",null!=(a=e.result.error)?a:"failed"]})]})]},t)})}),!0===a&&(0,n.jsxs)("div",{className:"rounded-md bg-success/10 px-2 py-1 text-[10px] text-success",children:["completed \xb7 ",Object.keys(l).length," node output",1===Object.keys(l).length?"":"s"]}),!1===a&&(0,n.jsx)("div",{className:"rounded-md bg-error/10 px-2 py-1 text-[10px] text-error",children:"failed"}),Object.keys(l).length>0&&(0,n.jsx)(tZ,{outputs:l})]})}function tZ(e){let{outputs:t}=e;return(0,n.jsxs)("details",{className:"mt-2 rounded-md border border-border bg-surface-elevated",children:[(0,n.jsxs)("summary",{className:"cursor-pointer select-none px-2 py-1 text-[10px] font-semibold text-text-tertiary",children:["Outputs (",Object.keys(t).length,")"]}),(0,n.jsx)("ul",{className:"space-y-1 px-2 pb-2 pt-1 font-mono text-[10px]",children:Object.entries(t).map(e=>{let[t,r]=e;return(0,n.jsxs)("li",{className:"rounded bg-surface px-2 py-1",children:[(0,n.jsx)("div",{className:"text-[9px] uppercase tracking-wide text-text-tertiary",children:t}),(0,n.jsx)("pre",{className:"mt-0.5 max-h-40 overflow-auto whitespace-pre-wrap break-all",children:function(e){if(null==e)return"(no output)";if("string"==typeof e)return e.length>4096?"".concat(e.slice(0,4096),"\n…(truncated \xb7 ").concat(e.length," chars)"):e;try{let t=JSON.stringify(e,null,2);return t.length>4096?"".concat(t.slice(0,4096),"\n…(truncated \xb7 ").concat(t.length," chars)"):t}catch(t){return String(e)}}(r)})]},t)})})]})}},43468:(e,t,r)=>{"use strict";r.d(t,{M1:()=>d,Qj:()=>c,tI:()=>i});var n=r(54456),a=r(60500),l=r(40324),s=r(59405);let o=(0,a.createContext)(null);function i(e){let{client:t,queryClient:r,defaultStaleTimeMs:i,children:d}=e,c=(0,a.useMemo)(()=>null!=r?r:new l.E({defaultOptions:{queries:{staleTime:null!=i?i:2e3,refetchOnWindowFocus:!1}}}),[r,i]);return(0,n.jsx)(o.Provider,{value:t,children:(0,n.jsx)(s.Ht,{client:c,children:d})})}function d(){let e=(0,a.useContext)(o);if(!e)throw Error("useNexusClient must be used within <NexusProvider>");return e}function c(){return(0,a.useContext)(o)}},50053:(e,t,r)=>{"use strict";r.d(t,{F:()=>y});var n=r(54456),a=r(60500),l=r(59405),s=r(81707),o=r(89762),i=r(26858),d=r(37958);r(44992);var c=r(43468),u=r(65338),p=r(23869),x=r(83253),m=r(93477);let h={agent:"#3b82f6",gate:"#f59e0b",git:"#10b981",judge:"#a855f7",observe:"#06b6d4",hitl:"#f43f5e",subgraph:"#8b5cf6"},f={run:function(e){var t;let{data:r}=e;return(0,n.jsxs)("div",{className:"min-w-[190px] rounded-lg border border-border bg-surface px-3 py-2 shadow-sm",style:{borderLeft:"4px solid ".concat(null!=(t=h[r.kind])?t:"#64748b"),height:r.height},children:[r.inputHandles.map((e,t)=>(0,n.jsx)(i.h7,{id:e,type:"target",position:d.yX.Left,className:"!pointer-events-none",style:{top:"".concat((t+1)/(r.inputHandles.length+1)*100,"%")}},e)),(0,n.jsxs)("div",{className:"flex items-center gap-1 text-[10px] text-text-tertiary",children:[(0,n.jsx)("span",{children:r.kind}),r.entry&&(0,n.jsx)("span",{className:"rounded bg-success/15 px-1 text-success",children:"entry"}),r.terminal&&(0,n.jsx)("span",{className:"rounded bg-accent/15 px-1 text-accent",children:"terminal"})]}),(0,n.jsx)("div",{className:"font-mono text-xs font-semibold text-text-primary",children:r.label}),(0,n.jsxs)("div",{className:"max-w-[170px] truncate text-[10px] text-text-tertiary",title:r.recipe,children:[r.recipe," \xb7 max ",r.maxVisits]}),r.outcomes.length>0&&(0,n.jsx)("div",{className:"max-w-[170px] truncate text-[10px] text-text-tertiary",title:r.outcomes.join(" \xb7 "),children:r.outcomes.join(" \xb7 ")}),r.outputHandles.map((e,t)=>(0,n.jsx)(i.h7,{id:e,type:"source",position:d.yX.Right,className:"!pointer-events-none",style:{top:"".concat((t+1)/(r.outputHandles.length+1)*100,"%")}},e))]})}},g={labelStyle:{fill:"var(--text-primary, #334155)",fontSize:12},labelBgStyle:{fill:"var(--surface, #fff)"}};function b(e){if(e instanceof p.Iu){var t;let r=e.body;return(null==r||null==(t=r.errors)?void 0:t.map(e=>e.message).filter(Boolean).join(" \xb7 "))||(null==r?void 0:r.reason)||"저장 검증 실패 (".concat(e.status,")")}return e instanceof Error?e.message:"저장에 실패했습니다."}function y(){var e,t,r,d,p,h,y,v,j,w,k,N,C,S,A;let{palette:T,initialGraphId:E}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},M=(0,c.M1)(),_=(0,l.jE)(),[R,I]=(0,a.useState)(null),[O,L]=(0,a.useState)(null),[P,D]=(0,a.useState)(null),[z,F]=(0,a.useState)("note"),[W,$]=(0,a.useState)(m.DN[0]),[q,U]=(0,a.useState)("read-only"),[G,H]=(0,a.useState)(""),[K,J]=(0,a.useState)("pass"),[B,Y]=(0,a.useState)(""),[X,V]=(0,a.useState)(null),[Q,Z]=(0,a.useState)([]),[ee,et]=(0,a.useState)(null),er=(0,u.U)(),en=(0,s.I)({queryKey:["run-graphs"],queryFn:()=>M.getRunGraphs()}),ea=(0,s.I)({queryKey:["graph-kinds","harness"],queryFn:()=>M.getGraphKinds("harness"),enabled:!T,retry:!1}),el=null!=(N=null!=T?T:(null==(e=ea.data)?void 0:e.kinds.length)?ea.data.kinds:null)?N:m.DN.map(e=>({graph:"harness",kind:e,plugin:null,description:"",schema:{},core:!0})),es=el.some(e=>e.kind===W)?W:null!=(C=null==(t=el[0])?void 0:t.kind)?C:W,eo=null!=(A=null!=(S=null!=R?R:null==(d=en.data)||null==(r=d.graphs.find(e=>e.id===E))?void 0:r.id)?S:null==(h=en.data)||null==(p=h.graphs[0])?void 0:p.id)?A:null,ei=null==(y=en.data)?void 0:y.graphs.find(e=>e.id===eo),ed=(0,s.I)({queryKey:["run-graph",eo],queryFn:()=>M.getRunGraph(eo),enabled:null!==eo}),ec=(null==ei?void 0:ei.editable)===!0&&"mine"===ei.source&&(null==(v=ed.data)?void 0:v.id)===eo&&"mine"===ed.data.source&&!0===ed.data.editable,eu=(0,s.I)({queryKey:["run-graph-yaml",ec?eo:null],queryFn:()=>M.getRunGraphYaml(eo),enabled:ec&&null!==eo}),ep=ec?O===eo?P:(null==(j=eu.data)?void 0:j.id)===eo&&"mine"===eu.data.source&&eu.data.editable?eu.data.yaml:null:null,ex=(0,a.useMemo)(()=>ed.data&&ed.data.id===eo?function(e){let t=e.edges.flatMap((e,t)=>e.map?Object.entries(e.map).map(r=>{let[n,a]=r;return{id:"".concat(t,":").concat(e.from,":").concat(n),source:e.from,target:a,label:n,data:{on:e.on},type:"straight"}}):e.to?[{id:"".concat(t,":").concat(e.from,":").concat(e.to),source:e.from,target:e.to,type:"smoothstep"}]:[]);for(let r of e.nodes){let e=t.filter(e=>e.source===r.node_id),n=t.filter(e=>e.target===r.node_id);e.forEach((e,t)=>{e.sourceHandle="out-".concat(t)}),n.forEach((e,t)=>{e.targetHandle="in-".concat(t)})}let r=new x.Ay.graphlib.Graph;for(let n of(r.setDefaultEdgeLabel(()=>({})),r.setGraph({rankdir:"LR",ranksep:110,nodesep:55,marginx:25,marginy:25}),e.nodes)){let e=Math.max(1,t.filter(e=>e.source===n.node_id).length,t.filter(e=>e.target===n.node_id).length);r.setNode(n.node_id,{width:190,height:Math.max(90,(e+1)*26)})}for(let e of t)r.setEdge(e.source,e.target);x.Ay.layout(r);let n=new Set(e.terminal_nodes);return{nodes:e.nodes.map(a=>{let l=r.node(a.node_id),s=t.filter(e=>e.source===a.node_id),o=t.filter(e=>e.target===a.node_id);return{id:a.node_id,position:{x:l.x-95,y:l.y-l.height/2},data:{label:a.node_id,kind:a.kind,recipe:a.recipe,maxVisits:a.max_visits,entry:e.entry_node===a.node_id,terminal:n.has(a.node_id),outcomes:s.filter(e=>"string"==typeof e.label).map(e=>e.label),inputHandles:o.map(e=>e.targetHandle),outputHandles:s.map(e=>e.sourceHandle),height:l.height}}}),edges:t}}(ed.data):null,[ed.data,eo]),em=(0,a.useMemo)(()=>{var e;return null!=(e=null==ex?void 0:ex.nodes.map(e=>({...e,type:"run"})))?e:[]},[ex]);function eh(e){if(ec&&eo&&null!==ep&&!eb.isPending)try{let t=e(ep);if(t===ep)return;er.record(ep),L(eo),D(t),V(null),Z([]),et(null)}catch(e){V(b(e))}}function ef(e){if(!ec||!eo||null===ep||eb.isPending)return;let t=er[e](ep);null!==t&&(L(eo),D(t),V(null),Z([]),et(null))}let eg=(0,o.n)({mutationFn:()=>M.cloneRunGraph(eo,"".concat(eo,"-mine")),onSuccess:async e=>{er.reset(),L(null),D(null),V(null),et(null),Z([]),await _.invalidateQueries({queryKey:["run-graphs"]}),I(e.id)}}),eb=(0,o.n)({mutationFn:async e=>{let{savingId:t,savingYaml:r}=e,n=await M.validateGraph("harness",r);return(Z(n.ignoredKeys),!n.ok||n.errors.length>0)?void et(n.errors.map(e=>e.message).join(" \xb7 ")||"그래프 검증에 실패했습니다."):(et(null),M.putRunGraphYaml(t,r))},onSuccess:async e=>{e&&(V(null),er.reset(),L(null),D(null),await _.invalidateQueries({queryKey:["run-graph",e.id]}),await _.invalidateQueries({queryKey:["run-graph-yaml",e.id]}))},onError:e=>V(b(e))});return(0,n.jsxs)("div",{className:"flex min-h-0 flex-1 overflow-hidden",children:[(0,n.jsxs)("aside",{className:"w-56 shrink-0 overflow-y-auto border-r border-border","aria-label":"실행 그래프 목록",children:[(0,n.jsx)("h2",{className:"px-3 py-3 text-xs font-semibold",children:"실행 그래프"}),en.isLoading&&(0,n.jsx)("p",{className:"px-3 text-xs text-text-tertiary",children:"불러오는 중…"}),en.isError&&(0,n.jsx)("p",{role:"alert",className:"px-3 text-xs text-error",children:"그래프 목록을 불러오지 못했습니다."}),(null==(w=en.data)?void 0:w.graphs.length)===0&&(0,n.jsx)("p",{className:"px-3 text-xs text-text-tertiary",children:"그래프가 없습니다."}),(0,n.jsx)("ul",{children:null==(k=en.data)?void 0:k.graphs.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("button",{type:"button",onClick:()=>{e.id!==eo&&(er.reset(),L(null),D(null)),I(e.id),V(null),et(null),Z([])},disabled:eb.isPending||eg.isPending,"aria-current":eo===e.id?"true":void 0,className:"w-full px-3 py-2 text-left text-xs hover:bg-surface-elevated ".concat(eo===e.id?"bg-accent/15 text-text-primary":"text-text-secondary"),children:[(0,n.jsx)("span",{className:"block font-mono",children:e.id}),(0,n.jsxs)("span",{className:"text-[10px] text-text-tertiary",children:[e.nodeCount," nodes \xb7 ","mine"===e.source?"내 그래프":"core"," \xb7 ",e.editable?"편집":"읽기 전용"]})]})},e.id))})]}),(0,n.jsxs)("section",{className:"relative flex min-w-0 flex-1 flex-col bg-surface","aria-label":"실행 그래프 캔버스",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-b border-border px-3 py-2",children:[ei&&!ei.editable&&(0,n.jsx)("button",{type:"button",onClick:()=>eg.mutate(),disabled:eg.isPending,className:"rounded border border-border px-2 py-1 text-xs",children:"복제해서 고치기"}),ec&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{type:"button",onClick:()=>ef("undo"),disabled:!er.canUndo||null===ep||eb.isPending,className:"rounded border border-border px-2 py-1 text-xs",children:"되돌리기"}),(0,n.jsx)("button",{type:"button",onClick:()=>ef("redo"),disabled:!er.canRedo||null===ep||eb.isPending,className:"rounded border border-border px-2 py-1 text-xs",children:"다시 실행"}),(0,n.jsxs)("label",{className:"text-[10px] text-text-tertiary",children:["kind",(0,n.jsx)("select",{"aria-label":"노드 kind",value:es,onChange:e=>$(e.target.value),className:"ml-1 text-xs",children:el.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))})})]}),(0,n.jsx)("input",{"aria-label":"노드 id",value:z,onChange:e=>F(e.target.value),className:"w-24 rounded border border-border px-1 text-xs"}),(0,n.jsx)("input",{"aria-label":"recipe",value:q,onChange:e=>U(e.target.value),className:"w-28 rounded border border-border px-1 text-xs"}),(0,n.jsx)("button",{type:"button",className:"rounded border border-border px-2 py-1 text-xs",onClick:()=>eh(e=>{let t=(0,m.lu)(e);return(0,m.bC)(t,{nodeId:z,kind:es,recipe:q}),(0,m.ys)(t)}),children:"노드 추가"}),(0,n.jsx)("button",{type:"button",className:"rounded border border-border px-2 py-1 text-xs",onClick:()=>eh(e=>{let t=(0,m.lu)(e);return(0,m.qd)(t,z),(0,m.ys)(t)}),children:"노드 삭제"}),(0,n.jsx)("button",{type:"button",className:"rounded border border-border px-2 py-1 text-xs",onClick:()=>eh(e=>{let t=(0,m.lu)(e);return(0,m.gc)(t,z,es),(0,m.ji)(t,z,q),(0,m.ys)(t)}),children:"kind/recipe"}),(0,n.jsx)("input",{"aria-label":"간선 from",value:G,onChange:e=>H(e.target.value),placeholder:"from",className:"w-20 rounded border border-border px-1 text-xs"}),(0,n.jsx)("input",{"aria-label":"간선 결과",value:K,onChange:e=>J(e.target.value),placeholder:"결과",className:"w-16 rounded border border-border px-1 text-xs"}),(0,n.jsx)("input",{"aria-label":"간선 to",value:B,onChange:e=>Y(e.target.value),placeholder:"to",className:"w-20 rounded border border-border px-1 text-xs"}),(0,n.jsx)("button",{type:"button",className:"rounded border border-border px-2 py-1 text-xs",onClick:()=>eh(e=>{let t=(0,m.lu)(e);return(0,m.W3)(t,{from:G,outcome:K,to:B}),(0,m.ys)(t)}),children:"간선 추가"}),(0,n.jsx)("button",{type:"button",className:"rounded border border-border px-2 py-1 text-xs",onClick:()=>eh(e=>{let t=(0,m.lu)(e);return(0,m.ns)(t,G,K),(0,m.ys)(t)}),children:"간선 삭제"}),(0,n.jsx)("button",{type:"button",onClick:()=>{ec&&eo&&null!==ep&&eb.mutate({savingId:eo,savingYaml:ep})},disabled:null===ep||eb.isPending,className:"rounded bg-accent px-2 py-1 text-xs text-white",children:"저장"})]})]}),!T&&ea.isError&&(0,n.jsx)("p",{role:"status",className:"px-3 py-1 text-xs text-warning",children:"어휘 목록을 불러오지 못해 코어 팔레트를 표시합니다."}),(ee||X)&&(0,n.jsx)("p",{role:"alert",className:"px-3 py-1 text-xs text-error",children:ee||X}),Q.length>0&&(0,n.jsxs)("p",{role:"status",className:"px-3 py-1 text-xs text-warning",children:["무시되는 키: ",Q.join(" \xb7 ")]}),eg.isError&&(0,n.jsx)("p",{role:"alert",className:"px-3 py-1 text-xs text-error",children:b(eg.error)}),ed.isError&&(0,n.jsx)("p",{role:"alert",className:"p-4 text-xs text-error",children:"그래프를 불러오지 못했습니다."}),ed.isLoading&&(0,n.jsx)("p",{className:"p-4 text-xs text-text-tertiary",children:"불러오는 중…"}),ex&&(0,n.jsxs)(i.Gc,{nodes:em,edges:ex.edges,nodeTypes:f,fitView:!0,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:ec,edgesReconnectable:!1,deleteKeyCode:null,nodesFocusable:ec,edgesFocusable:!1,defaultEdgeOptions:g,className:"!bg-surface",children:[(0,n.jsx)(i.VS,{}),(0,n.jsx)(i.H2,{showInteractive:!1})]},null!=eo?eo:"")]})]})}},60287:(e,t,r)=>{"use strict";async function n(e){var t,r;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=null!=(t=n.fetchImpl)?t:fetch,l="".concat(null!=(r=n.origin)?r:"","/v1/workflows/").concat(encodeURIComponent(e),"/chat-config"),s=await a(l);if(404===s.status)return null;if(!s.ok)throw Error("chat-config ".concat(s.status));return await s.json()}async function a(e){var t,r,n,a,s;let o=null!=(t=e.fetchImpl)?t:fetch,i="".concat(null!=(r=e.origin)?r:"","/v1/workflows/chat").concat(e.chatPath),d={"content-type":"application/json"};e.bearer&&e.bearer.length>0&&(d.authorization="Bearer ".concat(e.bearer));let c={message:e.message};e.sessionId&&(c.sessionId=e.sessionId);let u=await o(i,{method:"POST",headers:d,body:JSON.stringify(c),...e.signal?{signal:e.signal}:{}});if(!u.ok){let e=await u.text().catch(()=>"");throw Error("chat ".concat(u.status).concat(e?": "+e:""))}if((null!=(n=u.headers.get("content-type"))?n:"").includes("text/event-stream")&&u.body)return{kind:"streaming",frames:l(u.body)};let p=await u.json();return{kind:"buffered",response:null!=(a=p.response)?a:"",runId:null!=(s=p.runId)?s:""}}async function*l(e){let t=e.getReader(),r=new TextDecoder,n="";try{for(;;){let{value:e,done:a}=await t.read();if(a)break;let l=(n+=r.decode(e,{stream:!0})).indexOf("\n\n");for(;-1!==l;){let e=n.slice(0,l);n=n.slice(l+2);let t=s(e);t&&(yield t),l=n.indexOf("\n\n")}}if(n.trim().length>0){let e=s(n);e&&(yield e)}}finally{t.releaseLock()}}function s(e){let t="message",r=[];for(let n of e.split("\n")){let e=n.endsWith("\r")?n.slice(0,-1):n;if(e.startsWith(":"))continue;let a=e.indexOf(":");if(-1===a)continue;let l=e.slice(0,a),s=e.slice(a+1).replace(/^ /,"");"event"===l?t=s:"data"===l&&r.push(s)}return 0===r.length?null:{event:t,data:r.join("\n")}}r.d(t,{XQ:()=>n,gJ:()=>a})},65338:(e,t,r)=>{"use strict";r.d(t,{U:()=>l});var n=r(60500);class a{get canUndo(){return this.past.length>0}get canRedo(){return this.future.length>0}record(e){this.past.at(-1)!==e&&(this.past.push(e),this.past.length>50&&this.past.shift(),this.future=[])}undo(e){let t=this.past.pop();return void 0===t?null:(this.future.push(e),t)}redo(e){let t=this.future.pop();return void 0===t?null:(this.past.push(e),this.past.length>50&&this.past.shift(),t)}constructor(){this.past=[],this.future=[]}}function l(){let e=(0,n.useRef)(new a),[,t]=(0,n.useReducer)(e=>e+1,0),r=(0,n.useCallback)(r=>{e.current.record(r),t()},[]),l=(0,n.useCallback)(r=>{let n=e.current.undo(r);return null!==n&&t(),n},[]);return{record:r,undo:l,redo:(0,n.useCallback)(r=>{let n=e.current.redo(r);return null!==n&&t(),n},[]),reset:(0,n.useCallback)(()=>{e.current=new a,t()},[]),canUndo:e.current.canUndo,canRedo:e.current.canRedo}}},93477:(e,t,r)=>{"use strict";r.d(t,{CF:()=>l,DN:()=>a,W3:()=>w,bC:()=>g,gc:()=>y,ji:()=>v,lu:()=>h,ns:()=>k,qd:()=>b,ys:()=>C});var n=r(10641);let a=["agent","gate","git","judge","observe","hitl","subgraph"],l=["prompt","bash","skill","cft","approval","if","switch","iteration","classify","extract","set","filter","template","http","showroom","task","scheduleTrigger","webhookTrigger","discordTrigger","telegramTrigger","manualTrigger","chatTrigger"];function s(e){return(0,n.jh)(e.contents)?e.contents:null}function o(e){return(0,n.jn)(e)?e:null}function i(e){let t=o(e);return t&&("string"==typeof t.value||"number"==typeof t.value)?String(t.value):void 0}function d(e,t){return e.items.find(e=>i(e.key)===t)}function c(e,t){var r;let a=null==(r=d(e,t))?void 0:r.value;return(0,n.oP)(a)?a:null}function u(e){return(0,n.jh)(e)?e:null}function p(e,t){var r;let n=o(null==(r=d(e,t))?void 0:r.value);return n&&("string"==typeof n.value||"number"==typeof n.value)?String(n.value):void 0}function x(e,t){return(function(e){let t=s(e);if(!t)return[];let r=c(t,"nodes");return r?r.items.flatMap(e=>{let t=u(e);return t?[t]:[]}):[]})(e).find(e=>p(e,"node_id")===t)}function m(e,t,r){var n;let a=o(null==(n=d(e,t))?void 0:n.value);if(a){a.value=r;return}e.set(t,r)}function h(e){let t=(0,n.Tp)(e,{keepSourceTokens:!0});return t.src=e,t.removed=[],t}function f(e){var t;return null!=(t=e.removed)?t:[]}function g(e,t){var r;let a=s(e);if(!a)throw Error("graph yaml root is not a map");let l=c(a,"nodes");if(l||(a.set("nodes",[]),l=c(a,"nodes")),!l)throw Error("nodes is not a sequence");if(x(e,t.nodeId))throw Error("node already exists: ".concat(t.nodeId));let o=new n.CA;o.set("node_id",t.nodeId),o.set("kind",t.kind),o.set("recipe",t.recipe),o.set("max_visits",null!=(r=t.maxVisits)?r:1),l.add(o)}function b(e,t){let r=s(e),n=r?c(r,"nodes"):null;if(!n)return;let a=n.items.findIndex(e=>{let r=u(e);return!!r&&p(r,"node_id")===t});a>=0&&(function(e,t){var r;let n=null==t?void 0:t.range;n&&f(e).push([n[0],null!=(r=n[2])?r:n[1]])}(e,n.items[a]),n.delete(a))}function y(e,t,r){let n=x(e,t);if(!n)throw Error("node not found: ".concat(t));m(n,"kind",r)}function v(e,t,r){let n=x(e,t);if(!n)throw Error("node not found: ".concat(t));m(n,"recipe",r)}function j(e){let t=s(e),r=t?c(t,"edges"):null;return r?r.items.flatMap(e=>{let t=u(e);return t?[t]:[]}):[]}function w(e,t){let r=s(e);if(!r)throw Error("graph yaml root is not a map");let a=c(r,"edges");if(a||(r.set("edges",[]),a=c(r,"edges")),!a)throw Error("edges is not a sequence");let l=j(e).find(e=>p(e,"from")===t.from&&d(e,"map"));l||((l=new n.CA).set("from",t.from),a.add(l)),(function(e){var t;let r=null==(t=d(e,"map"))?void 0:t.value;if((0,n.jh)(r))return r;let a=new n.CA;return e.set("map",a),a})(l).set(t.outcome,t.to)}function k(e,t,r){for(let m of j(e)){var a,l,s,o,c,u,x;if(p(m,"from")!==t)continue;let h=null==(a=d(m,"map"))?void 0:a.value;if(!(0,n.jh)(h))continue;let g=h.items.findIndex(e=>i(e.key)===r);if(g>=0){let t=h.items[g],r=null!=(u=null==(l=t.key.range)?void 0:l[0])?u:null==(s=t.value.range)?void 0:s[0],n=null!=(x=null==(o=t.value.range)?void 0:o[2])?x:null==(c=t.value.range)?void 0:c[1];void 0!==r&&void 0!==n&&f(e).push([r,n]),h.delete(g)}}}function N(e,t){return(null==e?void 0:e.range)?e.range[1]:t}function C(e){var t;let r=null!=(t=e.src)?t:"";if(!r)return e.toString();let a=[],l=t=>{if((0,n.oP)(t))return void t.items.forEach((e,s)=>{if((0,n.jh)(e)&&!e.range){var o,i;let l=N(s>0?t.items[s-1]:null,N(t,r.length)),d=e.items.map(e=>{var t;let r=e.key instanceof n.CA||e.key instanceof n.Rw?"":String(null!=(t=e.key.value)?t:e.key),a=e.value,l=a&&"object"==typeof a&&"value"in a?String(a.value):String(e.value);return" ".concat(r,": ").concat(l)}),c=null!=(i=null==(o=d[0])?void 0:o.slice(2))?i:"";a.push({start:l,end:l,text:"\n- ".concat(c).concat(d.length>1?"\n".concat(d.slice(1).join("\n")):"")})}else l(e)});if((0,n.jh)(t))for(let s of t.items){let d=i(s.key);if((0,n.jh)(s.value)||(0,n.oP)(s.value)){if(!s.value.range&&t.range&&d){let e=t.range[1],r=(0,n.jh)(s.value)?"".concat(d,":\n").concat(s.value.toString().replace(/\n$/,"").split("\n").map(e=>" ".concat(e)).join("\n")):"".concat(d,": ").concat(s.value.toString().trim());a.push({start:e,end:e,text:"\n".concat(r)})}else l(s.value);continue}let c=o(s.value);if(!d||!c)continue;if(!c.range&&t.range){let e=t.range[1];a.push({start:e,end:e,text:"\n".concat(d,": ").concat(c.toString())});continue}if(!c.range)continue;let u=r.slice(c.range[0],c.range[1]),p=e.createNode(c.value).toString();u!==p&&a.push({start:c.range[0],end:c.range[1],text:p})}};for(let[t,r]of(l(e.contents),f(e)))a.push({start:t,end:r,text:""});f(e).length=0;let s=r;for(let e of a.sort((e,t)=>t.start-e.start||t.end-e.end))s="".concat(s.slice(0,e.start)).concat(e.text).concat(s.slice(e.end));return s}},98706:()=>{}}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7081],{1355:(e,t,n)=>{"use strict";n.d(t,{Zr:()=>l,f6:()=>a,oD:()=>s});let r="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(r,e),e):localStorage.getItem(r)}();if(e)return e;let t=a();return localStorage.setItem(r,t),t}function l(){let e=a();return localStorage.setItem(r,e),e}},33779:(e,t,n)=>{Promise.resolve().then(n.bind(n,63563))},36581:(e,t,n)=>{"use strict";n.d(t,{C:()=>c,DaemonProvider:()=>d,Q:()=>u});var r=n(54456),a=n(60500),s=n(86704),l=n(1355),o=n(39906),i=n(50733);let c=(0,a.createContext)(null);function d(e){let{children:t}=e,n={baseUrl:"",token:"",provider:""},[d,u]=(0,a.useState)(n),[m,f]=(0,a.useState)(""),[p]=(0,a.useState)(()=>new o.ki(n));(0,a.useEffect)(()=>{let e=(0,s.Fp)();u(e),p.updateConfig(e),f((0,l.oD)()),(0,i.cY)("webterm.provider.daemon.init",{baseUrl:e.baseUrl,hasToken:!!e.token})},[p]),(0,a.useEffect)(()=>{let e=e=>{if("elanous.daemon.token"===e.key||"elanous.nexus.baseUrl"===e.key){let t=(0,s.Fp)();p.updateConfig(t),u(t),(0,i.cY)("webterm.provider.daemon.config-cross-tab",{key:e.key,hasToken:!!t.token});return}"elanous.daemon.sessionId"===e.key&&e.newValue&&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 g=e=>{u(t=>{let n={...t,...e};return(0,s.Qc)(e),p.updateConfig(n),(0,i.cY)("webterm.provider.daemon.config-update",{keys:Object.keys(e)}),n})},h=e=>{f(e),localStorage.setItem("elanous.daemon.sessionId",e),(0,i.cY)("webterm.provider.daemon.session-set",{sessionId:e})},x=(0,a.useMemo)(()=>({config:d,setConfig:g,client:p,sessionId:m,setSessionId:h}),[d,p,m]);return(0,r.jsx)(c.Provider,{value:x,children:t})}function u(){let e=(0,a.useContext)(c);if(!e)throw Error("useDaemon must be used inside <DaemonProvider>");return e}},50738:(e,t,n)=>{"use strict";n.d(t,{Er:()=>a,cj:()=>c,dc:()=>l,yR:()=>i});let r=/^(oauth\.|harness\.decision|llm\.router)/;function a(e){let t=[],n=e=>{"string"==typeof e&&e.trim()&&!t.includes(e.trim())&&t.push(e.trim())};for(let t of e){var a;let e=null!=(a=t.data)?a:{};if(t.category.startsWith("oauth.")){for(let t of["from","to","name","account"])n(e[t]);if(Array.isArray(e.usage))for(let t of e.usage)n(null==t?void 0:t.name);continue}if(r.test(t.category))for(let t of(n(e.account),["what","why","reason"])){let r=e[t];if("string"==typeof r)for(let e of r.matchAll(/계정\s+([A-Za-z0-9][\w.-]*)/g))n(e[1])}}return t}function s(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function l(e){let t=new Map(e.map((e,t)=>[e,"account-".concat(t+1)])),n=e.length?RegExp("(^|[^\\w-])(".concat(e.map(s).sort((e,t)=>t.length-e.length).join("|"),")(?![\\w-])"),"g"):null,r=new Map;return(e,a)=>{let s=e.replace(/\b[a-z0-9-]+\.tail[0-9a-f]+\.ts\.net\b/gi,"tailnet-host").replace(/\bmsb\d+\b/gi,e=>(e=>{let t=e.toLowerCase();r.has(t)||r.set(t,"remote-".concat(r.size+1));let n=r.get(t);return e===e.toUpperCase()?n.toUpperCase():n})(e)).replace(/\bmbp\b/gi,e=>e===e.toUpperCase()?"LOCAL":"local").replace(/\/Users\/[^/\s"']+/g,"~").replace(/(크레딧|credits?|💳)(\s*[:=]?\s*)[\d][\d,.]*/gi,"$1$2•••").replace(/[\d][\d,.]*(\s*)(크레딧|credits?)/gi,"•••$1$2").replace(/\$\s?[\d][\d,.]*/g,"$•••").replace(/(잔량?|remaining|left)(\s*[:=]?\s*)(?:[A-Za-z0-9][\w.-]*\s+)?\d+(?:\.\d+)?\s?%/gi,"$1$2•••");return a&&n&&(s=s.replace(n,(e,n,r)=>{var a;return"".concat(n).concat(null!=(a=t.get(r))?a:"account")})),s}}function o(e,t){if("string"==typeof e)return t(e);if(Array.isArray(e))return e.map(e=>o(e,t));if(e&&"object"==typeof e){let n={};for(let[r,a]of Object.entries(e))"apiEquivalentUsd"===r||"usd"===r||/credit(s|Balance)?$/i.test(r)||(n[r]=o(a,t));return n}return e}function i(e){let t=l(a(e));return e.map(e=>{let n=r.test(e.category);return{...e,event:t(e.event,!1),data:e.data?o(e.data,e=>t(e,n)):e.data}})}function c(e,t){let n=l(t);return o(e,e=>n(e,!0))}},63563:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>y});var r=n(54456),a=n(50738),s=n(60500),l=n(36581);function o(e){var t;for(let t of[e.sections.triage,e.sections.intake]){let e=null==t?void 0:t.data.title;if("string"==typeof e&&e.trim())return e.trim()}return(null==(t=e.apiTitle)?void 0:t.trim())||e.taskId}var i=n(23869);let c=["intake","triage","gates","relations","memory","workspace","run","landing","release"];function d(e){return null==e?"—":"string"==typeof e?e:JSON.stringify(e)}function u(e){let{entry:t}=e;return(0,r.jsxs)("details",{className:"mt-2 text-xs",children:[(0,r.jsx)("summary",{className:"cursor-pointer text-muted-foreground",children:"JSON"}),(0,r.jsx)("pre",{className:"mt-2 max-h-64 overflow-auto rounded-lg bg-muted p-2 text-xs whitespace-pre-wrap break-all",children:JSON.stringify(t.data,null,2)})]})}function m(e){let{entry:t}=e,n=new Date(t.ts).toISOString();return(0,r.jsxs)("div",{className:"flex flex-wrap gap-x-3 gap-y-1 text-xs text-muted-foreground",children:[(0,r.jsxs)("span",{children:["Owner: ",t.owner]}),(0,r.jsx)("time",{dateTime:n,children:n})]})}function f(e){var t;let{card:n}=e,a=null==(t=n.sections.gates)?void 0:t.data;return(0,r.jsxs)("section",{"aria-label":"Task card detail",className:"min-w-0 space-y-4 rounded-2xl border border-border bg-card p-4",children:[(0,r.jsxs)("header",{children:[(0,r.jsx)("h2",{className:"text-lg font-semibold",children:o(n)}),(0,r.jsx)("p",{className:"break-all text-xs text-muted-foreground",children:n.taskId})]}),a&&(0,r.jsxs)("p",{className:"overflow-x-auto whitespace-nowrap text-sm","aria-label":"Gate decisions",children:["Gate \xb7 budget: ",d(a.budget)," \xb7 location: ",d(a.location)]}),c.map(e=>{let t=n.sections[e];return t?(0,r.jsxs)("section",{"aria-label":"".concat(e," section"),className:"rounded-xl border border-border p-3",children:[(0,r.jsx)("h3",{className:"mb-1 text-sm font-semibold capitalize",children:e}),(0,r.jsx)(m,{entry:t}),(0,r.jsx)(u,{entry:t})]},e):null}),(0,r.jsxs)("section",{"aria-label":"Incidents",className:"space-y-2",children:[(0,r.jsxs)("h3",{className:"text-sm font-semibold",children:["Incidents (",n.incidents.length,")"]}),n.incidents.length?(0,r.jsx)("ol",{className:"space-y-2",children:n.incidents.map(e=>(0,r.jsxs)("li",{className:"rounded-xl border border-border p-3",children:[(0,r.jsx)(m,{entry:e}),(0,r.jsx)(u,{entry:e})]},e.key))}):(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"No incidents."})]})]})}let p=["steward","execution","landing","release","done"],g=new Set(["intake","triage","gates","relations","memory","workspace","run","landing","release","incidents"]);function h(e){let t=[],n=Date.parse(e.createdAt);for(let r of e.sections){let a;if(!g.has(r.key))continue;try{let e=JSON.parse(r.content);a=e&&"object"==typeof e&&!Array.isArray(e)?e:{content:r.content}}catch(e){a={content:r.content}}let s=Date.parse(r.createdAt);t.push({taskId:e.id,section:r.key,key:"".concat(r.key,":").concat(r.createdAt,":").concat(t.length),owner:r.owner,ts:Number.isFinite(s)?s:n,data:a,..."string"==typeof a.runId?{runId:a.runId}:{}})}if(0===t.length&&t.push({taskId:e.id,section:"triage",key:"api:title",owner:"task-card API",ts:n,data:{title:e.title}}),"closed"===e.status){let r=t.filter(e=>"release"===e.section).sort((e,t)=>t.ts-e.ts)[0];t.push({taskId:e.id,section:"release",key:"api:closed",owner:"task-card API",ts:Math.max(n,...t.map(e=>e.ts)),data:{...null==r?void 0:r.data,status:"done"}})}return{...function(e){let t,n=e[0];if(!n)return null;let r={},a=[],s=new Set,l=n.ts,o=-1/0;for(let i of e)if(!(i.taskId!==n.taskId||s.has(i.key)))if(s.add(i.key),l=Math.max(l,i.ts),i.runId&&i.ts>=o&&(t=i.runId,o=i.ts),"incidents"===i.section)a.push(i);else{let e=r[i.section];(!e||i.ts>=e.ts)&&(r[i.section]=i)}return{taskId:n.taskId,sections:r,incidents:a,updatedAt:l,...t?{runId:t}:{}}}(t),apiTitle:e.title}}function x(e){let{cards:t,selectedId:n,onSelect:a,selectedCard:s,detailError:l}=e,i=(null==s?void 0:s.taskId)===n?s:null;return(0,r.jsxs)("div",{className:"space-y-4 p-4",children:[(0,r.jsx)("h1",{className:"text-xl font-semibold",children:"보드"}),(0,r.jsx)("div",{className:"grid gap-3 md:grid-cols-2 xl:grid-cols-5",children:p.map(e=>(0,r.jsxs)("section",{"aria-label":"".concat(e," column"),className:"min-w-0 space-y-2 rounded-xl border border-border p-3",children:[(0,r.jsx)("h2",{className:"text-sm font-semibold capitalize",children:e}),t.filter(t=>(function(e){var t;let n=null==(t=e.sections.release)?void 0:t.data;return(null==n?void 0:n.status)==="done"||(null==n?void 0:n.status)==="completed"?"done":n?"release":e.sections.landing?"landing":e.sections.run||e.sections.workspace||e.sections.gates||e.sections.relations||e.sections.memory?"execution":"steward"})(t)===e).map(e=>{var t,s;return(0,r.jsxs)("button",{type:"button",onClick:()=>a(e.taskId),"aria-pressed":n===e.taskId,className:"w-full rounded-lg border border-border bg-card p-3 text-left text-sm hover:bg-accent/40",children:[(0,r.jsx)("span",{className:"block font-medium",children:o(e)}),(0,r.jsx)("span",{className:"block text-xs text-muted-foreground",children:(0,r.jsx)("time",{dateTime:new Date(e.updatedAt).toISOString(),title:new Date(e.updatedAt).toLocaleString(),children:(t=function(e){let t=new Map;for(let r of e.incidents){var n;let e=null!=(n=r.data.incidentId)?n:r.data.id,a="string"==typeof e&&e.trim()?e:r.key,s=t.get(a);(!s||r.ts>=s.ts)&&t.set(a,r)}return Array.from(t.values()).filter(e=>"closed"!==e.data.status&&"resolved"!==e.data.status).length}(e),s=Date.now(),[...t>0?["사고 ".concat(t)]:[],...e.runId?["런 ".concat(e.runId.replace(/^run-/,"").slice(0,8))]:[],function(e,t,n){let r=Math.floor((t-e)/6e4);if(!Number.isFinite(r)||r<1)return"방금";if(r<60)return"".concat(r,"분 전");if(r<1440)return"".concat(Math.floor(r/60),"시간 전");let a=new Intl.DateTimeFormat("ko-KR",{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1,...n?{timeZone:n}:{}}).formatToParts(new Date(e)),s=e=>{var t,n;return null!=(n=null==(t=a.find(t=>t.type===e))?void 0:t.value)?n:""};return"".concat(s("month"),"/").concat(s("day")," ").concat(s("hour"),":").concat(s("minute"))}(e.updatedAt,s,void 0)]).join(" \xb7 ")})})]},e.taskId)})]},e))}),n&&(0,r.jsxs)("aside",{className:"max-w-3xl space-y-2","aria-label":"Selected card",children:[(0,r.jsx)("button",{type:"button",onClick:()=>a(null),"aria-label":"Close card detail",className:"text-sm text-muted-foreground",children:"Close"}),i?(0,r.jsx)(f,{card:i}):(0,r.jsx)("p",{role:"status",children:null!=l?l:"Loading card detail…"})]})]})}function b(){let{config:e}=(0,l.Q)(),t=(0,s.useMemo)(()=>e.baseUrl?(0,i.xX)({baseUrl:e.baseUrl,...e.token?{token:e.token}:{}}):null,[e.baseUrl,e.token]),[n,o]=(0,s.useState)([]),[c,d]=(0,s.useState)(null),[u,m]=(0,s.useState)(null),[f,p]=(0,s.useState)(null),[g,b]=(0,s.useState)(null),[y,k]=(0,s.useState)(!1);(0,s.useEffect)(()=>{"public"===new URLSearchParams(window.location.search).get("capture")&&k(!0)},[]);let w=(0,s.useMemo)(()=>y?n.map(e=>({...(0,a.cj)(e,[]),taskId:e.taskId})):n,[n,y]);return(0,s.useEffect)(()=>{let e=!1;if(o([]),d(null),m(null),p(null),!t)return void b("Connect to NEXUS to load task cards.");b(null);let n=()=>t.getTaskCards().then(t=>{let{cards:n}=t;e||(o(n.map(h)),b(null))}).catch(t=>{e||b(t instanceof i.Iu&&404===t.status?"Task cards are not available yet (pre-E1).":t instanceof Error?t.message:String(t))});n();let r=setInterval(()=>{n()},1e4);return()=>{e=!0,clearInterval(r)}},[t]),(0,s.useEffect)(()=>{if(!t||!c)return;let e=!1;return m(null),p(null),t.getTaskCard(c).then(t=>{let{card:n}=t;e||m(h(n))}).catch(t=>{e||p(t instanceof Error?t.message:String(t))}),()=>{e=!0}},[t,c]),(0,r.jsxs)(r.Fragment,{children:[g&&(0,r.jsx)("p",{role:"status",className:"p-4 text-sm text-muted-foreground",children:g}),(0,r.jsx)(x,{cards:w,selectedId:c,selectedCard:u,detailError:f,onSelect:e=>{(null===e||c!==e)&&(m(null),p(null),d(e))}})]})}function y(){return(0,r.jsx)(b,{})}}},e=>{e.O(0,[9906,3869,6390,3170,7358],()=>e(e.s=33779)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7955],{14167:(e,t,s)=>{Promise.resolve().then(s.bind(s,41287))},41287:(e,t,s)=>{"use strict";s.d(t,{BotlabPageContent:()=>h});var r,l=s(54456),a=s(60500);let o=(null!=(r=s(41347).env.NEXT_PUBLIC_ELANOUS_BOTLAB_HOST)?r:"").trim(),n="elanous.botlab.wallHost",d=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;function i(e){return e.length>0&&e.length<=253&&d.test(e)}function c(e){var t;let{search:s,remembered:r=null}=e,d=(0,a.useMemo)(()=>(function(e){var t,s;let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,l=null;try{l=new URLSearchParams(e).get("host")}catch(e){l=null}let a=null!=(t=null==l?void 0:l.trim())?t:"";if(""!==a&&i(a))return{host:a,source:"query",rejected:null};let n=""===a?null:a,d=null!=(s=null==r?void 0:r.trim())?s:"";return""!==d&&i(d)?{host:d,source:"remembered",rejected:n}:""!==o&&i(o)?{host:o,source:"default",rejected:n}:{host:"",source:"unset",rejected:n}})(s,r),[s,r]),c="unset"===d.source?null:(t=d.host,"https://".concat(t).concat("/bot3/bot-wall.html"));return(0,a.useEffect)(()=>{if("query"===d.source)try{window.localStorage.setItem(n,d.host)}catch(e){}},[d.source,d.host]),(0,l.jsxs)("main",{className:"mx-auto flex w-full max-w-6xl flex-col gap-6 px-6 py-10 sm:px-10","data-testid":"botlab-panel",children:[(0,l.jsxs)("header",{children:[(0,l.jsx)("p",{className:"text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground",children:"Bot screens"}),(0,l.jsx)("h1",{className:"mt-2 text-3xl font-bold",children:"Botlab"}),(0,l.jsxs)("p",{className:"mt-2 max-w-3xl text-sm text-muted-foreground",children:["Live noVNC screens for the bots, served through Tailscale. One document holds all four sessions, so the VNC password is asked ",(0,l.jsx)("strong",{children:"once"}),", not four times."]}),(0,l.jsx)("p",{className:"mt-2 max-w-3xl text-sm text-muted-foreground",children:"View-only by default. This surface cannot send commands or control the bots."})]}),(0,l.jsxs)("section",{className:"rounded-xl border border-border bg-card p-4","aria-label":"Wall address",children:[(0,l.jsx)("h2",{className:"text-sm font-semibold",children:"Wall address"}),(0,l.jsx)("p",{className:"mt-1 break-all font-mono text-xs text-muted-foreground","data-testid":"botlab-wall-url",children:null!=c?c:"(no host configured)"}),(0,l.jsx)("p",{className:"mt-2 text-xs text-muted-foreground","data-testid":"botlab-host-source",children:"query"===d.source?"Host came from the ?host= query parameter (remembered on this device).":"remembered"===d.source?"Host is the one remembered on this device; override it with ?host=<tailnet-name>.":"default"===d.source?"Host is the build default (NEXT_PUBLIC_ELANOUS_BOTLAB_HOST); override it with ?host=<tailnet-name>.":"No wall host is configured. Open this page once with ?host=<the VM tailnet name> — it is remembered on this device."}),null!==d.rejected&&(0,l.jsxs)("p",{role:"alert",className:"mt-2 text-xs text-destructive","data-testid":"botlab-host-rejected",children:["Ignored ?host=",d.rejected," — not a valid hostname."]}),null!==c&&(0,l.jsxs)("p",{className:"mt-3 text-xs text-muted-foreground",children:[(0,l.jsx)("a",{className:"underline",href:c,target:"_blank",rel:"noreferrer","data-testid":"botlab-open-tab",children:"Open the wall in a new tab"})," — ","use this if the embedded frame stays blank."]})]}),null!==c&&(0,l.jsx)("section",{"aria-label":"Bot screen wall",children:(0,l.jsx)("iframe",{src:c,title:"Bot screen wall","data-testid":"botlab-wall-frame",className:"h-[70vh] w-full rounded-xl border border-border bg-background"})}),(0,l.jsxs)("section",{className:"rounded-xl border border-border bg-card p-5","aria-label":"If the wall is blank",children:[(0,l.jsx)("h2",{className:"text-sm font-semibold",children:"If the wall stays blank"}),(0,l.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:"A blank frame is not necessarily a broken bot. There are three separate reasons, with different fixes:"}),(0,l.jsxs)("ol",{className:"mt-3 list-decimal space-y-2 pl-5 text-sm text-muted-foreground",children:[(0,l.jsxs)("li",{children:[(0,l.jsx)("strong",{children:"This device is outside the tailnet."})," The address simply does not exist here. Join the tailnet, or view the screens from a device that is on it."]}),(0,l.jsxs)("li",{children:[(0,l.jsx)("strong",{children:"Tailscale serve is not published."})," Re-run"," ",(0,l.jsx)("code",{className:"font-mono text-xs",children:"bash scripts/botlab/deploy-bot-wall.sh"}),", which re-publishes the paths and then verifies each one returns 200."]}),(0,l.jsxs)("li",{children:[(0,l.jsx)("strong",{children:"The wall loaded but did not connect."})," That is a VNC-level failure, not a page failure — the wall itself reports connected/failed counts once you enter the password."]})]}),(0,l.jsx)("p",{className:"mt-3 text-xs text-muted-foreground",children:"The VNC password is deliberately not carried in this page or in the URL: any page a bot browser opens could otherwise reach the local websocket, and websockets have no CORS."})]}),(0,l.jsxs)("section",{className:"rounded-xl border border-dashed border-border p-5","aria-label":"Not wired yet",children:[(0,l.jsx)("h2",{className:"text-sm font-semibold",children:"Not wired yet"}),(0,l.jsxs)("ul",{className:"mt-2 list-disc space-y-1 pl-5 text-sm text-muted-foreground",children:[(0,l.jsxs)("li",{children:["Per-bot cell headers (name \xb7 last round verdict \xb7 whether CDP is alive) need"," ",(0,l.jsx)("code",{className:"font-mono text-xs",children:"browserPort"})," and round results on the daemon's persona route. That route is owned by another track and is not published today."]}),(0,l.jsx)("li",{children:"Running a command from this surface needs a POST route that does not exist yet."})]})]})]})}function h(){let e=window.location.search,t=null;try{t=window.localStorage.getItem(n)}catch(e){t=null}return(0,l.jsx)(c,{search:e,remembered:t})}}},e=>{e.O(0,[6390,3170,7358],()=>e(e.s=14167)),_N_E=e.O()}]);